List a subscription's history
The subscriptions.events.list operation: GET /api/v1/subscriptions/{id}/events in the REST API and the subscriptions_events_list tool in the MCP server.
/api/v1/subscriptions/{id}/eventsLists a subscription's history, newest first: creation, trial, activation, plan and quantity changes,
discounts, scheduled changes, pauses, cancellations, renewals and payment problems. Each entry has what changed
(before, after), how it moved monthly recurring revenue (mrrDelta), who did it and when.
Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).
At a glance
- REST:
GET /api/v1/subscriptions/{id}/events - MCP tool:
subscriptions_events_list - Operation ID:
subscriptions.events.list - Scope: Brand
- Permission:
subscriptions:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Pagination:
limit(at most 100) andstarting_after - Authentication: API key with the
subscriptions:readscope - Since: M5
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | sub_… ID |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
limit | integer (1 to 100) | No | |
starting_after | sevt_… ID | No |
Response
200 OK with a JSON object, a page of the list (newest first):
| Field | Type | Description |
|---|---|---|
object | "list" | |
data | array of object | |
data[].id | sevt_… ID | |
data[].object | "subscription_event" | |
data[].livemode | boolean | |
data[].subscriptionId | sub_… ID | |
data[].customerId | cus_… ID | |
data[].type | one of 20 values, e.g. created, trial_started, trial_ended (all in the OpenAPI document) | |
data[].before | object or null | |
data[].after | object or null | |
data[].mrrDelta | money or null | How this moved monthly recurring revenue. |
data[].actor | object | |
data[].actor.type | string | |
data[].actor.id | string | |
data[].actor.via | string or null | |
data[].at | date-time | |
has_more | boolean | |
next_cursor | sevt_… ID or null |
Examples
The latest changes
GET /api/v1/subscriptions/sub_01m4tx5nj8emwbyf7y9vcf47z5/events?limit=2
Authorization: Bearer or_test_…
Response (200):
{
"object": "list",
"data": [
{
"id": "sevt_01m4tx5nj8emwbyf7y9vcf47zg",
"object": "subscription_event",
"livemode": false,
"subscriptionId": "sub_01m4tx5nj8emwbyf7y9vcf47z5",
"customerId": "cus_01m4tx5nj8emwbyf7y9vcf47z4",
"type": "upgraded",
"before": {
"items": [
{
"id": "si_01m4tx5nj8emwbyf7y9vcf47za",
"priceId": "price_01m4tx5nj8emwbyf7y9vcf47y2",
"quantity": 3
}
]
},
"after": {
"items": [
{
"id": "si_01m4tx5nj8emwbyf7y9vcf47za",
"priceId": "price_01m4tx5nj8emwbyf7y9vcf47y3",
"quantity": 3
}
],
"effective": "now",
"prorationBehavior": "always_invoice",
"invoiceId": "inv_01m4tx5nj8emwbyf7y9vcf47zn"
},
"mrrDelta": {
"amount": "60000000",
"currency": "EUR"
},
"actor": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47zk",
"via": "console"
},
"at": "2026-10-20T09:00:00.000Z"
},
{
"id": "sevt_01m4tx5nj8emwbyf7y9vcf47zh",
"object": "subscription_event",
"livemode": false,
"subscriptionId": "sub_01m4tx5nj8emwbyf7y9vcf47z5",
"customerId": "cus_01m4tx5nj8emwbyf7y9vcf47z4",
"type": "created",
"before": null,
"after": {
"status": "active"
},
"mrrDelta": {
"amount": "87000000",
"currency": "EUR"
},
"actor": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47zk",
"via": "console"
},
"at": "2026-10-13T12:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No subscription with this ID is visible to the request. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
permission_denied | 403 | You can't see this brand's subscriptions (subscriptions:read). | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: validation_failed, api_version_unsupported, authentication_required, api_key_invalid, scope_required, dry_run_not_supported, rate_limited, internal_error.