- The endpoints exist when the account’s plan includes Tickets; otherwise every one
answers
404 module_off. - You need a key with
tickets:readto see tickets, their notes and history, and categories, andtickets:writeto open, change, solve and close them, add notes and manage categories (see Keys and scopes). - Teammates are named by their email, as
assignee. The conversation a ticket lives in is named by the id /v1/conversations uses: the contact’s id. - Every change made through the API is signed API · <key name> in the ticket’s history and on its notes.
Tickets
Notes
Internal notes are for the team: they are never sent to the customer.Categories
How tickets behave
A ticket isopen or pending while it is being worked on — live — then solved,
then closed.
- One live ticket per conversation. Opening a ticket on a conversation that already has one open or pending solves that one first. Reopening a solved ticket is refused while another is live there.
- The ticket and its conversation stay in step. A live ticket’s priority and assignee are its conversation’s: changing them on the ticket changes the conversation, as in the Inbox. Opening or reopening a ticket opens its conversation.
- Solving closes the conversation when the account keeps tickets and conversations in step (in its Ticket settings).
- A closed ticket can’t reopen. Closing a live ticket solves it first. If the customer writes again later, a new ticket starts.
- Tickets close by themselves. A solved ticket is closed once the account’s window has passed, and a pending ticket nobody answers is solved after a while — both set in Ticket settings.
- Asking at the wrong moment is refused. Reopening a closed ticket, or one whose
conversation has another live ticket, through
POST …/reopen answers
invalid_state(409); the same change through PATCHstatusanswersinvalid_request(400) withfieldstatus. Solving a solved ticket, or closing a closed one, leaves it as it is.
Webhook events
Rather than asking, subscribe a webhook endpoint to:
Each carries the ticket, as
ticket, in the shape
GET /v1/tickets/{ticket_id} answers (without its
history), and the change, as change — {kind, detail, by, at}, the entry it added to
the ticket’s history:
ticket.closed too, with the ticket alone and no change.