Skip to main content
Build a P2P remittance product where individuals send money to family and friends abroad. Each sender is onboarded as an individual customer who funds their wallet in local currency. To send, you register the recipient’s destination under the sender and trigger a payout. Lumx converts stablecoin to the recipient’s local fiat and delivers it on local rails.

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
See Individual verification for the full onboarding flow.

Step 3: Fund the sender’s wallet

Once the sender’s account is ACTIVE, create an autoconversion rule for it, using the account’s id as accountId. You do this once per sender: the response’s sourceDepositInfo carries the deposit details for their currency (ACH and wire details for USD, a static PIX brCode for BRL, a CLABE and memo for MXN, an IBAN for EUR, a sort code and account number for GBP). Show them in your app, and every deposit the sender makes is converted to stablecoin and credited to their wallet, whatever the amount.
Request
Each deposit must be worth at least 50 USD in the account’s currency. Subscribe to the onramp.success webhook to know the moment the wallet is funded and the sender can confirm the remittance. For the response, the deposit details per currency, and when to create a one-off on-ramp instead, see Global accounts.

Step 4: Register the recipient’s destination

Register a destination for the recipient under the sender. Use holder.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.
Request
Destinations go through verification before they can be used. Subscribe to the 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 its id in the off-ramp request to guarantee the conversion price.
Request
Response
Show the resulting 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 locked exchangeRateId 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.

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.