Programmatic access to 14.8k+ grants, 19.7k+ contracts, and 4.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 | Full-text search across title and description |
status | string | Optional | Filter by status: open, closed, upcoming |
category | string | Optional | Filter by grant category name |
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 | Full-text search across title and description |
status | string | Optional | Filter by status: open, closed |
geography | string | Optional | Filter by geographic scope |
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 |
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)
);
}Get started with a Developer subscription for full API access, webhooks, and unlimited requests.