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

Vipps MobilePay Subscription Cancelled Webhook

If a customer cancels a subscription in the MobilePay app, the subscription will be disabled in ePay. To be notified about this, create a webhook subscribed to the event subscription.disabled.v1. This webhook is useful when you need to update your own subscription state immediately after the customer has canceled outside your own system.

Create the webhook

Create a webhook using POST /public/api/v1/webhooks and subscribe it to subscription.disabled.v1.

{  "url": "https://merchant.example.com/webhooks/subscription-disabled",  "events": ["subscription.disabled.v1"],  "secret": "Bearer webhook-secret-value"}

Example response:

{  "webhook": {    "id": "019713fd-c838-79c8-8dbf-ef5df2817d65",    "url": "https://merchant.example.com/webhooks/subscription-disabled",    "events": ["subscription.disabled.v1"],    "pausedAt": null,    "pauseReason": null,    "createdAt": "2026-05-27T10:15:00Z"  }}

Example webhook

When the subscription is cancelled by the customer, ePay will send a webhook like this. The subscription's statusReason explains why it reached the DISABLED state. For subscriptions closed by a cardholder in a wallet app such as Vipps MobilePay, its value is CLOSED_BY_CARDHOLDER.

Authorization: Bearer webhook-secret-valueContent-Type: application/json

{  "event": "subscription.disabled.v1",  "data": {    "subscription": {      "id": "01997047-ead3-7cdb-9501-d226789ed32b",      "createdAt": "2025-09-22T07:16:25.427852Z",      "paymentMethodId": "01997048-1038-772e-99de-3a467ce1babd",      "pointOfSaleId": "01932061-c660-714c-bfea-f6a9c1f4f35b",      "currency": "DKK",      "customerId": "customer-123",      "reference": "subscription-1",      "description": "MobilePay subscription",      "expiryDate": null,      "state": "DISABLED",      "statusReason": "CLOSED_BY_CARDHOLDER",      "type": "SCHEDULED",      "interval": {        "frequency": 1,        "period": "MONTH"      }    }  }}
API schemaSubscription event dataReview the complete payload schema for `subscription.disabled.v1` webhooks, including all subscription fields.

Notes

  • statusReason is nullable and is currently only provided for subscriptions that reach the DISABLED state. Possible values are CLOSED_BY_MERCHANT_API, CLOSED_BY_MERCHANT_BACKOFFICE, CLOSED_BY_CARDHOLDER, and CLOSED_BY_EPAY.
  • ePay expects a 200 OK response. Otherwise the webhook will be retried.
  • The Authorization header contains the secret configured on the webhook and should be validated by your system.

How is this guide?