Skip to main content
To pay out stablecoins via Pix with Lumx, you register the recipient’s Pix key as a destination, then call POST /transactions/off-ramp with USDC or USDT as the source. Lumx debits the customer’s wallet, converts to BRL and sends the Pix payment to the key. The customer’s BRL account is in its own name, so the recipient sees the customer as the payer. You follow each payout with offramp.* webhooks until offramp.success. Pix runs 24/7/365 with no cut-off, so a payout does not wait for a banking day.

What you need

  • An API key from the Dashboard. The examples use the sandbox base URL.
  • An APPROVED customer. Wallets are enabled only after approval.
  • USDC or USDT in the customer’s wallet. In sandbox, run an on-ramp first: it completes on its own and credits the stablecoin to the wallet, and you can pay out from that balance.
Stablecoin and network pairs that convert to BRL:

1. Create the customer

The customer is the payer. For your own treasury it is your business, and for a platform it is each end user. Send a POST request to /customers.
Request
The customer starts in NOT_STARTED and has to reach APPROVED through KYC or KYB. Subscribe to customer.approved to know when it does. Create a customer covers the full flow.

2. Register the Pix destination

A destination holds the recipient’s Pix key and the holder’s details. Send a POST request to /destinations.
Request
The response returns the destination id, which you use as destinationId on the payout. Lumx verifies each holder. Check holder.verification.status on the response or subscribe to destinations.approved and destinations.final_rejection. For SELF destinations, holder.type and holder.taxId must match the customer. Relationship values are listed in Destinations. An off-ramp to a destination that is not APPROVED fails with INVALID_PAYMENT_DESTINATION.

3. Quote the payout (optional)

Without a quote, the off-ramp converts at a floating rate. To show the recipient amount up front, request a locked quote with POST /exchange-rates (type LOCKED, rail PIX, sourceCurrency USDC, targetCurrency BRL) and pass its id as exchangeRateId in step 4. The locked quote guide has the request, the lock durations and what happens on expiry.

4. Create the off-ramp

Send a POST request to /transactions/off-ramp.
Request
Response (202)
Lumx does not deduct a fee from the amount that reaches the recipient. Only the recipient’s bank can charge them.

5. Track it until it settles

An off-ramp moves through these statuses: TRANSFERRING_STABLECOIN → TRADING → TRANSFERRING_FIAT → SUCCESS If it cannot complete, it ends in FAILED. Each status change sends a webhook to the endpoint you set up under Developers > Webhooks in the Dashboard.
offramp.success (excerpt)
Verify the signature on every request using the webhook-id, webhook-timestamp and webhook-signature headers, and deduplicate on webhook-id. If your endpoint does not return a 2xx, Lumx retries with exponential backoff. If a webhook is missed, GET /transactions/{id} returns the current state.

Timing and limits

  • Pix settlement. Instant, 24/7/365, with no cut-off. These are processing targets, not guarantees. See Payment rail cut-off times.
  • Holds. A transaction flagged by compliance monitoring is held for an RFI. Large transactions can get an extra risk review, which typically adds up to two business hours.
  • Completion. Lumx treats the off-ramp as complete once the funds leave its banking partner. The recipient’s bank can still hold them for its own review.
  • Limits. Off-ramps count only against offramp limits, per transaction, per day and per month, counted in the USD equivalent of the payout. The minimum per transaction is the equivalent of USD 40 today, and it may change. Read the remaining headroom with GET /customers/{id}?includeTransactionLimits=true. See Transaction limits.

Common errors

Match on code, not on message. See Errors for the full catalog.

Locked FX quote guide

Fix the USDC to BRL rate before you pay out.

Destinations

Holder relationships and payout targets.

Webhooks

Events, signatures and retries.

Coverage

Supported rails, networks and stablecoins.