1. Sign up for sandbox
2. Browse the catalogue
3. Get a frozen quote
Take theslug 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).
id (the quote_id), net_amount (what you owe SafarAPI), breakdown (per‑line detail), and expires_at (30 minutes from now).
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:booking_number (format MV-XXXXXX), status: CONFIRMED, and the immediate voucher.
5. Retrieve the voucher
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