---
title: "Webhook callbacks"
description: "Reference for the event payloads that Fenerum POSTs to your enabled webhook endpoints."
url: https://www.fenerum.com/en-DK/docs/api/webhook-callbacks/
updated_at: "2026-05-18T00:00:00"
---
When events occur in Fenerum, an HTTP POST request is sent to every enabled endpoint configured on every [Webhook](https://www.fenerum.com/en-DK/docs/api/webhook.md). Each request body has an `event` field identifying the event type and a `data` field carrying a snapshot of the resource. Endpoints should respond with any 2XX status to acknowledge receipt.

Most events are subscribed to by default when a webhook is created. The payment-related events (`payment.authentication_required`, `payment.declined`, `card_expires_this_month`, `payment_card.activated`, `payment_card.deactivated`) are **not** enabled by default — opt in explicitly via the `events` field on the [Webhook](https://www.fenerum.com/en-DK/docs/api/webhook.md) resource.

A subset of these events is also visible in the [Swagger console](https://app.fenerum.com/api/swagger/) under the **Webhook callbacks** tag.

## account.created

```json
{
  "event": "account.created",
  "data": {
    "uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "code": "important_client",
    "company_name": "Important client",
    "legal_address": "Important street 12",
    "legal_zipcode": "1234",
    "legal_city": "Aarhus",
    "legal_country": "DK",
    "legal_vat_number": "DK12345678",
    "billing_same_as_legal": true,
    "billing_address": null,
    "billing_zipcode": null,
    "billing_city": null,
    "billing_country": null,
    "created_date": "2018-11-20T11:25:23.889915+00:00"
  }
}
```

## account.updated

Sent when any field on an account changes. Payload schema matches `account.created`.

```json
{
  "event": "account.updated",
  "data": {
    "uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "code": "important_client",
    "company_name": "Important client",
    "legal_address": "Important street 12",
    "legal_zipcode": "1234",
    "legal_city": "Aarhus",
    "legal_country": "DK",
    "legal_vat_number": "DK12345678",
    "billing_same_as_legal": true,
    "billing_address": null,
    "billing_zipcode": null,
    "billing_city": null,
    "billing_country": null,
    "created_date": "2018-11-20T11:25:23.889915+00:00"
  }
}
```

## plan\_terms.created

Possible values of `plan_vat_type`: `physical`, `services`, `unknown`.

```json
{
  "event": "plan_terms.created",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "plan_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "plan_name": "Enterprise",
    "plan_collect_vat": true,
    "plan_vat_type": "services",
    "interval_type": "month",
    "interval_count": 1,
    "price": 99.99,
    "currency": "DKK"
  }
}
```

## plan\_terms.updated

```json
{
  "event": "plan_terms.updated",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "plan_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "plan_name": "Enterprise",
    "plan_collect_vat": true,
    "plan_vat_type": "services",
    "interval_type": "month",
    "interval_count": 1,
    "price": 99.99,
    "currency": "DKK"
  }
}
```

## new\_invoice

Possible values of `status`: `open`, `due`, `paid`, `nonpayment`.
Possible values of `collection_method`: `payment_card`, `invoice`.

```json
{
  "event": "new_invoice",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "invoice_number": 2193,
    "account_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "account_code": "important_client",
    "date": "2018-11-20T11:25:23.889915+00:00",
    "due_date": "2018-11-30T11:25:23.889915+00:00",
    "invoice_api_url": "https://app.fenerum.com/api/v1/invoices/b84948d2-30b8-4060-a5b4-6aa92db59b50/",
    "currency": "DKK",
    "status": "open",
    "collection_method": "payment_card"
  }
}
```

## paid\_invoice

```json
{
  "event": "paid_invoice",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "invoice_number": 2193,
    "account_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "account_code": "important_client",
    "date": "2018-11-20T11:25:23.889915+00:00",
    "due_date": "2018-11-30T11:25:23.889915+00:00",
    "invoice_api_url": "https://app.fenerum.com/api/v1/invoices/b84948d2-30b8-4060-a5b4-6aa92db59b50/",
    "currency": "DKK",
    "status": "paid",
    "collection_method": "payment_card"
  }
}
```

## invoice.overdue

Sent when an invoice passes its `due_date` without being paid. Payload schema matches `new_invoice`.

## cancel\_subscription

Possible values of `collection_method`: `payment_card`, `invoice`.

```json
{
  "event": "cancel_subscription",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "account_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "account_code": "important_client",
    "terms_uuid": "320ac230-a004-4cb3-9caa-fca0bee3e053",
    "start_date": "2018-01-21T11:25:23.889915+00:00",
    "end_date": null,
    "next_renewal_date": "2018-11-21T11:25:23.889915+00:00",
    "quantity": 1.5,
    "collection_method": "payment_card",
    "payment_terms": 10,
    "po_number": "A21"
  }
}
```

## reactivate\_subscription

Sent when a previously-cancelled subscription is reactivated. Payload schema matches `cancel_subscription`.

## renew\_subscription\_soon

Sent when a subscription is due to be renewed in the next 2 hours.

```json
{
  "event": "renew_subscription_soon",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "account_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "account_code": "important_client",
    "terms_uuid": "320ac230-a004-4cb3-9caa-fca0bee3e053",
    "start_date": "2018-01-21T11:25:23.889915+00:00",
    "end_date": null,
    "next_renewal_date": "2018-11-21T11:25:23.889915+00:00",
    "quantity": 1.5,
    "collection_method": "payment_card",
    "payment_terms": 10,
    "po_number": "A21"
  }
}
```

## new\_activity

Sent on a subscription-related activity: new subscription, renewal, cancellation, upgrade, downgrade, etc. Focuses on the financial impact of the action.

Possible values of `type`: `new`, `reactivate`, `renew`, `cancel`, `upgrade_qty`, `downgrade_qty`, `upgrade_subscription`, `downgraded_subscription`, `modified`.

`old_mrr`, `new_mrr`, and `mrr_change` always have two decimal places and are serialized as strings to avoid losing exactness.

```json
{
  "event": "new_activity",
  "data": {
    "uuid": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "account_uuid": "5c838347-d3ce-40fb-951c-b3190ccf2cba",
    "account_code": "important_client",
    "subscription": "320ac230-a004-4cb3-9caa-fca0bee3e053",
    "invoice": "e947c739-0e32-4954-aa78-9ec8605d58d5",
    "date": "2018-01-21T11:25:23.889915+00:00",
    "type": "upgrade_qty",
    "old_mrr": "150.30",
    "new_mrr": "200.40",
    "old_quantity": 3,
    "new_quantity": 4,
    "old_terms": "580eb744-8746-4e78-85a3-b927605db7ad",
    "new_terms": "580eb744-8746-4e78-85a3-b927605db7ad",
    "mrr_change": "50.10",
    "quantity_change": 1
  }
}
```

## payment.authentication\_required

Sent when a card payment cannot complete because the cardholder must perform additional authentication (e.g., 3-D Secure / SCA challenge). Not enabled by default — enable it explicitly on your webhook.

```json
{
  "event": "payment.authentication_required",
  "data": {
    "id": "1421",
    "payment_card": {
      "card_uuid": "f4293c5e-b592-43a1-9c68-eb76f62f6250",
      "card_number": "**** **** **** 4242",
      "payment_gateway_id": "card_1Nw3eQ2eZvKYlo2C7Lz5xxxx"
    },
    "amount": "199.00",
    "currency": "EUR",
    "payment_gateway": "stripe",
    "payment_gateway_id": "pi_3Nw3fQ2eZvKYlo2C0xx5xxxx",
    "invoice": "b84948d2-30b8-4060-a5b4-6aa92db59b50"
  }
}
```

## payment.declined

Sent when a card payment attempt is declined by the payment gateway.

Possible values of `payment_status`: `initial`, `pending`, `success`, `declined`, `canceled`, `pending_cancel`.
Possible values of `reason_code`: `auth_required`, `declined`.
Possible values of `type`: `payment`, `chargeback`.

```json
{
  "event": "payment.declined",
  "data": {
    "type": "payment",
    "reason": "Your card was declined.",
    "reason_code": "declined",
    "payment_status": "declined",
    "amount": "199.00",
    "amount_in_default_currency": "1485.00",
    "invoice": "b84948d2-30b8-4060-a5b4-6aa92db59b50",
    "date": "2026-05-18",
    "currency": "EUR",
    "payment_card_id": 1421,
    "data": {}
  }
}
```

`data` is a gateway-specific JSON object — its shape depends on the payment gateway and may include the raw failure response from the upstream provider.

## card\_expires\_this\_month

Sent once per card during the month that the card expires, so you can prompt the customer to update their payment method before automatic renewal fails. Not enabled by default — enable it explicitly on your webhook. Low-priority delivery.

Possible values of `payment_gateway`: `stripe`, `quickpay`.

```json
{
  "event": "card_expires_this_month",
  "data": {
    "uuid": "f4293c5e-b592-43a1-9c68-eb76f62f6250",
    "active": true,
    "brand": "Visa",
    "card_number": "**** **** **** 4242",
    "month": 5,
    "year": 2026,
    "name": "Jane Doe",
    "payment_gateway": "stripe",
    "payment_gateway_id": "card_1Nw3eQ2eZvKYlo2C7Lz5xxxx",
    "account": "5c838347-d3ce-40fb-951c-b3190ccf2cba"
  }
}
```

## payment\_card.activated

Sent when a payment card transitions to an active state on an account (newly registered card or a previously inactive card becoming active). Payload schema matches `card_expires_this_month`. Not enabled by default — enable it explicitly on your webhook.

```json
{
  "event": "payment_card.activated",
  "data": {
    "uuid": "f4293c5e-b592-43a1-9c68-eb76f62f6250",
    "active": true,
    "brand": "Visa",
    "card_number": "**** **** **** 4242",
    "month": 5,
    "year": 2028,
    "name": "Jane Doe",
    "payment_gateway": "stripe",
    "payment_gateway_id": "card_1Nw3eQ2eZvKYlo2C7Lz5xxxx",
    "account": "5c838347-d3ce-40fb-951c-b3190ccf2cba"
  }
}
```

## payment\_card.deactivated

Sent when a payment card becomes inactive (disabled by an API caller, expired, or removed by the gateway). Payload schema matches `card_expires_this_month`. Not enabled by default — enable it explicitly on your webhook.

```json
{
  "event": "payment_card.deactivated",
  "data": {
    "uuid": "f4293c5e-b592-43a1-9c68-eb76f62f6250",
    "active": false,
    "brand": "Visa",
    "card_number": "**** **** **** 4242",
    "month": 5,
    "year": 2026,
    "name": "Jane Doe",
    "payment_gateway": "stripe",
    "payment_gateway_id": "card_1Nw3eQ2eZvKYlo2C7Lz5xxxx",
    "account": "5c838347-d3ce-40fb-951c-b3190ccf2cba"
  }
}
```

---

## Navigation

Up: [Subscription management & financial insights on autopilot](https://www.fenerum.com/en-DK/index.md) › [Documentation](https://www.fenerum.com/en-DK/docs.md) › [API Documentation](https://www.fenerum.com/en-DK/docs/api.md)

Full site index: https://www.fenerum.com/llms.txt
