Swaps & Transfers
Cross-Network Transfers
Move USD₮ between networks, including to Tron.
Transfer flow
CustomerWallet on source network
amountUSD₮
Wallet InfrastructureBridge
depositedamountOut
RecipientDestination network
filledrefund
CustomerBack to the wallet
refundedRoutes
Move USD₮ from an EVM wallet on Ethereum, Arbitrum, Polygon, Optimism, Base or Plasma to a recipient on another of those networks, or on Tron.
Flow
- Quote bridge.
amountOutis what arrives after the bridge fee. - Prepare bridge. It checks the balance, refusing with
insufficient_fundswhen it cannot cover the amount and gas, and returns auserOpHash. - Have the customer sign the
userOpHashwith their passkey. - Submit bridge before
quoteExpiresAt.
Fees
- The bridge fee comes out of the USD₮ sent.
- The customer pays source-network gas in USD₮, on top of the amount.
- Transfers to Tron carry a flat destination cost of about 19 TRX, so small amounts lose a large share.
Tracking
Follow a transfer with Get bridge or the bridge.filled, bridge.refunded, bridge.failed and bridge.stalled events.
| Status | Meaning |
|---|---|
prepared | Built, not yet signed. |
submitted | Signed and sent. |
deposited | Deposited with the bridge, awaiting delivery. |
filled | Arrived at the recipient. |
refunded | Could not be delivered; the USD₮ returned to the wallet. |
failed | Did not leave the wallet. |
stalled | Tracking stopped before an outcome was seen. |
The sending side also appears in List transactions with purpose: bridge.
Errors
| Code | Status | Cause |
|---|---|---|
validation_failed | 400 | Malformed body, a recipient not valid for the destination, or a body that differs from what was prepared. |
validation_failed | 409 | The quote expired before submit. |
chain_unavailable | 400, 409, 501 | The source network is not enabled for transfers (400, 501), or the wallet is not deployed on it (409). |
insufficient_funds | 400 | The wallet cannot cover the amount plus gas. |
forbidden | 409 | The wallet is under recovery. |
passkey_credential_invalid | 409 | The passkey does not own this wallet. |
idempotency_conflict | 409 | The transfer was already submitted. |
not_found | 404 | Nothing was prepared under this userOpHash, or no transfer has this id. |