Skip to content

Create a beneficiary​

POST
/v2/payments/bulk-withdrawals/beneficiaries

Requires DISBURSEMENTS_CREATE, granted by DISBURSEMENTS_WRITE (bundles)

Saves a beneficiary you can pay out to. If an archived beneficiary has the same bank and account number, it's restored with these details and keeps its original ID.

Request Body​

application/json
JSON
{
"bank": "FNB",
"accountHolder": "Thandi Nkosi",
"accountNumber": "62845190327",
"branchCode": "250655",
"accountType": "CHEQUE",
"type": "INDIVIDUAL",
"email": "thandi@example.com",
"reference": "SALARY",
"country": "ZA"
}

Responses​

OK

application/json
JSON
{
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"bank": "FNB",
"bankDisplayName": "FNB/RMB",
"accountHolder": "Thandi Nkosi",
"accountNumberMasked": "*******0327",
"accountNumber": "62845190327",
"branchCode": "250655",
"accountType": "CHEQUE",
"email": "thandi@example.com",
"type": "INDIVIDUAL",
"tradingName": null,
"reference": "SALARY",
"country": "ZA",
"createdAt": "2026-09-01T10:12:30.004Z",
"updatedAt": "2026-09-01T10:12:30.004Z",
"lastPaidAt": null,
"deletedAt": null,
"deletedBy": null
}

Samples​

Errors

HTTPErrorWhen
400-113INVALID_JSONThe body isn't valid JSON.
400-11INVALID_REQUESTThe body is empty or a field fails validation; validationErrors lists each failing field.
400BAD_REQUESTA query parameter or field is invalid.
403-16098PAYMENTS_USER_ACCESS_NOT_CONFIGUREDPayments haven't been set up for your business yet.
409CONFLICTAn active beneficiary with this bank and account number already exists; update it instead.
500INTERNAL_ERRORUnexpected error in the payments service.
502-16097EXCHANGE_API_ERRORThe payments service failed to process the request.
502EXCHANGE_API_ERRORThe payments service couldn't complete the request. Try again later.
503-16099PAYMENTS_BACKEND_PROXY_DISABLEDPayments endpoints are temporarily unavailable.

Plus the errors common to all signed endpoints.