Skip to content

Errors

Every non-2xx response is JSON with a stable, snake_case error code. Branch on the HTTP status first and the code second.

{ "error": "invalid_cursor" }

Error responses carry Cache-Control: no-store, max-age=0. Do not cache them.

These can come back from any endpoint. The order of precedence is on the Authentication page.

Status error When
401 missing_authorization No Authorization: Bearer … header.
401 invalid_token Unknown prefix, unknown key, or a revoked key.
403 cross_tenant The key belongs to a different business than {slug}.
404 business_not_found No business with that {slug}, or a closed business queried with anything but its own key.
410 business_closed The business’s account is closed. Permanent: stop serving and drop your caches.
500 lookup_failed A temporary problem reading the business or the key. Retry with backoff.
Status error Endpoints When
400 invalid_cursor List jobs, Build-time feed cursor is malformed or over 512 characters (see Pagination). Restart from the first page.
400 invalid_limit List jobs, Build-time feed limit is not an integer in the endpoint’s range (1–100 for /jobs, 1–200 for /feed/jobs).
400 invalid_updated_since List jobs updated_since is not a parseable timestamp.
Status error Endpoints When
404 job_not_found Get a job No published job with that {job_slug}. Drafts and hidden jobs return the same 404; the API never reveals that an unpublished job exists.
500 lookup_failed List jobs, Get a job, Build-time feed A temporary problem reading jobs. Retry with backoff.
Status error When
429 rate_limited Reserved. There is no rate limiting today, so this code is never returned.
  • 401 and 403: a configuration problem on your side. Do not retry automatically; check the key and the slug.
  • 404 job_not_found after a job.unpublished webhook: expected. Remove the page.
  • 410 business_closed: permanent. Stop fetching and serve your own not-found page for the job URLs.
  • 500 lookup_failed: transient. Retry with exponential backoff. Keep serving your last good copy in the meantime.