Create a price-locked quote
Computes the net price for a traveler composition on a specific slot. The price is
locked for 30 minutes: POST /bookings with this quote_id uses the computed
price even if the rate pack’s rate has changed in the meantime.
After 30 min the quote_id is invalidated and POST /bookings returns
quote.expired. The bank must then create a new quote at the current rate.
Example values are illustrative: take a real adventure_slug and
rate_pack_id from GET /adventures / GET /adventures/{slug} (in the
sandbox, slugs carry a -sandbox suffix).
Authorizations
API key authentication. Issued by the Safariat admin or via the partner portal. The secret is shown only once at generation.
Production sk_live_* keys must additionally sign every write request
(POST/PUT/DELETE) with the X-Timestamp and X-Signature headers.
Sandbox sk_test_* keys are exempt from request signing: X-Signature and
X-Timestamp are not required for writes in the sandbox (so the developer-portal
"Try it" playground works end to end). The Idempotency-Key header remains
required on writes in both environments.
Headers
Opaque, client-generated string unique per logical operation (a UUID v4 is
recommended but any non-blank value up to 255 chars is accepted). Same key +
same body = the cached response is returned with the Idempotent-Replayed: true
header. Same key + different body = 409 Conflict. Retained for 24 h.
255Unix timestamp in seconds at the time the request is issued. Validity window
±5 minutes — beyond that the request is rejected. Required for production
sk_live_* keys only; not required for sandbox sk_test_* keys.
hex(HMAC_SHA256(secret, "{X-Timestamp}\n{METHOD}\n{path}\n{body}")).
The path includes the query string. The body is the exact JSON representation
sent — any reformatting invalidates the signature. Required for production
sk_live_* keys only; not required for sandbox sk_test_* keys.
^[a-f0-9]{64}$Body
Response
Quote created
Revenue breakdown (locked price; indicative = false, sandbox_surcharge = 0).
pricing.amount_due_to_safariat is the amount-match anchor for booking creation.
30-minute TTL after creation.