Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.nusomi.com/llms.txt

Use this file to discover all available pages before exploring further.

Nusomi returns conventional HTTP status codes and a structured JSON error body.

Error envelope

{
  "error": {
    "code": "session_not_found",
    "message": "No session with id 'ses_unknown' in this workspace.",
    "param": "id",
    "request_id": "req_01HZ..."
  }
}
FieldNotes
codeStable string identifier. Code at this level.
messageHuman-readable. Do not parse this — pivot off code.
paramOptional. The offending field, when applicable.
request_idAlways included. Quote it when contacting support.

Status codes

StatusMeaning
200OK
201Created
202Accepted (async work queued)
204No content
400Bad request — malformed payload, validation failure
401Authentication failure
403Authorization / scope failure
404Resource not found in this workspace
409Conflict — e.g. starting a session that’s already recording
422Unprocessable — e.g. trying to seal an empty session
429Rate limited — see rate-limits
5xxNusomi-side error. Safe to retry with backoff.

Error code table

Authentication / authorization

CodeStatusMeaning
missing_authorization401No Authorization header.
invalid_api_key401Key not recognized or revoked.
insufficient_scope403Valid key, wrong scope.
workspace_disabled403Workspace suspended.

Resources

CodeStatusMeaning
session_not_found404No such session in this workspace.
frame_not_found404No such frame.
event_not_found404No such event.
workflow_not_found404No such workflow registered.
export_not_found404No such export.

Validation

CodeStatusMeaning
invalid_request400Generic — see param and message.
invalid_workflow_slug400Workflow names must match ^[a-z0-9_]{2,64}$.
invalid_metadata400Metadata too large (>16 KB) or contains banned types.
invalid_filter400Filter combination not supported.
unsupported_format400Export format unrecognized.

State

CodeStatusMeaning
session_already_recording409start called on a session in recording.
session_already_stopped409stop called on a session past stopped.
session_not_sealed422Operation requires a sealed session (e.g. export).
session_empty422Trying to seal a session with zero frames.

Replay / recovery

CodeStatusMeaning
replay_diverged422Exact replay couldn’t find a target.
replay_budget_exceeded422Guided replay ran out of budget.
recovery_no_anchor422No usable recovery frame for the given session.
live_sandbox_forbidden403Key lacks replay:live scope.

Limits

CodeStatusMeaning
rate_limited429Per-key or per-workspace QPS exceeded.
quota_exceeded429Monthly capture / export quota hit.
frame_too_large413Frame upload above 10 MB.
payload_too_large413Request body above 1 MB.

Server

CodeStatusMeaning
internal_error500Nusomi bug. Retry with backoff.
service_unavailable503Maintenance window or downstream outage.
gateway_timeout504Upstream took too long. Safe to retry.

Retry guidance

  • 5xx and 429 are safe to retry.
  • Use exponential backoff with jitter, starting at 250 ms, capped at 30 s.
  • The SDKs do this automatically — see the maxRetries option.
  • 4xx is not retryable (except 429). Fix the request.

Idempotency

POST requests on /v1/sessions, /v1/exports, and /v1/replays accept an Idempotency-Key header. Same key + same body = same response, deterministically, for 24 hours. Use this to make retries safe under network partition.