Skip to content

Errors

All errors return JSON: {"detail": "human-readable reason"}.

StatusWhereCauseHandle
401Backend endpointsMissing/invalid API keyFix credentials; check for whitespace in the header
401Capture endpointsMissing, expired (30 min), or revoked handoff tokenRestart the flow: create a new verification via your backend
404Any {id} endpointUnknown verification IDCheck the ID; erased verifications still exist (their data doesn’t)
409POST /v1/capture/documentAlready past document stageCall GET /v1/capture/status, resume from next_step
409POST /v1/capture/selfieDocument not uploaded yet, or frame for that step already uploadedSame — status, then resume
409POST /v1/capture/challengeCalled before document uploadUpload the document first
409POST /v1/attestations/{id}Verification not approvedWait for the decision webhook
409POST /v1/review/{id}Not in manual_review (already decided)Refresh the queue
413UploadsFile over 15 MBCompress client-side (JPEG q≈0.9 is plenty)
415UploadsNot JPEG/PNG/WebPConvert before upload
422UploadsUnder 1 KB (junk capture)Re-capture
422POST /v1/capture/selfiestep outside 0..N-1Use indices from the challenge response
422POST /v1/verificationsNon-HTTPS webhook_urlUse HTTPS
422POST /v1/attestations/{id}Unknown claim nameSee the claim catalogue
422POST /v1/review/{id}Missing/short note, or bad decision valueNotes are mandatory — write a real one
429AnywhereRate limit (40/min capture, 240/min API per IP)Back off per Retry-After
500AnywhereServer faultRetry with backoff; check /health; a pipeline 500 routes the verification to manual review rather than losing it
  • Device-side 401 right after creation almost always means the token was URL-mangled — pass it verbatim, it’s URL-safe base64.
  • A verification “stuck” in processing for minutes: check server logs for verification.pipeline_error audit events — the fail-safe should have routed it to review; if not, that’s a bug worth reporting.
  • Webhook never arrived: your endpoint must answer 2xx in <10 s across 3 attempts; reconcile by polling GET /v1/verifications/{id}.