Skip to main content
Version: 0.0.1

Webhooks

Webhooks are merchant-wide, event-based notifications configured once at the merchant account level by Zenith. The merchant provides an HTTPS endpoint URL, and Zenith registers it against the merchant account.

Once registered, Zenith will POST JSON payloads whenever:

  • A transaction status changes (e.g. Pending → Successful) across any payment method or channel.
  • PayTo mandate status changes
  • isSettledToMerchant status changes

Webhooks are dispatched on a scheduler/timer that evaluates states and posts updates. All payment methods and channels trigger the same webhook mechanism.

Per-transaction callbacks

If you are using the Payment Plugin and need immediate, per-transaction notifications, see Callbacks and Validation. Callbacks are plugin-only and apply to a single transaction.

Callbacks vs Webhooks​

Requirements

  • HTTPS POST endpoint – Must be reachable from Zenith's servers.
  • Stable URL – The endpoint is configured once by Zenith; changes require contacting Zenith.

Webhook Payload Fields​

FieldTypeNotes
VersionnumberPayload version number.
EventstringEvent type (e.g. NEW, EDIT).
PayloadTypestringType of payload delivered (e.g. Payment, Customer).
PaymentReferencestringUnique payment reference assigned by Zenith.
CustomerNamestringnull
CustomerReferencestringReference provided by the merchant.
PaymentStatusnumberNumeric status code.
PaymentStatusDisplaystringHuman-readable payment status.
BaseAmountnumberBase amount before fees.
FundsToMerchantnumberNet amount payable to the merchant.
CustomerFeenumberFee charged to the customer.
MerchantFeenumberFee charged to the merchant.
PaymentAmountnumberTotal amount of the transaction.
AccountOrCardNostringMasked account or card number.
PaymentMethodnumberNumeric code for the payment method.
PaymentMethodDisplaystringHuman-readable payment method.
PaymentCardTypenumberNumeric code for the card type.
PaymentCardTypeDisplaystringHuman-readable card type.
SubCardTypestringnull
SubtCardTypeDisplaystringnull (Field name is misspelled, this is not an error in documentation)
ProcessingDateTimestringUTC ISO-8601 datetime (yyyy-MM-ddTHH:mm:ss).
SettlementDatestringUTC ISO-8601 date (yyyy-MM-dd).
ProcessorReferencestringReference from the processor/gateway.
IsPaymentSettledToMerchantbooleanIndicates if the payment has been settled.
MerchantUniquePaymentIdstringnull
MerchantCodestringMerchant identifier.
AdditionalReferencestringnull
PaymentSourcenumberNumeric source identifier.
PaymentSourceDispalystringField name is misspelled, this is not an error in documentation
IsPaymentRecalledbooleanIndicates if the payment has been recalled.
IsPaymentRefundedbooleanIndicates if the payment has been refunded.

Webhook Payload Example​

{
"Version": 1,
"Event": "New",
"PayloadType": "Payment",
"Payload": {
"PaymentReference": "210768",
"CustomerName": null,
"CustomerReference": "1",
"PaymentStatus": 3,
"PaymentStatusDisplay": "Successful",
"BaseAmount": 155.08,
"FundsToMerchant": 155.08,
"CustomerFee": 4,
"MerchantFee": 0,
"PaymentAmount": 159.08,
"AccountOrCardNo": "411111XXXXXX1111",
"PaymentMethod": 0,
"PaymentMethodDisplay": "Credit / Debit Card",
"PaymentCardType": 1,
"PaymentCardTypeDisplay": "Visa - International Cards",
"SubCardType": null,
"SubtCardTypeDisplay": null,
"ProcessingDateTime": "2025-08-27T22:08:14",
"SettlementDate": "2025-08-28",
"ProcessorReference": "2a41cff0e84ee15f8b42",
"IsPaymentSettledToMerchant": false,
"MerchantUniquePaymentId": null,
"MerchantCode": "1337",
"AdditionalReference": null,
"PaymentSource": 39,
"PaymentSourceDispaly": "Api Tokenised Payment",
"IsPaymentRecalled": false,
"IsPaymentRefunded": false
}
}

Webhook Payload Updates​

When a webhook for a particular payment referenced is first created and sent, the Event will be New. Any subsquent webhooks reflecting status updates to that payment will have the Event: Edit.