Skip to content

List links of Rail instruction

GET
/v1/object-types/hospitality.rail_instruction/objects/{id}/links/{link_type}
curl --request GET \
--url 'https://api.aerandil.com/v1/object-types/hospitality.rail_instruction/objects/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/links/hospitality.link.rail_instruction_for_payment?direction=out' \
--header 'Authorization: Bearer <token>'

List the neighbours of an instance along a typed link. Direction is inferred when the source binds the link on exactly one side; symmetric links (same object type on both ends) require an explicit ?direction=out or ?direction=in.

One thing the card rail is to do at the processor once it can be reached again — OPERA’s offline settlement queue. Written by the rail (queue_rail_instruction) when the processor was unreachable (a transport failure, a 5xx, a 429) during a deferrable verb: a hold captured at check-out (capture), a hold released (void), a refund (refund), a departed stay’s late charges (charge_off_session), the desk’s Top up now for an in-house stay (top_up, continuing the stay’s open top-up attempt). Never a check-in’s authorisation — that hold is placed because the desk needs the answer now. attempt_id is written before the processor is asked again and every processor idempotency key for the instruction derives from it, so a retry is the same request and a capture that reached the processor once is never taken twice. The rail’s drain claims it (sending), asks the processor, and records the outcome through the same ledger verbs the online path uses: done; refused with the processor’s words, never retried; or queued again with an exponential backoff (not_before) until the cap or the key’s window, then abandoned for the GM. A processor that replayed a saved failure under the key has spent that attempt: what it did is read back, and when nothing moved the instruction is queued again under a new attempt_id. The desk may take a queued one back (cancel_rail_instruction → cancelled), never one the drain is sending. The night audit drains whatever is queued, and its close lists what is still open.

id
required
string format: uuid

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

link_type
required
Allowed values: hospitality.link.rail_instruction_for_payment hospitality.link.rail_instruction_for_stay

API name of the link type. Narrowed to link types that bind this source object type on at least one side.

direction
Allowed values: out in

Edge direction to follow. Optional when the link binds the source on exactly one side; required for symmetric links.

limit
integer
>= 1 <= 500
cursor
string
as_of
string format: date-time

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

branch
string format: uuid

Read through an open branch’s copy-on-first-write overlay view instead of the canonical (main) plane. Does not compose with as_of (422). The branch must exist under the caller’s tenant.

Neighbours along the typed 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 — direction conflicts with the link’s binding.