Passer au contenu principal
POST
/
v1
/
disbursements
Create a disbursement
curl --request POST \
  --url https://api.sandpay.dev/v1/disbursements \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": 5000,
  "currency": "XOF",
  "country": "CI",
  "msisdn": "+22507123456",
  "application": "my-store",
  "reference": "<string>",
  "order_ref": "<string>",
  "order_url": "<string>",
  "is_url_protected": true,
  "description": "Cashback reward"
}
'
{
  "tx_id": "TX_DB7788AA",
  "amount": 5000,
  "merchant_balance_after": 123,
  "recipient_balance_after": 123,
  "idempotent": true
}

Autorisations

Authorization
string
header
requis

API key in format sp_sk_test_... or sp_sk_live_....

Corps

application/json
amount
integer
requis
Plage requise: x >= 1
Exemple:

5000

currency
string
requis
Required string length: 3 - 4
Exemple:

"XOF"

operator
enum<string>
requis

Mobile Money operator code.

Options disponibles:
mtn,
orange,
moov,
airtel
country
string
requis
Required string length: 2
Exemple:

"CI"

msisdn
string
requis
Pattern: ^\+[1-9][0-9]{6,14}$
Exemple:

"+22507123456"

application
string
requis

Your store's slug (Settings → Stores). Required.

Required string length: 1 - 80
Exemple:

"my-store"

reference
string

Optional idempotency reference. Auto-generated when omitted.

Required string length: 1 - 80
order_ref
string

Optional order id grouping related transactions. Falls back to reference (B126).

Required string length: 1 - 120
order_url
string<uri>

Optional public URL to the order in your app (B126).

Maximum string length: 500
is_url_protected
boolean

Set true when order_url requires a specific app permission to open (B130).

description
string

Optional free-form description (max 200 chars).

Maximum string length: 200
Exemple:

"Cashback reward"

Réponse

Disbursement created (status SUCCESS, INSUFFICIENT_FUNDS, UNKNOWN_MSISDN, or ACCOUNT_BLOCKED).

tx_id
string
requis
Exemple:

"TX_DB7788AA"

type
enum<string>
requis
Options disponibles:
disbursement
status
enum<string>
requis

Final settlement status.

Options disponibles:
SUCCESS,
PIN_INVALID,
INSUFFICIENT_FUNDS,
TIMEOUT,
ACCOUNT_BLOCKED,
USER_CANCELLED,
UNKNOWN_MSISDN,
LIMIT_EXCEEDED,
SERVICE_UNAVAILABLE,
DUPLICATE_REFERENCE,
PENDING
amount
integer
requis
Plage requise: x >= 1
Exemple:

5000

merchant_balance_after
number

Merchant float after the disbursement.

recipient_balance_after
number | null

Recipient SIM balance after the credit, or null.

idempotent
boolean

True when this disbursement already existed (idempotent replay).