Traverse from Stay offer
const url = 'https://api.aerandil.com/v1/object-types/hospitality.stay_offer/objects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/traverse';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"as_of":"2026-04-15T12:00:00Z","branch":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","cursor":"example","direction":"out","limit":1,"link_type":"hospitality.link.reservation_booked_in_session","role":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aerandil.com/v1/object-types/hospitality.stay_offer/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.reservation_booked_in_session", "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.
One room type on one rate plan the house quoted a shopper and kept: the stay (arrival_date, departure_date), the party (adults), the published arrival-night rate (quoted_rate) and stay total the admission gate priced, when it was quoted (offered_at, business time), the channel the shopper came through, the shopping session the house issued (session_id) and the visitor key it issued for the browser (visitor_id). A search stays the read quote_stay is; the offer is the room and rate a shopper opened. A reservation made in the session links to its first offer (reservation_booked_in_session), and a session that booked nothing is a regret, derived — regret_record — never recorded. Holds no inventory.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Object id (UUID v7, server-generated at create time).
Request Bodyrequired
Section titled “Request Bodyrequired”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
RFC3339 temporal window: return neighbours whose edge was in effect at this instant ([effective_from, effective_to)) instead of now.
Traverse through an open branch’s overlay view instead of the canonical (main) plane. Does not compose with as_of (422).
Edge direction. Optional when the binding is asymmetric.
API name of the link type to traverse. Narrowed to link types that bind the source. Wins over 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.
Responses
Section titled “Responses”Neighbours along the resolved link.
object
object
object
object
object
object
object
object
Example
{ "data": [ { "scope": { "level": "tenant" } } ], "direction": "out"}No object with that id, or link type unknown.
Validation error — must supply link_type or role.