When the customer holds no crypto yet
Fund an order or a wallet from a card or a bank account. Stripe takes USD or EUR by card; a reusable deposit account takes ACH, Wire, SEPA, Faster Payments, Pix, SPEI, or Bre-B. Both settle the token you asked for to the wallet you named.
FUND WITH CARD
You pay
€100.00
CardYou receive
USDC
EthereumSettles to
0xRecipient…
The missing half of the funnel
Deposits, checkout, and swaps all start from a wallet that already holds something. This is the flow for the customer who does not.
COVERAGE
The customer with no crypto
Every other flow assumes the payer already holds a token. This one does not. Reach for it when the alternative is losing the sale.
CURRENCIES
USD and EUR at the card, six at the bank
Cards take USD and EUR. Bank transfers add GBP, BRL, MXN, and COP. Either way the destination is any supported token on any supported chain.
SURFACE
Embedded, not redirected
createOnrampSession() returns a headless Stripe session, and checkoutStripeOnrampSession() hands back the client secret for the embedded checkout. The customer never leaves your page.
ACCESS
Approved organizations only
On-ramp is gated. Your organization is approved before card payments can be shown to users at all.
Card payments for businesses acquirers price out
Built so a customer with no crypto can still pay. Used most by the teams a conventional merchant account was never going to serve.
THE PROBLEM
Acquirers say no, or say yes with a reserve
Whole verticals get labelled high-risk: declined, priced at multiples of the standard rate, or held to rolling reserves. The customers still want to pay by card.
THE FLOW
The card buys the token. The token pays you.
The customer enters a card in the embedded Stripe on-ramp. Stripe handles the card and identity checks; the token settles on-chain to your wallet inside a normal SALE order.
WHAT YOU HOLD
On-chain settlement, then fiat if you want it
What reaches you is a confirmed on-chain transfer. Keep it as the asset you configured, or off-ramp it to a bank account once KYB is complete.
THE HONEST PART
Approval is per organization, and it is real
Your organization is reviewed first, availability is geo-restricted, and each customer completes Stripe's KYC. Tell us what you sell before you build around it.
Four calls to a funded wallet
Authenticate, check, intend, and open. Every one of them is a server-side ApiClient method.
01
Authenticate the customer with Link
createLinkAuthIntent() takes an email or a hashed email, and createLinkAuthToken() exchanges that intent for a Link auth token client secret.
02
Check identity status
getStripeCryptoCustomerStatus() reports Stripe's crypto KYC and identity-verification state, so you can branch before showing a card form that would only fail.
03
Create an on-ramp intent
createOnrampIntent() takes the source amount and currency, the destination chain and token address, and the recipient wallet. Intents are reusable and can be backed by an order.
04
Open the embedded session
createOnrampSession() creates the session from the intent, checkoutStripeOnrampSession() returns the client secret to mount, and refreshStripeOnrampSessionQuote() re-prices it if the customer lingers.
Or straight from a bank account
For users who would rather wire than tap a card, and for amounts a card will not carry. Reusable instructions, one memo, every transfer tracked.
01
Create a bank deposit account
One call with the source currency, the rail, and the destination token and wallet returns reusable deposit instructions and the memo every transfer must carry.
02
Show the instructions once
Account details and the required memo are stable, so a user can save them in their banking app and fund again later without a new session.
03
Each transfer becomes a deposit
Every incoming transfer is recorded as its own deposit and moves through PROCESSING to COMPLETED or FAILED. GET /onramp/bank/accounts/{id}/deposits is the paginated history.
04
Tokens land in the named wallet
The deposit converts to the destination token on the destination chain and arrives at the wallet you set on the account, the same way an order settles.
What to know before you build it in
Provider
Stripe. CoinVoyage coordinates the session and the destination, Stripe handles the card and the identity check under its own authorizations.
Source currencies
USD and EUR by card for eligible organizations and orders. USD, EUR, GBP, BRL, MXN, COP by bank transfer, each subject to a per-organization endorsement.
Bank rails
USD over ACH push, Wire · EUR over SEPA · GBP over Faster Payments · BRL over Pix · MXN over SPEI · COP over Bre-B
Destination
Any supported token on any supported chain, addressed by chain ID and token contract, paid out to a wallet address you specify.
Access
Gated. Card payments need per-organization approval before they are shown to users. Bank deposit accounts need an approved organization verification, and each currency needs its own endorsement.
Where it runs
All on-ramp methods are API-key methods on ApiClient. Like every other privileged surface, they belong on your server.
Card or bank in. Tokens out.
Both paths end at the wallet you named with the token you asked for, so your reconciliation does not change shape whichever one the customer picks.