A valid request URL is required to generate request examples{
"cancellations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subscription_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "too_expensive",
"comment": "<string>",
"offer_shown": "",
"offer_taken": "",
"at_period_end": true,
"confirmed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Why the people on this subscription left
Requires billing:read. Every cancellation recorded against one subscription, newest first — the reason, the comment somebody typed, which save offer was put in front of them and whether they took it.
Records nobody carried out are included, and they are the interesting ones. A cancellation flow that was opened and abandoned — the offer worked, or the tab was closed — is the only churn signal that arrives while the customer is still a customer. Those rows have confirmed_at: null.
at_period_end is null until a cancellation is confirmed: it has not been decided, which is a different fact from “immediately”.
A valid request URL is required to generate request examples{
"cancellations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subscription_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"customer_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reason": "too_expensive",
"comment": "<string>",
"offer_shown": "",
"offer_taken": "",
"at_period_end": true,
"confirmed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Authorizations
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Headers
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Path Parameters
The subscription's id here, not the gateway's id for it.
Query Parameters
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test Response
The cancellations.
Show child attributes
Show child attributes