The ramp endpoints (GET /v0/ramp/quotes, POST /v0/ramp/sessions) speak Sumvin’s domain primitives: from_asset, to_asset, and chain_id. Direction (buy or sell) is inferred from which side is fiat. Provider-specific token codes are translated internally — your integration only ever sees Sumvin asset symbols.
Direction inference
You always send the same triplet — from_asset, to_asset, chain_id. Sumvin reads the fiat-vs-crypto sides and infers the direction.
from_asset | to_asset | Direction | Resulting transaction_type |
|---|
Fiat (e.g. USD) | Crypto (e.g. USDC) | Buy (on-ramp) | CRYPTO_PURCHASE |
Crypto (e.g. USDC) | Fiat (e.g. EUR) | Sell (off-ramp) | CRYPTO_SELL |
chain_id always describes the crypto leg — the network the crypto asset lives on. Whether you are buying or selling, chain_id is the chain you are settling crypto on or debiting from.
Both sides being fiat or both sides being crypto is rejected with 400 Invalid Asset Pair (RAMP_INVALID_PAIR). One side must be fiat, the other must be crypto.
Assets
from_asset and to_asset accept Sumvin asset symbols. Discover the full set programmatically:
curl https://api.sumvin.com/v0/assets \
-H "x-juno-jwt: <your-jwt-token>" \
-H "x-juno-orgid: <your-org-id>"
Fiat
Any value in the FiatSymbol enum is accepted as the fiat side of a pair. Whether a given fiat code returns live quotes depends on the country and the service providers that serve it.
| Code | Currency |
|---|
USD | US Dollar |
EUR | Euro |
GBP | British Pound |
JPY | Japanese Yen |
CNY | Chinese Yuan |
CAD | Canadian Dollar |
AUD | Australian Dollar |
CHF | Swiss Franc |
INR | Indian Rupee |
BRL | Brazilian Real |
KRW | South Korean Won |
MXN | Mexican Peso |
SEK | Swedish Krona |
NOK | Norwegian Krone |
DKK | Danish Krone |
SGD | Singapore Dollar |
HKD | Hong Kong Dollar |
NZD | New Zealand Dollar |
ZAR | South African Rand |
PLN | Polish Zloty |
CZK | Czech Koruna |
Crypto — rampable today
Each crypto asset is identified by the pair (symbol, chain_id). The table below lists the assets currently eligible for fiat ramp via Meld. A pair outside this set returns 400 Asset Not Supported for Ramp (RAMP_UNSUPPORTED_ASSET).
Sei mainnet (chain_id: 1329) is the first launch chain. Base (chain_id: 8453) is also supported.
Sei — chain_id: 1329
| Symbol | Asset |
|---|
SEI | Sei (native gas token) |
Base — chain_id: 8453
| Symbol | Asset |
|---|
ETH | Ether (native gas token) |
USDC | USD Coin |
EURC | Euro Coin |
Other chains (Ethereum mainnet, Optimism, Polygon, Arbitrum, Avalanche, BNB Smart Chain) appear in the SupportedChains enum and are returned by GET /v0/assets as catalog entries — but they are not currently rampable through Meld. Quote and session calls against those chains return 400 Asset Not Supported for Ramp. Coverage expands as service providers extend their support.
Crypto — catalog only (not yet rampable)
These assets are present in the Sumvin catalog (visible on GET /v0/assets, holdable in a Sumvin wallet) but cannot currently be bought or sold through the ramp endpoints. Quote calls return RAMP_UNSUPPORTED_ASSET.
Sei — chain_id: 1329
| Symbol | Asset |
|---|
WSEI | Wrapped SEI |
USDC | USD Coin |
USDT | Tether USD |
fastUSD | fastUSD |
Base — chain_id: 8453
| Symbol | Asset |
|---|
WETH | Wrapped Ether — use ETH on chain_id: 8453 to ramp |
cbBTC | Coinbase Wrapped BTC |
AERO | Aerodrome |
LINK | Chainlink Token |
DAI | Dai Stablecoin |
AAVE | Aave Token |
USDT | Tether USD |
MORPHO | Morpho Token |
WETH on Base is not separately rampable — buying or selling Ether on Base uses ETH as the symbol. The wrapped variant exists in the catalog for balance accounting and DeFi interactions.
Country codes
country_code is an ISO 3166-1 alpha-2 value drawn from the SupportedCountry enum. It filters quotes to providers live in that market. Defaults to US. Values outside the enum are rejected at the API boundary with 422 Unprocessable Entity before the request reaches Meld.
Americas
| Code | Country | Code | Country |
|---|
US | United States | BR | Brazil |
CA | Canada | AR | Argentina |
MX | Mexico | CL | Chile |
CO | Colombia | PE | Peru |
Europe
| Code | Country | Code | Country |
|---|
GB | United Kingdom | AT | Austria |
DE | Germany | CH | Switzerland |
FR | France | SE | Sweden |
IT | Italy | NO | Norway |
ES | Spain | DK | Denmark |
NL | Netherlands | FI | Finland |
BE | Belgium | PL | Poland |
IE | Ireland | CZ | Czechia |
PT | Portugal | GR | Greece |
APAC
| Code | Country | Code | Country |
|---|
SG | Singapore | IN | India |
HK | Hong Kong | TH | Thailand |
JP | Japan | PH | Philippines |
KR | South Korea | MY | Malaysia |
AU | Australia | ID | Indonesia |
NZ | New Zealand | | |
MENA + Africa
| Code | Country |
|---|
AE | United Arab Emirates |
SA | Saudi Arabia |
IL | Israel |
TR | Turkey |
ZA | South Africa |
NG | Nigeria |
A format-valid country can still return an empty quotes array if no service provider offers that pair in that market — treat GET /v0/ramp/quotes as the source of truth for live coverage.
Payment method types
payment_method_type is an enum drawn from MeldPaymentMethod. Values outside the enum are rejected at the API boundary with 422 Unprocessable Entity.
Meld distinguishes broad types (categories) from subtypes (specific rails). Both are accepted in the same field. Pass a type to receive quotes across all of its subtypes; pass a subtype to narrow to that single rail. Omit the field to let the provider rank the full set.
Types
| Value | Description |
|---|
CARD | Any card payment. Includes CREDIT_DEBIT_CARD, VISA, MASTERCARD. |
BANK_TRANSFER | Bank transfer rails (regional and global). |
LOCAL | Local rails specific to the user’s country (e.g. PIX in BR). |
MOBILE_WALLET | Mobile wallets. Includes APPLE_PAY, GOOGLE_PAY, SAMSUNG_PAY. |
ACH | US Automated Clearing House. |
SEPA | Single Euro Payments Area. |
Subtypes
| Value | Type | Coverage |
|---|
CREDIT_DEBIT_CARD | CARD | Global |
VISA | CARD | Global |
MASTERCARD | CARD | Global |
APPLE_PAY | MOBILE_WALLET | iOS device, supported markets |
GOOGLE_PAY | MOBILE_WALLET | Android device, supported markets |
SAMSUNG_PAY | MOBILE_WALLET | Samsung device, supported markets |
BACS | BANK_TRANSFER | GB |
LOCAL_BANK_TRANSFER | BANK_TRANSFER | Country-specific |
PIX | LOCAL | BR |
Direction guidance
- Buys —
CREDIT_DEBIT_CARD, APPLE_PAY, GOOGLE_PAY, ACH, SEPA, BANK_TRANSFER are most commonly available.
- Sells / off-ramp —
ACH, SEPA, BANK_TRANSFER, LOCAL_BANK_TRANSFER. Card rails generally do not support payouts.
Error reference
Errors follow RFC 7807 Problem Details with a Sumvin error_code field.
| Error | Status | When it fires |
|---|
Invalid Asset Pair (RAMP_INVALID_PAIR) | 400 | Both sides of from_asset / to_asset are fiat, or both are crypto. One side must be fiat. |
Unknown Asset (RAMP_UNKNOWN_ASSET) | 400 | The crypto symbol does not exist in the Sumvin catalog for the supplied chain_id. Check the asset list at GET /v0/assets. |
Asset Not Supported for Ramp (RAMP_UNSUPPORTED_ASSET) | 400 | The crypto pair exists in the catalog but no service provider offers a fiat ramp for it today. |
KYC Required for Ramp (RAMP_KYC_REQUIRED) | 403 | The user has no verified KYC. Route them through KYC and retry. |
Ramp Transaction Not Found (RAMP_TRANSACTION_NOT_FOUND) | 404 | GET /v0/ramp/transactions/{transaction_id} referenced an id that does not exist or belongs to another user. |
Ramp Provider Error (RAMP_PROVIDER_ERROR) | 502 | The upstream provider rejected the quote or session. Re-quote, try a different service_provider, or retry after a short backoff. |
Validation behaviour
- Enum / type failure (e.g. unknown country code, invalid payment method) →
422 Unprocessable Entity with the offending field in the validation detail. The request is rejected at the API boundary and never reaches Meld.
- Pair shape failure (both fiat, both crypto, missing crypto leg) →
400 Invalid Asset Pair.
- Crypto pair not in catalog →
400 Unknown Asset.
- Crypto pair in catalog but no Meld coverage →
400 Asset Not Supported for Ramp.
- All inputs valid but no provider serves the pair for the country →
200 OK with an empty quotes array on GET /v0/ramp/quotes. Re-quote with a different combination.
- Upstream provider rejects →
502 Ramp Provider Error.