wcp_test_… vs wcp_…). This guide runs through the flow in test mode first, so you can build and verify everything safely. See Test mode for the full picture.
- Create a test API key in the dashboard.
- Authenticate your requests with the key.
- Create your first merchant via
POST /v1/merchants. - Configure crypto settlement via
POST /v1/merchants/{merchantId}/settlements/crypto. - Create your first payment via
POST /v1/payments. - Check the payment status via
GET /v1/payments/{id}/status.
Don’t have access to the dashboard yet? Contact sales to get started.
1
Create a test API key
- Open API Keys in the dashboard and sign in if prompted.
- Create a test key — it starts with
wcp_test_. Copy the key — it is shown only once. - Store it in a secret manager. Anyone with this key can act on behalf of your account.
2
Authenticate
Every request to the Merchant API uses the A quick sanity check — list your merchants:A
Api-Key header.200 OK with a (possibly empty) data array confirms the key works. A 401 means the key is wrong; a 403 means the key is valid but lacks permission for this account.3
Create your first merchant
A merchant is the entity that receives payments. One account can hold many merchants — typically one per brand, storefront, or legal entity.The response includes the merchant See the full schema and field reference in Create a merchant.
id — save it, you’ll need it for every payment.Idempotency-Key is required on this endpoint. Use a fresh UUID per merchant — replays with the same key return the original result instead of creating a duplicate.4
Configure crypto settlement
Before you can accept payments, tell us where to deliver settled funds. Each settlement entry pairs a CAIP-19 The example above registers USDC on Base. For the full list of supported See the full schema in Create crypto settlements.
asset (the token you want to settle in) with a CAIP-10 destination wallet on the same chain.asset values and the chains we settle to, see Token & Chain Coverage.Each
(merchant, asset) pair must be unique — registering the same asset twice returns settlement_asset_conflict. To change a destination, use Update a crypto settlement instead.5
Create your first payment
A payment is a request for funds against one of your merchants. You pass the merchant via the The response includes the payment
Merchant-Id header and your own order identifier as referenceId.id and a link your buyer can open in any WalletConnect-compatible wallet. Hand that link to your checkout, share it directly, or render it as a QR code.6
Check the payment status
Poll the status endpoint to know when the payment has completed:Use See the full response schema in Get the payment status.
isFinal to decide when to stop polling. While the payment is still in flight, the response returns isFinal: false and a pollInMs hint for how long to wait before polling again. Once isFinal is true, status is one of succeeded, failed, cancelled, or expired and pollInMs is null.In test mode the
txId is synthetic (test:{paymentId}) — no transaction is executed on-chain. Live payments return a real transaction hash.From test to live
That’s the whole flow. Repeating these same six steps with a live key (wcp_ prefix) means every payment you create is a real payment — on-chain execution, real funds, real settlement. Nothing else changes: same API, same endpoints, same code. Test-mode data doesn’t carry over, so you’ll create your merchants and settlement configuration again with the live key.