What your endpoint needs
- HTTPS only. Plain
http://is refused. - A public address. Private, local, and cloud-internal addresses are blocked for security.
- No redirects. A
3xxis a hard fail. We never follow it. - Answer within 10 seconds.
Verification is required
A webhook bot cannot go active until its URL passes a check. Changing the URL clears the check — you verify again. This stops a typo from quietly eating every customer message. Press Verify and we send awebhook.verify event:
challenge back. Two forms work:
Content-Type does not matter, extra spaces are fine, and one pair of wrapping quotes is allowed — which covers Make’s habit of quoting values. Extra JSON keys are fine too, which covers n8n’s Respond node.
A check is never retried — it runs once per press, with a 10-second limit. Just press it again.
When it fails
Zapier Catch Hooks cannot return a custom body, so we skip the echo for
zapier.com and *.zapier.com — any 2xx counts. We match the real hostname, so look-alikes such as zapier.com.example.org do not qualify. Instead, you paste the verification_code into the wizard within 30 minutes. See the Zapier guide.Every request carries these headers
Retries and repeats
If a try fails in a way we can retry — a timeout, a network error, a408, 425, 429, or any 5xx — we try up to 4 times in total:
Other
4xx responses and redirects fail at once, with no retry.
Do not read
delivery_attempt from the body — it is always 1. The X-MyAIChatbot-Attempt header is the real counter.Order
Messages carry a per-conversationseq number that only goes up. Delivery order is not promised — a visitor sending two quick messages can cause two overlapping webhook calls. If order matters, sort by message.seq, not arrival time.
Testing
The Test webhook button sends a canned event with"test": true, waits up to 10 seconds, and shows you the status, the speed, and exactly what we understood from your reply — including any problems. Test events are logged, but never retried, and they never touch a real conversation.
Delivery log
Every try is recorded: status, event type, try count, response status, speed, and the first 2 KB of your reply. Failed deliveries can be retried by hand. Statuses you will see:Next
Check signatures
Do not skip this one.
Event reference
Every event and its payload.

