member.trial_joined
A subscriber joins on a trial via cardless trial or access-code redemption.
Like member.joined, this event covers zero-payment acquisition
only. A paid checkout that starts in a trial does not emit it.
When this fires
Two paths emit this event:
- Cardless trial start — a subscriber begins a trial that took no payment method.
- Access-code redemption on a trial plan — the redeemed plan sets
trial_ends_at, so this fires in place ofmember.joined.
A Stripe checkout that begins with a trial window emits subscription.activated and subscription.trial_started, but no member.* join event.
Required ability
project-user:view — token must carry this at mint time to subscribe an endpoint to this event.
Payload
The data keys differ by path. Absent keys are omitted entirely, not sent as null.
{
"id": "evt_01HX...",
"type": "member.trial_joined",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4",
"plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
"subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
"trial_ends_at": "2026-05-25T10:05:00Z"
}
}{
"id": "evt_01HX...",
"type": "member.trial_joined",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"subscription_id": "5b7e2d40-1a86-4c39-97f2-e83d0b16c5a4",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"plan_id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",
"subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
"access_code": "TRIAL-7C1B4"
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always member.trial_joined for this event. |
created_at | ISO 8601 timestamp | Server-side emission time. |
api_version | string | Webhook API contract version. |
project_id | string UUID | Project this event belongs to. |
data.subscription_id | string UUID | Subscription that triggered the join. |
data.plan_id | string UUID | Plan the subscription is on. |
data.subscriber_id | string UUID | Subscriber's project-scoped user id. |
data.trial_ends_at | ISO 8601 timestamp | Cardless-trial path only. |
data.project_id | string UUID | Access-code path only. Mirrors the envelope project_id. |
data.access_code | string | Access-code path only. The full redeemed code, not masked. |
Caveats
- A trial-joined member emits
member.convertedif the trial converts to paid, or rolls intomember.churnedonce the trial expires without converting. member.convertedis currently emitted for Stripe only. Trials taken through other providers will not produce a conversion event.subscription.createdandsubscription.trial_startedfire alongside this event on both paths.
Related events
subscription.trial_started— fires alongside.member.converted— fires on successful trial conversion (Stripe only).member.joined— non-trial counterpart.- Member events overview — back to family overview.
How is this guide?