Traverse from Channel connection
const url = 'https://api.aerandil.com/v1/object-types/hospitality.channel_connection/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.channel_connection_carries_channel","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.channel_connection/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.channel_connection_carries_channel", "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 conduit between a property and a distribution partner — a channel manager, an OTA switch, or a partner that subscribed to our ARI. Identity, wire dialect and lifecycle only: credentials live in the secret store (secret_ref is a name, never a value), the per-date publication outbox lives in Postgres, and the demand channels the conduit carries are linked, not inlined. A conduit is not a channel — one connection fronts Booking.com, Expedia and dozens more, each of which stays its own channel row with its own commission period.
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.