Skip to main content
The Wallet API gives every user of your product their own crypto address. You call one endpoint with an ID for your user, and get back a real address that can receive money on every network your plan includes. Use it to add deposit addresses to your app, give each customer or each order its own wallet, or add crypto features without building wallets yourself. The quickest way to get going: switch on Base in your dashboard, create a key, and make one API call. That’s all it takes to give a user an address.

No keys to look after

Creating an address doesn’t give you or your users a private key or recovery phrase to store. There’s nothing to create, back up, or lose on your side.

One address, every network

Each address you create is the same on every network your plan includes. Create it once and it can receive on Base, and on Polygon, Arbitrum, Optimism, Ethereum, Avalanche, and Arc too, if your plan includes them. The Free plan is Base only.
1

Switch on Base

In Dashboard → Wallets, activate Base. This creates your master wallet, the main wallet for your business. You only ever do this once.
2

Create an API key

Create a key on the same page. Wallet API keys start with wsk_live_.
3

Create an address

Call POST /api/v1/wallets with an ID for your user. On a paid plan, the address already works on every other network your plan includes, with nothing more to switch on. If you call it again with the same ID, you get the same address back, never a second one.

Detecting deposits

We watch every address you create, on every network it works on. When money arrives, we record the deposit and send a wallet.deposit.received webhook to the URL you set under Dashboard → Webhooks. You can also look up deposits and a wallet’s live balance yourself at any time:

Get balance

How much USDC a wallet holds right now, on every network.

Get wallet deposits

Every deposit one wallet has received.

List all deposits

Every deposit across your account, for checking against your own records.

Moving funds

Auto-sweep

Move the money from your users’ addresses into your master wallet automatically, once it reaches an amount you set.

Withdraw

Send money out to an address you’ve approved in your dashboard.

Transfer between users

Send USDC or USDT from one of your users to another, on the same network.

Recover a stray token

Move out a coin that landed on one of your addresses but isn’t USDC or USDT.

Find a deposit

Look again for a payment that was sent but never showed up.

Settlement

Turn every deposit into USDC and gather it on one network, at your user’s own address.
When your users pay each other, a transfer moves the money from one user’s address to another’s. It stays on one network, doesn’t need an approved address because both addresses are yours, and tells you how it went with wallet.transfer.completed or wallet.transfer.failed. The receiving address doesn’t also report a deposit, so each payment is only counted once in your records. See Wallet API webhooks for what you’re told when money arrives, and when a withdrawal or transfer completes or fails.

Pricing

Your allowance resets at the start of every month and counts the addresses you created that month, not your total. On Growth, you’re never cut off: go past 2,000 and each extra address costs $0.50. Free has no billing, so it stops at 100 until the next month.

Arc

Arc is a network built around USDC. Creating addresses and receiving money there works like any other network, once your plan includes it. A few things are different, so it’s worth knowing them before you send users there. It’s USDC only. There’s no USDT on Arc, so every deposit there is USDC. On Arc, USDC is also what pays the network fee (often called gas). That means a sender’s wallet can send it in two ways: as a normal token transfer, or as Arc’s own built-in currency, the way ETH moves on Ethereum. Either way, it counts as a USDC deposit. Amounts are always shown to 6 decimal places, like USDC everywhere else. The built-in kind can carry more decimals than that, and any extra digits are dropped, not rounded up. You also get each deposit once. On Arc, we only record a deposit once it’s final, so it arrives already complete, with a single webhook. Some wallets make one transfer on Arc look like two, and you’re still only credited once. On a paid plan, your addresses already work on Arc alongside every other network your plan includes, with nothing extra to switch on. Pass chain: "ARC" when creating an address if you want to check that up front. If you ask for a network your plan doesn’t include, you’ll get a 400 saying so. Talk to us about choosing a plan or moving to Enterprise.

Testing without a test mode

There’s no test mode for the Wallet API yet. Keys are live, and every address you create is real. The easiest way to work with that is to test with small real amounts, and start your test users’ IDs with something like test- so they’re easy to spot later. If a test mode is something you’d really need, tell us and we’ll keep it in mind for what we build next.

Create your first wallet

Switch on Base, create a key, and give your first user an address, step by step.