This guide covers the API flow for converting stablecoins to fiat bank deposits using Payouts.Documentation Index
Fetch the complete documentation index at: https://docs.dfns.co/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- A Borderless account with completed KYB verification
- Borderless API key configured in your org settings (see dashboard setup)
- A wallet holding a supported stablecoin
Payouts:Create,Payouts:Read, andPayouts:Writepermissions
Payout lifecycle
Get a quote
: Request payout quoteRequest a quote to see the estimated fiat amount and fees before creating a payout.Quotes are informational. They don’t lock in a rate. The
Request
Response
amount field in the quote response is the net fiat the recipient receives after fees.Create a payout
: Create payoutCreate a payout to start the off-ramp process. This requires Borderless-specific fields: your account ID, payment instructions ID (the destination bank account), and a payment purpose.Use
Request
Response
externalId for idempotency. If you retry with the same externalId, the existing payout is returned instead of creating a duplicate.Payment purposesThe paymentPurpose field must be one of: salary payment, personal remittance, rent payment, property purchase, owned account abroad, advertising expenses, advisory fees, business insurance, construction, delivery fees, education, exports, donation, hotel, loan payment, maintenance expenses, medical expense, office expenses, royalty fees, service charge, shares investment, tax payment, transportation fees, travel, utility bills, other.Wait for action required
After creation, Dfns coordinates with Borderless to obtain a deposit address. When ready, the payout advances to
AwaitingPayoutConfirmation and Dfns fires a payout.action.required webhook. Subscribe to the webhook for real-time notification (recommended for automation)You can also poll (Get payout status) and check for data.executionStatus === "AwaitingPayoutConfirmation".The webhook payload contains the full payout object (same as Get payout) with the depositAddress in data. See the payout.action.required event reference for the full schema.Confirm the payout
: Create payout actionConfirm the payout by echoing back the transfer details. Dfns validates these match the payout data, then submits the on-chain transfer from your wallet.The
Request
transfer.to address must match the depositAddress from the payout data, and the amount must match the payout’s asset amount. This is a deliberate confirmation step. You’re approving that the correct amount goes to the correct address.After confirmation, Dfns handles the rest: submitting the transfer, waiting for on-chain confirmation, and monitoring until Borderless confirms fiat disbursement.Only the user who created the payout can confirm or cancel it.
Cancel a payout
: Create payout action To cancel a payout that hasn’t been confirmed yet:Request
Check payout status
: Get payout status Poll a payout to track its progress:Request
status and the granular data.executionStatus. The top-level status values are:
| Status | Meaning |
|---|---|
Processing | Payout is active, waiting for provider instructions, user confirmation, or settlement |
Completed | Fiat has been disbursed to the bank account |
Failed | Non-recoverable error |
Rejected | Transfer was rejected by a Dfns policy |
Expired | Timed out waiting for confirmation (24h) or transfer submission (4h) |
Canceled | Canceled by the user |
Policies
Payouts create a transfer from your wallet to the provider’s deposit address. If you have policies configured on wallet transfers, the transfer may require approval. The top-levelstatus stays Processing, but data.executionStatus changes to PendingPolicyApproval until the policy is resolved.