Guides Handling results

Error Reference

Every error AgeWallet returns, grouped by where it surfaces. If you are writing callback logic rather than looking something up, start with Handling responses and errors — this page is a lookup.

Errors returned to your redirect_uri

The authorization flow started, and ended without a code. The user’s browser comes back to your callback with an error parameter instead of code.

ErrorCauseCategoryAction
access_deniedThe user cancelled verification.Flow outcomeDeny access. Offer to start again.
access_deniedIdentity verification was unsuccessful — document rejected, liveness check failed, or session expired.Flow outcomeDeny access. You may offer a retry.
invalid_requestcode_challenge_method was not S256.Request faultFix your /authorize request. This should never reach production.

Errors from the token endpoint

Returned by POST /user/token as HTTP 400 with a JSON body containing an error field. These are request faults: the user is not involved.

ErrorUsual cause
invalid_grantThe code expired; the code was already used; redirect_uri does not match the /authorize request; or code_verifier does not match the challenge you sent.
invalid_clientUnknown client_id, or a missing or incorrect client_secret.
invalid_requestA required parameter is missing, or the body was sent as JSON rather than form-encoded.
unsupported_grant_typegrant_type was not authorization_code.

Errors from UserInfo

Returned by GET /user/userinfo.

StatusMeaningAction
401The access token is missing, expired, or invalid.Do not treat this as an unverified user. It is an integration fault.
5xxService error.Do not grant access. Retry once, then fail closed.

A failed request and a failed verification both end in “no access”, but only one of them is a bug in your integration. Log them separately.

Errors you will not receive

Some failures cannot be sent to your callback, because doing so would mean redirecting to a URI we have not been able to verify. In these cases the user sees an error page and your callback is never reached:

  • redirect_uri is missing, malformed, or does not exactly match one registered for the client
  • client_id is unknown

If your callback never fires and the user reports an error screen, check these two first.

Last updated July 28, 2026

Was this page helpful?