Delivering

Retries

In case of a response code different than 2XX and in the case on timeout or other connection issues, webhooks will be retried with the following policy:

  • Retry 1: 5 seconds (5 seconds after the original attempt)
  • Retry 2: 10 seconds (15 seconds after the original attempt)
  • Retry 3: 30 seconds (45 seconds after the original attempt)
  • Retry 4: 1 minute (1 minute and 45 seconds after the original attempt)
  • Retry 5: 3 minutes (4 minutes and 45 seconds after the original attempt)
  • Retry 6: 10 minutes (14 minutes and 45 seconds after the original attempt)
  • Retry 7: 30 minutes (44 minutes and 45 seconds after the original attempt)
  • Retry 8: 1 hour (1 hour and 44 minutes and 45 seconds after the original attempt)
  • Retry 9: 3 hours (4 hours and 44 minutes and 45 seconds after the original attempt)

Timeout

We enforce a policy where webhook exceeding a 4-second processing time is marked as non-delivered. To adhere to this policy, clients are required to immediately respond with a "success" (2XX) status code upon receiving a webhook.

πŸ“˜

We recommend processing the webhooks asynchronously on your side to avoid timeouts.

Delivery order

We do not guarantee to deliver webhooks based on their creation date, which means requests can be sent in random order. Clients may verify the creation date of each webhook using the created_at field provided in the request body. This way, you can determine the chronological order and take appropriate actions within your system.

Potential duplication

Although it is rare, webhook duplication is possible so you may receive the same webhook multiple times. To address this, each webhook has assigned a unique identifier called webhook_id. Keeping track of the processed webhooks in your system by storing information about them is recommended. This will help you avoid duplicating actions or operations for the same webhook.

πŸ’‘

OpenAPI doesn't trigger webhooks

To prevent creating an event loop, notifications will not be issued for events triggered by OpenAPI. For example, importing contacts into Tidio using OpenAPI will not send a contact.created webhook.