Step 1: Generate your API key
Head over to dashboard.lumx.io. Once logged in, generate a new API key and store it securely. See Authentication for details.Step 2: Onboard the sender
For each sender using your product, create an individual customer. Provision an account in their home currency so they can fund the wallet via a local rail. Senders must accept Lumx’s terms of service (POST /customers/{id}/tos) and complete KYC before they can move funds.
Request
Step 3: Fund the sender’s wallet
Once the sender’s account isACTIVE, create an on-ramp transaction for the exact amount the sender plans to deposit. The response includes the rail-specific payment details: ACH/wire for USD, PIX brCode for BRL, SPEI CLABE for MXN, IBAN for EUR. Show them in your app for the sender to pay; when the deposit matches, Lumx converts the fiat to stablecoin and credits the sender’s wallet.
Request
Each deposit must be matched to an on-ramp transaction created in advance with the exact amount.
onramp.success webhook to know the moment the wallet is funded and the sender can confirm the remittance. For the full deposit flow by rail, see Global accounts. If the sender pays after the on-ramp expires, Lumx refunds them on the same rail. See Late deposits.
Step 4: Register the recipient’s destination
Register a destination for the recipient under the sender. Useholder.relationship of RELATIVE for family or FRIEND for friends. This is how the recipient is categorized for compliance. See Coverage for the full list of supported rails and currencies.
- PIX (BRL)
- SPEI (MXN)
- SEPA (EUR)
- SWIFT (international)
Request
destinations.approved webhook to know when a recipient is ready to receive funds. See Destinations for the full reference.
Step 5: Lock an exchange rate
Senders want to know exactly how much the recipient will receive before confirming the transfer. Fetch a locked exchange rate first and reference itsid in the off-ramp request to guarantee the conversion price.
Request
Response
finalTargetAmount to the sender. If they confirm before expiresAt, the off-ramp will settle at finalExchangeRate. See Exchange Rates.
Step 6: Send the remittance
Create an off-ramp transaction debiting the sender’s wallet. Reference the lockedexchangeRateId and use purpose: "BILLS" (the closest available code for P2P remittances; see Purpose codes).
Request
Response
Step 7: Notify the sender on completion
Each off-ramp follows this lifecycle:TRANSFERRING_STABLECOIN → TRADING → TRANSFERRING_FIAT → SUCCESS
Subscribe to offramp.success and offramp.failed webhooks to push a confirmation back to the sender in your app the moment the recipient receives the funds. See Webhooks.
Related resources
Global accounts
Provision the sender’s funding account.
Exchange Rates
Lock FX rates for predictable payouts.
Destinations
Holder relationships and rail-specific identifiers.
Transactions
Off-ramp lifecycle and purpose codes.