Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    API reference

    Errors

    The problem-detail format every error uses, what each status means, and which errors are worth retrying.

    Updated October 1, 2026

    On this page

    Every error is a problem detail (RFC 7807), sent as application/problem+json:

    {
      "type": "/api/v1/problems/insufficient-scope",
      "title": "Insufficient Scope",
      "status": 403,
      "detail": "API key is missing required scope: write",
      "instance": "/api/v1/jobs/submit",
      "request_id": "550e8400-e29b-41d4-a716-446655440000",
      "retryability": "auth"
    }
    FieldMeaning
    typeThe kind of problem. Specific problems have their own name (below); others are …/problems/http-<status>. Branch on this, not on detail.
    title, statusA short name for the problem, and the HTTP status.
    detailA human-readable explanation. Its wording can change.
    instanceThe path that failed.
    request_idQuote it when you contact support. Every response also carries it in the X-Request-ID header; send your own X-Request-ID to set it.
    errorsOn most 422 responses, the list of problems found (below).
    retryabilityWhether to retry (below).

    Should I retry?

    retryabilityStatusesWhat to do
    upstream5xxRetry with exponential backoff.
    timeout408, 504Retry with backoff.
    quota429, plan limits, spend ceilingsWait (for 429, a minute; for monthly limits, next month) or raise the limit.
    conflict409Re-read the current state, then decide.
    validation400, 413, 422Fix the request. Retrying unchanged fails again.
    auth401, 403Fix the credential or its scopes.
    terminalothers, such as 404 and 410Don't retry.

    Retry writes with the same Idempotency-Key, so a request that actually succeeded isn't done twice. See Idempotency and Handling errors.

    Validation errors

    A 422 lists each problem in errors. Request-shape problems look like:

    {"type": "missing", "loc": ["body", "job_type"], "msg": "Field required", "input": {}}

    Workflow problems (from validate, estimate, saving a definition, or starting a run) are diagnostics instead, with a code, a message, and where they apply (step_id, port, or a JSON path):

    {"code": "edge_incompatible", "message": "cannot resolve source port embed3d.poses", "step_id": "dock", "port": "ligands"}

    Branch on code, and treat codes you don't recognize as general validation failures: new ones can appear.

    Named problems

    type ends withStatusMeaning
    missing-idempotency-key400An API-key write was sent without an Idempotency-Key.
    insufficient-scope403The API key lacks read or write for this call.
    api-key-management-forbidden403API keys can't manage API keys; use an access token.
    api-key-limit-exceeded403Your plan's API key limit is reached.
    spend-ceiling-exceeded403The key's monthly spend ceiling would be passed.
    insufficient-wallet402The wallet can't cover an Assistant turn or a plan-card approval.
    session-spend-cap409The Assistant conversation reached its spend cap.
    estimate-changed409A plan card's price went up; approve the new price.
    proposal-expired410A plan card expired.
    invalid-event-cursor422An events after cursor is malformed.

    A job or workflow run that your wallet can't cover returns 400 with a detail explaining it.