A plan grant duration changed.
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
The public plan grant ID.
The public customer ID.
The public subscription ID.
The public ID of the subscribed base plan.
The public ID of the plan whose access was granted.
The public ID of the immutable target plan release.
The plan grant status at this transition.
How the plan grant duration is defined at this transition.
The cycle count when duration is cycles.
When the plan grant started.
The effective expiration deadline, if any.
The reason recorded for this transition.
Where this transition originated.
When the plan grant was revoked, otherwise null.
When the plan grant was created.
When the represented transition occurred.
The grant timeline through the represented transition.
{
"event": "plan_grant.updated",
"timestamp": "2026-06-23T14:30:00.000Z",
"organizationId": "8f14e45f-ceea-4e7a-9c3d-1c2b3a4d5e6f",
"mode": "live",
"apiVersion": "2026-08-27",
"data": {
"id": "pgr_1a2b3c4d",
"customerId": "user_123",
"subscriptionId": "sub_1a2b3c4d",
"basePlanId": "pln_starter",
"targetPlanId": "pln_pro",
"targetPlanReleaseId": "plr_1a2b3c4d",
"status": "active",
"duration": "until_date",
"durationCycles": null,
"startsAt": "2026-08-01T00:00:00.000Z",
"expiresAt": "2026-11-15T00:00:00.000Z",
"reason": "Extended evaluation",
"source": "dashboard",
"revokedAt": null,
"createdAt": "2026-08-01T00:00:00.000Z",
"updatedAt": "2026-08-15T12:00:00.000Z",
"events": [
{
"id": "gre_1a2b3c4d",
"type": "created",
"reason": "Two-month product evaluation",
"source": "api",
"previousExpiresAt": null,
"expiresAt": "2026-10-01T00:00:00.000Z",
"duration": "cycles",
"durationCycles": 2,
"requestedExpiresAt": null,
"createdAt": "2026-08-01T00:00:00.000Z"
},
{
"id": "gre_5e6f7g8h",
"type": "updated",
"reason": "Extended evaluation",
"source": "dashboard",
"previousExpiresAt": "2026-10-01T00:00:00.000Z",
"expiresAt": "2026-11-15T00:00:00.000Z",
"duration": "until_date",
"durationCycles": null,
"requestedExpiresAt": "2026-11-15T00:00:00.000Z",
"createdAt": "2026-08-15T12:00:00.000Z"
}
]
}
}After an active Plan Grant's duration or deadline is committed. The payload is the grant at that update, and its last timeline event is updated.
This event does not fire for any other field change.
How is this guide?