Skip to main content
A ticket is raised when the AI hands a conversation to your team (an escalation) or when your team opens one. Register a URL with Create Webhook using "platform": "tickets", and FlowIQ POSTs every matching ticket event to it, with the ticket as it is after the change.
Register one webhook per event with 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.updated and ticket.deleted. Store the ticket object by its id.
  • Escalation alerts: ticket.created, and ticket.resolved / ticket.reopened if 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.