Skip to main content
All errors use one envelope:
Branch on error.code, not the message — messages may be reworded.

Detection endpoints

No 4xx error is ever charged. 422 codes are user-fixable — build your retake UX around them.

Verification session endpoints

Which submit errors consume an attempt

A session allows 3 capture attempts. Errors caused by the capture itself — 413, any 422, and NONCE_MISMATCH — consume the attempt. Errors that aren’t the capture’s fault — bad form encoding, INSUFFICIENT_CREDITS, UPSTREAM_ERROR — refund it, so server-side trouble never burns the user’s retry budget. When the last attempt is consumed by a failure, the session becomes failed with failure_code: "ATTEMPTS_EXHAUSTED".