USAspending API
Read-only live access to USAspending.gov public award search, award details, federal agency budget authority, category spending, and recipient search. Responses are fetched from the USAspending public API at request time.
Endpoint health
Loading verification…
Connect your agent
Connect through MCP so your agent can find this API, read its docs, and call its endpoints.
Add the server from your terminal.
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcpIn Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.
Then ask your agent to use the USAspending API for your task.
Call it over HTTP
Get an API keySign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.
curl --request GET --get 'https://api.agent-data.dev/usaspending-gov/v1/awards/search' \
--header "Authorization: Bearer $AGENT_DATA_API_KEY"Endpoints
Inputs and response fields for every endpoint in this API.
GETSearch awards/v1/awards/search
Search Awards
Input
filtersOptionalQuery · string | nullOptional JSON object merged into USAspending filters.
Example: {"agencies":[{"toptier_agency__name":"Department of Defense"}]}
keywordsOptionalQuery · string | nullOptional award keyword search text.
Example: health research
pageOptionalQuery · integer, min: 1, max: 10000, default: 1One-based source page number.
Example: 1
limitOptionalQuery · integer, min: 1, max: 100, default: 3Maximum results per page.
Example: 3
sortOptionalQuery · string, default: Award AmountSource award result sort field.
Example: Award Amount
orderOptionalQuery · "asc" | "desc"Sort direction.
Example: desc
Response
limitintegerresultsobject[]results[].award_id?string | nullresults[].award_type?string | nullresults[].award_amount?number | nullresults[].funding_agency?string | nullresults[].recipient_name?string | nullresults[].awarding_agency?string | nullresults[].award_description?string | nullresults[].source_internal_id?integer | nullresults[].generated_unique_award_idstringresults[].period_of_performance_start_date?string | nullresults[].period_of_performance_current_end_date?string | nullmessages?string[]page_metadataobjectpage_metadata.next?integer | nullpage_metadata.page?integer | nullpage_metadata.hasNext?boolean | nullpage_metadata.previous?integer | nullpage_metadata.hasPrevious?boolean | nullpage_metadata.last_record_unique_id?integer | nullpage_metadata.last_record_sort_value?string | nullspending_levelstringFields marked ? are optional.
GETGet award details/v1/awards/{award_id}
Award Detail
Input
award_idRequiredPath · stringgenerated_unique_award_id returned by search_awards.
Example: CONT_AWD_HT940216C0001_9700_-NONE-_-NONE-
Response
idintegercategorystringrecipientobjectdescription?string | nullfunding_agencyobjectawarding_agencyobjecttotal_obligation?number | nulltype_description?string | nullperiod_of_performanceobjectgenerated_unique_award_idstringFields marked ? are optional.
GETList agencies/v1/agencies
Agencies
Input
sortOptionalQuery · string, default: agency_nameAgency field to sort by.
Example: agency_name
orderOptionalQuery · "asc" | "desc"Sort direction.
Example: asc
Response
resultsobject[]results[].active_fqstringresults[].active_fystringresults[].agency_idintegerresults[].agency_namestringresults[].agency_slugstringresults[].abbreviation?string | nullresults[].toptier_codestringresults[].budget_authority_amountnumberresults[].percentage_of_total_budget_authoritynumberresults[].current_total_budget_authority_amountnumberFields marked ? are optional.
GETSearch spending by category/v1/spending/{category}
Spending Category
Input
categoryRequiredPath · stringUSAspending grouping category.
Example: awarding_agency
filtersOptionalQuery · string | nullOptional JSON object merged into USAspending filters.
Example: {"agencies":[{"toptier_agency__name":"Department of Health and Human Services"}]}
pageOptionalQuery · integer, min: 1, max: 10000, default: 1One-based source page number.
Example: 1
limitOptionalQuery · integer, min: 1, max: 100, default: 3Maximum results per page.
Example: 3
orderOptionalQuery · "asc" | "desc"Sort direction used by the source grouping.
Example: desc
geo_layerOptionalQuery · "state" | "county" | "district" | "country"Geographic layer when category is recipient_location.
Example: state
Response
limitintegerresultsobject[]results[].id?integer | string | nullresults[].code?string | nullresults[].name?string | nullresults[].amount?number | nullresults[].agency_slug?string | nullresults[].total_outlays?number | nullcategorystringmessages?string[]page_metadataobjectpage_metadata.next?integer | nullpage_metadata.page?integer | nullpage_metadata.hasNext?boolean | nullpage_metadata.previous?integer | nullpage_metadata.hasPrevious?boolean | nullpage_metadata.last_record_unique_id?integer | nullpage_metadata.last_record_sort_value?string | nullspending_levelstringFields marked ? are optional.
GETSearch recipients/v1/recipients/search
Recipients
Input
search_textOptionalQuery · string | nullOptional recipient name search text.
Example: NASA
pageOptionalQuery · integer, min: 1, max: 10000, default: 1One-based source page number.
Example: 1
limitOptionalQuery · integer, min: 1, max: 100, default: 3Maximum results per page.
Example: 3
orderOptionalQuery · "asc" | "desc"Source ordering direction.
Example: desc
Response
limitintegerresultsobject[]results[].award_amount?number | nullresults[].recipient_uei?string | nullresults[].recipient_duns?string | nullresults[].recipient_namestringresults[].generated_unique_award_idstringmessages?string[]page_metadataobjectpage_metadata.next?integer | nullpage_metadata.page?integer | nullpage_metadata.hasNext?boolean | nullpage_metadata.previous?integer | nullpage_metadata.hasPrevious?boolean | nullpage_metadata.last_record_unique_id?integer | nullpage_metadata.last_record_sort_value?string | nullspending_levelstringFields marked ? are optional.
Don’t see the endpoint you need?
Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.
An account is required to submit an extension. Prepare your request, then sign in to build.