Webhooks

Webhooks allow your system to receive real-time updates from our platform when important events happen — such as a payment being completed or a customer funding a reserved account.

You can configure a webhook URL on your dashboard by heading to Settings > Developer > Webhooks and specifying a default endpoint. Once set, we’ll send a POST request to this URL for events triggered on your account.

How It Works

  • When a transaction or event occurs, we send a POST request to your webhook URL with a JSON payload describing the event.
  • Your server should return a 200 OK response to acknowledge receipt.

Testing Webhooks Locally

Use tools like:

To expose your local server to receive webhook requests from our platform.


Event Payloads

Each webhook payload includes a Status, StatusCode, and a nested Data object containing the event-specific information.

Common Fields

FieldDescription
OrderReferenceReference for the payment order
PaymentReferenceUnique reference for the payment
ProductNameType of product being paid for
StatusTransaction status (Successful, Failed, Pending)
PaymentMethodE.g., Card Payment, Pay With Bank Transfer
TotalAmountChargedAmount paid
CurrencyNameUsually NGN
FeeTotal fees applied
CustomerObject with customer details
OrderPaymentsArray of payment records
CardDetailsArray of card metadata (for card payments)

Sample Payloads

  1. Card Payment Collection Webhook
{
    "Data": {
        "OrderReference": "11690084",
        "PaymentReference": "TRNPAY-19123160-65F8-4261-8EA2-E9ADE2D34A4E",
        "ProductName": "Collection",
        "TotalAmountCharged": 25.0000,
        "StatusId": 5,
        "Status": "Successful",
        "PaymentMethod": "Card Payment",
        "PaymentResponseCode": "00",
        "PaymentResponseMessage": "Transaction was completed successfully",
        "Narration": "11690084",
        "Remarks": "Order initiated and created successfully",
        "CurrencyId": 6,
        "CurrencyName": "NGN",
        "Fee": 1.0600,
        "FeeRate": 1.0600,
        "SubsidiaryFee": 1.0600,
        "CustomerFee": 0.0000,
        "DateCreated": "2025-03-25T16:24:12.61",
        "DateUpdated": "2025-03-25T16:24:16.3514292",
        "DatePaymentConfirmed": null,
        "OrderPayments": [
            {
                "OrderId": 527349,
                "OrderPaymentReference": "PGW-PAYREF-BD99FF0C18C74C82123B8A8D4AA7EDA6",
                "PaymentOptionId": 2,
                "PaymentOption": "Card Payment",
                "StatusId": 5,
                "Status": "Successful",
                "ResponseCode": "00",
                "ResponseMessage": "Transaction was completed successfully",
                "OrderPaymentInstrument": null,
                "Remarks": "Order payment initiated",
                "DateCreated": "2025-03-25T16:24:12.7522727",
                "DateUpdated": "2025-03-25T16:24:16.3514971"
            }
        ],
        "Customer": {
            "CustomerId": "[email protected]",
            "FirstName": "FirstName",
            "LastName": "LastName",
            "EmailAddress": "[email protected]",
            "CountryShortName": "NG",
            "CustomerGroup": "Default",
            "CountryId": 1,
            "GlobalStatusId": 2,
            "GlobalStatus": "Active",
            "MobileNumber": "2146059032",
            "IsBlacklisted": false,
            "ReasonBlacklisted": null,
            "DateCreated": "2024-11-26T00:28:43.05",
            "DateUpdated": null
        },
        "CardDetails": [
            {
                "OrderPaymentId": 516443,
                "Status": true,
                "Country": "NG",
                "CardToken": "CardToken",
                "CardExpiryMonth": "01",
                "CardExpiryYear": "99",
                "CardType": "VISA",
                "CardIssuer": "VISA",
                "CardFirstSixDigits": "123456",
                "CardLastFourDigits": "7890",
                "DateCreated": "2025-03-25T16:24:16.3574835",
                "AppEnvironmentId": 2
            }
        ],
        "PaymentLink": null
    },
    "Status": "success",
    "StatusCode": "00",
    "Message": "Order details fetched successfully"
}
  1. Bank Transfer Collection Webhook
{
  "data": {
    "orderReference": "TEST_REF",
    "paymentReference": "TRNPAY-89BF0BF3-1F0B-23D7-B45D-F3AF5367CBF8",
    "productName": "Collection",
    "totalAmountCharged": 50,
    "orderAmount": 50,
    "statusId": 5,
    "status": "Successful",
    "paymentMethod": "Pay With Bank Transfer",
    "paymentResponseCode": "00",
    "paymentResponseMessage": "Bank transfer received successfully",
    "narration": "Payment for services",
    "remarks": "Order initiated and created successfully",
    "currencyId": 1,
    "currencyName": "NGN",
    "fee": 0.75,
    "feeRate": 0.75,
    "subsidiaryFee": 0.75,
    "customerFee": 0,
    "dateCreated": "2025-07-29T12:06:19.6933333",
    "dateUpdated": "2025-07-29T12:07:27.556023",
    "datePaymentConfirmed": null,
    "orderPayments": [
      {
        "orderId": 886488,
        "orderPaymentReference": "PGW-PAYREF-BAD747F1339942D9BBC66D1FB03C1336",
        "paymentOptionId": 6,
        "paymentOption": "Pay With Bank Transfer",
        "statusId": 5,
        "status": "Successful",
        "responseCode": "00",
        "responseMessage": "Bank transfer received successfully",
        "orderPaymentInstrument": "6849322524",
        "remarks": "Order payment initiated",
        "dateCreated": "2025-07-29T12:06:22.3706573",
        "dateUpdated": "2025-07-29T12:07:27.5561286"
      }
    ],
    "customer": {
      "customerId": "[email protected]",
      "firstName": "FirstName",
      "lastName": "LastName",
      "emailAddress": "[email protected]",
      "countryShortName": "NG",
      "customerGroup": "Default",
      "countryId": 1,
      "globalStatusId": 2,
      "globalStatus": "Active",
      "mobileNumber": "123456890",
      "isBlacklisted": false,
      "reasonBlacklisted": null,
      "dateCreated": "2025-06-26T09:34:46.7266667",
      "dateUpdated": null
    },
    "cardDetails": [],
    "paymentLink": null
  },
  "status": "success",
  "statusCode": "00",
  "message": "Order details fetched successfully"
}
  1. Reserved Account Funding Webhook
{
    "statusCode": "00",
    "status": "Success",
    "orderReference": null,
    "paymentReference": "ACCTBTCEDCE48E-F9D0-4BEF-AECD-0F8D6501382A",
    "productName": "Account Funding",
    "totalAmountCharged": 100.000000,
    "statusId": 5,
    "paymentMethod": "Bank Transfer",
    "paymentResponseCode": null,
    "paymentResponseMessage": null,
    "narration": "Testing Narration",
    "remarks": null,
    "currencyId": 1,
    "currencyName": "NGN",
    "fee": 0.3900,
    "feeRate": null,
    "dateCreated": "2025-08-12T08:37:07.6224086",
    "dateUpdated": "2025-08-12T08:37:07.7904547Z",
    "datePaymentConfirmed": "2025-08-12T08:37:07.6224086",
    "sessionId": "000023250812093659004167457861",
    "sourceAccountName": "TEST ACCOUNT NAME",
    "orderPayments": [
        {
            "orderId": 0,
            "orderPaymentReference": null,
            "paymentOptionId": 0,
            "paymentOption": null,
            "statusId": 0,
            "paymentStatus": null,
            "responseCode": null,
            "responseMessage": null,
            "orderPaymentInstrument": "01234567890",
            "remarks": null,
            "dateCreated": "0001-01-01T00:00:00",
            "dateUpdated": null
        }
    ],
    "customer": null,
    "cardDetails": null,
    "paymentLink": null,
    "bank": "",
    "accountReference": "accountReference"
}
  1. Payout Webhook
{
    "Data": {
        "PayoutReference": "PGW-PAYOUT-F8AECDB77C27492AADB2E16C4EACB131",
        "ProductName": "Payout",
        "Amount": 198.10,
        "StatusId": 5,
        "Status": "Successful",
        "PayoutResponseCode": "00",
        "PayoutResponseMessage": "Transaction successful",
        "Narration": "Payout",
        "Currency": "NGN",
        "Fee": 0.000000,
        "DateCreated": "2025-08-20T08:15:58.3406864",
        "DateUpdated": "2025-08-20T08:16:00.0152206+00:00",
        "SessionId": "000000290820091705431005082045"
    },
    "Status": "Success",
    "StatusCode": "00",
    "Message": "Payout Successful"
}

Expected Response

💡

Expected Webhook Response

HTTP/1.1 200 OK

You can include a response body, but it will be ignored.

Tips

  • Use a queue system to process heavy webhook logic asynchronously.
  • Log webhook requests for debugging.
  • Respond quickly to avoid timeouts.