API documentation
Build on RHTP Tracker data.
Public read endpoints power the app and are open. 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 | Paginated, filterable opportunity list (sortBy, status, type, state, vendor). |
| 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 AI-quality sort). |
| GET | /api/documents/:id/file | Proxy stream of a cached document file. |
| 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. |