support.settings.updated
A project's support inbox settings change.
The relay chat id — the Telegram chat or forum group the bot forwards member messages to — is never in this payload. It is an identifier the bot's linking handshake writes, not a setting a creator types, and no surface can change it through this path.
When this fires
A creator saves the project's support settings and at least one of the five visible settings is different afterwards:
- Dashboard — Support Settings → Save from the support inbox.
- REST —
PATCH /v1/projects/{project}/support/settings. Fields you omit keep their stored value. - MCP — the
update_support_settingstool.
It does not fire when:
- Nothing changed. Saving the form untouched, or a
PATCHthat re-sends the stored values, writes nothing and emits nothing. Blank strings normalise tonullbefore the comparison, so clearing an already-emptyagent_nameis not a change. - The bot links or unlinks the relay chat. That handshake changes the relay chat id, which is not one of the five settings this event covers.
- A member's message is auto-acknowledged. Sending the
auto_replytext is a message, not a settings change, and raises nothing in this family.
Required ability
support-conversation:view — token must carry this at mint time to subscribe an endpoint to this event.
Payload
{
"id": "evt_01HX...",
"type": "support.settings.updated",
"created_at": "2026-09-06T10:02:00Z",
"api_version": "2026-05-01",
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"data": {
"project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"settings": {
"enabled": true,
"relay_mode": "owner_dm",
"agent_name": "Team Research Premium",
"auto_reply": null,
"notify_email": false
},
"changes": {
"relay_mode": {
"from": "none",
"to": "owner_dm"
},
"agent_name": {
"from": null,
"to": "Team Research Premium"
}
}
}
}Field reference
| Field | Type | Notes |
|---|---|---|
id | string ULID | Unique event id, prefixed evt_. Use for idempotent processing. |
type | string | Always support.settings.updated 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.project_id | string UUID | Mirrors the envelope project_id. |
data.settings | object | The complete settings after the save — the same five keys GET /v1/projects/{project}/support/settings returns, minus its project_id and updated_at. |
data.settings.enabled | boolean | Whether member messages are accepted at all. When false, an unrecognised message gets the bot's not-understood reply instead of opening a thread. |
data.settings.relay_mode | enum: none, owner_dm, forum_group | How the creator is told a member wrote in: not at all, as a DM from the bot, or as a topic in a linked forum group. |
data.settings.agent_name | string, nullable | The name shown above each reply so it reads as a person, up to 60 characters. null means the project name is used. |
data.settings.auto_reply | string, nullable | The acknowledgement sent at most once per hour when a member writes in, up to 1000 characters. null means nothing is sent. |
data.settings.notify_email | boolean | Whether a backlog warning is also emailed alongside the Telegram notification. |
data.changes | object<string, {from,to}> | Map of the settings that changed. Keys are one or more of the five settings keys; values are before/after pairs. Never empty. |
data.changes.enabled.from | boolean | Previous value. Present only when the switch flipped. |
data.changes.enabled.to | boolean | New value. |
data.changes.relay_mode.from | enum: none, owner_dm, forum_group | Previous relay mode. Present only when it changed. |
data.changes.relay_mode.to | enum: none, owner_dm, forum_group | New relay mode. |
data.changes.agent_name.from | string, nullable | Previous display name. Present only when it changed. |
data.changes.agent_name.to | string, nullable | New display name, or null when cleared. |
data.changes.auto_reply.from | string, nullable | Previous acknowledgement text. Present only when it changed. |
data.changes.auto_reply.to | string, nullable | New acknowledgement text, or null when cleared. |
data.changes.notify_email.from | boolean | Previous value. Present only when the switch flipped. |
data.changes.notify_email.to | boolean | New value. |
Caveats
- Subscribing needs
support-conversation:view, but making the change needs the project update permission (project:updateon a token), because the settings are columns on the project rather than on the inbox. A token that can read support threads can hear about settings changes it could not have made. settingsis always the full post-save state, even when only one key changed. You can overwrite a cached copy wholesale and usechangespurely for "what to announce".auto_replyis creator-authored template text and does appear in bothsettingsandchanges— it is the message members receive, not a message a member sent, so the family's rule about member text is intact.- Switching
relay_modetoforum_groupdoes not by itself link a group. The project bot links a group when the creator adds it to a Telegram supergroup with Topics enabled as an administrator, and confirms by DM; until that happens, notifications have nowhere to go and member messages reach only the dashboard inbox.
Related events
support.conversation.opened— the traffic these settings govern.project.updated— other project-level edits, which never include the support columns.- Support events overview — back to family overview.
How is this guide?