Alfred P. Sloan Foundation — Grants API

Base URL: https://api.sloan.org

A read-only JSON API serving public grant data from the Alfred P. Sloan Foundation. Data refreshed nightly.


Authentication

All requests require an API key passed in the X-API-Key header. Keys are issued by the Foundation on request.

curl -H "X-API-Key: YOUR-KEY-HERE" https://api.sloan.org/grants

Requests without a valid key receive a 401 response. There is no approval process; keys exist to identify callers, not to restrict access. To request a key, contact the Alfred P. Sloan Foundation through sloan.org.


List Grants

GET /grants

Returns a paginated list of grants.

Parameters:

ParameterTypeDescription
programslugTop-level program, by slug (e.g., research, technology, public-understanding). Unknown slug → empty result.
subprogramslugSubprogram, by slug (e.g., research.economics, technology.better-software, public-understanding.film). Unknown slug → empty result.
yearintegerFiscal year (single). If passed alongside year_from / year_to, the single year wins and the range params are ignored.
year_fromintegerLower bound of fiscal-year range (inclusive). 4-digit year.
year_tointegerUpper bound of fiscal-year range (inclusive). 4-digit year. Must be ≥ year_from when both are set.
typestringfellowships or grants. Default: all.
qstringFull-text search across grant name, purpose, summary, PI, institution, and co-PI names. Prefix-matches each term: ?q=finkelstei matches “Finkelstein.” Multiple terms are combined with AND. Quotes are not currently honored as phrase delimiters.
pistringPI name (partial match)
grantee_organizationstringExact-match filter on grantee organization name. Use the exact string as it appears in API responses.
initiativeslugInitiative slug (the SRF discipline for fellowships, e.g. chemistry, physics). Unknown slug → empty result.
sub_initiativeslugSub-initiative slug (e.g. chemical-biology). Unknown slug → empty result.
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 100, max: 200)
sortstringSort order. One of year_desc (default behavior is approval_date desc; pass year_desc for fiscal-year desc), year_asc, amount_desc, amount_asc, pi_asc (by PI last name), institution_asc. Unknown values fall back to the default.
formatstringSet to csv for CSV download

All parameters are combinable.

Examples:

GET /grants?program=research&subprogram=research.economics&year=2025
GET /grants?type=fellowships&initiative=chemistry&year=2026
GET /grants?q=ocean+acidification
GET /grants?pi=Derenoncourt
GET /grants?year_from=2020&year_to=2024&program=research
GET /grants?year=2024&format=csv

Note: as of May 2026, program, subprogram, initiative, and sub_initiative filter params accept slugs, not display names. See Taxonomy for the slug list.

Response:

{
  "grants": [
    {
      "grant_number": "G-2024-22492",
      "project_title": "Jens Ludwig",
      "purpose_statement": "To support research on...",
      "public_grant_summary": "<p>This grant supports...</p>",
      "pi_name": "Jens Ludwig",
      "pi_first_name": "Jens",
      "pi_middle_name": null,
      "pi_last_name": "Ludwig",
      "co_pis": [
        { "name": "Jean Grossman",    "first_name": "Jean",     "middle_name": null, "last_name": "Grossman",  "institution": "Dine College" },
        { "name": "Jonathan Guryan",  "first_name": "Jonathan", "middle_name": null, "last_name": "Guryan",    "institution": "Northwestern University" },
        { "name": "Gregory Stoddard", "first_name": "Gregory",  "middle_name": null, "last_name": "Stoddard",  "institution": "The University of Chicago" }
      ],
      "pi_awards": [],
      "grantee_organization": "The University of Chicago",
      "city": "Chicago",
      "state": "Illinois",
      "program":        { "name": "RESEARCH",  "uuid": "099accad-8ab0-40d3-bae8-5d51b72ef3ff", "slug": "research" },
      "subprogram":     { "name": "Economics", "uuid": "8d2e1b3c-1234-5678-9abc-def012345678", "slug": "research.economics" },
      "initiative":     null,
      "sub_initiative": null,
      "award_amount": 500000,
      "approval_date": "2024-06-25",
      "fiscal_year": 2024,
      "last_synced_at": "2026-05-09T08:00:00Z"
    }
  ],
  "total": 14357,
  "page": 1,
  "per_page": 100,
  "meta": {
    "last_synced_at": "2026-05-09T08:00:00Z"
  }
}

A structured ?co_pi= filter is deferred to API v2. For now, search co-PIs through the free-text q parameter.


Single Grant

GET /grants/G-2024-19876

Returns a single grant by number. The single-grant response has the same shape as each entry in the list response — this endpoint is just a primary-key lookup, not a richer view. last_synced_at is included as a top-level field on the grant object.


Taxonomy

GET /taxonomy

Returns the Foundation’s program taxonomy: every program, subprogram, initiative, and sub-initiative the public API knows about. Each entry has a stable uuid (immutable foreign key) and a human-readable slug (URL-safe, may change editorially).

Parameters:

ParameterTypeDescription
typestringprogram, subprogram, initiative, or sub_initiative.
parent_slugstringRestrict to children of a given parent (e.g. parent_slug=research).
statusstringactive (default), historical, retired, or needs_slug.

Response:

{
  "taxonomy": [
    {
      "name":        "RESEARCH",
      "uuid":        "099accad-8ab0-40d3-bae8-5d51b72ef3ff",
      "slug":        "research",
      "type":        "program",
      "parent":      null,
      "status":      "active",
      "grant_count": 4823
    },
    {
      "name":        "Economics",
      "uuid":        "8d2e1b3c-...",
      "slug":        "research.economics",
      "type":        "subprogram",
      "parent":      { "name": "RESEARCH", "uuid": "099accad-...", "slug": "research" },
      "status":      "active",
      "grant_count": 412
    }
  ],
  "total": 221
}

Entries are sorted programs first, then subprograms, initiatives, and sub-initiatives; within each bucket, alphabetical by slug.

UUIDs are immutable. Use them as foreign keys in your own database. Slugs may be revised editorially for readability or URL consistency; treat them as display values.


Awards

The Foundation tracks select major awards (Nobel Prize, Fields Medal, Abel Prize, John Bates Clark Medal, National Medal of Science) held by Sloan-affiliated researchers who were also Sloan Research Fellows.

GET /awards
GET /awards?type=Nobel%20Prize
GET /awards?type=Nobel%20Prize&subtype=Physics
GET /awards?year_after=2010

Parameters:

ParameterTypeDescription
typestringAward type, e.g. Nobel Prize, Fields Medal, Abel Prize, John Bates Clark Medal, National Medal Of Science.
subtypestringAward subtype, e.g. Chemistry, Physics, Economic Sciences.
year_afterintegerLower bound on award_year (inclusive). 4-digit year.
year_beforeintegerUpper bound on award_year (inclusive). 4-digit year.
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 100, max: 200)

Response:

{
  "awards": [
    {
      "award_type": "Nobel Prize",
      "award_subtype": "Chemistry",
      "award_year": 2023,
      "nobel_field": "Chemistry",
      "pi_first_name": "Moungi",
      "pi_last_name": "Bawendi",
      "fellowship_grant_number": "FG-BR-3344",
      "fellowship_year": 1994,
      "fellowship_subprogram": "Sloan Research Fellowships",
      "fellowship_institution": "Massachusetts Institute of Technology"
    }
  ],
  "total": 24,
  "page": 1,
  "per_page": 100
}

Multi-award fellows appear as multiple rows. To find a single fellow’s awards, filter by name (or use the pi_awards array on their grant record).


CSV Download

GET /grants?format=csv

Returns all matching grants as a downloadable CSV. All filter parameters apply.


Fields

FieldDescription
grant_numberUnique identifier
project_titleProject title. Optional — may be null.
purpose_statementBrief description
public_grant_summaryLonger narrative summary, returned as sanitized HTML. Allowed tags: <p>, <br>, <strong>, <em>, <ul>, <ol>, <li>, <a>. May be null for grants that predate the Foundation’s summary writing practice.
pi_namePrincipal Investigator (display string).
pi_first_namePI first name.
pi_middle_namePI middle name (may be null).
pi_last_namePI last name. Useful for alphabetical sorting.
co_pisJSONB array of co-investigators sorted alphabetically by last name. Each entry: {name, first_name, middle_name, last_name, institution}. Default []. In CSV exports, serialized as a semicolon-delimited string.
pi_awardsJSONB array of awards held by the PI (Nobel Prize, Fields Medal, Abel Prize, John Bates Clark Medal, National Medal of Science). Each entry: {type, subtype, year, nobel_field}. Default [].
last_synced_atISO-8601 UTC timestamp of when this row was last refreshed from the source of truth.
grantee_organizationThe organization receiving the grant (institution, nonprofit, company).
cityGrantee city
stateGrantee state
programTop-level program. Object with name, uuid, slug — or null if the grant has no program coding. See Taxonomy fields.
subprogramSubprogram. Same shape as program. May be null for programs that intentionally have no subdivision.
initiativeInitiative classification. Same shape as program. For fellowships, this is the SRF discipline (e.g. Chemistry). Mostly null on non-fellowship grants.
sub_initiativeSub-initiative. Same shape as program. Populated for ~18% of fellowships, rarely elsewhere.
award_amountGrant amount (USD)
approval_dateDate approved (YYYY-MM-DD)
fiscal_yearFiscal year

Note on fellowships. For fellowships (grant_number prefix FG-), program.name is always RESEARCH and subprogram.name is always Sloan Research Fellowships. The meaningful classification is initiative (e.g. Chemistry) and optionally sub_initiative (e.g. Chemical Biology). Consumers rendering fellowship cards typically display these instead of program/subprogram.

Taxonomy fields (program, subprogram, initiative, sub_initiative)

These four fields are returned as nested objects:

{
  "name": "Economics",
  "uuid": "8d2e1b3c-1234-5678-9abc-def012345678",
  "slug": "research.economics"
}

or null when the grant has no value at that level. The uuid is immutable and safe to use as a foreign key in your own database. The slug is URL-safe and human-readable but may be revised editorially — treat it as a display/URL value, not a primary key. The name is the display string.

Filter parameters (?program=, ?subprogram=, ?initiative=, ?sub_initiative=) accept slugs; see List Grants.

CSV exports flatten these to plain display-name columns (no UUID or slug). For programmatic access to UUIDs and slugs, use the JSON endpoints.

Rendering public_grant_summary

The summary is HTML. Render it with innerHTML (or your framework’s equivalent) rather than as plain text. The allowed tag set is narrow and safe: no scripts, no inline styles, no external resources. Standard XSS protections are not needed beyond the usual care when inserting third-party HTML into your DOM.


Rate Limits

EndpointLimit
JSON requests60 per minute
CSV downloads10 per minute

Limits apply per client IP address. Each caller gets its own bucket; one client hitting the limit does not affect others.


Response metadata

All list responses include a meta object with freshness information:

{
  "grants": [...],
  "total": 14357,
  "page": 1,
  "per_page": 100,
  "meta": {
    "last_synced_at": "2026-05-09T08:00:00Z"
  }
}

The /awards endpoint follows the same shape with an awards array plus a top-level meta. Single-grant responses include last_synced_at as a top-level field on the grant object. Data is refreshed nightly around 04:00 UTC.


Error responses

All errors return JSON with an error field describing the problem.

StatusWhenBody
401Missing API key{"error": "API key required. Request one at https://sloan.org"}
401Invalid API key{"error": "Invalid API key"}
400Bad query parameter (e.g. malformed year_from / year_to / year_after / year_before){"error": "<specific message>"}
404Grant not found{"error": "Not found"}
405Method not allowed (only GET is supported){"error": "Method not allowed"}
429Rate limit exceededCloudflare-edge response — body is HTML/text rather than JSON. Inspect the status code and Retry-After header.
500Unexpected server error{"error": "Internal server error"}

The grant_number field is suitable for use as a URL slug. Grant numbers are unique, immutable, URL-safe, and human-readable (G-2024-22492, FG-2025-24065). A permalink pattern of https://yoursite.example/grants/{grant_number} works directly against this API by passing the same value to /grants/{grant_number}.


Notes