Skip to main content
This guide takes you from an API key to a verified wallet in five steps.
Use staging for integration testing only; attestations created there are not evidence for compliance. There is no test mode in production.
1

Get access and an API key

In the WalletConnect Pay merchant dashboard, open the Wallet Verification tab on the API keys page and request access. Once access is enabled, create an API key. The full key is shown only once, so store it in a secret manager. See Dashboard & API keys for details.Send the key as a bearer token on every request:
Environment
A missing, unknown, or revoked key, or an account without access, returns 401 unauthorized.
2

Create a verification

Create a verification
The request body can be up to 16 KiB. Larger bodies return 413 request_error.A successful request returns 201 with the verification object plus a url:
201 Created
The url is returned only in this response. Store it with the verification id.
3

Send the user the link

Give the user the url however fits your product: send it as a link, redirect the browser to it, or embed it in an iframe. The verification page walks the user through connecting and signing.
4

Poll for the result

Poll the verification until its state is terminal: verified, failed, expired, or cancelled.
Read a verification
Poll every few seconds while the user is on the page, then back off. If the user returns through your return_url or the page posts a message to your parent window, poll once more to confirm the result server-side.
To find verifications later, list them with GET /verifications. Results are newest first and support limit (1–100, default 20), an opaque cursor, and the filters state, reference_id, from (inclusive), and to (exclusive). The response is { "data": [...], "next_cursor": "..." }, and next_cursor is null on the last page.
5

Read the result

When state is verified, the attestation field holds the address, the exact signed message, the signature, and how it was checked. See Results & attestations for every field and how to re-check the signature yourself.

Idempotency

Send an Idempotency-Key header (1–255 characters) on create so you can retry safely. Keys are scoped to your account and kept for 24 hours.
  • Retrying with the same key and the same body returns 200 with the same verification and no url. Keep the url from the first 201.
  • Reusing a key with a different body returns 409 idempotency_key_mismatch.

One live session per reference

Each reference_id can have only one pending verification at a time. Creating another while one is pending returns 409 reference_in_progress, and the link is not re-issued:
409 Conflict
Once the earlier verification reaches a terminal state, create a new one with the same reference_id. Use the re_verification purpose so the signed message says why.

Cancel a verification

Cancel a pending verification to stop its link from working:
Cancel a verification
The state moves to cancelled. Cancelling a verification in any other state returns 409 not_cancellable.

Error handling

Errors use one envelope. Switch on code. The message text may change.
Error envelope

Frequently Asked Questions