Help Docs Developer Resources Webhooks
There are several types of events that we can sync:
All events are sent via the POST
method with a Content-Type: application/json
header and JSON in the body. The API supports sending events over HTTPS and will retry for 24 hours in case your remote URL is temporarily unavailable.
You can set up your webhook by going to Tools > Integrations > Webhooks in the portal.
You must provide the URL of your webhook and select at least one event in order to enable the synchronization.
You may optionally provide a username and password for authentication. Providing a username and password will set Basic
authorization but if you only provide a username then that will be the value of the Bearer
authentication header. For example, if you enter the value “3PvwJaEg” in the username field and leave the password empty, the following header will be a part of each webhook request: Authorization: Bearer 3PvwJaEg
.
You can also set conditions (in JSON format) based on certain values. For example, if you only want to sync contacts if/when they have the “special” tag applied, you can enter the following in this field: { "flags": "special" }
.
All events use the same format:
{
"type": "TYPE",
"ctime": TIMESTAMP,
"data": {....}
}
This event is fired every time a contact in your account has been updated. Event is sent to you in real time. The data payload format is the Contact Object.
{
"type": "CONTACT_UPDATED",
"ctime": 1619552282398,
"data": {
"cid": "c_k123g456c789",
"flags": ["new","optin","yes"],
"name": "John Smith",
"first_name": "John",
"last_name": "Smith",
"phone": "2025551234",
"group": ["1"],
"create_time": "02/01/2025 01:13AM EST",
"update_time": "02/01/2025 02:13AM EST",
"sent_time": "02/01/2025 10:13AM EST"
}
}
This event is fired every time a contact in your account has responded. Event is sent to you in real time. The data payload format is the Message Log Object.
Special cases:
opt-out
happens when a contact sends STOP keyword, once detected we add the dnd tag to the flags list. Only the system can add this tag so this is reliable indicator of out-out use case.bad number
happens when we dectect a complaint about wrong number, mistake or other common conditions about the message sent to wrong destination. In this case, we add tag bad to the flags list.rude
tag is applied if we detect offensive or curse words in the message, we detect most common English and Spanish curse words.{
"type": "MESSAGE_RECEIVED",
"ctime": 1619552282398,
"data": {
"cid": "c_k123g456c789",
"phone": "5555555555",
"name": "John Smith",
"proxy": "8443035634",
"logid": "rl_1234.....",
"flags": ["dnd"],
"text": "STOP",
"sent_time": "02/04/2025 02:35PM EST",
"action": "1",
"contact_flags": ["dnd","replied","voter"],
"contact_source": "123456"
}
}
This event is fired every time we receive a confirmation of delivery from a carrier, the status
field indicates how the text has been delivered. To receive these events your system must have capability for processing a large number of simultaneous requests, we forward such events in real time as soon as we receive it from carriers.
The data payload format is the Message Log Object.
Note: If we never received any confirmation from carriers, we do not generate any receipts on our own.
{
"type": "DELIVERY_RECEIPT",
"ctime": 1619552282398,
"data": {
"cid": "c_k123g456c789",
"phone": "5555555555",
"name": "John Smith",
"proxy": "8443035634",
"logid": "rl_1234.....",
"flags": [],
"text": "Hey, would you like to take a short survey?",
"sent_time": "02/04/2025 02:35PM EST",
"update_time": "02/04/2025 02:36PM EST",
"action": "1",
"status": "delivered"
}
}
The status can be either undelivered or failed.
{
"type": "DELIVERY_RECEIPT",
"ctime": 1619552282398,
"data": {
"cid": "c_k123g456c789",
"phone": "5555555555",
"name": "John Smith",
"proxy": "8443035634",
"logid": "rl_1234.....",
"flags": [],
"text": "Hey, would you like to take a short survey?",
"sent_time": "02/04/2025 02:35PM EST",
"update_time": "02/04/2025 02:36PM EST",
"action": "1",
"status": "undelivered",
"error_code": "landline",
"error_text": "Undelivered destination",
"status_code": "12345"
}
}
This webhook is fired once a TCR proxy has been provisioned, i.e. the status became ok
. The data
property will contain a list of proxies ready to be used.
{
"type": "PROXY_PROVISIONED",
"ctime": 1619552282398,
"data": [
{
"cid": "c_example123",
"proxy": "1234567890",
"create_time": "04/20/2025 10:30AM EST",
"update_time": "04/20/2025 10:35AM EST",
"referenceId": "5eb6cfcd4f5647c9983fea0b4b0bed4b",
"campaignId": "C12345",
"campaignName": "Campaign name",
"brandId": "B12345",
"brandName": "Brand name",
"status": "ok"
}
]
}
These events will be removed in the future but still supported