API documentation
Build on RHTP Tracker data.
Public read endpoints power the app. A free API key unlocks the programmatic /api/v1 endpoints for exports and integrations.
Authentication & rate limits
- Programmatic `/api/v1/*` endpoints require a free API key.
- Send the key as `Authorization: Bearer <key>` or the `x-api-key` header.
- Requests are rate limited per key in a fixed 60-second window based on your tier (free, pro, team, featured).
- Each response includes `x-ratelimit-remaining` and `x-ratelimit-reset`; exceeding the limit returns HTTP 429.
Public reads
None — open, read-only JSON used by the app itself.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/stats | Headline program statistics. |
| GET | /api/states | 50 states plus the US federal row. |
| GET | /api/opportunities | Verified-open opportunities by default; supports state, organizationType, repeated focusArea, status, deadline, verification, pagination, and deterministic matching. |
| POST | /api/report-requests | Durably stores an opportunity-scan report request after revalidating its ranked matches and consent; a secret-authenticated monitor marker supports controlled email synthetics without CRM lead delivery. |
| POST | /api/assessment/submit | Durably stores a server-scored readiness assessment for queued CRM delivery. |
| POST | /api/analytics/visit | Stores one versioned, allowlisted first-party product event after removing URL queries and rejecting non-contract or contact-like properties. |
| GET | /api/report-requests/unsubscribe | Tokenized opt-out for optional updates consent attached to a scan report. |
| GET | /api/opportunities/facets | Facet counts by status, type, and state. |
| GET | /api/opportunities/:slugId | A single opportunity with linked documents and state. |
| GET | /api/documents | Document library (state, category, year filters; default extraction-completeness sort). |
| GET | /api/documents/:id/file | Streams a verified cached file, with safe official-source and in-product unavailable fallbacks. |
| GET | /api/events | Events (state, status, type, date range, keyword). |
| GET | /api/activity | Change-event log (state, type, since). |
| GET | /api/activity/summaries | AI activity briefs grouped by state. |
| GET | /api/vendors | Approved vendor directory (featured first). |
| GET | /api/vendor-matchmaker | Ranked vendor matches for an opportunity. |
| GET | /api/opportunity-intelligence | Opportunity stats plus AI analysis. |
| GET | /api/intelligence/trends | Activity trend rollups plus AI analysis. |
Programmatic API (free key)
Free API key via `Authorization: Bearer <key>` or `x-api-key: <key>`.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/states | Exportable state records. |
| GET | /api/v1/states/:code | State detail with award history and recent documents. |
| GET | /api/v1/documents | Documents with full AI fields (supports upcoming=true). |
| GET | /api/v1/documents/:id | Full extracted document record. |
| POST | /api/v1/search | Extracted-field search with an AI-generated answer. |
| GET | /api/v1/events | Events with extended filters. |
| GET | /api/v1/activity | Change events (supports since= for polling). |
Authenticated & admin
Signed-in session (Google); admin routes require the admin role and are server-enforced.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/vendors | Submit a vendor for review (stored pending until approved). |
| GET | /api/admin/vendors | Admin: pending vendor queue and crawl-health snapshot. |
| POST | /api/admin/vendors | Admin: approve or reject a pending vendor. |
| GET | /api/admin/opportunities | Admin: evidence-backed opportunity review queue. |
| POST | /api/admin/opportunities | Admin: edit and record an auditable opportunity review decision. |
| GET | /api/admin/email-ingestion | Admin: official email/web discoveries and quarantined ingestion items. |
| POST | /api/admin/discoveries | Admin: promote a reviewed discovery to an opportunity or reject it from intake. |
| POST | /api/admin/amendments | Admin: apply a reviewed deadline extension to one canonical opportunity. |
| GET | /api/admin/operations | Admin: consolidated source, intake, review, stale-opportunity, extraction, public-link, alert, and delivery health. |
| GET | /api/cron/monitor | Cron-secret protected independent scheduler-heartbeat monitor and alert transition check. |