Skip to main content
Address verification is in Developer Preview. Endpoints and schemas are subject to change. To participate, contact Paxos Support.
This guide covers both verification methods. Both flows use the same authentication step, so one access token covers the full walkthrough. Use this guide when your application verifies addresses directly or when a third-party wallet collects signatures on behalf of its users.

Before You Begin

  • A Sandbox account with API credentials (Client ID and Client Secret)
  • The address_ownership:read_verification and address_ownership:write_verification scopes enabled on your credentials. See API Credentials.
  • The blockchain address you want to verify and its network
  • For SIGNATURE: a way for the address holder to sign the Paxos message
  • For SMALL_DEPOSIT: a way for the address holder or custodian to send a transaction from the address

Who Does What

Authenticate

Add the address_ownership:read_verification and address_ownership:write_verification scopes to your Sandbox account under API Management, then authenticate.
Save the access_token from the response. You will use it in every subsequent request.

Signature Flow

Use this flow when the address holder can sign a message with the wallet that controls the address. This is the recommended flow for wallet integrations because it does not require an on-chain transaction.
  • Authenticate (above)
  • Create a verification to get the message to sign
  • Send the verification details to the wallet or user
  • Collect the signature and submit it via Submit Signature

1. Create a Verification

Covers Ethereum, Ink, XLayer, Arbitrum One, and Robinhood Chain.
The response contains signature_verification.message, the exact string to sign, and signature_verification.nonce, which is embedded in that message.
Save the id, signature_verification.message, network, address, and expires_at.

2. Collect the Signature

Send the signing details to the wallet or user. Do not send Paxos client credentials, client secrets, or OAuth tokens to a wallet frontend or third-party collector.
The wallet must sign message exactly as returned by Paxos, including casing, spacing, and line breaks.
The signed message verifies control of the address for the requested Paxos use case. It is not an on-chain transaction and does not authorize movement of funds.

3. Submit the Signature

After the wallet or address holder returns the signature, submit it to Paxos with the verification id. Signing standards:
  • EVM networks (Ethereum, Ink, XLayer, Arbitrum One, Robinhood Chain): EIP-191 personal_sign. Most wallets and libraries (ethers.js, viem, web3.py) expose this as signMessage.
  • Solana: ed25519. Sign the message bytes with nacl.sign.detached or equivalent.
Pass the verification id and the collected signature in the request body.
If the signature is valid, status moves to APPROVED immediately.
If the signature doesn’t verify, the verification stays PENDING. Call this endpoint again with a corrected signature.

Small Deposit Flow

Use this flow when the address holder cannot sign a message, for example if the address is held by a custodian or a hardware wallet that doesn’t support the Paxos message format.
  • Authenticate (above)
  • Create a verification to get the deposit address and amount
  • Send exactly the specified amount from the address under verification
  • Poll until the verification approves

1. Create a Verification

The response tells you where to send funds. The details are under small_deposit_verification.
Send exactly small_deposit_verification.amount on-chain from 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 to the deposit_address. Paxos checks both the sender and the amount. No further API call is needed.
If the deposit isn’t detected, you can send again from the same address within the 48-hour window.

2. Poll for Status

Poll Get Address Verification until status is no longer PENDING.

What to Expect

For SMALL_DEPOSIT, poll Get Address Verification every 10-15 seconds after sending your transaction. Paxos detects the deposit as soon as it confirms on-chain.

Idempotency

Use ref_id to make verification creation safe to retry. If a request times out before you get a response, resend it with the same ref_id and Paxos returns the existing verification instead of creating a new one. ref_id is scoped to your account. The same value can be used across different accounts without conflict.

List Verifications

Use List Address Verifications to retrieve verification records, with optional filters.
Supported query filters: status, verification_method, network, address, created_at.gte, created_at.lte, created_at.gt, created_at.lt, order, limit, page_cursor.
Questions? Contact Support.