---
title: "Returns federal GRANTS and cooperative agreements from USAspending"
method: GET
path: "/v1/federal-grants"
---

# Returns federal GRANTS and cooperative agreements from USAspending

`GET /v1/federal-grants`

## Request

- Base URL: `https://api.keyvex.com`
- URL: `https://api.keyvex.com/v1/federal-grants`
- Auth: API key in header `x-api-key`

Returns federal GRANTS and cooperative agreements from USAspending. Distinct universe from get_federal_contracts — recipients here are universities, non-profits, state and local agencies, research labs, healthcare institutions, public-private partnerships.  ⚠ award_amount and total_outlays are NULLABLE. USAspending omits Total Outlays from the search response for most grants, and this tool reports that as null rather than as $0 — a 0 means the source really said zero. Null-check before doing arithmetic. Null values never satisfy min_amount and sort last.  Award type codes covered: 02 (Block Grant), 03 (Formula Grant), 04 (Project Grant — most common), 05 (Cooperative Agreement).  Killer query patterns:   - All NIH R01 grants this quarter: cfda_number='93.847' + since=...   - State and local infrastructure funding: awarding_agency='Department of Transportation' + min_amount=1000000   - Recipient-specific grant history: recipient_name='Stanford'   - Recipient by federal UEI: recipient_uei='ABC123XYZ' (most precise)  Source: api.usaspending.gov — official Treasury federal-spending data. Awards covering both COVID/IIJA emergency-funding codes and routine appropriations. Pure-publisher posture: raw award data, no derived rankings or performance scores.  COVERAGE — live passthrough (source:'live'): each call queries USAspending's API over the full dataset (2007-10 onward), with recipient/CFDA/min-amount/date filters applied server-side. The response's `total_count` is USAspending's authoritative grant count for your filtered query — USE IT for volume answers (the `results` array is just the requested page). `total_count` is omitted — and coverage_warning says why — when USAspending cannot count the answer: a recipient_uei that is also the PARENT of other recipients (USAspending cannot filter to one UEI's own grants), recipient_name combined with recipient_uei, or a start_date window (sort_by start_date with since/until). Then has_more is true whenever the search stopped before the end. Note: live cfda_number matching is against the award's FULL assistance-listings array (awards can carry several CFDAs); the cached fallback matches the primary listing only. On USAspending outage the tool falls back to a recent cached window (source:'cache' + coverage_warning) — don't infer volume there.

## Query parameters

- `recipient_name` string
- `recipient_uei` string
- `awarding_agency` string
- `cfda_number` string
- `min_amount` number
- `since` string
- `until` string
- `sort_by` 'last_modified_date' | 'start_date' | 'award_amount' | 'total_outlays'
- `sort_order` 'asc' | 'desc'
- `limit` integer

## Response `200`

JSON envelope: { results: [...], count, has_more }.

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
