Skip to main content
A crypto deposit is the simplest way money comes in: the user already holds a stablecoin somewhere, and we route it to where you want it. Cross-chain is handled for you - the user does not bridge, swap, or hold a second gas token.
Production on this deployment, real money. There is no crypto sandbox: the transaction you build moves real funds the moment the user signs it, and every hash you see is a real one. Try it with a small amount.

Before you start

  • An API key and the /v1 prefix - see Authentication.
  • The destination you want money to land on: a chain and a token, both named in full. Read the ones your key may use from GET /v1/config.
  • A frontend that can ask the user’s wallet to sign. We hand back an unsigned transaction; submitting it is yours.

What it does

  • Any supported source chain and token. The user picks what they hold.
  • One landing spot you control. Any chain and token your key is enabled for; the quote names both.
  • Non-custodial throughout. The transaction we hand back is unsigned and the user’s wallet signs it. Funds never sit with us between the payer and you.
  • Exact-in or exact-out. Pin the amount the payer spends, or the amount that must land - the second is what a fixed price needs.

The flow

1

Price it

POST /v1/deposit/quote with the source, the destination, and the amount. See Quote a deposit.
2

Build the transaction

POST /v1/deposit/transaction with that quote. You get an unsigned transaction, preceded by an approval when the token allowance is short. See Build the transaction.
3

Let the user sign

Your frontend submits it from the user’s wallet. Nothing reaches us here.
4

Track it

POST /v1/deposit/status with the receipt, or take a webhook instead of polling. See Check status.
A quote lives five minutes. Build the transaction from a fresh one - past that the request is refused with a quote-expired error rather than silently repriced, so the user never signs a number they were not shown.

Exact-in and exact-out

exact-in means the payer spends exactly the amount you named and whatever arrives, arrives. target-out means a fixed figure has to land and the payer’s side flexes to cover it. Collecting a set price - an invoice, a checkout total - is the exact-out case.

Naming the destination

Name both destination.chain and destination.token, never one alone: a chain without its token address is refused rather than guessed. Your key also has to be enabled for that chain, otherwise the quote comes back 403 chain_not_allowed instead of a quote you could not have used.

Fees

The crypto path is priced per route on the quote, and the quote is the whole price: outAmount is what lands, and the difference from what the payer spends is the route cost. There is no separate settlement or bridging charge, and an on-chain destination carries no network or withdrawal fee on our side. Routes are priced live, so the same corridor can cost differently minute to minute - quote in the direction that matters to you. The structure is on Fees.

Where to go next