access_until | yes | `string | null` | - | When the buyer’s access ends. For a cancellation sent when it is accepted, this is the end of the period already paid for; for every other ending it is when the subscription ended. Null when that date is not known. |
additional_recipients | no | array | - | Inboxes you configured to be copied on this notification type. Absent when there are none. | |
business | no | object | - | The business selling the subscription. Carries object (what it is) and id (which one); id is the public identifier a merchant addresses it by. | |
business_name | no | `string | null` | - | The seller’s name as it appeared on the purchase. |
buyer | yes | object | - | - | |
cancellation_reason | yes | string | buyer_cancel, admin_cancel, business_cancel, payment_failed | Why the subscription ended, and these four values are the whole list. buyer_cancel: the buyer cancelled it, or it was cancelled directly at the payment processor. admin_cancel: COPE support cancelled it on the buyer’s behalf after the buyer confirmed. business_cancel: you cancelled it. payment_failed: renewal payments failed and every retry was used up. A fifth value would arrive only with a coordinated change to the consumers of this event, never on its own. | |
cancelled_at | yes | string | - | When the cancellation was accepted. For an ending nobody asked for — renewal payments that kept failing — it is when the subscription ended. Always present. | |
currency | yes | `string | null` | - | ISO 4217 code of the recurring charge. Null when the subscription’s terms are not on record. |
event_type | no | const | subscription.cancelled | Optional on the wire, and normally absent: the event’s type is carried by the CloudEvents envelope as type, so the payload does not repeat it. It is declared here so that if you copy the envelope’s type onto the payload before validating the payload against this schema, that validation still passes. Read the envelope rather than depending on this field — a payload without it is valid. | |
interval | yes | `string | null` | day, week, month, year | - |
interval_count | yes | `integer | null` | - | - |
line_item | no | object | - | The order line the subscription belongs to. Carries object (what it is) and id (which one); id is the public identifier a merchant addresses it by. | |
line_item_id | yes | integer | - | An internal reference. Do not store it or use it to identify the subscription. It is a database row number, not a public identifier — use subscription.id instead. It is removed at the contract cut (plan 53 D-13), and the removal is legal here because a public identifier for the same entity is in this same payload. | |
manage_subscription_url | yes | string | - | Where the buyer manages their subscriptions. | |
order | no | object | - | The order the subscription was bought on. Carries object (what it is) and id (which one); id is the public identifier a merchant addresses it by. | |
product | no | object | - | The product the subscription is for. Carries object (what it is) and id (which one); id is the public identifier a merchant addresses it by. | |
product_name | no | `string | null` | - | The product’s name as it was when the subscription was bought, so it is still present after the product is renamed or deleted. |
recurring_amount_cents | yes | `integer | null` | - | The recurring charge per billing cycle in minor units, as it stood when the subscription was cancelled. |
subscription | no | object | - | The subscription this event concerns. Carries object (what it is) and id (which one); id is the public identifier a merchant addresses it by. | |
subscription_id | no | string | - | The subscription’s public reference (‘sub_’ followed by 16 alphanumerics) — the identifier the subscriptions API accepts, and the handle to use for this subscription. Events sent before this field existed omit it; order_uuid identifies the purchase in that case. | |