Looking for ePay classic docs? Go to docs.epay.dk
ePay documentationDocsePay documentation

NotificationWebhook

The notification webhook is sent to the merchant’s configured endpoint when a transaction attempt has completed. Successful transaction attempts are always sent. Failed transaction attempts are sent only when reportFailure is true, and expired sessions are sent only when reportExpired is true.

Delivery and Retry Policy

  • The receiving system must respond with standard HTTP 200 OK.
  • If no 200 OK is received, the webhook will be retried with exponential backoff.
  • Retry strategy:
    • Attempt 1: immediate (0 seconds).
    • Attempt 2: immediate (0 seconds).
    • Attempt 3+: delayed by 2^attempt seconds.
    • Maximum delay capped at 3 hours.
    • Retries stop after 25 attempts.
  • Each webhook request has a strict timeout of 5 seconds.
  • Merchants should always acknowledge quickly and process business logic asynchronously. Failure to comply may result in the endpoint being moved to a low-priority queue.

Headers and Authentication

  • Every webhook includes an Authorization header that must be validated to ensure the request originated from ePay.
  • By default, ePay issues a random Bearer token at account creation. This token, and the authorization scheme (Bearer vs Basic), can be managed in the ePay Backoffice.
  • No additional signatures or payload signing is applied. Verification relies exclusively on the Authorization header.

Info about the card used during the transaction. Is only available for card based payments.

NotificationWebhook
{  "transaction": {    "id": "LDG7M4WW44G",    "subscriptionId": "0197c07b-3f6d-7be2-b848-702b08958128",    "billingAgreementChargeId": "019a727b-987f-7768-a59e-71af920ef81f",    "state": "PENDING",    "errorCode": "string",    "externalStatusCodes": {      "terminal": "string",      "acquirer": "string",      "network": "string",      "sca": "string"    },    "createdAt": "2019-08-24T14:15:22Z",    "sessionId": "string",    "paymentMethodId": "b6df8625-cd25-4123-b345-638aa7b5d011",    "paymentMethodType": "CARD",    "paymentMethodSubType": "Visa",    "paymentMethodExpiry": "2019-08-24",    "paymentMethodDisplayText": "string",    "paymentMethodHolderName": "string",    "scaMode": "SKIP",    "customerId": "string",    "amount": 0,    "fee": 0,    "currency": "string",    "instantCapture": "OFF",    "notificationUrl": "http://example.com",    "pointOfSaleId": "be6bff4f-7fac-43c0-9f6b-cf2cd45ed7d1",    "reference": "string",    "textOnStatement": "string",    "exemptions": [      "LVT",      "TRA"    ],    "attributes": {      "property1": null,      "property2": null    },    "clientIp": "52.212.176.122",    "clientCountry": "DK",    "type": "PAYMENT"  },  "aggregates": {    "authorized": 25000,    "captured": 15000,    "refunded": 7500,    "voided": 3000,    "remaining": 8000,    "paidOut": 0  },  "operations": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "referenceTransactionOperationId": "09c60a7b-397b-4797-a5c8-792dc558cbed",      "amount": 0,      "state": "PROCESSING",      "transactionId": "LDG7M4WW44G",      "type": "AUTHORIZATION",      "errorCode": "string",      "createdAt": "2019-08-24T14:15:22Z",      "finalizedAt": "2019-08-24T14:15:22Z"    }  ],  "acquirerAgreement": {    "acquirer": "shift4",    "mcc": "4514"  },  "session": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",    "amount": 0,    "attributes": {      "property1": null,      "property2": null    },    "exemptions": [      "string"    ],    "allowedPaymentMethods": [      "CARD",      "VIPPS_MOBILEPAY"    ],    "currency": "string",    "expiresAt": "2019-08-24T14:15:22Z",    "instantCapture": "OFF",    "maxAttempts": 0,    "attempts": 0,    "minimumAge": 0,    "ageVerified": true,    "reportFailure": true,    "reportExpired": true,    "dynamicAmount": true,    "notificationUrl": "http://example.com",    "preAuthUrl": "http://example.com",    "successUrl": "http://example.com",    "returnUrl": "http://example.com",    "failureUrl": "http://example.com",    "retryUrl": "http://example.com",    "customerId": "string",    "pointOfSaleId": "be6bff4f-7fac-43c0-9f6b-cf2cd45ed7d1",    "reference": "string",    "state": "PENDING",    "textOnStatement": "string",    "scaMode": "SKIP",    "timeout": 0,    "createdAt": "2019-08-24T14:15:22Z"  },  "subscription": {    "id": "01929a94-5fce-7ccc-a7e4-7e9249133b39",    "paymentMethodId": "01924756-d1f6-738d-8040-90d76cedf01f",    "currency": "DKK",    "customerId": "User159",    "pointOfSaleId": "0192473a-e381-705c-b61c-fc2ac9624afc",    "reference": "reference-1",    "description": "string",    "state": "ACTIVE",    "statusReason": "CLOSED_BY_CARDHOLDER",    "type": "SCHEDULED",    "expiryDate": "2050-01-01",    "interval": {      "period": "MONTH",      "frequency": 1    },    "createdAt": "2019-08-24T14:15:22Z"  },  "sca": {    "rejected": false,    "type": "3DS",    "verification": "FRICTIONLESS"  },  "card": {    "pan": "12345678XXXX1234",    "expireMonth": "07",    "expireYear": "35",    "par": "8F1B7C2QX4Z9N3V6M2R0K8YD5LJTPH",    "Issuer": "Danske Bank",    "Scheme": "Visa",    "Country": "DK",    "Segment": "consumer",    "Funding": "debit"  }}