Skip to main content

Reversals API

The Reversals API allows merchants to initiate transaction reversals and monitor their processing status.

Authentication

All Reversal API endpoints require the x-access-token authentication header as described in the Authentication section of this documentation.


Initiate Reversal

Initiates a reversal request for a previously processed payment.

Endpoint

POST /v1/reversals/initiate

Headers

HeaderRequiredDescription
x-access-tokenYesAuthentication token.

Request Body

{
"reversal_reference": "xxxxxxx",
"payment_reference": "xxxxxxx",
"reversal_reason": "Test"
}

Request Parameters

FieldTypeRequiredDescription
reversal_referenceStringYesA unique identifier generated by the merchant for this reversal request. This reference must be unique across all reversal requests.
payment_referenceStringYesThe merchant payment reference used when the original payment was initiated.
reversal_reasonStringYesReason for requesting the reversal.

Success Response

The API accepts the reversal request and begins asynchronous processing.

HTTP Status: 200 OK

{
"status_code": 176,
"status_description": "Reversal request accepted",
"reversal_reference": "e18f2c3e-3ead-4200-b81c-87dde8bbd2b2",
"reversal_status": "pending",
"message": "The reversal request has been accepted and is being processed."
}

Response Fields

FieldDescription
status_codeInternal response code.
status_descriptionDescription of the response.
reversal_referenceMerchant reversal reference supplied during initiation.
reversal_statusCurrent status of the reversal. Initially returned as pending.
messageAdditional information about the request.

Error Response

If the reversal request cannot be accepted, an error response is returned.

{
"status_code": 172,
"status_description": "Validation Failed",
"message": "Transaction Already Reversed",
"reference": "e4c26428-3682-4535-8105-fee6fca4eadd"
}

Common Validation Errors

MessageDescription
Transaction Already ReversedThe payment has already been successfully reversed.
Invalid Payment ReferenceThe supplied payment reference could not be found.
Duplicate Reversal ReferenceThe supplied reversal reference has already been used.
Transaction Not Eligible for ReversalThe payment cannot be reversed based on its current status or business rules.

Query Reversal Status

Retrieves the latest processing status of a reversal request.

Endpoint

GET /v1/reversals/{reversal_reference}/status

Headers

HeaderRequiredDescription
x-access-tokenYesAuthentication token.

Path Parameters

ParameterDescription
reversal_referenceThe unique reversal reference supplied during reversal initiation.

Successful Response

{
"reversal_reference": "e18f2c3e-3ead-4200-b81c-87dde8bbd2b2",
"reversal_status": "successful",
"reversal_amount": "1000.00",
"currency_code": "KES",
"reversal_date": "2026-06-30T20:36:48.496Z",
"receiver_narration": "successful"
}

Response Fields

FieldDescription
reversal_referenceMerchant reversal reference.
reversal_statusCurrent reversal status.
reversal_amountAmount successfully reversed.
currency_codeCurrency of the reversal.
reversal_dateDate and time when the reversal was completed.
receiver_narrationProcessing result or narration associated with the reversal.

Reversal Callback

If a callback URL has been configured for your merchant account, the platform will send an asynchronous notification once the reversal processing has completed.

The callback payload is identical to the response returned by the Status Query endpoint.

Callback Payload

{
"reversal_reference": "e18f2c3e-3ead-4200-b81c-87dde8bbd2b2",
"reversal_status": "successful",
"reversal_amount": "1000.00",
"currency_code": "KES",
"reversal_date": "2026-06-30T20:36:48.496Z",
"receiver_narration": "successful"
}

Reversal Status Values

StatusDescription
pendingThe reversal request has been accepted and is awaiting processing.
processingThe reversal is currently being processed.
successfulThe reversal completed successfully.
failedThe reversal could not be completed.

Reversal Flow

Merchant

│ POST /v1/reversals/initiate

API

│ Request Accepted

Status = pending

│ Background Processing

Status = successful / failed

├── Callback (if configured)

└── Available via
GET /v1/reversals/{reversal_reference}/status