Authentication
Send the key in an Authorization: Bearer header. Keys are shown once during sales-assisted provisioning. Keep them on your server; never place them in browser code, mobile bundles, URLs, or logs.
Base URL: https://grantauthority.org/api/v1
/grantsAt least one of query, city, metro, state, or segment is required. There is no unfiltered list-all request.
| Parameter | Type | Description |
|---|---|---|
| query | string | A plain-language grant search. |
| city | string | A city served by the opportunity. |
| metro | string | A named metropolitan area, such as Austin–Round Rock. |
| state | string | A state or province name or code. |
| segment | string | A cause or program segment, such as rural health. |
| limit | integer | Records per response. Default 20; maximum 25. |
| page | integer | Result page. Default 1; maximum 20. |
Example request
curl --get 'https://grantauthority.org/api/v1/grants' \
--header "Authorization: Bearer $GRANTAUTHORITY_API_KEY" \
--data-urlencode 'city=Austin' \
--data-urlencode 'state=TX' \
--data-urlencode 'segment=workforce development' \
--data-urlencode 'limit=10'Example response
{
"data": [
{
"id": "gr_...",
"title": "Workforce development opportunity",
"funder_name": "Agency name",
"summary": "Source-backed opportunity summary.",
"award": { "minimum": 50000, "maximum": 250000 },
"deadline": "2026-11-30",
"geography": { "state": "TX", "country": "US" },
"segments": ["Workforce development"],
"applicant_types": ["Nonprofit"],
"source_url": "https://www.grants.gov/...",
"source_host": "grants.gov",
"match_score": 0.91
}
],
"meta": {
"page": 1,
"limit": 10,
"returned": 1,
"record_units_consumed": 1,
"quota_limited": false
}
}Usage and limits
One billable record unit is one record returned. Retrieving the same record again consumes another returned-record unit.
Separate account-wide unique-record ceilings limit enumeration across every key on the account. Rotating a key does not reset request or record allowances.
Responses include request-rate and returned-record allowance headers. A hard limit returns 429; automatic overage billing is not enabled at launch.
Only source families with an affirmative redistribution classification can appear in the paid API. Unreviewed sources are excluded rather than silently returned.
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A filter is missing or invalid. |
| 401 | invalid_api_key | The key is invalid, expired, or revoked. |
| 403 | insufficient_scope | The key is not licensed for grant search. |
| 403 | access_inactive | The API account or key was suspended or its billing period ended. |
| 429 | rate_limit_exceeded | The account request-rate limit is exhausted. |
| 429 | record_quota_exceeded | The returned-record or unique-record allowance is exhausted. |
| 503 | metering_busy | The account metering lock is busy; retry after the supplied delay. |
| 503 | search_unavailable | Grant search is unavailable; no records are returned. |
| 503 | source_policy_unavailable | Source licensing policy is unavailable; no records are returned. |
| 503 | metering_unavailable | Usage metering is unavailable; no records are returned. |
| 503 | service_unavailable | A protected API dependency is unavailable; no records are returned. |
Request evaluation access
Tell us the geography, segments, expected annual record volume, and whether the data will remain internal or appear in a customer-facing product.
Request API access