Riverdesk
Contents

Channel API guide

Availability and quotes

What you may sell

curl -s "$API/v1/vessels" -H "Authorization: Bearer $TOKEN"

This returns the vessels in your contract, each with the cabin categories you may sell.

Sailings

curl -s "$API/v1/sailings?vessel=$VESSEL&from=2026-11-01&to=2026-11-30" -H "$H"

Open sailings embarking in the range (at most 400 days), with itinerary code, embark and disembark ports and dates, and nights. Filter by nights if you only sell one length.

Availability

curl -s "$API/v1/availability?vessel=$VESSEL&from=2026-11-02&to=2026-11-30" -H "$H"

For each sailing and contracted category (at most 120 days per call):

Field Meaning
status instant: you can hold and confirm; on_request: your contract asks first; sold_out
free Cabins you can take on every leg of the cruise: your allotment plus the shared pool, capped if your contract has a visible cap
from_price Per person at double occupancy, on the cheapest plan you may sell

Availability is always the source of truth. Re-read it when you receive availability.changed.

Quotes

A quote prices one sailing for given cabins and guests under your contract:

curl -s -X POST "$API/v1/quotes" -H "$H" -H "Idempotency-Key: $(uuidgen)" \
  -H 'Content-Type: application/json' \
  -d '{
    "sailing_id": "'$SAILING'",
    "market": "international",
    "cabins": [{ "category_id": "'$STD'", "adults": 2, "child_ages": [7] }]
  }'

The response has the total, every line (adults, children by age band, supplements, your markup or commission) and the policies that will apply (cancellation, payment). Children's ages are their ages on the embark date.

A quote can fail with:

  • INVALID_OCCUPANCY: too many guests for the category;
  • NO_RATE_FOR_SEASON: no price set for that date;
  • CONTRACT_FORBIDS: not in your contract;
  • SAILING_CLOSED: the sailing is closed.

A quote lasts as long as the longest hold it can back.