SettlraSettlra/Docs
DashboardAPI Playground

Payouts API

The Payouts API handles the core transfer flow: creating single payouts, checking their status, listing history, and submitting bulk batches. Every payout requires a valid (unexpired) quote.

POST/v1/payoutsCreate a payout
GET/v1/payouts/:idGet payout status
GET/v1/payoutsList payouts
POST/v1/payouts/bulkCreate a bulk batch
GET/v1/payouts/bulk/:batch_idGet batch status

Create a payout

POST/v1/payouts

Creates a payout and returns a USDC deposit address. In production, send the exact USDC amount to this address to trigger the transfer. In sandbox, the deposit is simulated automatically.

Request body

FieldTypeRequiredDescription
quote_idstringYesID of an ACTIVE quote.
recipient_phonestringYesRecipient mobile number in E.164 format (e.g. +256700123456).
recipient_namestringNoRecipient's full name. Used for provider validation where required.
networkstringYesMobile money network. Must match the quote's target currency. See Supported Networks.
idempotency_keystringYesUnique key for deduplication. Max 128 chars.

Response

FieldTypeDescription
payout_idstringUnique payout identifier.
statusstringInitial status: AWAITING_FUNDS.
deposit_addressstringUSDC Ethereum address to send funds to.
source_amount_usdcnumberExact USDC amount to send.
target_amount_fiatnumberLocal currency amount recipient receives.
target_currencystringRecipient's currency.
exchange_ratenumberLocked rate from the quote.
recipient_phonestringDestination phone.
networkstringMobile money network.
messagestringHuman-readable instruction.
created_atstringISO 8601 timestamp.
bash
"color:#ff7b72">curl "color:#79c0ff">-X POST https://api-sandbox.settlra.com/v1/payouts \
  "color:#79c0ff">-H "Authorization: Bearer sk_sandbox_your_key" \
  "color:#79c0ff">-H "Content-Type: application/json" \
  "color:#79c0ff">-d '{
    "quote_id": "q_01j3ab4cd5ef6gh7ij8kl9mn0p",
    "recipient_phone": "+256700123456",
    "recipient_name": "Jane Nakato",
    "network": "MTN_UG",
    "idempotency_key": "payout-abc123"
  }'
json
{
  "payout_id": "pyt_01j3pq8rs9tu0vw1xy2za3bc4d",
  "status": "AWAITING_FUNDS",
  "deposit_address": "0xA1B2C3D4E5F60718293A4B5C6D7E8F90A1B2C3D4",
  "source_amount_usdc": 500,
  "target_amount_fiat": 1871250,
  "target_currency": "UGX",
  "exchange_rate": 3742.5,
  "recipient_phone": "+256700123456",
  "network": "MTN_UG",
  "created_at": "2024-07-01T12:00:30.000Z",
  "message": "Send exactly 500.000000 USDC to 0xA1B2C3... to initiate this payout."
}

Payout status values

StatusDescription
CREATEDPayout record created, awaiting on-chain USDC deposit.
AWAITING_FUNDSDeposit address issued. Monitoring blockchain for incoming USDC.
STABLECOIN_RECEIVEDUSDC confirmed on-chain. Compliance screening in progress.
COMPLIANCE_HOLDAML or sanctions flag raised. Manual review required.
PAYOUT_INITIATEDMobile money transfer sent to provider.
PAYOUT_CONFIRMEDProvider accepted the transfer.
SETTLEDMobile money delivered to recipient. Final state.
FAILEDUnrecoverable failure after retries. Final state.
REVERSEDFunds returned to sender (e.g. compliance rejection). Final state.
MANUAL_REVIEWOperations team intervention required.

Get payout status

GET/v1/payouts/:id
bash
"color:#ff7b72">curl https://api-sandbox.settlra.com/v1/payouts/pyt_01j3pq8rs9tu0vw1xy2za3bc4d \
  "color:#79c0ff">-H "Authorization: Bearer sk_sandbox_your_key"

List payouts

GET/v1/payouts

Query parameters

ParameterTypeDefaultDescription
statusstringFilter by payout status.
limitnumber20Number of results (1–100).
offsetnumber0Pagination offset.
bash
"color:#ff7b72">curl "https://api-sandbox.settlra.com/v1/payouts?status=SETTLED&limit=10" \
  "color:#79c0ff">-H "Authorization: Bearer sk_sandbox_your_key"

Create a bulk payout batch

POST/v1/payouts/bulk

Submit up to 100 payouts in a single batch. Each item in the array must have a pre-created quote. Returns a batch_id to track progress.

Request body

json
{
  "payouts": [
    {
      "quote_id": "q_01j3ab4cd5ef6gh7ij8kl9mn0p",
      "recipient_phone": "+256700123456",
      "recipient_name": "Jane Nakato",
      "network": "MTN_UG",
      "idempotency_key": "bulk-batch-001-item-001"
    },
    {
      "quote_id": "q_02j4bc5de6fg7hi8jk9lm0no1p",
      "recipient_phone": "+256752987654",
      "recipient_name": "Joseph Ochieng",
      "network": "AIRTEL_UG",
      "idempotency_key": "bulk-batch-001-item-002"
    }
  ]
}

Response

json
{
  "batch_id": "batch_01j3rs4tu5vw6xy7za8bc9de0f",
  "total_count": 2,
  "status": "PROCESSING",
  "created_at": "2024-07-01T12:00:00.000Z"
}

Get batch status

GET/v1/payouts/bulk/:batch_id
bash
"color:#ff7b72">curl https://api-sandbox.settlra.com/v1/payouts/bulk/batch_01j3rs4tu5vw6xy7za8bc9de0f \
  "color:#79c0ff">-H "Authorization: Bearer sk_sandbox_your_key"
json
{
  "batch_id": "batch_01j3rs4tu5vw6xy7za8bc9de0f",
  "status": "PROCESSING",
  "total": 2,
  "completed": 1,
  "failed": 0,
  "pending": 1,
  "total_amount_usdc": 1000,
  "payouts": [
    {
      "payout_id": "pyt_01j3pq8rs9tu0vw1xy2za3bc4d",
      "idempotency_key": "bulk-batch-001-item-001",
      "status": "SETTLED",
      "recipient_phone": "+256700123456"
    },
    {
      "payout_id": "pyt_02j4rs9tu0vw1xy2za3bc4de5f",
      "idempotency_key": "bulk-batch-001-item-002",
      "status": "PAYOUT_INITIATED",
      "recipient_phone": "+256752987654"
    }
  ],
  "created_at": "2024-07-01T12:00:00.000Z",
  "updated_at": "2024-07-01T12:04:12.000Z"
}