Programmatic access to 77.8k+ grants, 27.7k+ contracts, and 5.8k+ funders. Build monitoring tools, CRM integrations, and custom search portals.
Bearer token authentication. Generate keys from your Developer Dashboard.
Developer tier includes unlimited daily API calls with no throttling.
Get notified when new opportunities match your criteria via HTTP callbacks.
All requests require a Bearer token in the Authorization header
curl -X GET 'https://qnoicxojartltrownmal.supabase.co/functions/v1/grants-api?search=education&status=open' \ -H 'Authorization: Bearer YOUR_API_KEY'
Test endpoints live. Paste your API key and configure parameters to see real responses.
curl -X GET \ 'https://qnoicxojartltrownmal.supabase.co/functions/v1/grants-api' \ -H 'Authorization: Bearer YOUR_API_KEY'
Enter your API key to get started
Search and filter grant opportunities with date ranges, funding amounts, and custom sorting.
/functions/v1/grants-apiReturns paginated list of grants with full filtering, sorting, and metadata.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | Optional | Search query across title and description |
search_mode | string | Optional | keyword (default, full-text) | semantic (vector similarity) | hybrid (full-text + vector, RRF-ranked). semantic/hybrid require a search term and add a relevance score to each result. |
status | string | Optional | Filter by status: open, closed, upcoming |
opportunity_type | string | Optional | 'open' (default) = applyable opportunities only; 'awarded' = previously funded projects (research mode, not open for application); 'all' = both. |
category | string | Optional | Filter by grant category name |
states | string | Optional | Filter by US location: comma-separated 2-letter USPS codes, e.g. CA,NY. State-specific only unless include_national=true. |
include_national | boolean | Optional | When filtering by states, also include national / all-states grants. |
geography | string | Optional | Deprecated. Legacy free-text location (best-effort, state-canonicalized on hybrid). Prefer states. |
deadline_after | string | Optional | ISO date (YYYY-MM-DD). Only grants with deadline after this date |
deadline_before | string | Optional | ISO date (YYYY-MM-DD). Only grants with deadline before this date |
posted_after | string | Optional | ISO date (YYYY-MM-DD). Only grants created after this date |
min_amount | number | Optional | Minimum funding amount (filters on amount_max) |
max_amount | number | Optional | Maximum funding amount (filters on amount_min) |
sort_by | string | Optional | Sort field: created_at, deadline_date, amount_min, amount_max, title |
order | string | Optional | Sort direction: asc or desc (default: desc) |
count_only | boolean | Optional | If true, returns only the total count matching filters |
limit | number | Optional | Results per page (1-100, default: 20) |
offset | number | Optional | Pagination offset (default: 0) |
/functions/v1/grants-api/{id}Returns a single grant with all available fields including categories and funder name.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | uuid | Required | Grant UUID (path parameter) |
Access government contract opportunities with NAICS codes, set-aside filters, and geographic scope.
/functions/v1/contracts-apiReturns paginated list of contracts with all filters including NAICS and set-aside codes.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | Optional | Search query across title and description |
search_mode | string | Optional | keyword (default, full-text) | semantic (vector similarity) | hybrid (full-text + vector, RRF-ranked). semantic/hybrid require a search term and add a relevance score to each result. |
status | string | Optional | Filter by status: open, closed |
opportunity_type | string | Optional | 'open' (default) = active solicitations only; 'awarded' = already-awarded contracts (research mode); 'all' = both. |
states | string | Optional | Filter by US location: comma-separated 2-letter USPS codes, e.g. CA,NY. State-specific only unless include_national=true. |
include_national | boolean | Optional | When filtering by states, also include national / all-states contracts. |
geography | string | Optional | Deprecated. Legacy free-text location (best-effort, state-canonicalized on hybrid). Prefer states. |
naics | string | Optional | Filter by 6-digit NAICS industry code |
set_aside | string | Optional | Filter by set-aside code (8A, HUBZone, etc.) |
category | string | Optional | Filter by contract category name |
deadline_after | string | Optional | ISO date. Only contracts with deadline after this date |
deadline_before | string | Optional | ISO date. Only contracts with deadline before this date |
posted_after | string | Optional | ISO date. Only contracts created after this date |
min_amount | number | Optional | Minimum funding amount |
max_amount | number | Optional | Maximum funding amount |
sort_by | string | Optional | Sort field: created_at, deadline_date, amount_min, amount_max, title |
order | string | Optional | Sort direction: asc or desc |
count_only | boolean | Optional | Returns only the total count |
limit | number | Optional | Results per page (1-100, default: 20) |
offset | number | Optional | Pagination offset |
/functions/v1/contracts-api/{id}Returns a single contract with all fields including NAICS, set-aside code, and contact info.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | uuid | Required | Contract UUID (path parameter) |
Look up funding organizations by name with sortable results.
/functions/v1/funders-apiReturns paginated list of funding organizations sorted alphabetically by default.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | Optional | Search by funder name or summary |
search_mode | string | Optional | keyword (default, full-text) | semantic (vector similarity) | hybrid (full-text + vector, RRF-ranked). semantic/hybrid require a search term and add a relevance score to each result. |
sort_by | string | Optional | Sort field: name, created_at |
order | string | Optional | Sort direction: asc or desc |
count_only | boolean | Optional | Returns only the total count |
limit | number | Optional | Results per page (1-100, default: 20) |
offset | number | Optional | Pagination offset |
/functions/v1/funders-api/{id}Returns a single funder profile including website and summary.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | uuid | Required | Funder UUID (path parameter) |
interface ListResponse<T> {
results: T[];
pagination: {
total: number;
limit: number;
offset: number;
returned: number;
};
meta: {
response_time_ms: number;
sort_by: string;
order: "asc" | "desc";
};
}interface Grant {
id: string; // UUID
title: string;
description: string;
amount_min: number | null;
amount_max: number | null;
deadline_date: string | null; // ISO date
status: string;
geography: string | null;
funder_id: string;
funder_name: string;
listing_url: string | null;
created_at: string; // ISO datetime
categories: string[];
}interface Contract {
id: string;
title: string;
description: string;
amount_min: number | null;
amount_max: number | null;
deadline_date: string | null;
status: string;
geography: string | null;
document_url: string | null;
listing_url: string | null;
naics: string | null;
primary_contact_email: string | null;
set_aside_code: string | null;
funder_id: string;
funder_name: string;
created_at: string;
categories: string[];
}200OKRequest succeeded400Bad RequestInvalid parameters401UnauthorizedMissing or invalid API key403ForbiddenSubscription tier does not include API access404Not FoundResource not found (single record lookup)429Rate LimitedDaily request quota exceeded500Server ErrorInternal error - contact support if persistentDeveloper tier includes unlimited API requests. All responses include rate limit headers:
X-RateLimit-LimitYour daily request quota (-1 for unlimited)
X-RateLimit-RemainingRequests remaining until midnight UTC reset
Subscribe to events and receive HTTP POST callbacks when new opportunities are added or updated. Manage webhooks from your Developer Dashboard.
grant.createdgrant.updatedgrant.deadline_approachingcontract.createdcontract.updatedcontract.deadline_approachingfunder.createdfunder.updatedEach delivery includes an X-OpenGrants-Signature header containing an HMAC-SHA256 signature of the payload using your webhook secret.
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}2026-06-11Searches now default to open opportunities only — previously funded projects (NSF/NIH awards, EU cohesion projects, disclosed grants) are classified awarded_project and excluded unless you pass opportunity_type=awarded (research mode) or all. Awarded records carry project_end_date instead of a deadline. Hybrid/semantic results now apply a minimum-relevance floor (junk queries return empty instead of weak matches), and relevance is a normalized 0–1 similarity score.
2026-06-10Added states (comma-separated USPS codes) and include_national location filters to the grants and contracts endpoints. The legacy geography param is deprecated but still works (best-effort, state-canonicalized on hybrid).
Get started with a Developer subscription for full API access, webhooks, and unlimited requests.