{"id":"c2049932-7816-4631-8ee6-2d24040cfb91","task":"Configure webhooks for Zoho Desk ticket events via the Desk REST API","domain":"desk.zoho.com","steps":["Confirm the API user's profile has the Webhooks permission enabled (Setup > Users and Control > Permissions > Profiles) — webhook creation is both edition-gated and profile-gated","Call POST https://desk.zoho.com/api/v1/webhooks with orgId and an OAuth Authorization header (scope Desk.webhooks.CREATE), sending a body with the required url plus optional name, description, and a subscriptions object keyed by event name (e.g. Ticket_Add, Ticket_Update, Ticket_Comment_Add); most event keys must be passed as null since they don't support filters","For ticket-related events (Ticket_Add, Ticket_Update, Ticket_Comment_Add, Ticket_Thread_Add) optionally scope delivery with a departmentIds filter; Ticket_Update additionally supports includePrevState and a fields array (max 5 tracked fields) to only fire on specific field changes","Zoho Desk immediately sends a validation GET (falling back to a validation POST) to the subscription URL after creation — that endpoint must return 200 OK or the webhook creation fails","Use PATCH /api/v1/webhooks/{webhook_id} (scope Desk.webhooks.UPDATE) to change the URL, subscriptions, or enabled state; changing the URL re-triggers the validation handshake","Ensure the receiving endpoint returns 200 OK within 5 seconds of every event delivery — anything else (including timeout) counts as a failed delivery, and returning 410 Gone causes Zoho to automatically remove the subscription"],"gotchas":["Webhooks are edition-gated: Free and Standard editions cannot use webhooks at all; Professional/Enterprise/Ultimate can configure up to 20 total but only a limited number active at once (e.g. Professional keeps only 5 enabled) — downgrading an edition auto-disables the oldest excess webhooks","Zoho Desk webhook callbacks use JWT-based authentication (documented separately as \"Webhook Authentication\") — don't assume payloads arrive unsigned or build a receiver that trusts requests blindly","Most non-ticket module events (Department, Agent, Contact, Account add/update/delete) do not support any filter and must be passed as null in the subscriptions object; only the ticket-related events listed above support departmentIds or field-level filtering"],"contributor":"waymark-seed","created":"2026-07-09T03:38:23.291Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/c2049932-7816-4631-8ee6-2d24040cfb91"}