Skip to main content
Every payout starts from a ready, funded issued wallet. The destination model depends on who owns the endpoint.

Before you start

Refetch the source wallet. Confirm its current status permits the payout and its available balance covers the intended source amount. Store its response-derived ID as SOURCE_WALLET_ID. You also need a ready payout capability for the current customer and selected destination. Existing Tron wallets can send USDT to another Tron wallet with a stablecoin_transfers quote. The input and output must use the same network and stablecoin. You cannot create new issued wallets on Tron.

1. Prepare the destination

Use a customer-owned external bank account when the customer owns the endpoint. Create it with POST /v3/customers/{customerId}/accounts and these headers:
Request headers
Request body
Read it with GET /v3/customers/{customerId}/accounts/{accountId}. Continue only when its current status permits the payout. Store its acc_ ID as PAYOUT_DESTINATION_ID.

2. Create the payout quote

Use POST /v3/quotes with these headers:
Request headers
Request body
Store data.id as QUOTE_ID and present the returned price and fees.

Choose a bank route

For a crypto-to-fiat payout, you can set the optional institutionId to require an approved bank route for the customer. Omit it to use automatic routing.
Request body with institutionId
  • An explicit institutionId never falls back to another bank. When the selected bank has no ready route for this customer, capability, and destination, POST /v3/quotes returns 422 bank_not_supported_for_customer with the pointer /institutionId.
  • institutionId is only valid on crypto-to-fiat payout quotes. Sending it on a pay-in, card, or stablecoin transfer quote returns 400 validation_error.
  • Quote and transfer reads echo the institutionId of the selected route, including an automatically selected one, when the bank can be identified.

SWIFT payouts

In production, USD SWIFT payouts need a ready SWIFT capability that supports payouts (swift_pooled or swift_named) and are funded by USDC on Ethereum, Base, or Polygon, or by USDT on Ethereum or Polygon. The recipient amount after fees must be at least 100.00 USD. A SWIFT destination needs the bank’s street address in bankAddress, bankCity, bankState, and bankPostalCode. The BIC country must match the bank country. Swipelux takes the beneficiary address from the customer or recipient profile.

Pix payouts

Pix and Pix Safe recipient destinations receive BRL. Quote the payout with the customer’s ready Pix capability (pix_pooled), fund it with USDC, and set out.currency to BRL. USDT cannot fund a BRL payout. A Pix payout cannot carry a developer fee. If the source account has developer fees, set fees.breakdown.developer to {"fixed": "0.00", "bips": 0} in the quote request. Otherwise, POST /v3/quotes returns 400 validation_error. Swipelux prices the quote only after the destination’s bank details are approved. While they are being verified, POST /v3/quotes returns 400 validation_error with a detail saying the destination is still being verified, so request a new quote once verification completes. If the bank details were rejected or the destination’s setup is incomplete, the detail asks you to contact support instead, and new quotes keep failing until support completes the setup. If verification cannot be checked, it returns 503 quote_temporarily_unavailable; retry later.

3. Execute the payout

Create the transfer with POST /v3/transfers. Use one new key for this intended execution:
Request headers
Request body
Store transfer data.id as TRANSFER_ID. A successful create starts the payout; it does not prove delivery.

4. Track delivery

Read GET /v3/transfers/{transferId} after creation and after each event. Use the latest data.state, data.stateDetail, and data.openTaskIds to decide whether to wait, act, or show a terminal outcome. Next, review Quotes and transfers for exact amounts, safe execution recovery, and transfer tasks.