member.* events
Member (subscriber) lifecycle events.
A "member" in webhook events is the project-scoped subscriber (the ProjectUser model), not a team member. Fires on joining, churning, bans, and Telegram-side events driven by the bot.
Events
member.joined
Paid subscriber gains access to a project.
member.trial_joined
Trial subscriber joins a project.
member.converted
Trial converts to a paying subscription.
member.churned
Subscriber's last active subscription lapsed.
member.removed
Subscriber soft-deleted manually.
member.banned
Creator bans a subscriber.
member.unbanned
Ban lifted; subscriber returns to churned.
member.kicked
Subscriber kicked from a resource without ban.
member.resource_added
Subscriber gains access to a specific resource.
member.resource_removed
Subscriber loses access to a specific resource.
| Event | Fires when |
|---|---|
member.joined | A paid subscriber gains access to the project. |
member.trial_joined | A trial subscriber joins the project. |
member.converted | A trial converts to a paying subscription. |
member.churned | A subscriber's subscription ends without renewal. |
member.removed | A subscriber is removed without being banned (e.g., kicked for inactivity). |
member.banned | A creator bans a subscriber. |
member.unbanned | A ban is lifted. |
member.kicked | A subscriber is kicked from a resource without a ban. |
member.resource_added | A subscriber is added to an additional resource (channel, group). |
member.resource_removed | A subscriber is removed from a specific resource. |
See the dedicated pages above for full payload, field reference, and caveats per event.
Example payload
{
"id": "evt_01HX...",
"type": "member.joined",
"created_at": "2026-05-18T10:05:00Z",
"api_version": "2026-05-01",
"project_id": "prj_01HX...",
"data": {
"subscriber": {
"id": "usr_01HX...",
"telegram_user_id": "123456789",
"email": null,
"status": "customer"
},
"subscription_id": "sub_01HX...",
"plan_id": "pln_01HX..."
}
}Guarantees
member.joinedfollowssubscription.createdfor paid plans.member.trial_joinedfollowssubscription.trial_started.member.convertedfires exactly once per trial conversion.- Emails are masked to null unless the subscribing token carries
project-user:viewand the subscriber consented to sharing.
Required abilities
Tokens subscribing to member.* events must carry project-user:view-any.
How is this guide?