Preview · read-only
RallyProp API
A thin read API for federal innovation funding opportunities. Postgres filters and paginates. The interactive reference is generated from the same schemas that validate live requests.
Find opportunities
Filter open and upcoming records by source, status, and agency.
Fetch changes since your last sync
Poll with updated_since, then store the newest updated_at.
Retrieve a full opportunity
Load one record by RallyProp UUID and cache it with ETag.
Base URL
https://eoqbgibebefvxxzadphf.supabase.co/functions/v1/external-api/v1Call this from your server. Do not put the API key in browser JavaScript, HTML, logs, URLs, or a public environment variable.
Authentication
Create an rp_live_ key in the RallyProp app under Profile, AI Assistant (MCP) Keys. The plaintext key is shown once. Send it on every authenticated request:
Authorization: Bearer rp_live_example
Accept: application/jsonThe key must belong to an account with an active subscription. A missing or invalid key returns 401. A key without an active subscription returns 403. GET /meta does not require a key.
Endpoints
| Method | Path | Auth | Purpose |
|---|---|---|---|
| GET | /meta | None | Version and service time |
| GET | /sources | Required | Current source codes and names |
| GET | /opportunities | Required | Filtered opportunity listing |
| GET | /opportunities/{id} | Required | One opportunity by UUID |
| GET | /opportunities/{id}/events | Required | Change history |
{id} is the RallyProp opportunity UUID, not a source solicitation number. Only GET and OPTIONS are accepted. q, sort, and order return 400.
Errors
Errors use application/problem+json. Keep request_id for support. Never log the API key. Do not retry 400, 401, 403, or 404.
| Status | Code | What to do |
|---|---|---|
| 400 | invalid_parameter | Correct or clear the named field |
| 400 | unsupported_parameter | Remove q, sort, or order |
| 400 | invalid_cursor | Drop the cursor and start again |
| 401 | authentication_required | Check the server-side key |
| 403 | insufficient_entitlement | The account needs an active subscription |
| 404 | not_found | Show your not-found state |
| 405 | method_not_allowed | Use GET |
| 429 | rate_limit_exceeded | Wait until Retry-After elapses |
Rate limits
Authenticated responses include RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. The first two are the daily quota. Reset is a Unix timestamp. A per-minute limit can also return 429. Honor Retry-After in either case.
Continue with listing opportunities or the generated reference.