Browse docs
API reference

Payouts

Send money from your StablePay balance to Cash App and PayPal recipients. Payouts are asynchronous: create one, then wait for the signed notification.

Create a payout

POST/api/v1/payouts/create
FieldTypeRequiredDescription
payment_methodstringYesCASH_APP or PAYPAL.
merchant_payout_nostringYesYour payout number. Unique; used for idempotency.
trans_amount.currencystringYesCurrency code.
trans_amount.valuestringYesAmount the recipient receives, as a decimal string.
payee.account_idstringUsually yesRecipient account — the value matching account_type.
payee.account_typestringUsually yesEMAIL, MOBILE, CASHTAG, USERID, etc.
payee.full_namestringSome methodsRecipient full name. Required for some payout methods.
payee.emailstringNoRecipient email.
payee.mobilestringNoRecipient mobile number.
payee.countrystringNo2-letter country code.
payee.payee_idstringNoWallet-side user ID.
memostringNoMemo shown to the recipient where supported.
notify_urlstringYesURL that receives the signed payout notification once the payout reaches a final result.
metadatastringNoOpaque passthrough.
client_ipstringNoClient IP.
{
  "payment_method": "CASH_APP",
  "merchant_payout_no": "MP202606240001",
  "trans_amount": {
    "currency": "USD",
    "value": "88.50"
  },
  "payee": {
    "account_id": "$cashdemo",
    "account_type": "CASHTAG",
    "full_name": "John Doe",
    "country": "US"
  },
  "memo": "June commission",
  "notify_url": "https://merchant.example.com/callback/payout",
  "metadata": "batch=20260624"
}
FieldTypeDescription
payment_methodstringPayment method.
payout_nostringStablePay payout number.
merchant_payout_nostringYour payout number.
statusstringPENDING, PROCESSING, SUCCESS or FAILED.
trans_amountobjectPayout amount.
feeobjectFee charged for this payout.
total_debitobjectTotal debited from your balance (amount + fee).
psp_payout_nostringStablePay processing reference.
next_actionstringWAIT_NOTIFY, SUCCESS or FAILED.
created_atstringCreation time.
200 · response
{
  "code": 0,
  "msg": "success",
  "data": {
    "payment_method": "CASH_APP",
    "payout_no": "P202606240001",
    "merchant_payout_no": "MP202606240001",
    "status": "PENDING",
    "trans_amount": {
      "currency": "USD",
      "value": "88.50"
    },
    "fee": {
      "currency": "USD",
      "value": "1.50"
    },
    "total_debit": {
      "currency": "USD",
      "value": "90.00"
    },
    "psp_payout_no": "SPR_P_001",
    "next_action": "WAIT_NOTIFY",
    "created_at": "2026-06-24T12:00:00Z"
  }
}
  • next_action=WAIT_NOTIFY is the normal case: the final result arrives as a PAYOUT event at notify_url.
  • total_debit — amount plus fee — is what leaves your balance.
  • code=5004 means insufficient spendable balance; code=5008 means the amount is outside the current limits. Run a precheck first to catch both.

Query a payout

POST/api/v1/payouts/query

Provide exactly one identifier.

FieldTypeRequiredDescription
payout_nostringOne of twoStablePay payout number.
merchant_payout_nostringOne of twoYour payout number.
{
  "merchant_payout_no": "MP202606240001"
}
FieldTypeDescription
payment_methodstringPayment method.
payout_nostringStablePay payout number.
merchant_payout_nostringYour payout number.
statusstringPayout status.
status_reasonstringFailure or cancellation reason, sanitized for merchants.
trans_amountobjectPayout amount.
feeobjectFee.
total_debitobjectTotal debit.
psp_payout_nostringStablePay processing reference.
payeeobjectSnapshot of the recipient as submitted.
metadatastringYour passthrough value.
paid_atstringCompletion time.
created_atstringCreation time.
updated_atstringLast update time.
200 · response
{
  "code": 0,
  "msg": "success",
  "data": {
    "payment_method": "CASH_APP",
    "payout_no": "P202606240001",
    "merchant_payout_no": "MP202606240001",
    "status": "SUCCESS",
    "status_reason": "",
    "trans_amount": {
      "currency": "USD",
      "value": "88.50"
    },
    "fee": {
      "currency": "USD",
      "value": "1.50"
    },
    "total_debit": {
      "currency": "USD",
      "value": "90.00"
    },
    "psp_payout_no": "SPR_P_001",
    "payee": {
      "account_id": "$cashdemo",
      "account_type": "CASHTAG",
      "full_name": "John Doe",
      "country": "US"
    },
    "metadata": "batch=20260624",
    "paid_at": "2026-06-24T12:00:08Z",
    "created_at": "2026-06-24T12:00:00Z",
    "updated_at": "2026-06-24T12:00:08Z"
  }
}

Cancel a payout

POST/api/v1/payouts/cancel
Cancellation is rarely available
Most integrations can ignore this endpoint. Use it only where StablePay has explicitly confirmed that cancellation is supported for your payout method.
FieldTypeRequiredDescription
payout_nostringOne of twoStablePay payout number.
merchant_payout_nostringOne of twoYour payout number.
reasonstringNoCancellation reason.
{
  "merchant_payout_no": "MP202606240001",
  "reason": "manual cancel"
}
FieldTypeDescription
payout_nostringStablePay payout number.
merchant_payout_nostringYour payout number.
statusstringExpected to be CANCELED.
200 · response
{
  "code": 0,
  "msg": "success",
  "data": {
    "payout_no": "P202606240001",
    "merchant_payout_no": "MP202606240001",
    "status": "CANCELED"
  }
}

Balance precheck

POST/api/v1/payouts/precheck

Check your balances for a payout method and, optionally, estimate the fee and total debit for a specific amount — without creating anything.

FieldTypeRequiredDescription
payment_methodstringYesCASH_APP or PAYPAL.
trans_amountobjectNoIf provided, the response includes estimated_fee and estimated_debit. Returns 5008 if the amount is outside the current limits.
{
  "payment_method": "PAYPAL",
  "trans_amount": {
    "currency": "USD",
    "value": "88.50"
  }
}
FieldTypeDescription
payment_methodstringPayment method.
currencystringBalance currency.
available_balanceobjectAvailable balance.
unsettled_balanceobjectFunds not yet settled.
frozen_balanceobjectFunds on hold.
spendable_balanceobjectBalance eligible for payouts.
estimated_feeobjectOnly when trans_amount was provided.
estimated_debitobjectOnly when trans_amount was provided.
can_payoutboolWhether a payout can be created right now.
200 · response
{
  "code": 0,
  "msg": "success",
  "data": {
    "payment_method": "PAYPAL",
    "currency": "USD",
    "available_balance": {
      "currency": "USD",
      "value": "1000.00"
    },
    "unsettled_balance": {
      "currency": "USD",
      "value": "200.00"
    },
    "frozen_balance": {
      "currency": "USD",
      "value": "50.00"
    },
    "spendable_balance": {
      "currency": "USD",
      "value": "1200.00"
    },
    "estimated_fee": {
      "currency": "USD",
      "value": "1.50"
    },
    "estimated_debit": {
      "currency": "USD",
      "value": "90.00"
    },
    "can_payout": true
  }
}

Read can_payout together with spendable_balance and estimated_debit before calling create. Error codes are listed under Responses & errors.