Live today. This is the rail the widget has been settling real deposits on, and
the one you can build your own UI against right now. Nothing is held or signed by
us at any point.
Before you start
- An API key and the
/v1prefix - see Authentication. - The destination you want money to land on. Omit it and it settles as USDC on Arbitrum, which is what most integrations mean.
- 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. By default USDC on Arbitrum; name another chain and token if your key is enabled for it.
- 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.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.
Settling somewhere other than Arbitrum
Name bothdestination.chain and destination.token, never one alone: a chain
without its token address would keep Arbitrum’s address on a chain where it does not
exist, so that request is refused. 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.
Where to go next
- Build your own UI on it: Server-side integration.
- Drop in the ready-made flow: Rheon SDK.
- Which chains and tokens are open: Coverage.