/ramp prefix.
v1 remains available during migration. Your API key works with both versions, so you can migrate one flow at a time.
Why switch to v2
Available now
- Lower fees. v1 charges 20 bps on a same-currency onramp or offramp, such as MXN to CETES. In v2 the platform fee on a same-currency transfer is 0 bps. Moving out of a stablebond into its own currency pays only that bond’s exit fee (5 bps for CETES), and the volume-based FX fee applies only when you convert between currencies. Every quote and order itemizes its fees, partner fee included. See Fees.
- One way to move money. Quote any asset to any other asset between two payment accounts. Onramps, offramps, swaps and cross-chain transfers all use the same quote and order endpoints, and if we support the route, the quote works. There is no separate swap API.
- Cross-chain transfers. Send a token from a wallet on one supported chain to a wallet on another.
- Payment accounts. Register a bank account or wallet once and use it for any transfer. Each account lists the rails it can use (SPEI, PIX, Stellar, Solana, Base, Polygon, Monad and Avalanche), whether each rail can send or receive, and the amount limits we know of. One EVM address covers every EVM chain we support. You pick the rail per quote, or use the account’s default.
- Faster delivery. v2 orders run on our new execution engine, which starts each step as soon as the previous one confirms.
- Clear funding. Each order carries its own funding instructions: where to pay, our reference for the payment, and a funding deadline. Ask for fresh instructions when a prepared transaction goes stale.
- Safe retries. Creating an order with a
quoteIdyou already used returns the existing order instead of making a second one. - Complete webhooks. Each event carries the full order, payment account, or KYC or KYB status, and one subscription covers your organization and every customer organization.
- Structured errors. Every error uses RFC 9457 problem details with a stable
typeto handle in code. - One set of conventions. Organizations, members, KYC, KYB, assets and statements all use camelCase,
organizationIdin the path and the same paging, so one client handles every endpoint. - Sandbox deposits. Simulate the fiat deposit to test an onramp without sending money.
Coming to v2
These ship in v2 only:- More countries. New fiat rails beyond Mexico, starting with Brazil (BRL) over PIX.
- Third-party payments. Pay out to, or receive from, an account that belongs to someone other than your customer.
- Private accounts. On some fiat providers, a customer can request a bank account in a country where they do not have one, after extra KYC or KYB steps.
What stays the same
Keep using your existing API key, organizations, customers and KYC approvals. Your organization ids carry over: a v1customerId is the v2 organizationId. Your customers do not need to verify again.
These endpoints keep their paths and behavior:
- Authentication:
POST /auth/tokenand/auth/launch - The public
/lookupendpoints
1. Read the v2 conventions
v2 uses camelCase keys and camelCase enum values (debitCard, orderUpdated), decimal strings for amounts, and pageSize and pageNumber query parameters for lists. See Conventions.
2. Put the organization in the path
Routes that act for one organization start with/organization/{organizationId}. Use the organization ID previously sent as customerId in v1. For your own organization, get the ID from GET /me; for a customer, use that customer’s organization ID. See Organizations in the route.
In the tables below, ... abbreviates /organization/{organizationId}.
3. Use payment accounts
Etherfuse will migrate your existing v1 bank accounts and wallets to v2 payment accounts. Do not re-register them. Use the v2 registration endpoint for new bank accounts and wallets:
A new account starts as
pending. Before quoting, check that the required rail direction (source or destination) is ready. Subscribe to paymentAccountUpdated for status changes.
4. Move organizations, KYC, assets and statements
These endpoints work the same way in v2, with v2 conventions: camelCase enum values (notStarted, personalData), organizationId in place of customerId, problem details errors, and { items } for lists.
What changes in the responses:
- Organizations come back as one shape:
id,displayName,accountType,approvedAt,createdAtandupdatedAt. - KYC and KYB
statususes the webhook values:notStarted,inProgress,submitted,approved,denied. Requirementtypeandstatusare camelCase too (identityDocument,awaitingReview). The KYC response dropswalletPublicKeyandonChainMarked. - Members are named by
memberId: the person’s JWTsub, which v1 calledcustomerIdon members. Members of your own organization are managed in the Etherfuse portal; the v2 member endpoints return403for it. They work for your customer business organizations.
5. Quote with two payment accounts
POST /organization/{organizationId}/quote replaces POST /ramp/quote:
Set
sourceRail and destinationRail to choose rails, or omit them to use the accounts’ defaults. A bank-to-wallet transfer is an onramp, a wallet-to-bank transfer is an offramp, a transfer between wallets on the same chain is a swap, and a transfer of the same token between wallets on different chains is a cross-chain transfer.
The response itemizes fees in fees. Quotes expire after 2 minutes.
6. Create and follow orders
POST /organization/{organizationId}/order accepts quoteId and an optional memo. Remove the v1 fields orderId, bankAccountId, cryptoWalletId, publicKey, direction, feePayer and useAnchor. The order’s id equals the quoteId. Reusing the same quote returns the existing order.
Use fundingInstructions in place of the v1 deposit fields and burnTransaction. Its destination contains a CLABE for SPEI, a BR Code for PIX, or a blockchain address and optional preparedTransaction. For embedded wallets, it references the order’s authorization instead.
Order statuses:
7. Subscribe to v2 webhooks
Existing subscriptions continue sending v1 payloads. Create separate v2 subscriptions withPOST /webhook_subscription, one per event type:
Store the
secret returned when you create the subscription. Decode v2 secrets with URL-safe base64, replacing the standard base64 decoding used for v1. See Verifying webhooks.
Replace v1 WebSocket listeners with webhooks. Use GET .../order/{id} to check an order’s current state.
8. Handle problem details
For v2 errors (application/problem+json), select your error handler using the type field. Use the HTTP status as a fallback for unknown types, and do not parse detail. See Errors. The /auth and /lookup endpoints keep their own error format.
9. Test in sandbox
Run each flow in sandbox before you switch production traffic.POST .../order/{id}/fiat_received simulates the SPEI or PIX deposit for an onramp. Follow the Onramps, Offramps and Swaps guides.