Deskhero Developer Hub
Back to deskhero.com
Webhooks

Create

Creates a webhook subscription: an https URL, the event types to deliver ("ticket.created", "ticket.updated", "ticket.replied", "ticket.assignee_changed") and optionally a custom header sent with every delivery as a security gate on your side. The response contains the signing secret exactly once - store it to verify the X-Deskhero-Signature header (hex HMAC-SHA256 of "timestamp.body"). URLs whose hosts resolve to private addresses are rejected, and at most 10 webhooks can exist per workspace.

POST /api/{tenant:minlength(2)}/v{version:apiVersion}/webhooks
Authorisation
Minimum role: ADMIN

Request arguments

Name Type Source
inputDTO_webhook_subscription_inputBody
Request body example

Response

Status
200 (OK)
Type
DTO_webhook_subscription
Wrapper
DTO_response_wrap
Other statuses
400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 429 (TooManyRequests)
Response body example
DTO_webhook_subscription_input
NameTypeReadOnlyDescription
labelStringLabel
urlStringHttps endpoint to POST deliveries to. Hosts resolving to private addresses are rejected
event_typesString[]Public event names to listen to, e.g. ["ticket.created", "ticket.updated"]
custom_header_nameStringOptional header sent with every delivery (e.g. "Authorization"), usable as a security gate on the receiving side
custom_header_valueStringValue for the custom header. Stored encrypted, never returned. On update: omit (null) to keep the current value, empty string to clear it
enabledBoolean (nullable)Only honored on update (subscriptions are created enabled). Re-enabling resets the failure counter
DTO_webhook_subscription
NameTypeReadOnlyDescription
idInt32Id
labelStringLabel
urlStringUrl
event_typesString[]Public event names this subscription listens to, e.g. "ticket.created"
secretStringReadOnlyOnly returned on create and rotate_secret - store it, it cannot be retrieved again
custom_header_nameStringCustom header name
custom_header_value_setBooleanReadOnlyWhether a custom header value is configured. The value itself is never returned
enabledBooleanEnabled
disabled_reasonStringReadOnlyWhy the subscription is disabled: "user" or "auto_failures" (empty when enabled)
consecutive_failure_countInt32ReadOnlyConsecutive failure count
last_successDateTime (nullable)ReadOnlyLast success
last_failureDateTime (nullable)ReadOnlyLast failure
createdDateTimeReadOnlyCreated
last_updatedDateTimeReadOnlyLast updated

Generated Aug 31, 2026 16:21