"platform": "tickets", and FlowIQ POSTs every matching ticket event to it, with the ticket as it is after the change.
type set to the event name, or one with "type": "all" for every event. The same authentication options as messaging webhooks apply (auth_type: bearer, basic, api_key, oauth2_client_credentials), and with a secret every request carries an X-Flowiq-Signature: sha256=<hex> HMAC of the raw body (how to verify).
Events
One change can fire several events. Resolving a ticket sends
ticket.updated, ticket.status_changed and ticket.resolved, each with its own event_id. So a webhook on all receives all three. Most systems want either:
- A copy of every ticket (a database or data warehouse):
ticket.created,ticket.updatedandticket.deleted. Store theticketobject by itsid. - Escalation alerts:
ticket.created, andticket.resolved/ticket.reopenedif you track outcomes.
Payload
Headers:
X-Flowiq-Event (the event type), X-Flowiq-Event-Id, X-Flowiq-Delivery-Id, X-Flowiq-Attempt, X-Flowiq-Timestamp, and X-Flowiq-Signature when a secret is set.
Events are recorded in the same save as the ticket change, so none is lost while your endpoint is down. Answer with a
2xx within 10 seconds and do the work afterwards. A failed delivery is retried for about 33 hours (how), and every attempt is in the delivery log. Deliveries can arrive out of order after a retry: compare ticket.updated_at and keep the newest. To fill a gap or start a copy, page through list_tickets with updated_since.
