Skip to main content
Use a walk-in queue when customers arrive without a booking, and a waitlist when no slot suits the customer now. Both are enabled per definition and both can be resolved by creating an appointment and linking it back. For the model behind them, see the Appointments concept. All endpoints are bearer authenticated and live under https://api.[tenant].getomneo.com/api/v3.
FlowEnabled byUse when
Walk-in queueallow_queue (and walk_in_only definitions)The customer is at the location now and wants to be seen in order of arrival.
Waitlistallow_waitlistNo suitable slot is available, and the customer wants to be contacted when one opens.

Walk-in queue

Check a customer into the queue for a definition that allows walk-ins. Send a POST to /appointment-queues with the definition and location. Omit profile_id for an anonymous walk-in.
The response is 201. For an anonymous walk-in, drop profile_id:
The entry returns wrapped in a data object, with status defaulting to waiting and appointment_id still null:
For an anonymous walk-in, profile_id, profile, staff_id, and staff are null.
FieldTypeNotes
appointment_definition_idintegerRequired. The definition the walk-in is for.
location_idintegerRequired. Where the customer checked in.
profile_idstring or nullProfile UUID. Omit for an anonymous walk-in.
staff_idstring or nullAssign a staff member to the entry.
statusenumwaiting, called, served, or cancelled. Defaults to waiting.
appointment_idinteger or nullThe linked appointment, set when converting a served entry.
notesstring or nullFree-text note.
metaobjectCustom key/value data.
idintegerResponse only. The queue entry’s id.
profileobject or nullResponse only. { id, first_name, last_name, email }, null for an anonymous walk-in.
locationobjectResponse only. { id, name, handle, timezone }.
staffobject or nullResponse only. The assigned staff member, when one is set.
created_at, updated_atstringResponse only. UTC timestamps.
A queue entry moves through four statuses.
StatusMeaning
waitingThe customer has checked in and is in line. This is the default on create.
calledThe customer has been called to be seen.
servedThe customer has been seen.
cancelledThe customer left the queue without being served.
Advance the status with a PUT to /appointment-queues/{id}:

Converting a served entry into an appointment

To keep a record of the service, create an appointment and link it to the queue entry through the appointment_id field. Create the appointment first, then set appointment_id on the queue entry:
The queue entry now points at the appointment, so the walk-in and its resulting booking are tied together.

Waitlist

Register a customer’s interest when no slot suits. Send a POST to /appointment-waitlists. profile_id is required here (a waitlist entry always belongs to a known Profile). Include desired_start_at to record when the customer would like to be seen.
The entry returns wrapped in a data object, with status defaulting to active:
FieldTypeNotes
appointment_definition_idintegerRequired. The definition the customer is waiting for.
profile_idstringRequired. A waitlist entry always belongs to a known Profile.
location_idintegerWhere the customer wants to be seen.
desired_start_atstring or nullWhen the customer would like to be seen.
statusenumactive, fulfilled, or cancelled. Defaults to active.
appointment_idinteger or nullThe linked appointment, set when fulfilling the entry.
notesstring or nullFree-text note.
metaobjectCustom key/value data.
idintegerResponse only. The waitlist entry’s id.
profileobjectResponse only. { id, first_name, last_name, email }.
locationobjectResponse only. { id, name, handle, timezone }.
created_at, updated_atstringResponse only. UTC timestamps.
A waitlist entry moves through three statuses.
StatusMeaning
activeThe customer is waiting for a slot. This is the default on create.
fulfilledA slot opened and the entry became an appointment.
cancelledThe customer no longer wants a slot.

Fulfilling a waitlist entry

When a slot opens, create an appointment for the customer, then fulfil the entry by linking the appointment through appointment_id and setting the status to fulfilled:

Filtering queues and waitlists

Both lists support the same filter pattern as the rest of the API. Filter by definition, location, and status to build an operator view for one service at one store.
FilterApplies toExample
appointment_definition_idBothfilter[appointment_definition_id]=1
location_idBothfilter[location_id]=13
statusQueue: waiting, called, served, cancelled. Waitlist: active, fulfilled, cancelled.filter[status]=waiting
profile_idBothfilter[profile_id]={profileId}
Both list endpoints are paginated. Use page[size] and page through meta.pagination, the same as every other Omneo list endpoint.

End-to-end example: a walk-in becomes a booked service

This is the full arc for a customer who arrives without a booking and is served.
1

Check the customer in

The entry is created with status: "waiting" and an id (here 812).
2

Call the customer

3

Create the appointment for the service

Take the appointment id from the 201 response.
4

Mark served and link the appointment

The queue entry now points at the appointment, tying the walk-in to its booking. A waitlist entry follows the same shape: create the appointment, then PUT the entry with status: "fulfilled" and appointment_id.

Response codes

MethodEndpointSuccessErrors
POST/appointment-queues, /appointment-waitlists201401, 403, 422
GET.../{id}200401, 403, 404
PUT.../{id}200401, 403, 404, 422
DELETE.../{id}204401, 403, 404

Errors

StatusWhen
401Missing or invalid bearer token.
403The token lacks the required scope, or the actor lacks permission.
404The queue or waitlist entry does not exist.
422Validation failed, for example a missing appointment_definition_id, a waitlist create without a profile_id, or an invalid status.

Edge cases and gotchas

  • Anonymous walk-ins have no Profile. Omit profile_id on a queue create for a walk-in you cannot identify. The waitlist always requires profile_id, because an entry has to belong to a known customer so you can contact them.
  • Linking is the source of truth, not conversion. Nothing converts a queue or waitlist entry automatically. You create the appointment yourself, then set appointment_id on the entry and move its status.
  • Statuses differ between the two. A queue moves through waiting, called, served, cancelled; a waitlist through active, fulfilled, cancelled. Filter with the values that belong to each resource.
  • Deleting removes the entry. DELETE returns 204 and no body. To keep the record, set status to cancelled instead.