A read-only HTTP API for your dispatch desk: jobs, timelines, penalties, matches, and usage — plus public reference data. Every key is read-only by construction; there are no write endpoints.
Send your key as a Bearer token. Keys are accepted from the Authorization header only — never from a cookie and never from a query string, so keys can't leak into logs or Referer headers.
curl -H "Authorization: Bearer dd_live_ro_YOURKEY" https://dispatchdesk.io/api/v1/me
Create and revoke keys in your client portal at /portal/api-keys (up to 5 active keys per account). A key's plaintext is shown exactly once at creation — we store only a hash.
| Endpoint | Auth | What it returns |
GET /api/v1/me | API key | Account + key metadata (never secrets) |
GET /api/v1/jobs | API key | Jobs list — ?status=&limit=&cursor= (keyset pagination) |
GET /api/v1/jobs/:id | API key | One job + its event timeline |
GET /api/v1/penalties | API key | Quality penalties on your jobs |
GET /api/v1/matches | API key | Matched providers for a job — ordinal ranks only |
GET /api/v1/usage | API key | DDC balance, job counts by status, active key count |
GET /api/v1/public/reference/systems | public | The five DispatchDesk systems |
GET /api/v1/public/reference/service-categories | public | Master service catalog |
GET /api/v1/public/reference/verticals | public | SEO vertical pages |
GET /api/v1/public/stats | public | Coarse editorial stats (rounded + suppression floor) |
GET /api/v1/public/qa/search | public | Help-center search (when the help center is enabled) |
GET /api/v1/openapi.json | public | The OpenAPI 3.1 description of this API |
Full machine-readable spec: GET /api/v1/openapi.json.
curl -H "Authorization: Bearer dd_live_ro_YOURKEY" "https://dispatchdesk.io/api/v1/jobs?status=Completed&limit=20"
curl https://dispatchdesk.io/api/v1/public/reference/systems
Authenticated endpoints: 60 requests/minute per key. Public endpoints: 30 requests/minute per IP. Exceeding a limit returns 429 with a Retry-After header (seconds). Limits always apply — there is no unmetered path.
Ranking data is disclosed as ordinal ranks only — the API never returns raw scores, counts, or model signals.