Skip to main content

Samples

First calls against a running hotel8 deployment — through the BFF proxy, from cURL and Dart.

1. Search availability and book a room (guest flow)​

curl -c jar.txt https://bff.{env}.{org}.example.com/v1/sign-in \
-H 'content-type: application/json' \
-d '{"email": "you@example.com", "password": "…"}'

curl -b jar.txt \
"https://bff.{env}.{org}.example.com/proxy/pms/v1/availability?property_id=<id>&from=2026-11-01&to=2026-11-03&guests=2"

curl -b jar.txt \
https://bff.{env}.{org}.example.com/proxy/pms/v1/reservations \
-H 'content-type: application/json' \
-d '{
"property_id": "<property>",
"room_type_id": "<room-type>",
"rate_plan_id": "<rate-plan>",
"from": "2026-11-01",
"to": "2026-11-03",
"guests": [{"name": "Guest Name"}],
"idempotency_key": "book-001"
}'

The booking publishes hotel8:pms:reservation:created — Loyalty, Upsell, and Distrib all react to it through their Bus consumers.

2. Open and settle a POS check​

curl -b jar.txt \
https://bff.{env}.{org}.example.com/proxy/pos/v1/checks \
-H 'content-type: application/json' \
-d '{"outlet_id": "<outlet>", "table_id": "<table>"}'

curl -b jar.txt \
https://bff.{env}.{org}.example.com/proxy/pos/v1/checks/{id}/order \
-H 'content-type: application/json' \
-d '{"items": [{"menu_item_id": "<item>", "qty": 2}]}'

Settlement captures the card and delegates the money movement to Bank8:Payments — POS never touches a raw card rail.

3. Enroll a loyalty member​

curl -b jar.txt \
https://bff.{env}.{org}.example.com/proxy/loyalty/v1/members \
-H 'content-type: application/json' \
-d '{"program_id": "<program>", "guest_id": "<guest>"}'

4. From Dart (the eBooking pattern)​

final ctx = await fetchRuntimeContext();
final bff = Bff8ApiClient(origin: ctx.origin);

final availability = await bff.get(
'pms',
'/v1/availability?property_id=$id&from=2026-11-01&to=2026-11-03',
);
await bff.post('pms', '/v1/reservations', body: reservationPayload);

5. From Rust (vertical consumer)​

use hotel8::pms::client::PmsClient;

let reservations = pms_client
.reservations(&query)
.await?;

The client rides the platform's certificate-presenting transport — no token configuration, no static secret to leak.