Skip to content

Traverse from Waitlist entry

POST
/v1/object-types/hospitality.waitlist_entry/objects/{id}/traverse
curl --request POST \
--url https://api.aerandil.com/v1/object-types/hospitality.waitlist_entry/objects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/traverse \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "as_of": "2026-04-15T12:00:00Z", "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "cursor": "example", "direction": "out", "limit": 1, "link_type": "hospitality.link.waitlist_entry_became_reservation", "role": "example" }'

RPC-shaped traversal. Pick the edge by (link_type, direction) or by role — the registry resolves a role name (e.g. managed_by, direct_reports) to the underlying link side. link_type wins when both are present.

A reservation request the house could not take, waiting for inventory to free up. Not a reservation status and not a reservation: nothing traverses a waitlist entry, so it consumes no availability by construction. Carries the request (property, guest, room type, rate plan, dates, occupancy) so accept_waitlist_entry can replay it through the ordinary guarded create path, plus the wait’s own bookkeeping — reason for turnaway analysis, priority tier and requested_at for the working order (tier, then FIFO within tier), and telephone for OPERA’s call-to-confirm flow. An offer — the desk’s, or the automation lane’s matcher on a freed room-night — keeps the room-nights for the guest in the ledger’s blocked count until offer_deadline, listing them in held_nights so accept, cancel, a lapse and expiry give back exactly what was held; a lapsed offer returns the entry to waiting and the matcher passes the room to the next. The night audit expires the entry two business days after its requested departure.

id
required
string format: uuid

Object id (UUID v7, server-generated at create time).

Media typeapplication/json

Body for POST .../traverse. At least one of link_type or role MUST be supplied — the server returns 422 missing_traversal_target when both are absent. link_type wins when both are set.

object
as_of

RFC3339 temporal window: return neighbours whose edge was in effect at this instant ([effective_from, effective_to)) instead of now.

string format: date-time
branch

Traverse through an open branch’s overlay view instead of the canonical (main) plane. Does not compose with as_of (422).

string format: uuid
cursor
string
direction

Edge direction. Optional when the binding is asymmetric.

Allowed values: out in
limit
integer
>= 1 <= 500
link_type

API name of the link type to traverse. Narrowed to link types that bind the source. Wins over role.

Allowed values: hospitality.link.waitlist_entry_became_reservation hospitality.link.waitlist_entry_for_guest hospitality.link.waitlist_entry_for_property hospitality.link.waitlist_entry_for_rate_plan hospitality.link.waitlist_entry_for_room_type
role

Link-side role name (e.g. managed_by, direct_reports). Mutually substitutable with link_type — the registry resolves the role to its underlying link and direction.

string

Neighbours along the resolved link.

Media typeapplication/json
object
data
required
Array<object>
object
created_at
required
string format: date-time
id
required
string format: uuid
object_type
required
string
properties
required
object
scope
required
One of: discriminator: level
object
level
required
string
Allowed value: tenant
Allowed values: tenant
tenant_id
required
string format: uuid
updated_at
required
string format: date-time
version
required
integer
>= 1
direction
required
Allowed values: out in
has_more
required
boolean
link_type
required
string
next_cursor
string
Example
{
"data": [
{
"scope": {
"level": "tenant"
}
}
],
"direction": "out"
}

No object with that id, or link type unknown.

Validation error — must supply link_type or role.