trial.started
Fired when a subscription enters its trial period. Grant access here.
Payload
All webhook payloads follow a consistent top-level structure with event-specific data nested within the data object.
subscriptionIdstring
The subscription ID.
customerIdstring
The customer ID. Returns your externalId if you provided one when creating the customer, otherwise returns the Commet publicId.
statusstring
Always "trialing" for this event.
planIdstring
The plan ID.
planNamestring
The plan name.
trialEndsAtstring
ISO 8601 datetime when the trial ends.
{
"event": "trial.started",
"timestamp": "2026-03-25T14:32:00.000Z",
"organizationId": "org_abc123",
"mode": "live",
"apiVersion": "2026-05-25",
"data": {
"subscriptionId": "sub_1a2b3c4d",
"customerId": "user_123",
"status": "trialing",
"planId": "plan_pro_monthly",
"planName": "Pro",
"trialEndsAt": "2026-04-08T00:00:00.000Z"
}
}Trial lifecycle
Trials in Commet collect a payment method at checkout, so every trial has a clear path to revenue:
| Moment | Event | What to do |
|---|---|---|
| Checkout completes with trial days | trial.started | Grant full access. |
| 3 days before the trial ends | trial.will_end | Remind the customer billing starts soon. |
| Customer upgrades during the trial | trial.converted | Trial ends early, paid plan starts now. |
| Trial runs out | trial.expired | Regular billing begins automatically. |
Subscriptions with status: "trialing" have full access — treat them like active in your entitlement checks.
How is this guide?