Skip to content

Batches ​

Batches ​

POST /api/v1/batches requires payouts:write and a body containing reference and a payouts list of 1 to 500 payout request objects. Each item has its own unique vendor reference. The batch reference is the batch idempotency key. An identical replay returns the existing batch; changed details conflict.

Validation and reservation are atomic: one invalid row or insufficient prefund rejects the whole request with nothing newly reserved. A successful response is 202 with the batch and items. This confirms queueing, not provider acceptance or payment. Provider outcomes are independent, so a batch can partially succeed. Read item statuses through GET /api/v1/batches/{reference} or the payout lookup. The total_amount and total_fee remain the original batch totals.

Batch status is processing, completed, completed_with_failures, needs_review or cancelled. completed means every item is paid; completed_with_failures means all items are paid, failed or cancelled, with at least one failure or cancellation. A review or reversal can leave the batch in needs_review. Use each item's status for customer accounting.

Request example ​

json
{
    "reference": "batch-2026-001",
    "payouts": [
        {
            "reference": "WD-VOUCHER-000123",
            "amount": "100.00",
            "currency": "ZAR",
            "method": "voucher_1voucher",
            "recipient": {
                "first_name": "Alex",
                "surname": "Example",
                "phone": "27821234567",
                "id_type": "Passport",
                "id_number": "EXAMPLE123",
                "country_of_issue": "ZW",
                "nationality": "ZW"
            },
            "metadata": {
                "withdrawal_id": "123"
            }
        }
    ]
}

Requires payouts:write. Each item carries its own unique vendor reference. Replaying an identical batch reference returns the existing batch; changed details produce REFERENCE_CONFLICT.

GET /api/v1/batches/{reference} ​

Requires payouts:read. Returns the batch and its items. Poll individual item statuses; only paid completes a withdrawal.

Download the dashboard CSV template. The API accepts JSON.

BatchRequest fields ​

FieldTypeRequiredDetails
referencestringYesPattern: ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,99}$
payoutsarrayYesMinimum items: 1; Maximum items: 500

Batch fields ​

FieldTypeRequiredDetails
idstringYes
referencestringYes
statusstringYesprocessing, completed, completed_with_failures, needs_review, cancelled
total_amountstringYesPattern: ^(0|[1-9][0-9]*)\.[0-9]{2}$
total_feestringYesPattern: ^(0|[1-9][0-9]*)\.[0-9]{2}$
item_countintegerYes
payoutsarrayYes
created_atstringYesFormat: date-time
currencystringYesZAR