Webhooks API
Events
💡 Please note that changes done by the OpenAPI don't trigger webhooks.
Each event's body is the content field of the main webhook structure.
contact.updated
It is emitted on every contact update.
{
"id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"email": "[email protected]",
"phone": "123 456 789",
"first_name": "John",
"last_name": "Doe",
"distinct_id": "123456",
"properties": [
{
"name": "shoe_size",
"value": "44 (EU)"
}
]
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | string(uuid) | No | ID of the contact |
| string(email) | Yes | Email address of the contact [RFC822] | |
| » phone | string | Yes | Phone number of the contact |
| » first_name | string | Yes | First name of the contact |
| » last_name | string | Yes | Last name of the contact |
| » distinct_id | string | Yes | ID of the contact in external system |
| » properties | object | No | |
| »» name | string | No | Contact property name |
| »» value | string | No | Contact property value |
contact.created
It is emitted on every contact creation.
{
"id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"email": "[email protected]",
"phone": "123 456 789",
"first_name": "John",
"last_name": "Doe",
"distinct_id": "123456",
"properties": [
{
"name": "shoe_size",
"value": "44 (EU)"
}
]
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | string(uuid) | No | ID of the contact |
| string(email) | Yes | Email address of the contact [RFC822] | |
| » phone | string | Yes | Phone number of the contact |
| » first_name | string | Yes | First name of the contact |
| » last_name | string | Yes | Last name of the contact |
| » distinct_id | string | Yes | ID of the contact in external system |
| » properties | object | No | |
| »» name | string | No | Contact property name |
| »» value | string | No | Contact property value |
conversation.solved_by_operator
It is emitted when the operator solves the conversation.
Once the operator considers the conversation finished, they can click the "Mark as Solved" button. This action will move the conversation into the "Solved" section of the inbox. For more details please read the article from the Tidio help center.
{
"contact_id": "a1b4ca4c-1108-4432-b256-1e4cf2bf6f9e",
"solved_at": "2023-01-01T00:00:00+00:00"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » contact_id | string(uuid) | Yes | ID of the contact |
| » solved_at | string(date-time) | No | Date of solving conversation |
conversation.solved_by_lyro
It is emitted when Lyro considers the conversation finished.
{
"contact_id": "a1b4ca4c-1108-4432-b256-1e4cf2bf6f9e",
"solved_at": "2023-01-01T00:00:00+00:00",
"reason": "handoff"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » contact_id | string(uuid) | Yes | ID of the contact |
| » solved_at | string(date-time) | No | Date of solving conversation |
| » reason | string | No | The reason why Lyro considered conversation as solved. Possible values:
|
conversation.solved_automatically
This event is emitted when the conversation is automatically resolved using the Automatic Solve feature.
This feature is not enabled by default and requires configuration.
For more information, please refer to the article in the Tidio Help Center.
{
"contact_id": "a1b4ca4c-1108-4432-b256-1e4cf2bf6f9e",
"solved_at": "2023-01-01T00:00:00+00:00"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » contact_id | string(uuid) | Yes | ID of the contact |
| » solved_at | string(date-time) | No | Date of solving conversation |
ticket.created
This event is emitted when the ticket is created.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.status_updated
This webhook is emitted when the ticket status is changed.
Eg. from open to solved.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.operator_assigned
This webhook is emitted when the new operator is assigned to a ticket.
The ID of the newly assigned operator will appear in the body of the webhook.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.operator_replied
This webhook is emitted when the operator has responded to the ticket.
The webhook content contains the new message from the operator and its details.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.contact_replied
This webhook is emitted when the contact has responded to the ticket.
The webhook content contains a new message from the contact and its details.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.internal_note_added
This webhook is emitted when the internal note is added to the ticket.
The content contains the new internal note and its details.
In this cast the message_type is internal.
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "solved",
"subject": "A delivery problem",
"messages": [
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"author_type": "operator",
"message_type": "internal",
"message_content": "The customer has not received a delivery. Solve it ASAP!"
},
{
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:13:33+00:00",
"message_id": "01HBTFT815GY51CB8PG7QJPWRS",
"attachments": [],
"author_type": "operator",
"message_type": "public",
"message_content": "It will be delivered 10/03"
}
],
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » messages | object | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
ticket.replied
This webhook is emitted when ANY reply is added to a ticket, regardless of who sent it.
This unified event covers all types of ticket replies:
- operator replies (public messages from operators)
- contact replies (messages from customers/contacts)
- internal notes (private notes from operators)
The webhook content ALWAYS contains exactly one message — the specific message that triggered the reply — not all ticket messages.
The author_type field indicates who sent the reply:
- operator - A human operator or AI assistant sent the message
- contact - A customer/contact sent the message
- workflow - A workflow sent the message
- ai - An AI assistant sent the message
The message_type field indicates the visibility:
- public - Visible to both operator and contact
- internal - Visible only to operators (internal notes)
{
"id": 10000,
"link": "https://tidio.com/panel/inbox/tickets/10000",
"status": "open",
"subject": "A delivery problem",
"message": {
"author_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"created_at": "2023-10-02T13:11:25+00:00",
"message_id": "01HBTFSW6QVSP7F5C1JXKMT17G",
"attachments": [
"https://example.com"
],
"message_type": "public",
"message_content": "Thank you for your message. We will resolve this issue shortly.",
"author_type": "operator"
},
"priority": "normal",
"contact_id": "147ae37d-43bc-42a6-bc7b-c10d1525a2f7",
"contact_email": "[email protected]",
"assigned_operator_id": "b9af081a-8ab5-40fb-8033-f6fae058bad7",
"assigned_department_id": "91ee21bb-b492-4d8e-af47-90bb6cab01df",
"custom_channel_id": "01K7PCM5YJHGH8G72MGFK36WKY"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » id | integer | No | Ticket ID |
| » link | string(url) | No | URL to ticket |
| » status | string | No | Ticket status |
| » subject | string | No | Ticket subject |
| » message | any | No | |
| »» anonymous | object | Yes | |
| »»» author_id | string | No | Author ID of the message. When "author_type" is "operator", the operator ID is returned. When "author_type" is "contact", the contact ID is returned. |
| »»» created_at | string(date-time) | No | The date the message was created |
| »»» message_id | string(ulid) | No | Message ID |
| »»» attachments | object | No | Links to attachment |
| »»» message_type | string | No | Message visibility type |
| »»» message_content | string | No | Message content |
| »» anonymous | object | Yes | |
| »»» author_type | string | No | Defines type of author who sent the reply |
| » priority | string | No | Ticket priority |
| » contact_id | string(uuid) | No | ID of the contact |
| » contact_email | string(email) | Yes | Email of contact where ticket messages are sent |
| » assigned_operator_id | string(uuid) | Yes | ID of assigned Operator |
| » assigned_department_id | string(uuid) | No | ID of assigned Department |
| » custom_channel_id | string¦null | Yes | ID of custom channel to attach to given ticket. |
customer_satisfaction.rated
This webhook is emitted when a customer satisfaction survey is submitted.
{
"date": "2025-09-29T08:21:25+00:00",
"type": "operator",
"email": "[email protected]",
"score": 5,
"source": "conversations",
"comment": "Great support!"
}Parameters
| Name | Type | Nullable | Description |
|---|---|---|---|
| content | object | No | |
| » date | string(date-time) | No | Date when the rating was submitted |
| » type | string | No | Entity that was rated (operator or ai_assistant) |
| string(email) | Yes | Email address of the respondent (if available) | |
| » score | integer | No | CSAT score on a 1-5 scale (1 = negative, 5 = positive) |
| » source | string | No | Where the rating originated from (conversations or tickets) |
| » comment | string | Yes | Optional comment left by the respondent |