Event catalogue
One section per webhook event, generated from the API contract. Every delivery has the same envelope
(id, type, api_version, created_at, account_id,
line_id, channel, data); the samples below show data for each type.
Read Receive webhooks for signatures, retries and replay.
Ignore event types you do not know and answer 2xx.
campaign.scheduled
A draft campaign was scheduled, or a scheduled campaign moved to a new time. `data.actor` is who did it. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.scheduled",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
campaign.unscheduled
A scheduled campaign went back to `draft` (`scheduled_at` cleared). `data.actor` is who did it. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.unscheduled",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
campaign.started
A campaign entered `running` for the first time; a later entry from `paused` is `campaign.resumed`. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.started",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
}
}
}
campaign.paused
A running campaign was paused; queued campaign messages are held. `data.actor` is who did it (`system` for an automatic pause). `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.paused",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
campaign.resumed
A paused campaign is running again. `data.actor` is who did it. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.resumed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
campaign.completed
Every recipient of the campaign is final. `data.campaign` carries the final stats. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.completed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
}
}
}
campaign.cancelled
The campaign was cancelled; its pending recipients and queued messages are cancelled. `data.actor` is who did it. `data.campaign` is the campaign resource as it is when the event is delivered.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "campaign.cancelled",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"campaign": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "draft",
"body": "Your order is ready for pickup.",
"template_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"media_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"variables": [],
"audience": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"smart_list_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"import_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"addresses": [
{
"address": "+923451234567",
"variables": []
}
]
},
"exclude": {
"group_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
},
"category": "marketing",
"compliance": {
"consent_asserted_at": "2026-10-01T09:15:02Z",
"consent_asserted_by": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"service_message": true
},
"append_opt_out_text": true,
"shorten_links": true,
"track_clicks": true,
"scheduled_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"paused_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"cancelled_at": "2026-10-01T09:15:02Z",
"eta_at": "2026-10-01T09:15:02Z",
"stats": {
"total": 1,
"excluded": 1,
"duplicates": 1,
"expanded_at": "2026-10-01T09:15:02Z",
"skipped": []
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
contact.created
A contact was created (API, portal, import, or inbound from a new address). `data.contact` is the contact resource.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "contact.created",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"contact": {
"id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"first_name": "Amina",
"last_name": "Khan",
"display_name": "Amina Khan",
"email": "amina@example.com",
"timezone": "Asia/Karachi",
"language": "en",
"custom_fields": {
"plan": "gold"
},
"identities": [
{
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567",
"meta": [],
"country_iso": "PK",
"is_primary": true,
"suppressed": false,
"blocked_at": null,
"created_at": "2026-09-12T10:04:11Z"
}
],
"group_ids": [
"0198e0d2-8a40-7f15-a6b3-2c9e4d1f7a09"
],
"source": "api",
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-09-12T10:04:11Z",
"updated_at": "2026-10-01T09:15:02Z"
}
}
}
contact.updated
Fields, identities, groups or the merge target of a contact changed; a bulk import emits one event per changed contact. `data.changed` names what changed.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "contact.updated",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"contact": {
"id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"first_name": "Amina",
"last_name": "Khan",
"display_name": "Amina Khan",
"email": "amina@example.com",
"timezone": "Asia/Karachi",
"language": "en",
"custom_fields": {
"plan": "gold"
},
"identities": [
{
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567",
"meta": [],
"country_iso": "PK",
"is_primary": true,
"suppressed": false,
"blocked_at": null,
"created_at": "2026-09-12T10:04:11Z"
}
],
"group_ids": [
"0198e0d2-8a40-7f15-a6b3-2c9e4d1f7a09"
],
"source": "api",
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-09-12T10:04:11Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"changed": [
"example"
]
}
}
contact.deleted
A contact was soft-deleted, erased (`erased: true`; nothing of it remains) or merged into another contact (`merged_into`). The data carries ids only.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "contact.deleted",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"erased": true,
"merged_into": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
import.completed
An import finished (any type; a user cancel emits nothing). `data.import` is the import resource with its totals. `error_report_url` is signed for 15 minutes from when the event was rendered, so a later retry or replay may hold an expired URL; `GET /v1/imports/{id}` signs a fresh one.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "import.completed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"import": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "phone_history",
"status": "uploaded",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"options": [],
"totals": {
"rows": 1,
"created": 1,
"updated": 1,
"skipped": 1,
"errors": 1
},
"confirmation": [],
"error": "example",
"error_report_url": "https://example.com/error-report-url",
"error_report_url_expires_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
}
}
}
import.failed
An import failed; `data.import.error` says why. Same shape as `import.completed`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "import.failed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"import": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "phone_history",
"status": "uploaded",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"options": [],
"totals": {
"rows": 1,
"created": 1,
"updated": 1,
"skipped": 1,
"errors": 1
},
"confirmation": [],
"error": "example",
"error_report_url": "https://example.com/error-report-url",
"error_report_url_expires_at": "2026-10-01T09:15:02Z",
"started_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
}
}
}
export.completed
An export file is ready. `data.export` is the export resource with `url: null`: fetch the signed download URL with `GET /v1/exports/{id}`. A failed export emits nothing; poll the export instead.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "export.completed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"export": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "messages_csv",
"status": "queued",
"params": [],
"url": null,
"url_expires_at": null,
"expires_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z",
"completed_at": "2026-10-01T09:15:02Z"
}
}
}
line.sender_changed
The sender list of a line changed: senders were set or reordered, a newly verified number joined the Direct line, or a disconnected number left every line. `data.senders` is the whole list after the change, in position order (0 first).
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.sender_changed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"senders": [
{
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"role": "primary",
"position": 0,
"enabled": true
}
],
"sticky_cleared_count": 0
}
}
line.failover
Queued messages of a line moved from one sender to another because the first could not send: it left the line, was disconnected, stayed unhealthy longer than the line's `failover_seconds` allow for the lane (by default high 2 min, normal 15 min, bulk 60 min), reported a sender fault, or the messages were waiting for any sender. One event per line, sender pair and sweep; `message_ids` lists at most 100 of the `message_count` messages. Messages sent with a named `channel_id` or `from` never move.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.failover",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"from_channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"to_channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"reason": "Example text.",
"message_count": 1,
"message_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
]
}
}
line.no_sender
No sender of the line can send: messages wait with `hold_reason` `no_sender_available` and move to the first sender that can again. Sent once when the line loses its last healthy sender, not again until one came back.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.no_sender",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"held_count": 0
}
}
line.connected
A partner line left `not_connected`: the user connected a phone and its first number was verified. Sent once per line, whatever the line's state then is: `state` says it, and when it is `needs_attention` a `line.needs_attention` follows. Later recoveries send `line.recovered`. Partner lines only (`partner_lines` endpoints and the account's own endpoints).
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.connected",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"state": "connected",
"needs_attention_reasons": [
"device_offline"
],
"previous_state": "connected"
}
}
line.needs_attention
A connected partner line needs its user: `needs_attention_reasons` says why. Sent when the line enters the state and again when a new reason is added (a reason that goes away is not sent). The same as `GET /partner/v1/lines/{id}/status` at that moment.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.needs_attention",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"state": "connected",
"needs_attention_reasons": [
"device_offline"
],
"previous_state": "connected"
}
}
line.recovered
A partner line that needed attention is connected again. Sent once per recovery.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.recovered",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"state": "connected",
"needs_attention_reasons": [
"device_offline"
],
"previous_state": "connected"
}
}
line.detached
A partner line was detached and archived, by the partner (`DELETE /partner/v1/lines/{id}`), by the account's owner, or by MyComm. The account keeps its numbers and history; the line sends no more. Sent once.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.detached",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"by": "partner"
}
}
line.quota_low
A sponsored partner line used 80% of the messages its partner pays for this cycle, for one channel type. Sent once per cycle and type (when one send takes the line past 80% and to 100%, both this and `line.quota_exhausted` are sent). Partner lines only.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.quota_low",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"channel_type": "example",
"allowance": 0,
"used": 0,
"cycle_ends_at": "2026-10-01T09:15:02Z"
}
}
line.quota_exhausted
A sponsored partner line used all the messages its partner pays for this cycle, for one channel type. Further messages of that type wait with `hold_reason` `sponsor_quota_exhausted` until the next cycle, unless the sponsorship lets the user's own messages take over (`allow_user_overage`). Sent once per cycle and type.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.quota_exhausted",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"external_ref": "example",
"channel_type": "example",
"allowance": 0,
"used": 0,
"cycle_ends_at": "2026-10-01T09:15:02Z"
}
}
line.alarm
Something about the line needs attention, sent once per episode: while the condition lasts it only counts, and once it has cleared the next occurrence is a new episode. `kind`: `failover` (messages moved to another sender; ends after an hour without another move), `no_sender` (no sender can send; ends after 15 minutes with one that can, and a new loss within those minutes only counts), `pool_member_blocked` (a pool member was paused or disconnected; ends when it is resumed), `budget_80` (a sender used `alarm_thresholds.budget_percent` of its hourly limit; ends below 60 % of that limit, or 20 points under `alarm_thresholds.budget_percent` when that is lower), `self_loop` (a sender sent `alarm_thresholds.self_loop_per_hour` messages to the account's own numbers within an hour; ends after an hour without one), `sponsor_quota_low` (80 % of the sponsored allowance is used; ends with the next cycle or when the line has no active sponsorship) or `unconfirmed` (messages an unpaired phone never confirmed were failed or sent again, per `on_unconfirmed`; ends after 24 hours without one). Archiving or detaching a line ends its open alarms. An alarm about a sender (`channel_id` set, as for `pool_member_blocked` and `budget_80`) is sent once for each line holding it. The events that already tell of a change (`line.failover`, `line.no_sender`, `line.quota_low`) are still sent.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.alarm",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"alarm_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"kind": "failover",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"count": 1,
"first_at": "2026-10-01T09:15:02Z",
"data": []
}
}
line.recovery_requested
Someone who says they lost their number asked to recover the account of this line; sent once per partner, on its oldest live line of the account. Nothing has changed on the account. If you know this person, answer with `POST /partner/v1/lines/{id}/vouch`. It is never required and never enough alone: MyComm staff decide, no earlier than `waiting_until`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "line.recovery_requested",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"recovery_request_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_name": "example",
"contact_number": "example",
"requested_at": "2026-10-01T09:15:02Z",
"waiting_until": "2026-10-01T09:15:02Z"
}
}
conversation.handed_over
The conversation moved to another line (`POST /v1/conversations/{id}/handover`) with its messages; the contact's next replies land on `to_line_id`. The envelope `line_id` is the target line. When the target already had a conversation with the contact the two merged, and `conversation_id` is that conversation.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.handed_over",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"from_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"to_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
link.clicked
A person clicked a short link; bot and link-preview clicks emit nothing. `line_id` and `channel` are those of the message that carried the link. The data carries no IP address or user agent. `slug`, `target_url`, `contact_id` and `click_count` are `null` when the link no longer exists (its message was deleted or its contact erased).
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "link.clicked",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"short_link_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slug": "x7Kp2Qa",
"target_url": "https://erp.example.com/pay/1094827",
"message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"campaign_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"clicked_at": "2026-10-01T09:15:02Z",
"country_iso": "PK",
"click_count": 0
}
}
channel.connected
A number finished verification and is `active`. `data.channel` is the channel resource.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.connected",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "android_sim",
"name": "Example",
"address": "+923001234567",
"display_address": "+923001234567",
"status": "pending_verification",
"pause_reason": "owner",
"paused_at": "2026-10-01T09:15:02Z",
"disconnect_reason": "owner",
"device_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"device_sim_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"default_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"capabilities": {
"text_max_chars": 1,
"segmented": true,
"max_segments": 1,
"media": [],
"max_media_items": 1,
"delivery_reports": true,
"read_receipts": true,
"typing": true,
"reactions": true,
"edit_delete": true,
"buttons": true,
"location": true,
"business_initiated": true,
"session_window_seconds": 1,
"groups": true
},
"allowed_destination_countries": [
"example"
],
"skip_business_senders": true,
"rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
},
"acknowledged_risk_at": "2026-10-01T09:15:02Z"
},
"rate_policy_source": "suggested",
"rate_policy_risk": "green",
"suggested_rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
}
},
"rate_policy_ceiling": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1
},
"warmup": {
"active": true,
"day": 1,
"ends_at": "2026-10-01T09:15:02Z",
"today_cap": 1
},
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"queue": {
"queued": 1,
"held": 1,
"leased": 1
},
"usage": {
"segments_15m": 1,
"segments_1h": 1,
"segments_24h": 1
},
"throttled_until": "2026-10-01T09:15:02Z",
"verification": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"step": "started",
"method": "loopback",
"attempts": 1,
"confirmation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"expires_at": "2026-10-01T09:15:02Z",
"decided_at": "2026-10-01T09:15:02Z"
},
"failure_reason": "timeout",
"expires_at": "2026-10-01T09:15:02Z",
"verified_at": "2026-10-01T09:15:02Z"
},
"verified_at": "2026-10-01T09:15:02Z",
"connected_at": "2026-10-01T09:15:02Z",
"disconnected_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
}
}
}
channel.verification_failed
Verification failed after 3 attempts, or at once for `address_in_use` and `declined_on_device`. `data.reason` is the `failure_reason` of the verification.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.verification_failed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "android_sim",
"name": "Example",
"address": "+923001234567",
"display_address": "+923001234567",
"status": "pending_verification",
"pause_reason": "owner",
"paused_at": "2026-10-01T09:15:02Z",
"disconnect_reason": "owner",
"device_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"device_sim_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"default_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"capabilities": {
"text_max_chars": 1,
"segmented": true,
"max_segments": 1,
"media": [],
"max_media_items": 1,
"delivery_reports": true,
"read_receipts": true,
"typing": true,
"reactions": true,
"edit_delete": true,
"buttons": true,
"location": true,
"business_initiated": true,
"session_window_seconds": 1,
"groups": true
},
"allowed_destination_countries": [
"example"
],
"skip_business_senders": true,
"rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
},
"acknowledged_risk_at": "2026-10-01T09:15:02Z"
},
"rate_policy_source": "suggested",
"rate_policy_risk": "green",
"suggested_rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
}
},
"rate_policy_ceiling": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1
},
"warmup": {
"active": true,
"day": 1,
"ends_at": "2026-10-01T09:15:02Z",
"today_cap": 1
},
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"queue": {
"queued": 1,
"held": 1,
"leased": 1
},
"usage": {
"segments_15m": 1,
"segments_1h": 1,
"segments_24h": 1
},
"throttled_until": "2026-10-01T09:15:02Z",
"verification": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"step": "started",
"method": "loopback",
"attempts": 1,
"confirmation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"expires_at": "2026-10-01T09:15:02Z",
"decided_at": "2026-10-01T09:15:02Z"
},
"failure_reason": "timeout",
"expires_at": "2026-10-01T09:15:02Z",
"verified_at": "2026-10-01T09:15:02Z"
},
"verified_at": "2026-10-01T09:15:02Z",
"connected_at": "2026-10-01T09:15:02Z",
"disconnected_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
},
"reason": "timeout"
}
}
channel.disconnected
The number was disconnected (owner disconnect, SIM retirement, ops force-release, account deletion or a stale release). `data.reason` is the `disconnect_reason`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.disconnected",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "android_sim",
"name": "Example",
"address": "+923001234567",
"display_address": "+923001234567",
"status": "pending_verification",
"pause_reason": "owner",
"paused_at": "2026-10-01T09:15:02Z",
"disconnect_reason": "owner",
"device_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"device_sim_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"default_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"capabilities": {
"text_max_chars": 1,
"segmented": true,
"max_segments": 1,
"media": [],
"max_media_items": 1,
"delivery_reports": true,
"read_receipts": true,
"typing": true,
"reactions": true,
"edit_delete": true,
"buttons": true,
"location": true,
"business_initiated": true,
"session_window_seconds": 1,
"groups": true
},
"allowed_destination_countries": [
"example"
],
"skip_business_senders": true,
"rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
},
"acknowledged_risk_at": "2026-10-01T09:15:02Z"
},
"rate_policy_source": "suggested",
"rate_policy_risk": "green",
"suggested_rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
}
},
"rate_policy_ceiling": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1
},
"warmup": {
"active": true,
"day": 1,
"ends_at": "2026-10-01T09:15:02Z",
"today_cap": 1
},
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"queue": {
"queued": 1,
"held": 1,
"leased": 1
},
"usage": {
"segments_15m": 1,
"segments_1h": 1,
"segments_24h": 1
},
"throttled_until": "2026-10-01T09:15:02Z",
"verification": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"step": "started",
"method": "loopback",
"attempts": 1,
"confirmation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"expires_at": "2026-10-01T09:15:02Z",
"decided_at": "2026-10-01T09:15:02Z"
},
"failure_reason": "timeout",
"expires_at": "2026-10-01T09:15:02Z",
"verified_at": "2026-10-01T09:15:02Z"
},
"verified_at": "2026-10-01T09:15:02Z",
"connected_at": "2026-10-01T09:15:02Z",
"disconnected_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
},
"reason": "owner"
}
}
channel.paused
The channel was paused. `data.reason` is the `pause_reason`; `dominant_code` and `streak` are set only for `auto:failure_streak`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.paused",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "android_sim",
"name": "Example",
"address": "+923001234567",
"display_address": "+923001234567",
"status": "pending_verification",
"pause_reason": "owner",
"paused_at": "2026-10-01T09:15:02Z",
"disconnect_reason": "owner",
"device_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"device_sim_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"default_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"capabilities": {
"text_max_chars": 1,
"segmented": true,
"max_segments": 1,
"media": [],
"max_media_items": 1,
"delivery_reports": true,
"read_receipts": true,
"typing": true,
"reactions": true,
"edit_delete": true,
"buttons": true,
"location": true,
"business_initiated": true,
"session_window_seconds": 1,
"groups": true
},
"allowed_destination_countries": [
"example"
],
"skip_business_senders": true,
"rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
},
"acknowledged_risk_at": "2026-10-01T09:15:02Z"
},
"rate_policy_source": "suggested",
"rate_policy_risk": "green",
"suggested_rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
}
},
"rate_policy_ceiling": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1
},
"warmup": {
"active": true,
"day": 1,
"ends_at": "2026-10-01T09:15:02Z",
"today_cap": 1
},
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"queue": {
"queued": 1,
"held": 1,
"leased": 1
},
"usage": {
"segments_15m": 1,
"segments_1h": 1,
"segments_24h": 1
},
"throttled_until": "2026-10-01T09:15:02Z",
"verification": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"step": "started",
"method": "loopback",
"attempts": 1,
"confirmation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"expires_at": "2026-10-01T09:15:02Z",
"decided_at": "2026-10-01T09:15:02Z"
},
"failure_reason": "timeout",
"expires_at": "2026-10-01T09:15:02Z",
"verified_at": "2026-10-01T09:15:02Z"
},
"verified_at": "2026-10-01T09:15:02Z",
"connected_at": "2026-10-01T09:15:02Z",
"disconnected_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
},
"reason": "owner",
"dominant_code": "example",
"streak": 1
}
}
channel.resumed
A paused channel is `active` again.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.resumed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "android_sim",
"name": "Example",
"address": "+923001234567",
"display_address": "+923001234567",
"status": "pending_verification",
"pause_reason": "owner",
"paused_at": "2026-10-01T09:15:02Z",
"disconnect_reason": "owner",
"device_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"device_sim_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"default_line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_ids": [
"0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
],
"capabilities": {
"text_max_chars": 1,
"segmented": true,
"max_segments": 1,
"media": [],
"max_media_items": 1,
"delivery_reports": true,
"read_receipts": true,
"typing": true,
"reactions": true,
"edit_delete": true,
"buttons": true,
"location": true,
"business_initiated": true,
"session_window_seconds": 1,
"groups": true
},
"allowed_destination_countries": [
"example"
],
"skip_business_senders": true,
"rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
},
"acknowledged_risk_at": "2026-10-01T09:15:02Z"
},
"rate_policy_source": "suggested",
"rate_policy_risk": "green",
"suggested_rate_policy": {
"schema": "example",
"interval_ms": {
"min": 1,
"max": 1
},
"caps": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1,
"new_recipients_per_day": 1
},
"warmup": {
"enabled": true
},
"active_hours": {
"start": "example",
"end": "example",
"timezone": "example"
},
"bulk_hours": {
"start": "example",
"end": "example",
"tz": "example"
}
},
"rate_policy_ceiling": {
"per_min": 1,
"per_15m": 1,
"per_hour": 1,
"per_day": 1
},
"warmup": {
"active": true,
"day": 1,
"ends_at": "2026-10-01T09:15:02Z",
"today_cap": 1
},
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"queue": {
"queued": 1,
"held": 1,
"leased": 1
},
"usage": {
"segments_15m": 1,
"segments_1h": 1,
"segments_24h": 1
},
"throttled_until": "2026-10-01T09:15:02Z",
"verification": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"step": "started",
"method": "loopback",
"attempts": 1,
"confirmation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"status": "pending",
"expires_at": "2026-10-01T09:15:02Z",
"decided_at": "2026-10-01T09:15:02Z"
},
"failure_reason": "timeout",
"expires_at": "2026-10-01T09:15:02Z",
"verified_at": "2026-10-01T09:15:02Z"
},
"verified_at": "2026-10-01T09:15:02Z",
"connected_at": "2026-10-01T09:15:02Z",
"disconnected_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z"
}
}
}
channel.health_changed
The SIM safety band of the channel changed. `data.health` is the `health` block of the channel resource.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.health_changed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"health": {
"score": 1,
"band": "good",
"evaluated_at": "2026-10-01T09:15:02Z",
"quarantine_until": "2026-10-01T09:15:02Z",
"components": []
},
"previous_band": "good"
}
}
channel.volume_warning
80 % of the effective daily cap was used. Sending is not blocked; further messages wait.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.volume_warning",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"window": "24h",
"used_segments": 0,
"cap": 0,
"date": "example"
}
}
channel.qr_updated
The WhatsApp QR code to scan was regenerated while the number connects; each one stops working at `data.expires_at` (about 40 s). Opt-in: list it in the endpoint's `events`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "channel.qr_updated",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"qr_png_base64": "example",
"expires_at": "2026-10-01T09:15:02Z"
}
}
device.paired
Pairing completed, after the confirmation on the phone. `data.device` is the device resource.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "device.paired",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"device": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"manufacturer": "example",
"model": "example",
"os_version": "example",
"app_version_name": "example",
"app_version_code": 1,
"update_available": true,
"connection_state": "online",
"connection_reasons": [
"example"
],
"paused": true,
"pause_reason": "owner",
"os_limit_raised": true,
"os_limit_value": 1,
"os_limit_changed_at": "2026-10-01T09:15:02Z",
"health": {
"power": {
"battery_pct": 1,
"charging": true,
"power_mode": "normal"
},
"network": {
"type": "wifi",
"validated": true,
"airplane_mode": true
},
"permissions": [],
"battery_optimization_ignored": true,
"rcs_confirmed_off_at": "2026-10-01T09:15:02Z",
"storage": {
"free_mb": 1,
"low": true
}
},
"sims": [
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slot": 1,
"subscription_id": 1,
"carrier_name": "example",
"country_iso": "example",
"reported_number": "example",
"present": true,
"service_state": "in_service",
"signal_level": 1,
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_status": "example",
"first_seen_at": "2026-10-01T09:15:02Z",
"last_seen_at": "2026-10-01T09:15:02Z"
}
],
"paired_at": "2026-10-01T09:15:02Z",
"last_heartbeat_at": "2026-10-01T09:15:02Z",
"last_pull_at": "2026-10-01T09:15:02Z",
"last_report_at": "2026-10-01T09:15:02Z",
"revoked_at": "2026-10-01T09:15:02Z",
"revoked_reason": "owner",
"drain_until": "2026-10-01T09:15:02Z"
},
"pairing_code_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
device.online
The device's `connection_state` became `online`; `data.previous_state` is the state before.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "device.online",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"device": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"manufacturer": "example",
"model": "example",
"os_version": "example",
"app_version_name": "example",
"app_version_code": 1,
"update_available": true,
"connection_state": "online",
"connection_reasons": [
"example"
],
"paused": true,
"pause_reason": "owner",
"os_limit_raised": true,
"os_limit_value": 1,
"os_limit_changed_at": "2026-10-01T09:15:02Z",
"health": {
"power": {
"battery_pct": 1,
"charging": true,
"power_mode": "normal"
},
"network": {
"type": "wifi",
"validated": true,
"airplane_mode": true
},
"permissions": [],
"battery_optimization_ignored": true,
"rcs_confirmed_off_at": "2026-10-01T09:15:02Z",
"storage": {
"free_mb": 1,
"low": true
}
},
"sims": [
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slot": 1,
"subscription_id": 1,
"carrier_name": "example",
"country_iso": "example",
"reported_number": "example",
"present": true,
"service_state": "in_service",
"signal_level": 1,
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_status": "example",
"first_seen_at": "2026-10-01T09:15:02Z",
"last_seen_at": "2026-10-01T09:15:02Z"
}
],
"paired_at": "2026-10-01T09:15:02Z",
"last_heartbeat_at": "2026-10-01T09:15:02Z",
"last_pull_at": "2026-10-01T09:15:02Z",
"last_report_at": "2026-10-01T09:15:02Z",
"revoked_at": "2026-10-01T09:15:02Z",
"revoked_reason": "owner",
"drain_until": "2026-10-01T09:15:02Z"
},
"previous_state": "online"
}
}
device.degraded
The device is reachable but something needs attention; `data.device.connection_reasons` lists what.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "device.degraded",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"device": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"manufacturer": "example",
"model": "example",
"os_version": "example",
"app_version_name": "example",
"app_version_code": 1,
"update_available": true,
"connection_state": "online",
"connection_reasons": [
"example"
],
"paused": true,
"pause_reason": "owner",
"os_limit_raised": true,
"os_limit_value": 1,
"os_limit_changed_at": "2026-10-01T09:15:02Z",
"health": {
"power": {
"battery_pct": 1,
"charging": true,
"power_mode": "normal"
},
"network": {
"type": "wifi",
"validated": true,
"airplane_mode": true
},
"permissions": [],
"battery_optimization_ignored": true,
"rcs_confirmed_off_at": "2026-10-01T09:15:02Z",
"storage": {
"free_mb": 1,
"low": true
}
},
"sims": [
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slot": 1,
"subscription_id": 1,
"carrier_name": "example",
"country_iso": "example",
"reported_number": "example",
"present": true,
"service_state": "in_service",
"signal_level": 1,
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_status": "example",
"first_seen_at": "2026-10-01T09:15:02Z",
"last_seen_at": "2026-10-01T09:15:02Z"
}
],
"paired_at": "2026-10-01T09:15:02Z",
"last_heartbeat_at": "2026-10-01T09:15:02Z",
"last_pull_at": "2026-10-01T09:15:02Z",
"last_report_at": "2026-10-01T09:15:02Z",
"revoked_at": "2026-10-01T09:15:02Z",
"revoked_reason": "owner",
"drain_until": "2026-10-01T09:15:02Z"
},
"previous_state": "online"
}
}
device.offline
The device has been offline longer than the account's offline threshold; `data.previous_state` is the state it was in before it went offline.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "device.offline",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"device": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"manufacturer": "example",
"model": "example",
"os_version": "example",
"app_version_name": "example",
"app_version_code": 1,
"update_available": true,
"connection_state": "online",
"connection_reasons": [
"example"
],
"paused": true,
"pause_reason": "owner",
"os_limit_raised": true,
"os_limit_value": 1,
"os_limit_changed_at": "2026-10-01T09:15:02Z",
"health": {
"power": {
"battery_pct": 1,
"charging": true,
"power_mode": "normal"
},
"network": {
"type": "wifi",
"validated": true,
"airplane_mode": true
},
"permissions": [],
"battery_optimization_ignored": true,
"rcs_confirmed_off_at": "2026-10-01T09:15:02Z",
"storage": {
"free_mb": 1,
"low": true
}
},
"sims": [
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slot": 1,
"subscription_id": 1,
"carrier_name": "example",
"country_iso": "example",
"reported_number": "example",
"present": true,
"service_state": "in_service",
"signal_level": 1,
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_status": "example",
"first_seen_at": "2026-10-01T09:15:02Z",
"last_seen_at": "2026-10-01T09:15:02Z"
}
],
"paired_at": "2026-10-01T09:15:02Z",
"last_heartbeat_at": "2026-10-01T09:15:02Z",
"last_pull_at": "2026-10-01T09:15:02Z",
"last_report_at": "2026-10-01T09:15:02Z",
"revoked_at": "2026-10-01T09:15:02Z",
"revoked_reason": "owner",
"drain_until": "2026-10-01T09:15:02Z"
},
"previous_state": "online"
}
}
device.revoked
The device was unpaired or revoked. `data.reason` is the `revoked_reason`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "device.revoked",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"device": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"manufacturer": "example",
"model": "example",
"os_version": "example",
"app_version_name": "example",
"app_version_code": 1,
"update_available": true,
"connection_state": "online",
"connection_reasons": [
"example"
],
"paused": true,
"pause_reason": "owner",
"os_limit_raised": true,
"os_limit_value": 1,
"os_limit_changed_at": "2026-10-01T09:15:02Z",
"health": {
"power": {
"battery_pct": 1,
"charging": true,
"power_mode": "normal"
},
"network": {
"type": "wifi",
"validated": true,
"airplane_mode": true
},
"permissions": [],
"battery_optimization_ignored": true,
"rcs_confirmed_off_at": "2026-10-01T09:15:02Z",
"storage": {
"free_mb": 1,
"low": true
}
},
"sims": [
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"slot": 1,
"subscription_id": 1,
"carrier_name": "example",
"country_iso": "example",
"reported_number": "example",
"present": true,
"service_state": "in_service",
"signal_level": 1,
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_status": "example",
"first_seen_at": "2026-10-01T09:15:02Z",
"last_seen_at": "2026-10-01T09:15:02Z"
}
],
"paired_at": "2026-10-01T09:15:02Z",
"last_heartbeat_at": "2026-10-01T09:15:02Z",
"last_pull_at": "2026-10-01T09:15:02Z",
"last_report_at": "2026-10-01T09:15:02Z",
"revoked_at": "2026-10-01T09:15:02Z",
"revoked_reason": "owner",
"drain_until": "2026-10-01T09:15:02Z"
},
"reason": "owner"
}
}
account.suspended
The account was suspended by the partner, the owner or ops. An ops-initiated suspension carries the actor `admin` with a `null` id.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "account.suspended",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"account": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"suspended_reason": "example",
"country_iso": "example",
"timezone": "example",
"default_locale": "example",
"settings": {
"opt_out": [],
"compliance": [],
"quiet_hours": [],
"frequency_cap": [],
"links": [],
"default_expiry_minutes": [],
"sms": [],
"channels": [],
"whatsapp": [],
"retention": [],
"automation": [],
"alerts": [],
"limits": [],
"support": []
},
"counts": {
"devices_active": 0,
"devices_online": 0,
"channels_active": 0,
"channels_needing_attention": 0,
"channels_by_type": []
},
"deletion_requested_at": "2026-10-01T09:15:02Z",
"purge_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"reason": "Example text."
}
}
account.reactivated
A suspended account is `active` again.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "account.reactivated",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"account": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"suspended_reason": "example",
"country_iso": "example",
"timezone": "example",
"default_locale": "example",
"settings": {
"opt_out": [],
"compliance": [],
"quiet_hours": [],
"frequency_cap": [],
"links": [],
"default_expiry_minutes": [],
"sms": [],
"channels": [],
"whatsapp": [],
"retention": [],
"automation": [],
"alerts": [],
"limits": [],
"support": []
},
"counts": {
"devices_active": 0,
"devices_online": 0,
"channels_active": 0,
"channels_needing_attention": 0,
"channels_by_type": []
},
"deletion_requested_at": "2026-10-01T09:15:02Z",
"purge_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"reason": "Example text."
}
}
account.deletion_scheduled
The account is `pending_deletion`; `data.account.purge_at` is when it is purged.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "account.deletion_scheduled",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"account": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"name": "Example",
"status": "active",
"suspended_reason": "example",
"country_iso": "example",
"timezone": "example",
"default_locale": "example",
"settings": {
"opt_out": [],
"compliance": [],
"quiet_hours": [],
"frequency_cap": [],
"links": [],
"default_expiry_minutes": [],
"sms": [],
"channels": [],
"whatsapp": [],
"retention": [],
"automation": [],
"alerts": [],
"limits": [],
"support": []
},
"counts": {
"devices_active": 0,
"devices_online": 0,
"channels_active": 0,
"channels_needing_attention": 0,
"channels_by_type": []
},
"deletion_requested_at": "2026-10-01T09:15:02Z",
"purge_at": "2026-10-01T09:15:02Z",
"created_at": "2026-10-01T09:15:02Z",
"updated_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"reason": "Example text."
}
}
message.queued
A message was accepted, or a manual retry re-queued it. Opt-in: list it in the endpoint's `events`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.queued",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.sent
The message moved to `sent`, including phone-typed outbound and an `UNCONFIRMED` resolved by the phone.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.sent",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.delivered
The message moved to `delivered` (best effort).
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.delivered",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.read
The message moved to `read`. Emitted by channels with read receipts, never for SMS.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.read",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.failed
The message moved to `failed`; `data.message.failure` is `{code, message}`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.failed",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.expired
The message moved to `expired`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.expired",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0
}
}
message.cancelled
The message moved to `cancelled`; `data.reason` says why.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.cancelled",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0,
"reason": "Example text."
}
}
message.received
An inbound message was stored. `data` adds `contact_created` and `mirrored`; `conversation.created` is true when this message created the conversation. A line that mirrors the channel gets a copy marked `mirrored`. An endpoint for all lines receives both events, so filter on `mirrored`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "message.received",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"message": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"account_id": "0198e0aa-3b10-7c52-8a41-5d2f9e7b1c01",
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"channel_type": "android_sim",
"line_id": "0198e0b4-9411-7f60-a2d9-1c8b6e3a4d03",
"conversation_id": "0198f3a2-7a05-7d33-9f10-2b6c8e1d5a04",
"contact_id": "0198ea17-5c28-7b94-8e07-3a9d1f4c6b05",
"identity": {
"id": "0198ea17-5c31-7e02-b5a8-4f2e0d7c9a06",
"type": "phone",
"address": "+923001234567",
"display": "+92 300 1234567"
},
"direction": "outbound",
"type": "sms",
"origin": "api",
"from": "+923451234567",
"to": "+923001234567",
"content_type": "text",
"content": {
"type": "text",
"body": "Your order #1094 is ready for pickup."
},
"body": "Your order #1094 is ready for pickup.",
"encoding": "gsm7",
"segments": 1,
"media": [],
"channel_meta": [],
"provider_message_id": null,
"category": "transactional",
"lane": "normal",
"status": "queued",
"hold_reason": null,
"send_after": null,
"expires_at": "2026-10-02T09:15:02Z",
"attempts": 0,
"sender_pinned": false,
"fallback_of": null,
"sender_attempts": [
{
"channel_id": "0198e0b4-92d3-7a18-b3c6-0e4a7d5f2c02",
"outcome": "queued",
"reason": null,
"started_at": "2026-10-01T09:15:02Z",
"ended_at": null
}
],
"failure": null,
"cancel_requested_at": null,
"reference_id": "order-1094",
"metadata": {
"order_id": "1094"
},
"template_id": null,
"campaign_id": null,
"actor": {
"type": "api_key",
"id": "0198e0c1-6f20-7a4d-9b13-7e5c2a8d4f07"
},
"created_at": "2026-10-01T09:15:02Z",
"sent_at": null,
"delivered_at": null,
"failed_at": null,
"expired_at": null,
"cancelled_at": null,
"received_at": null,
"read_at": null,
"phone_timestamp": null
},
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"created": true
},
"sender_attempt_count": 0,
"contact_created": true,
"mirrored": true
}
}
conversation.read
The conversation was marked read (portal, API or automation).
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.read",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_type": "example",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_identity_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"address": "+923001234567",
"contact_display_name": "example",
"status": "queued",
"unread_count": 1,
"last_message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"last_message_at": "2026-10-01T09:15:02Z",
"last_message_preview": "example",
"last_direction": "example",
"last_outbound_at": "2026-10-01T09:15:02Z",
"last_inbound_at": "2026-10-01T09:15:02Z",
"blocked_at": "2026-10-01T09:15:02Z",
"suppressed": true,
"channel_meta": [],
"created_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
conversation.unread
The conversation was marked unread.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.unread",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_type": "example",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_identity_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"address": "+923001234567",
"contact_display_name": "example",
"status": "queued",
"unread_count": 1,
"last_message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"last_message_at": "2026-10-01T09:15:02Z",
"last_message_preview": "example",
"last_direction": "example",
"last_outbound_at": "2026-10-01T09:15:02Z",
"last_inbound_at": "2026-10-01T09:15:02Z",
"blocked_at": "2026-10-01T09:15:02Z",
"suppressed": true,
"channel_meta": [],
"created_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
conversation.archived
The conversation was archived.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.archived",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_type": "example",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_identity_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"address": "+923001234567",
"contact_display_name": "example",
"status": "queued",
"unread_count": 1,
"last_message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"last_message_at": "2026-10-01T09:15:02Z",
"last_message_preview": "example",
"last_direction": "example",
"last_outbound_at": "2026-10-01T09:15:02Z",
"last_inbound_at": "2026-10-01T09:15:02Z",
"blocked_at": "2026-10-01T09:15:02Z",
"suppressed": true,
"channel_meta": [],
"created_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
conversation.unarchived
The conversation was unarchived; an inbound that reopens it carries actor `system`.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.unarchived",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel_type": "example",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_identity_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"address": "+923001234567",
"contact_display_name": "example",
"status": "queued",
"unread_count": 1,
"last_message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"last_message_at": "2026-10-01T09:15:02Z",
"last_message_preview": "example",
"last_direction": "example",
"last_outbound_at": "2026-10-01T09:15:02Z",
"last_inbound_at": "2026-10-01T09:15:02Z",
"blocked_at": "2026-10-01T09:15:02Z",
"suppressed": true,
"channel_meta": [],
"created_at": "2026-10-01T09:15:02Z"
},
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
conversation.deleted
The conversation was permanently deleted, after its messages.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "conversation.deleted",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"conversation_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
}
}
}
contact.opted_out
A suppression was created (any method). With scope `contact` one event is emitted per suppressed identity.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "contact.opted_out",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"identity_type": "example",
"address": "+923001234567",
"method": "example",
"keyword": "example",
"message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"suppression_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"occurred_at": "2026-10-01T09:15:02Z"
}
}
contact.opted_in
A suppression was removed (any method); `suppression_id` is the removed suppression.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "contact.opted_in",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"contact_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"identity_type": "example",
"address": "+923001234567",
"method": "example",
"keyword": "example",
"message_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"suppression_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"actor": {
"type": "example",
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10"
},
"occurred_at": "2026-10-01T09:15:02Z"
}
}
ping
Sent by the endpoint test action only; not subscribable.
{
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "ping",
"api_version": "2.0.0",
"created_at": "2026-10-01T09:15:02Z",
"account_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"line_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"channel": {
"id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"type": "example"
},
"data": {
"endpoint_id": "0198f3a2-7c41-7e0b-9d52-6a1f3b8c4e10",
"message": "Example text."
}
}