Skip to main content

1. Sign up for sandbox

Within seconds, your inbox receives a magic link. Clicking it lands you in console.safarapi.com where your sandbox bearer key is displayed once. Copy it — we cannot retrieve it for you.
The bearer token is shown a single time. Lose it and you’ll have to revoke and re‑issue a new key from the console.

2. Browse the catalogue

The catalogue is paginated. Every adventure includes title, duration, price already adjusted to your partner pricing rules (zero margin in sandbox by default).

3. Get a frozen quote

Take the slug and a rate_packs[].id from step 2’s response — the values below are illustrative. Sandbox sk_test_* keys are exempt from request signing, so no X-Timestamp/X-Signature here (production writes require them — see Authentication).
The response includes id (the quote_id), net_amount (what you owe SafarAPI), breakdown (per‑line detail), and expires_at (30 minutes from now).
The HMAC signature is hex(HMAC_SHA256(secret, "{timestamp}\n{method}\n{path}\n{body}")). Code samples for Node.js, Python, PHP, Java are in authentication.

4. Confirm a booking

Your customer pays in your app’s checkout — SafarAPI never touches the card data. Once payment is captured on your side, send the booking:
Response includes booking_number (format MV-XXXXXX), status: CONFIRMED, and the immediate voucher.

5. Retrieve the voucher

Returns a 302 redirect to a signed R2 URL valid for 7 days. The voucher is also emailed to the traveller automatically.

Next steps

Authentication deep dive

Bearer + HMAC details, code samples in 4 languages

Sandbox guide

Test traveller emails, reset behaviour, rate limits

Webhooks

Receive and verify booking, settlement and availability events

Troubleshooting

Symptom → cause → fix for the errors integrators hit