Skip to main content
Never trust the client result alone. The token (vyt) is proof, not a verdict; it exchanges for 30 minutes, secret key only. Do it inside the handler that performs the gated action so the proof and the action never exist apart.
The token-free read needs a credential to match on. An anonymous verification binds none, so it answers 404 no_settled_pass every time. On those checks the vyt is your only route to the verdict. See Anonymous checks.
With the token is the stronger check: it proves this run just finished, names exactly one pass, and puts no email in your request logs. Without a token is a recovery path: it answers whether the email or phone has verified, and lets a returning person skip another redirect. What it cannot tell you is whether they just did a check. We report verified: true | false. Pass or fail is your decision, and routing lives in your code, next to the action.
  • Gate on verified. vyc in the URL is a UI hint.
  • Fail closed on 404 or 410 from the token exchange, or a timeout: start a fresh session and try again.
  • A 404 from the token-free lookup isn’t a broken session, just no confirmed pass yet — don’t retry it in a loop. If the account reached its daily verification limit, retries keep failing until it resets.
  • Test keys read test runs only. Never point a live action at a test key.
  • Consume each token once. Prefer your own idempotency over lock unless you mean one pass per human, ever.
  • Strip vyt and vyc from the URL after handoff.
Response fields and reasons: GET /v3/confirmations/{token}.