Ask for an invitation
Menu

Webhook event

subscription.ended

30 days passed in unpaid. Final.

Type
subscription.ended
The object it carries
the subscription object
Subscribe with
subscription.ended, subscription.* or *

Example payload

The body of the request your endpoint receives, shown here over several lines. On the wire it is compact JSON; check its signature over the bytes exactly as they arrive.

Example payload

{
  "id": "evt_dv8yqjzb374sw8retzeecaqk",
  "object": "event",
  "livemode": true,
  "created": "2026-12-04T08:09:00.000Z",
  "type": "subscription.ended",
  "api_version": "2026-10-11",
  "data": {
    "object": {
      "id": "sub_9q5v9rq2naessbxsrec2tsw0",
      "object": "subscription",
      "livemode": true,
      "created": "2026-10-01T08:05:00.000Z",
      "updated": "2026-12-04T08:09:00.000Z",
      "status": "ended",
      "customer": "cus_8ea07c40qsvv19f7rgmeb8ha",
      "items": [
        {
          "price": "price_s5n6hhtmyv5erqb81efqgjy6",
          "quantity": 1
        }
      ],
      "amount": "18.00",
      "currency": "USD",
      "interval": "month",
      "interval_count": 1,
      "reminder_days": [
        7,
        3,
        1
      ],
      "grace_days": 3,
      "prepaid_periods_allowed": [
        1,
        3,
        6,
        12
      ],
      "proration": "none",
      "current_period_start": "2026-10-01T08:09:00.000Z",
      "current_period_end": "2026-11-01T08:09:00.000Z",
      "prepaid_until": "2026-11-01T08:09:00.000Z",
      "latest_order": "ord_ayyh1f26ajmj807xjy6ezyfd",
      "renewal": {
        "order": "ord_ev56nr02sre6nyaz6q4h64wg",
        "checkout_url": "https://pay.orrerie.com/c/cs_gwa1qwmckrfvzasjv2ackh6d",
        "opens_at": "2026-10-25T08:09:00.000Z",
        "due_at": "2026-11-01T08:09:00.000Z",
        "grace_ends_at": "2026-11-04T08:09:00.000Z"
      },
      "cancel_at_period_end": false,
      "cancelled_at": null,
      "paused_at": null,
      "ended_at": "2026-12-04T08:09:00.000Z",
      "cancellation_reason": null,
      "metadata": {}
    },
    "previous_attributes": {
      "status": "unpaid",
      "ended_at": null
    }
  },
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "pending_webhooks": 1
}

Fields of data.object

Fields of data.object in subscription.ended
FieldIn this example
id"sub_9q5v9rq2naessbxsrec2tsw0"
object"subscription"
livemodetrue
created"2026-10-01T08:05:00.000Z"
updated"2026-12-04T08:09:00.000Z"
status"ended"
customer"cus_8ea07c40qsvv19f7rgmeb8ha"
itemsA list of 1 item
amount"18.00"
currency"USD"
interval"month"
interval_count1
reminder_daysA list of 3 items
grace_days3
prepaid_periods_allowedA list of 4 items
proration"none"
current_period_start"2026-10-01T08:09:00.000Z"
current_period_end"2026-11-01T08:09:00.000Z"
prepaid_until"2026-11-01T08:09:00.000Z"
latest_order"ord_ayyh1f26ajmj807xjy6ezyfd"
renewalAn object with order, checkout_url, opens_at, due_at, grace_ends_at
cancel_at_period_endfalse
cancelled_atnull
paused_atnull
ended_at"2026-12-04T08:09:00.000Z"
cancellation_reasonnull
metadataAn object with no fields

What each field means is on the page of the subscription object. data.previous_attributes holds the old values of exactly the fields that changed: here status, ended_at.

Endpoints behind it

Calls that change subscriptions. An event is also sent when a payer, the network, a timer or a person in the dashboard causes the change; the sentence above says which.