Acknowledge deliveries safely and design handlers for duplicate or failed webhook requests.
ThriveDesk treats any 2xx response as success and discards the response body. A 410 Gone
response deactivates or deletes the webhook. Other status codes are failures; after several failures,
the event is discarded.
The public contract does not specify the retry count, backoff schedule, retention window, delivery identifier, ordering guarantee, or a manual replay API. Do not build correctness around an assumed schedule.
eventType, data.id, and the relevant event timestamp or thread ID.204.import { createHash } from 'node:crypto';
const key = createHash('sha256')
.update(JSON.stringify(event))
.digest('hex');
if (await deliveries.seen(key)) return response.sendStatus(204);
await deliveries.store(key, event);
await jobs.enqueue({ key });
return response.sendStatus(204);The public payload does not expose a delivery ID, so hashing the complete payload is the safest available duplicate-delivery key. Keep reconciliation in place because two legitimate events can still carry identical data.
Webhooks are notifications, not the sole event ledger. Periodically reconcile critical records with the REST API so a discarded delivery cannot create permanent drift.