Errors

Error codes, HTTP statuses, and what to do about them.

On this page

When something goes wrong, the API returns a consistent JSON envelope:

json
{
  "error": "Human-readable message",
  "code": "snake_case"
}

Here's every code you might hit.

Error reference

CodeHTTPWhat happenedWhat to do
unauthorized401Missing, invalid, revoked, or expired API keyCheck your Authorization: Bearer fmk_… header
plan_required403Org not on Team or BusinessUpgrade plan or use dashboard instead
scope_mismatch403Project-scoped key can't access requested projectPass the right project slug, or use an org-wide key
rate_limited429Over 120 requests per 60 secondsBack off and retry
not_found404Session, override, log, or body doesn't existCheck ids and query params
project_required422Org-wide key without projectAdd ?project=your-slug
environment_required422Multi-endpoint project without environmentAdd ?environment=your-slug
invalid_override422Bad override id or scenario-local overrideUse published, non-scenario override ids
invalid_mode422DELETE mode isn't reset or deleteUse ?mode=reset or ?mode=delete
invalid_side422Body fetch side isn't request or responseUse ?side=request or ?side=response

Common patterns

401 on every call Key typo, wrong prefix, or revoked key. Create a fresh one in Settings → API keys.

403 plan_required Public API is a Team+ feature. Dashboard session control still works on lower plans.

422 environment_required Your project has multiple proxy endpoints. Add environment=staging (or whichever slug you need).

404 on GET session Session doesn't exist yet. Use PUT to create it first.

Rate limiting details

Production limit: 120 requests per 60 seconds per API key.

If you're polling logs, use reasonable intervals. Batch assertions where you can.