Skip to content

Error codes ​

Envelope ​

Success: { "success": true, "data": { ... } }. Methods use an array in data; a successful SMS resend uses null.

Failure: { "success": false, "code": "VALIDATION_ERROR", "message": "<fixed message>", "errors": { "recipient.id_number": ["..."] } }.

message is fixed per code and may be shown to end users. Branch on code. errors is an object, empty when there are no field errors. Batch validation keys include the item index, for example payouts.0.recipient.phone.

Error codes ​

CodeHTTPMeaningRe-submission behaviour
VALIDATION_ERROR422Invalid request fieldsCorrect the reported fields
METHOD_UNAVAILABLE422Method disabled, unsupported or unavailable for this operationCheck /methods and the existing payout before changing method
AMOUNT_OUT_OF_RANGE422Outside method limits or vendor daily capCheck limits and the requested amount
AMOUNT_INCREMENT_INVALID422Cash amount is not a multiple of R10Correct the amount with the customer
RECIPIENT_REJECTED422Recipient data rejectedCorrect the recipient data
PROVIDER_REJECTED422Definitive rejection; gateway reservation releasedTerminal for the stored payout; reconcile before a separate attempt
REFERENCE_CONFLICT409Reference reused with different detailsRetrieve the original; use a new reference only for a separate payment
INSUFFICIENT_BALANCE409Insufficient gateway prefund for amount plus feeTop up, then retry the same request
PENDING_CONFIRMATION409Outcome unconfirmed, or requested operation needs a paid payoutKeep the hold and poll the original reference
PROVIDER_DOWN503Execution paused or submission preflight unavailableRead the original reference; retry the same body and reference
UNAUTHENTICATED / FORBIDDEN401 / 403Invalid token or inactive vendor / insufficient scope or dispatch permissionCheck credentials and vendor access
NOT_FOUND404Unknown reference for this vendorVerify the vendor and original reference
RATE_LIMITED429Request throttle or SMS resend limitBack off; SMS also has a lifetime attempt cap

An error response alone does not prove that no payout record or reservation exists. PROVIDER_DOWN can leave an unattempted payout reserved for later processing. A connection failure can hide a successful submission. Read the original reference, preserve the customer hold while unresolved, and never create a replacement payment just to bypass an error. If a record is absent, retry with the same body and reference after resolving the reported problem.

The fixed messages are listed below.

Fixed messages ​

Use code in application logic. The message below is fixed for that code and may be shown to the end user. Validation details appear in errors.

CodeHTTPMessage
VALIDATION_ERROR422Some payout details are missing or invalid.
METHOD_UNAVAILABLE422This payout method is not available right now.
AMOUNT_OUT_OF_RANGE422The amount is outside the limits for this payout method.
AMOUNT_INCREMENT_INVALID422Cash payouts must be in multiples of R10 — ATMs cannot pay out other amounts.
RECIPIENT_REJECTED422The recipient details were not accepted. Check the ID number and phone number.
REFERENCE_CONFLICT409This payout reference has already been used with different details.
INSUFFICIENT_BALANCE409Payouts are temporarily unavailable. Please try again later.
PENDING_CONFIRMATION409Your payout is being processed. You will be notified once it is complete.
PROVIDER_REJECTED422The payout was declined by the payment provider.
PROVIDER_DOWN503We could not process the payout right now. Please try again in a moment.
UNAUTHENTICATED401Payouts are not available for this account.
FORBIDDEN403Payouts are not available for this account.
NOT_FOUND404Payout not found.
RATE_LIMITED429Too many requests. Please wait a moment and try again.