Skip to main content

Request basics

Headers

Request headers Nexio reads: Response headers: A run status response can carry a trace_id field. It is the trace ID of the request that created the run.

Health check

GET /health needs no key. It answers 200 whenever the API process is up:
status is ok or degraded. degraded means the API is up but its database or queue did not answer a check, so some requests may fail. commit is the running build and is sometimes absent. The status code is 200 in both cases, so read the body. The shared middleware can still answer 500 internal_error or 504 request_timeout, as on any route; see Operations. There is no /api/v1/health route.

Error envelope

Every error from a matched route uses the shape below. A path that matches no route gets a plain-text 404, and a method the route does not accept gets a 405 with an empty body.
One exception: 409 environment_in_use carries a top-level blockers object instead of details. See Environments. Every code, with cause and fix, is in the error reference.

Status codes

Retries

  • Retry 429 rate_limited after the Retry-After delay.
  • Retry 500, 502, 503 and 504 with exponential backoff and jitter, starting near 1 second and capping near 30 seconds.
  • Retry a run submission only with the same Idempotency-Key and the same body, so a retry never creates a second run. The one exception is 503 queue_unreachable: Nexio already marked that run failed, and the same key returns the failed run, so retry it with a new Idempotency-Key.
  • Never retry run_cap_exceeded in a loop. It clears only when the month rolls over or the cap is raised.
  • Never retry other 4xx codes unchanged.

Idempotency

These surfaces deduplicate retries, each with its own key:
  • A run key has no timer. It deduplicates for as long as its run is stored; runs are removed by the 90-day retention job. The request a run key compares covers the engine, environment, resolved version, test_scenario, input and offerings. Full rules are on the Runs page.
  • Action rules are on Writes and the action ledger.
  • An outcome’s event_id is its idempotency key: a repeat with the same payload answers 200 and records nothing, and a different payload answers 409 event_id_reused. Rules are on Outcomes and annotations.

Body size and time limits

Correlate a failure with support

When you contact support, send the x-request-id from the response, the time in UTC, the route, and the run_id if there is one. Send your own X-Request-ID on every request to make this easier.
Last modified on September 25, 2026