Skip to main content
An onramp converts fiat held in a customer’s virtual account into a crypto asset. It uses POST /v2/orders. The source is always a virtual account. The direction is inferred from the asset types, so you do not send a type.
Test this flow in sandbox. See ONRAMP orders (sandbox) for the simulated happy path, failure controls and webhooks.

Prerequisites

  • An active customer with a virtual account that holds the fiat to convert (Add virtual accounts).
  • For a Conduit wallet destination, an active wallet for the asset and chain you want (Add a crypto wallet). For an external wallet, nothing: the customer needs no Conduit wallet and signs nothing.
  • A customer outside the United States. On live, an onramp for a customer in the United States returns 403 CAPABILITY_SUSPENDED; sandbox does not apply this refusal (Customers in the United States).
  • Your API key.

Choose the destination

Send to a Conduit wallet

Send to a wallet outside Conduit

  • recipient is the crypto recipient of POST /v2/payouts. recipient.chain must equal asset.chain.
  • attestation.custody is required. Use self when the customer owns the wallet. For a wallet that belongs to someone else, use third_party and add the owner’s identity: type, plus firstName, lastName and countryOfCitizenship, or legalName and countryOfRegistration.
  • purpose and documents follow the same rules as a payout (Transact). A purpose of intercompany or personal_transfer_of_funds needs the address registered first (Registered Addresses).
  • autoPayout and sourceAsset are refused with an external_wallet destination.
  • To see the recipient fields before you build the request, call GET /v2/orders/requirements with recipientRail=crypto and the destination asset and chain.
The order creates two transactions: the conversion, then a withdrawal to the address, linked to the order by linkedOrderId. The withdrawal is screened like any crypto payout and cannot be cancelled once it exists.

Track the order

The order stays pending until it reaches succeeded, failed or cancelled. Watch the order.* and transaction.* webhooks (Webhooks). Use autoExecute: false to lock a rate and read the quote without committing, and cancel before execution with POST /v2/orders/{orderId}/cancel.

See also