Skip to main content
At the end of this page, you will have moved fiat to crypto for a Sumvin user — the ramp is part of Atomic Money, Sumvin’s payments, ramps, cards, and settlement layer. The ramp transaction reaches completed, and the destination wallet holds the new balance. The final read:

Prerequisites

  • A KYC-verified Sumvin user with a deployed Safe. Run Stand up an account first if you do not have one.
  • A Platform API JWT and your x-juno-orgid header — see Authentication.
  • Base URL https://api.sumvin.com/v0.
  • Sandbox test card details — available from your account manager for non-production flows.
The user does not re-verify inside the Meld widget. Sumvin shares their existing KYC outcome with Meld on the first ramp call. See KYC passthrough.
1

Quote the buy

Quote what an amount of fiat will buy. You send the triplet from_asset, to_asset, chain_id — direction is inferred from which side is fiat. The response ranks live quotes from the service providers that serve the user’s country and payment method, with fees, exchange rate, and the destination amount broken out.GET /v0/ramp/quotes — List ramp quotes.
Response: 200 OK
Quotes carry a ramp_score — higher means a better combined rate, fee, and success likelihood. Narrow the list by passing payment_method_type if you want a single rail (CREDIT_DEBIT_CARD, ACH, SEPA, APPLE_PAY, GOOGLE_PAY, BANK_TRANSFER, LOCAL_BANK_TRANSFER, BACS).
chain_id always describes the crypto leg. Discover the rampable (symbol, chain_id) pairs in Supported valuesSEI on Sei (1329) is the first launch chain; ETH, USDC, and EURC on Base (8453) are also live today.
2

Create a ramp session

Take the quote the user selected and create a session. The session returns a hosted widget URL — that is what the user opens to pay.Pass wallet_address as the settlement destination. Crypto lands there when the transaction settles.POST /v0/ramp/sessions — Create a ramp session.
Response: 201 Created
403 Forbidden on this call means the user has not completed KYC. Check GET /v0/kyc/status and route the user through KYC before retrying.
3

Open the widget for the user

Navigate the user to widget_url. Render it in an iframe, a popup, or as a full-page redirect — whichever matches your UX.
Meld hosts the payment capture, any step-up authentication (3DS, 2FA), and the on-chain delivery leg. The user stays inside the widget for the whole flow.
4

Poll the transaction for settlement

Once the user submits the payment, Meld creates a transaction against the user’s record. List their ramp transactions to watch it progress.Internal status moves pendingprocessingcompleted. meld_status carries the provider-side state in parallel — useful for debugging a stuck transaction.GET /v0/ramp/transactions — List ramp transactions.
Response: 200 OK
Sandbox settlements typically land in under 2 minutes. Production card payments settle in 5–15 minutes depending on the service provider. Poll on a 5–10 second interval while the widget is open, then back off.
The list endpoint’s optional status query parameter filters against provider-side state, not the internal lifecycle — pass an uppercase Meld value such as PROCESSING or SETTLED if you want a filter. For most polling flows, list without a filter and match against internal status on the client. Fetch one transaction directly with GET /v0/ramp/transactions/{transaction_id} for a detail view.
5

Verify the crypto arrived

Once status is completed, the destination wallet holds the new balance. Read the wallet’s assets to confirm:GET /v0/wallets/{wallet_id}/assets — List wallet assets.
The fiat purchase has settled on chain. The user holds the destination asset in their Sumvin wallet.

Status reference

Internal status is the lifecycle field you should drive UI from. meld_status is the provider-side mirror — useful when you need to surface richer intermediate state (for example, step-up auth) to the user.

Common failure modes

Sell and off-ramp

The same endpoint handles the reverse direction — swap from_asset and to_asset so crypto is the source and fiat the destination. chain_id stays the same (it always describes the crypto leg). The resulting transaction comes back with transaction_type: "CRYPTO_SELL". See Off-ramp for the settlement model.

What’s next

  • Ramps & banking — how ramp composes with KYC passthrough and bank linking.
  • Ramp sessions — conceptual model behind sessions, scopes, and settlement.
  • Off-ramp — the crypto-to-fiat direction.