Skip to content
FolioSign inStart your trial

Webhook event catalogue

Billing events

9 events. All groups

billing.subscription_started#

Financial dataA paid plan or trial began.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.subscription_started
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.
Example billing.subscription_started body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.subscription_started"
}

billing.subscription_changed#

Financial dataThe plan changed, an add-on was bought, or a cancellation was undone. previous_attributes holds what changed.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.subscription_changed
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.

On updates, data.previous_attributes holds the earlier value of any of these that changed: plan, interval, status, cancel_at, items.

Example billing.subscription_changed body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    },
    "previous_attributes": {
      "cancel_at": "2026-10-12T09:12:10Z",
      "interval": "year",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "trialing"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.subscription_changed"
}

billing.subscription_canceled#

Financial dataA cancellation was scheduled. cancel_at is when access ends.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.subscription_canceled
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.

On updates, data.previous_attributes holds the earlier value of any of these that changed: cancel_at.

Example billing.subscription_canceled body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    },
    "previous_attributes": {
      "cancel_at": "2026-10-12T09:12:10Z"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.subscription_canceled"
}

billing.trial_started#

Financial dataA trial or pilot began. No card is needed.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.trial_started
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.
Example billing.trial_started body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.trial_started"
}

billing.trial_ending#

Financial dataA trial or pilot has 7, 3 or 1 days left. Sent once for each of those marks. trial.days_left says which.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.trial_ending
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.
Example billing.trial_ending body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.trial_ending"
}

billing.trial_ended#

Financial dataA trial or pilot ended without a paid plan. The church keeps its content and moves to read-only.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is subscription.

Fields of data.object for billing.trial_ended
FieldTypeDescription
cancel_at requiredstring (date-time) | nullWhen access ends after a scheduled cancellation.
canceled_at requiredstring (date-time) | nullWhen it was canceled.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it started.
currency requiredstringThe billing currency.
current_period requiredobjectThe period being billed.
end requiredstring (date-time)When it ends.
start requiredstring (date-time)When the period began.
id requiredstringThe subscription id.
interval requiredenum: month | yearmonth or year.
items requiredobjectThe plan and any add-ons.
data requiredobject[]
description requiredstringWhat is billed.
object requiredenum: subscription_itemAlways subscription_item.
price requiredobjectThe recurring price.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
quantity requiredintegerHow many.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
latest_invoice requiredobject | nullThe most recent invoice.
id requiredstringThe invoice id.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
status requiredstringThe invoice status.
object requiredenum: subscriptionAlways subscription.
plan requiredobjectThe plan it is on.
id requiredstringThe plan id.
key requiredstringThe plan key.
name requiredstringThe plan name.
object requiredenum: planAlways plan.
status requiredenum: trialing | active | past_due | grace | paused | canceled | expired | scheduledThe subscription status.
trial requiredobject | nullTrial or pilot details, present while or after one ran.
days_left requiredintegerDays remaining, 0 once ended.
ended_at requiredstring (date-time) | nullWhen it ended, null while running.
ends_at requiredstring (date-time)When it ends.
kind requiredenum: trial | pilottrial or pilot.
outcome requiredstring | nullHow it ended: expired, ended_early or converted; null while running.
started_at requiredstring (date-time)When it began.

On updates, data.previous_attributes holds the earlier value of any of these that changed: status.

Example billing.trial_ended body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "cancel_at": "2026-11-13T09:12:10Z",
      "canceled_at": "2026-10-13T09:12:10Z",
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "current_period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "interval": "month",
      "items": {
        "data": [
          {
            "description": "Church (month)",
            "object": "subscription_item",
            "price": {
              "amount_minor": 7900,
              "currency": "USD"
            },
            "quantity": 1
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing"
      },
      "latest_invoice": {
        "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "number": "INV-0192F7A8-1A2B3C4D",
        "object": "invoice",
        "status": "paid"
      },
      "object": "subscription",
      "plan": {
        "id": "plan_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "key": "church",
        "name": "Church",
        "object": "plan"
      },
      "status": "active",
      "trial": {
        "days_left": 7,
        "ended_at": "2026-10-13T09:12:10Z",
        "ends_at": "2026-11-13T09:12:10Z",
        "kind": "trial",
        "outcome": "expired",
        "started_at": "2026-10-13T09:12:10Z"
      }
    },
    "previous_attributes": {
      "status": "trialing"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.trial_ended"
}

billing.invoice_paid#

Financial dataAn invoice was paid.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is invoice.

Fields of data.object for billing.invoice_paid
FieldTypeDescription
amount_due_minor requiredintegerWhat is still owed.
amount_paid_minor requiredintegerWhat has been paid.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it was created.
currency requiredstringThe ISO 4217 currency code in upper case.
id requiredstringThe invoice id.
issued_at requiredstring (date-time) | nullWhen it was issued.
last_payment_error requiredobject | nullWhy the latest charge failed.
attempted_at requiredstring (date-time)When the charge was tried.
code requiredstringA short code such as card_declined.
message requiredstringA plain message safe to show.
lines requiredobjectWhat was charged.
data requiredobject[]
amount_minor requiredintegerThe line amount before tax in the smallest currency unit.
description requiredstringWhat was charged.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
payment_method requiredobject | nullThe method that paid or was tried. Only a brand and last four digits.
brand requiredstring | nullThe card brand, null when none is on file.
exp_month requiredinteger | nullThe expiry month, null when unknown.
exp_year requiredinteger | nullThe expiry year, null when unknown.
id requiredstringThe payment method id.
kind requiredstringcard, bank or wallet.
last4 requiredstring | nullThe last four digits, never the full number; null when none.
object requiredenum: payment_methodAlways payment_method.
period_end requiredstring (date-time) | nullWhen the billed period ends.
period_start requiredstring (date-time) | nullWhen the billed period starts.
provider requiredstringThe payment provider key.
provider_url requiredstringA hosted invoice page, empty when none.
refunds requiredobjectRefunds issued against it.
data requiredobject[]
amount_minor requiredintegerThe refunded amount.
created_at requiredstring (date-time)When it was issued.
id requiredstringThe refund id.
object requiredenum: refundAlways refund.
status requiredstringThe refund status.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
status requiredenum: draft | open | paid | void | uncollectibleThe invoice status.
status_transitions requiredobjectWhen the invoice reached each state.
due_at requiredstring (date-time) | nullWhen payment is due.
paid_at requiredstring (date-time) | nullWhen it was paid.
subscription requiredobject | nullThe subscription it bills.
id requiredstringThe subscription id.
object requiredenum: subscriptionAlways subscription.
status requiredstringThe subscription status.
subtotal_minor requiredintegerThe total before tax in the smallest currency unit.
tax_label requiredstringHow the tax is described on the invoice.
tax_lines requiredobjectThe taxes charged.
data requiredobject[]
amount_minor requiredintegerThe tax amount in the smallest currency unit.
inclusive requiredbooleanTrue when the price already included the tax.
jurisdiction requiredstringThe tax jurisdiction, empty when not recorded.
label requiredstringWhat the tax is called on the invoice.
rate_bps requiredintegerThe rate in basis points, 2000 is 20 percent; 0 for reverse charge or zero-rated.
tax_type requiredstringThe kind of tax: vat, gst, sales_tax and so on, empty when the provider calculated it.
treatment requiredstringcharge, reverse_charge, zero_rated or none.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
tax_minor requiredintegerThe tax in the smallest currency unit.
tax_notes requiredstring[]Legal notes printed with the tax, such as a reverse-charge statement.
total requiredobjectThe invoice total as an amount with its currency.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
total_minor requiredintegerThe total in the smallest currency unit.

On updates, data.previous_attributes holds the earlier value of any of these that changed: status, amount_paid_minor, amount_due_minor.

Example billing.invoice_paid body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "amount_due_minor": 0,
      "amount_paid_minor": 7900,
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "issued_at": "2026-10-13T09:12:10Z",
      "last_payment_error": {
        "attempted_at": "2026-10-13T09:12:10Z",
        "code": "card_declined",
        "message": "The card was declined."
      },
      "lines": {
        "data": [
          {
            "amount_minor": 6583,
            "description": "Church (month)"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "number": "INV-0192F7A8-1A2B3C4D",
      "object": "invoice",
      "payment_method": {
        "brand": "visa",
        "exp_month": 8,
        "exp_year": 2029,
        "id": "pm_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "card",
        "last4": "4242",
        "object": "payment_method"
      },
      "period_end": "2026-11-13T09:12:10Z",
      "period_start": "2026-10-13T09:12:10Z",
      "provider": "stripe",
      "provider_url": "",
      "refunds": {
        "data": [
          {
            "amount_minor": 7900,
            "created_at": "2026-10-13T09:12:10Z",
            "id": "ref_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
            "object": "refund",
            "status": "succeeded"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "status": "paid",
      "status_transitions": {
        "due_at": "2026-11-13T09:12:10Z",
        "paid_at": "2026-10-13T09:12:10Z"
      },
      "subscription": {
        "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "subscription",
        "status": "active"
      },
      "subtotal_minor": 6583,
      "tax_label": "VAT 20%",
      "tax_lines": {
        "data": [
          {
            "amount_minor": 1317,
            "inclusive": false,
            "jurisdiction": "GB",
            "label": "VAT 20%",
            "rate_bps": 2000,
            "tax_type": "vat",
            "treatment": "charge"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "tax_minor": 1317,
      "tax_notes": [
        "Seller tax number: GB123456789"
      ],
      "total": {
        "amount_minor": 7900,
        "currency": "USD"
      },
      "total_minor": 7900
    },
    "previous_attributes": {
      "amount_due_minor": -1,
      "amount_paid_minor": 7899,
      "status": "draft"
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.invoice_paid"
}

billing.payment_failed#

Financial dataA charge did not go through. Nothing is paused yet. last_payment_error says why.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is invoice.

Fields of data.object for billing.payment_failed
FieldTypeDescription
amount_due_minor requiredintegerWhat is still owed.
amount_paid_minor requiredintegerWhat has been paid.
church requiredobjectThe church it belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
created_at requiredstring (date-time)When it was created.
currency requiredstringThe ISO 4217 currency code in upper case.
id requiredstringThe invoice id.
issued_at requiredstring (date-time) | nullWhen it was issued.
last_payment_error requiredobject | nullWhy the latest charge failed.
attempted_at requiredstring (date-time)When the charge was tried.
code requiredstringA short code such as card_declined.
message requiredstringA plain message safe to show.
lines requiredobjectWhat was charged.
data requiredobject[]
amount_minor requiredintegerThe line amount before tax in the smallest currency unit.
description requiredstringWhat was charged.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
number requiredstringThe invoice number.
object requiredenum: invoiceAlways invoice.
payment_method requiredobject | nullThe method that paid or was tried. Only a brand and last four digits.
brand requiredstring | nullThe card brand, null when none is on file.
exp_month requiredinteger | nullThe expiry month, null when unknown.
exp_year requiredinteger | nullThe expiry year, null when unknown.
id requiredstringThe payment method id.
kind requiredstringcard, bank or wallet.
last4 requiredstring | nullThe last four digits, never the full number; null when none.
object requiredenum: payment_methodAlways payment_method.
period_end requiredstring (date-time) | nullWhen the billed period ends.
period_start requiredstring (date-time) | nullWhen the billed period starts.
provider requiredstringThe payment provider key.
provider_url requiredstringA hosted invoice page, empty when none.
refunds requiredobjectRefunds issued against it.
data requiredobject[]
amount_minor requiredintegerThe refunded amount.
created_at requiredstring (date-time)When it was issued.
id requiredstringThe refund id.
object requiredenum: refundAlways refund.
status requiredstringThe refund status.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
status requiredenum: draft | open | paid | void | uncollectibleThe invoice status.
status_transitions requiredobjectWhen the invoice reached each state.
due_at requiredstring (date-time) | nullWhen payment is due.
paid_at requiredstring (date-time) | nullWhen it was paid.
subscription requiredobject | nullThe subscription it bills.
id requiredstringThe subscription id.
object requiredenum: subscriptionAlways subscription.
status requiredstringThe subscription status.
subtotal_minor requiredintegerThe total before tax in the smallest currency unit.
tax_label requiredstringHow the tax is described on the invoice.
tax_lines requiredobjectThe taxes charged.
data requiredobject[]
amount_minor requiredintegerThe tax amount in the smallest currency unit.
inclusive requiredbooleanTrue when the price already included the tax.
jurisdiction requiredstringThe tax jurisdiction, empty when not recorded.
label requiredstringWhat the tax is called on the invoice.
rate_bps requiredintegerThe rate in basis points, 2000 is 20 percent; 0 for reverse charge or zero-rated.
tax_type requiredstringThe kind of tax: vat, gst, sales_tax and so on, empty when the provider calculated it.
treatment requiredstringcharge, reverse_charge, zero_rated or none.
has_more requiredbooleanTrue when more items exist than this page holds; fetch them from url.
object requiredvalue
url requiredstringThe API path that lists every item.
tax_minor requiredintegerThe tax in the smallest currency unit.
tax_notes requiredstring[]Legal notes printed with the tax, such as a reverse-charge statement.
total requiredobjectThe invoice total as an amount with its currency.
amount_minor requiredintegerThe amount in the smallest currency unit, 7900 is 79.00.
currency requiredstringThe ISO 4217 currency code in upper case.
total_minor requiredintegerThe total in the smallest currency unit.
Example billing.payment_failed body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "amount_due_minor": 0,
      "amount_paid_minor": 7900,
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "created_at": "2026-10-13T09:12:10Z",
      "currency": "USD",
      "id": "inv_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
      "issued_at": "2026-10-13T09:12:10Z",
      "last_payment_error": {
        "attempted_at": "2026-10-13T09:12:10Z",
        "code": "card_declined",
        "message": "The card was declined."
      },
      "lines": {
        "data": [
          {
            "amount_minor": 6583,
            "description": "Church (month)"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "number": "INV-0192F7A8-1A2B3C4D",
      "object": "invoice",
      "payment_method": {
        "brand": "visa",
        "exp_month": 8,
        "exp_year": 2029,
        "id": "pm_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "kind": "card",
        "last4": "4242",
        "object": "payment_method"
      },
      "period_end": "2026-11-13T09:12:10Z",
      "period_start": "2026-10-13T09:12:10Z",
      "provider": "stripe",
      "provider_url": "",
      "refunds": {
        "data": [
          {
            "amount_minor": 7900,
            "created_at": "2026-10-13T09:12:10Z",
            "id": "ref_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
            "object": "refund",
            "status": "succeeded"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "status": "paid",
      "status_transitions": {
        "due_at": "2026-11-13T09:12:10Z",
        "paid_at": "2026-10-13T09:12:10Z"
      },
      "subscription": {
        "id": "subs_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "object": "subscription",
        "status": "active"
      },
      "subtotal_minor": 6583,
      "tax_label": "VAT 20%",
      "tax_lines": {
        "data": [
          {
            "amount_minor": 1317,
            "inclusive": false,
            "jurisdiction": "GB",
            "label": "VAT 20%",
            "rate_bps": 2000,
            "tax_type": "vat",
            "treatment": "charge"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/billing/invoices"
      },
      "tax_minor": 1317,
      "tax_notes": [
        "Seller tax number: GB123456789"
      ],
      "total": {
        "amount_minor": 7900,
        "currency": "USD"
      },
      "total_minor": 7900
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.payment_failed"
}

billing.quota_reached#

Financial dataUsage for a meter reached what the plan includes this period. Sent once per meter per period.

Billing facts in minor units with the currency. Card numbers, bank details and provider tokens are never included, only a brand and the last four digits.

data.object.object is usage_meter.

Fields of data.object for billing.quota_reached
FieldTypeDescription
church requiredobjectThe church the usage belongs to.
id requiredstringThe church id.
name requiredstringThe church name.
object requiredenum: churchAlways church.
slug requiredstringThe church web address.
consumed requiredintegerWhat has been used this period.
id requiredstringThe meter key.
included requiredintegerWhat the plan includes, with credits.
meter requiredstringThe meter key: hours, generations, ask_messages and so on.
object requiredenum: usage_meterAlways usage_meter.
percent_used requiredintegerThe share of the allowance used.
period requiredobjectThe billing period.
end requiredstring (date-time)The last moment of the period.
start requiredstring (date-time)The first day of the period.
remaining requiredintegerWhat is left this period, 0 once reached.
Example billing.quota_reached body
{
  "actor": null,
  "api_version": "2026-12-01",
  "created": "2026-10-13T09:12:10Z",
  "data": {
    "object": {
      "church": {
        "id": "org_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
        "name": "Grace Place",
        "object": "church",
        "slug": "grace-place"
      },
      "consumed": 40,
      "id": "hours",
      "included": 40,
      "meter": "hours",
      "object": "usage_meter",
      "percent_used": 100,
      "period": {
        "end": "2026-11-13T09:12:10Z",
        "start": "2026-10-13T09:12:10Z"
      },
      "remaining": 0
    }
  },
  "id": "evt_0192f7a8-3b1c-7d2e-9a40-5c6d7e8f9012",
  "livemode": false,
  "object": "event",
  "request": {
    "id": "req_5f3c9a1e7b2d4c68a0e1f2d3c4b5a697",
    "idempotency_key": null
  },
  "type": "billing.quota_reached"
}

Verified against API version 0.0.0-dev. Generated from the live OpenAPI document.