Norano API

Error catalog

Every error code with its type, HTTP status, retryable flag, and remediation.

Every error body is { error: { type, code, message, remediation, retryable, param?, docs_url, request_id } }. type and code are the stable machine contract — branch on those, never on message. Each code ships with a fixed retryable flag and a stable docs_url that points right back at its anchor on this page.

invalid_request

invalid_request

  • HTTP status: 400
  • Retryable: no
  • Message: The request was malformed.
  • Remediation: Check the request shape against the API reference and resend.

missing_param

  • HTTP status: 400
  • Retryable: no
  • Message: A required parameter is missing.
  • Remediation: Add the missing parameter named in `param` and resend.

unsupported_media_type

  • HTTP status: 415
  • Retryable: no
  • Message: The request Content-Type is not supported by this endpoint.
  • Remediation: Send the body with a supported Content-Type (e.g. application/json).

payload_too_large

  • HTTP status: 413
  • Retryable: no
  • Message: The request payload exceeds the allowed size.
  • Remediation: Reduce the payload size, or use the signed-upload flow for large files.

method_not_allowed

  • HTTP status: 405
  • Retryable: no
  • Message: The HTTP method is not allowed on this resource.
  • Remediation: Use one of the methods listed in the `Allow` response header.

validation_error

  • HTTP status: 422
  • Retryable: no
  • Message: The request body failed validation.
  • Remediation: Fix the field named in `param` (see `message`) and resend.

idempotency_key_reuse

  • HTTP status: 422
  • Retryable: no
  • Message: This Idempotency-Key was already used with a different request body.
  • Remediation: Use a fresh Idempotency-Key for a request with a different body.

authentication

missing_api_key

  • HTTP status: 401
  • Retryable: no
  • Message: No API key was provided.
  • Remediation: Send your key as `Authorization: Bearer norano_sk_live_…` (or a test key).

invalid_api_key

  • HTTP status: 401
  • Retryable: no
  • Message: The provided API key is invalid.
  • Remediation: Check the key value, or issue a new key, then resend.

expired_api_key

  • HTTP status: 401
  • Retryable: no
  • Message: The provided API key has expired.
  • Remediation: Issue a new key and resend.

permission

insufficient_scope

  • HTTP status: 403
  • Retryable: no
  • Message: The API key lacks the scope required for this operation.
  • Remediation: Use a key that holds the required scope, or grant the scope to this key.

tenant_mismatch

  • HTTP status: 403
  • Retryable: no
  • Message: The requested resource belongs to a different tenant.
  • Remediation: Use a key that belongs to the resource owner.

test_mode_resource_in_live

  • HTTP status: 403
  • Retryable: no
  • Message: A test-mode resource cannot be accessed with a live key (or vice versa).
  • Remediation: Use a key whose mode (live/test) matches the resource.

not_found

resource_not_found

  • HTTP status: 404
  • Retryable: no
  • Message: The requested resource was not found.
  • Remediation: Check the id and that the resource belongs to your tenant.

conflict

idempotency_in_progress

  • HTTP status: 409
  • Retryable: yes
  • Message: A request with this Idempotency-Key is still being processed.
  • Remediation: Wait briefly and retry with the same Idempotency-Key.

plan_not_ready

  • HTTP status: 409
  • Retryable: yes
  • Message: The plan is still parsing; it cannot be used yet.
  • Remediation: Poll the plan's parse Job until it succeeds, then retry.

source_not_ready

  • HTTP status: 409
  • Retryable: yes
  • Message: A source resource this operation depends on is not ready yet.
  • Remediation: Wait for the source to become ready, then retry.

rate_limit

rate_limited

  • HTTP status: 429
  • Retryable: yes
  • Message: Too many requests.
  • Remediation: Wait for the duration in the `Retry-After` header, then retry.

budget

budget_exceeded

  • HTTP status: 402
  • Retryable: no
  • Message: This key's spend cap has been reached.
  • Remediation: Raise this key's cap or use a different key.

quota_exceeded

  • HTTP status: 402
  • Retryable: no
  • Message: A usage quota has been exceeded.
  • Remediation: Wait for the quota to reset, raise the quota, or use a different key.

provider

provider_unavailable

  • HTTP status: 502
  • Retryable: yes
  • Message: An upstream generation provider is currently unavailable.
  • Remediation: Retry after a short backoff; the provider may be temporarily down.

job

job_failed

  • HTTP status: 409
  • Retryable: no
  • Message: The job failed.
  • Remediation: Inspect the job's `error` object for the specific failure and remedy.

server

internal_error

  • HTTP status: 500
  • Retryable: yes
  • Message: An unexpected error occurred.
  • Remediation: Retry after a short backoff. If it persists, contact support.

service_unavailable

  • HTTP status: 503
  • Retryable: yes
  • Message: A required dependency is temporarily unavailable, so the request was not processed.
  • Remediation: Retry after a short backoff. The request was rejected without being processed, so retrying is safe.