Staylah

Core concepts

Scopes

What each scope grants, the pull and push presets, and the mapping.read trap.

Named <resource>.<action> and checked per route, so an endpoint your key cannot use is unreachable rather than conditionally guarded. Scope strings are permanent — they are stored on keys already issued and are never renamed.

Pull side (Staylah is the supplier, you are the client)#

ScopeGrants
ari.readRead availability, rates and restrictions for your mapped properties
content.readRead static property/room/rate-plan content and the mapping list
booking.quotePrice a specific stay and optionally hold it
booking.writeCreate a reservation against Staylah inventory
booking.cancelCancel or modify a reservation you created
booking.readRetrieve the current state of a reservation

Push side (you are the supplier or channel manager)#

ScopeGrants
ari.writeUpsert rates and inventory for mapped properties
restriction.writeUpsert restrictions — MLOS, CTA/CTD, stop-sell
reservation.writeDeliver a reservation you have already confirmed elsewhere
reservation.cancelDeliver a cancellation of a delivered reservation
mapping.readReserved. Gates no endpoint today — see the note below

mapping.read does not open /mapping/hotels. Both mapping endpoints require content.read, on the pull side. mapping.read is issued with the push preset for a future partner-code read-back that is not built yet, and it currently grants nothing. A push partner that needs to see its own mapping — and step 3 of the integration checklist says every partner should — must be issued content.read in addition to the push preset. Ask Staylah for it; it is not in the preset.

Presets#

  • Pull partner (an agent buying from us, e.g. Dida): ari.read, content.read, booking.quote, booking.write, booking.cancel, booking.read
  • Push partner (a channel manager, e.g. HPN/TAN): ari.write, restriction.write, reservation.write, reservation.cancel, mapping.read — add content.read if the partner needs /mapping/hotels, which the preset alone does not reach

Where an endpoint lists two scopes, both are required — POST /bookings needs booking.write and booking.quote, because creating a booking has to price the stay to validate your amount, and a key that could book but not quote would only half-work.