- Onramp: the user sends MXN by SPEI transfer to their own CLABE →
MEXearrives in the smart wallet automatically. No quote or order call is needed. - Offramp:
MEXe→ MXN paid out to the user’s registered bank account, via a quote and on-device signatures.
Paying someone else’s Mexican bank account, from a USD or any other wallet, is a different rail: LATAM bank payouts. It needs no Mexico KYC on the sender and does not touch the MXN wallet.
Onramp — just deposit
There is no onramp quote. Read the user’s deposit CLABE and show it to them:status: "active" accounts can receive deposits. The unfiltered GET …/bank-accounts/deposit-accounts returns the same account under its mexicanAccounts group.
When the user sends a SPEI transfer to that CLABE from any bank, an onramp order is created automatically and MEXe is credited to their smart wallet — no further API calls. Track it via order tracking or the wallet balance.
Offramp
1. Create a quote
The response locks in pricing until
expiresAt and already carries the orderId:
2. Sign the approve request (when present)
signatureRequest is the first (approve) operation, granting the provider allowance to burn the user’s MEXe. Sign and submit it on-device via bmoni_embedded_sdk, the same pattern as other smart-wallet mutations. It is absent when the wallet already has sufficient allowance — skip straight to polling the order.
3. Poll the order for the burn request
burnSignatureRequest — the second on-device signature authorizing the token burn. Sign and submit it the same way. This step is required whether or not an approve signatureRequest was returned in step 1.
After the burn settles, the MXN payout goes to the user’s registered bank account.
4. Poll for settlement
workflowId — the offramp is one workflow
end to end. isTerminal goes true once the fiat has been paid out or the
offramp has failed; see the signature pattern
for the response shape. The order (below) carries the provider’s view of the
same operation; poll either or both.
Track an order
MXNe → MEXe migration
Users who onboarded before the MXN wallet moved from the CETES-backedMXNe token to MEXe may still hold a legacy MXNe balance. Migrate it 1:1 — no fee, no reserve.
1. Check eligibility
eligible is true. mxneBalance reads "0" when there is nothing to migrate.
2. Prepare the migration
approve + executeQuote) that swaps the wallet’s full MXNe balance into MEXe:
400 if the wallet has no MXNe balance — call mxne-migration/status first and only prepare when eligible is true.
3. Sign and submit
SignsignatureRequest on-device via bmoni_embedded_sdk and submit it the same way as any other smart-wallet mutation:
isTerminal is true, then refresh the wallet balance — the MXNe
is gone and the same amount of MEXe is in its place.
