RHTP Tracker

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.

MethodEndpointDescription
GET/api/statsHeadline program statistics.
GET/api/states50 states plus the US federal row.
GET/api/opportunitiesVerified-open opportunities by default; supports state, organizationType, repeated focusArea, status, deadline, verification, pagination, and deterministic matching.
POST/api/report-requestsDurably 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/submitDurably stores a server-scored readiness assessment for queued CRM delivery.
POST/api/analytics/visitStores one versioned, allowlisted first-party product event after removing URL queries and rejecting non-contract or contact-like properties.
GET/api/report-requests/unsubscribeTokenized opt-out for optional updates consent attached to a scan report.
GET/api/opportunities/facetsFacet counts by status, type, and state.
GET/api/opportunities/:slugIdA single opportunity with linked documents and state.
GET/api/documentsDocument library (state, category, year filters; default extraction-completeness sort).
GET/api/documents/:id/fileStreams a verified cached file, with safe official-source and in-product unavailable fallbacks.
GET/api/eventsEvents (state, status, type, date range, keyword).
GET/api/activityChange-event log (state, type, since).
GET/api/activity/summariesAI activity briefs grouped by state.
GET/api/vendorsApproved vendor directory (featured first).
GET/api/vendor-matchmakerRanked vendor matches for an opportunity.
GET/api/opportunity-intelligenceOpportunity stats plus AI analysis.
GET/api/intelligence/trendsActivity trend rollups plus AI analysis.

Programmatic API (free key)

Free API key via `Authorization: Bearer <key>` or `x-api-key: <key>`.

MethodEndpointDescription
GET/api/v1/statesExportable state records.
GET/api/v1/states/:codeState detail with award history and recent documents.
GET/api/v1/documentsDocuments with full AI fields (supports upcoming=true).
GET/api/v1/documents/:idFull extracted document record.
POST/api/v1/searchExtracted-field search with an AI-generated answer.
GET/api/v1/eventsEvents with extended filters.
GET/api/v1/activityChange events (supports since= for polling).

Authenticated & admin

Signed-in session (Google); admin routes require the admin role and are server-enforced.

MethodEndpointDescription
POST/api/vendorsSubmit a vendor for review (stored pending until approved).
GET/api/admin/vendorsAdmin: pending vendor queue and crawl-health snapshot.
POST/api/admin/vendorsAdmin: approve or reject a pending vendor.
GET/api/admin/opportunitiesAdmin: evidence-backed opportunity review queue.
POST/api/admin/opportunitiesAdmin: edit and record an auditable opportunity review decision.
GET/api/admin/email-ingestionAdmin: official email/web discoveries and quarantined ingestion items.
POST/api/admin/discoveriesAdmin: promote a reviewed discovery to an opportunity or reject it from intake.
POST/api/admin/amendmentsAdmin: apply a reviewed deadline extension to one canonical opportunity.
GET/api/admin/operationsAdmin: consolidated source, intake, review, stale-opportunity, extraction, public-link, alert, and delivery health.
GET/api/cron/monitorCron-secret protected independent scheduler-heartbeat monitor and alert transition check.