Accept PaymentsServer to ServerOPayWebhooks / Notifications

OPay Webhooks / Notifications

Once a transaction is completed, a webhook notification is automatically sent as a server-to-server POST request to the webhook URL configured on your dashboard.

This is entirely separate from the customer redirect. It is sent directly to your backend regardless of whether the customer returns to your site.

Important

Make sure your webhook URL is set in your dashboard settings to receive these notifications. Without it, your server will not be notified of completed transactions.

Successful Payment Webhook Payload

{
  "data": {
    "id": 44472,
    "fees": "0.06",
    "plan": null,
    "type": "transaction",
    "amount": "5",
    "domain": "live",
    "status": "success",
    "channel": "opay_wallet",
    "message": "SUCCESSFUL",
    "paid_at": "2026-05-21 07:53:01",
    "currency": "NGN",
    "customer": {
      "id": 12564,
      "email": "lekan126@gmail.com",
      "last_name": "Olalekan",
      "first_name": "Olalekan",
      "customer_code": "CUS_em8vszrv9tqlxfj",
      "status": "active",
      "domain": "live"
    },
    "reference": "SSW_17793463341440638",
    "created_at": "2026-05-21T06:52:14.000000Z",
    "business_id": 227,
    "customer_id": 12564,
    "requested_amount": "5"
  },
  "notify": "transaction",
  "notifyType": "successful"
}

Webhook Fields

FieldTypeDescription
data.idnumberTransaction ID.
data.feesstringTransaction fees.
data.plannullPlan value, if any.
data.typestringEvent data type.
data.amountstringTransaction amount.
data.domainstringTransaction domain.
data.statusstringTransaction status. Verify this before fulfilling orders.
data.channelstringPayment channel.
data.messagestringGateway or transaction message.
data.paid_atstringPayment timestamp.
data.currencystringTransaction currency.
data.customerobjectCustomer information.
data.referencestringUnique transaction reference.
data.created_atstringTransaction creation timestamp.
data.business_idnumberBusiness ID.
data.customer_idnumberCustomer ID.
data.requested_amountstringOriginal requested amount.
notifystringNotification category.
notifyTypestringTransaction outcome notification type.

Notification Outcome

The notifyType field indicates the transaction outcome.

Possible values:

ValueMeaning
successfulSuccessful transaction notification
failedFailed transaction notification

Always verify the status field inside data before fulfilling orders.