Skip to content

Tickets

A ticket is an entry in a queue issued to a customer when they join. It is the core unit of the queue system — everything from the display screen to the desk interface revolves around tickets.

  • Ticket number — a sequential integer visible to the customer, displayed on the kiosk receipt, shown on the display screen, and visible in the desk waiting list. Numbers are scoped to a queue and increment monotonically — they never reset.
  • Ticket hash — a 22-character random string with 128 bits of entropy. This hash is the customer’s anonymous bearer credential (see below).
  • State — one of five values (see below).
  • Queue — the queue the ticket belongs to.
  • Timestamps — when the ticket was created, called, completed, etc.

A ticket moves through the following states during its lifecycle:

StateMeaning
WAITINGThe customer is in the queue, waiting to be called.
CALLEDA desk has called this ticket; the customer should approach the counter.
COMPLETEDThe desk marked the service as done. Terminal state.
SKIPPEDThe desk skipped this ticket (customer didn’t respond). Terminal state.
CANCELEDThe customer cancelled their own place in the queue. Terminal state.
WAITING → CALLED → COMPLETED
↘ SKIPPED
WAITING → CANCELED (customer-initiated)
CALLED → CANCELED (customer-initiated)

Skipped and cancelled tickets are not re-queued automatically. If a customer wants to queue again after being skipped or cancelling, they must join the queue again.

Customers are anonymous — there is no login or account required to join a queue. Instead, the 22-character ticket hash serves as the customer’s proof of ownership. It is embedded in the ticket page URL:

https://customer.jonot.io/{org}/{location}/{queue}/{ticket-hash}

Knowing the hash proves you own that ticket. The API uses the hash to authorise:

  • ticketByHash — look up your ticket and position
  • cancelTicket — cancel your own ticket

This design is intentional: it removes all friction from joining a queue. No account, no app, no password — just a URL.

The hash has 128 bits of entropy (equivalent to a UUID v4), making it computationally infeasible to guess another customer’s ticket hash.

  1. Customer joins via QR code or kiosk → ticket issued in WAITING state.
  2. Customer opens the ticket page → sees their position in the queue in real time.
  3. When the desk calls their number, the ticket moves to CALLED → the customer’s page updates immediately.
  4. Customer approaches the counter. After service, the desk marks it COMPLETED.
  5. If the customer doesn’t respond, the desk can SKIP → ticket moves to SKIPPED and the queue advances.