Troubleshooting

Symptom first, cause second. Quote the X-Request-ID from the failing response whenever you escalate.

API calls

SymptomCause
401 INVALID_API_KEYheader missing, key doesn't start with iss_/ver_, wrong secret, or the key was revoked
401 API_KEY_EXPIREDkey had a configured expiry that has passed
403 PERMISSION_DENIEDkey belongs to a different issuer, verifier or organization than the one in the URL
422 on initiate-verificationmetadata.redirectUri missing; one of redirectUri or redirect_uri is required
400 offer too largecredentialOfferMode: "by_value" with an offer over the inline limit — use auto
404 on status or diagnosticswrong offer/verification ID, or flow diagnostics aren't enabled on this deployment — ask the operator
422 with a validation enveloperequest body failed schema validation; read errors[].pointer

Wallet flows

SymptomCause
Wallet cannot open the offerthe string is a deep link, not a URL — render it as a QR code or an HTTPS bridge link
Wallet rejects the credentialplatform root CA not installed on the device — see Testing
Wallet cannot resolve the offerit does not support credential_offer_uri; force credentialOfferMode: "by_value" if the offer is small enough
Token exchange fails on tx_codethe offer was created with userPinRequired: true and the holder must enter the returned transactionCode; it is never in the offer email
mso_mdoc request fails on a GET request URIsome mdoc DCQL queries require requestUriMethod: "post" — don't force "get"
Nothing reaches your hostwallets need public HTTPS

Stuck states

SymptomCause
Issuance status stays pendingthe wallet never exchanged the pre-authorized code; the offer moves to expired after 10 minutes
Verification stays initiatedthe wallet never posted a response; it expires after 15 minutes, 60 for email delivery
Verification is failureread failureReason, then the diagnostics timeline
No webhook arrivescheck Developers → Webhooks: endpoint on, URL resolves to a public IP; read the delivery attempts

Was this page helpful?