Skip to main content
This guide takes you from zero to accepting USDC payments through Meridian on any supported chain. The only dependency is viem — your server returns an x402 challenge, the buyer signs a payment authorization off-chain, and your server settles it through Meridian’s API. No transaction is submitted by the buyer and no gas is paid by either side.
The code below is identical on every chain whose payment token supports EIP-3009 (Base, Optimism, Arbitrum, Polygon, Ink, and more) — only the network constants change. For chains without an EIP-3009 token (MegaETH, BSC, BOT chain, Tempo), the buyer signs a Permit2 witness instead; see the non-EIP-3009 guide.
1

Create an API key

Sign in with your wallet at mrdn.finance/dev/api-keys and create a key. Use a pk_test_ key for development and a pk_ key for production. Store it server-side:
See API Keys for details.
2

Set your recipient wallet

In your organization settings, configure the wallet that receives settled funds. The recipient is tied to your API key — in the payment requirements, payTo always stays pointed at the Meridian facilitator contract, never at your own wallet.
3

Pick a network

Take the payment token and facilitator address for your chain from Supported Networks and keep them in one config object — everything below reads from it:
For development, use a testnet (pk_test_ key), e.g. Base Sepolia: chainId: 84532, token 0x036CbD53842c5426634e7929541eC2318f3dCF7e (tokenName: "USDC"), facilitator 0x8e633dBf31adCc7D41BE3e95B7c8DD3526B5235A. Test USDC is available from Circle’s faucet.A minimal Base Sepolia test should use:
  • MERIDIAN_API_KEY=pk_test_...
  • a buyer wallet connected to Base Sepolia (84532)
  • Base Sepolia USDC from Circle’s faucet
  • paymentRequirements.network: "base-sepolia"
  • paymentRequirements.payTo: "0x8e633dBf31adCc7D41BE3e95B7c8DD3526B5235A"
4

Return a 402 challenge from your server

When an unpaid request hits your paid endpoint, respond with HTTP 402 and the payment requirements:
To accept payments from more than one chain, return one requirement per source chain in accepts — see Payment Types.
5

Sign the payment in the buyer's browser

The buyer signs an EIP-3009 TransferWithAuthorization as typed data — no approval, no transaction:
Then send the payload to your server (bigints as decimal strings):
6

Settle server-side

Your server settles the payment through Meridian, then serves the paid response. Never expose the API key to the browser, and do not trust buyer-supplied pricing, recipient, token, or network values. Rebuild or look up the matching paymentRequirements on the server before settlement:
7

Verify in Command Centre

Open Command Centre to see the payment, its settlement status, and your balance.

Next steps

Manual Integration

The full client-side flow: multi-chain challenges, requirement selection, and error handling.

Payment Types

EIP-3009, Permit2, and Circle Gateway — and when to use which.

Supported Networks

Chains, tokens, and contract addresses.

AI Skills

Self-contained integration instructions for AI coding agents.