Safari.com

Affiliate programme

Affiliate API reference.

A small, read-only REST API for pulling the safari.com catalogue into your own application. Designed for affiliates who want to match users to relevant trips and refer them to safari.com to finalise the booking with one of our specialists.

Base URL https://www.safari.com. All responses are JSON. Every safari, destination and experience response includes a pre-stamped enquiryUrl with your affiliate code, so a click on the returned link attributes back to you automatically.

Typical integration

The four endpoints fall into two pairs. Use the taxonomies (destinations, experiences) once on startup to populate your filter UI; cache them, they change rarely. Then query the catalogue (list safaris, get one safari) using those slugs as filters, e.g. ?destination=tanzania&experience=honeymoon. Hand users off to the enquiryUrl on each safari and you are done.

Want to try the API live?

Open this page from your dashboard so the URL carries ?t=<your-dashboard-token>. That activates an in-page playground with Run buttons for each endpoint.

Authentication

Bearer token in the Authorization header.

Every endpoint requires your dashboard token, supplied as a standard bearer token.

Your dashboard token is the string after ?t= in your private dashboard URL, e.g. /affiliates/AB12?t=this part. Bookmark the dashboard URL and copy the token from the address bar.

Do not put the token in the query string of API calls. It would land in our access logs and the public referrer header. If your token is ever exposed, email affiliates@safari.com and we will rotate it.

Authorization: Bearer YOUR_DASHBOARD_TOKEN

Endpoint 1 of 4

List safaris.

GET /api/affiliate/safaris

Returns a paginated list of safari packages, ordered by popularity. Every filter is optional; with no parameters you get the top 50 by popularity.

Query parameters

Param Type Notes
destinationslugSafaris touching this destination, e.g. tanzania.
experienceslugTrip type, e.g. honeymoon.
brandslugSingle operator, e.g. singita.
lodgeslugSafaris including a specific lodge.
currencyISOUSD, ZAR, etc.
minPricenumberFrom-price floor.
maxPricenumberFrom-price ceiling.
qstringFree-text prefix match against name and summary.
limitintegerDefault 50, max 200.
cursorintegerOffset for the next page (use nextCursor from the previous response).

Try it

curl 'https://www.safari.com/api/affiliate/safaris?destination=tanzania&limit=5' \
  -H 'Authorization: Bearer YOUR_DASHBOARD_TOKEN'

Endpoint 2 of 4

Get one safari.

GET /api/affiliate/safaris/{slug}

Full detail for one package. Includes the day-by-day description and inclusions as rendered HTML, the full image gallery, all rate periods (so you can show seasonality), and the named lodges incorporated by the itinerary.

No query parameters; the slug is the only input.

Try it

curl 'https://www.safari.com/api/affiliate/safaris/three-day-unique-wonder-kruger-train-on-the-bridge-safari' \
  -H 'Authorization: Bearer YOUR_DASHBOARD_TOKEN'

Endpoint 3 of 4

List destinations.

GET /api/affiliate/destinations

The destination taxonomy, for populating your own filter UI. Each item carries parentDestination so you can rebuild the regional hierarchy client-side.

Optional query: ?kind=destination or ?kind=brand.

Try it

curl 'https://www.safari.com/api/affiliate/destinations' \
  -H 'Authorization: Bearer YOUR_DASHBOARD_TOKEN'

Endpoint 4 of 4

List experiences.

GET /api/affiliate/experiences

The trip-type taxonomy: honeymoon, family, migration, fly-in, walking, and so on. Use the slugs as the experience filter on the safaris endpoint.

No query parameters.

Try it

curl 'https://www.safari.com/api/affiliate/experiences' \
  -H 'Authorization: Bearer YOUR_DASHBOARD_TOKEN'

Errors

All errors return JSON.

Status Code When
401missing_tokenNo Authorization header.
401invalid_tokenToken does not match an active affiliate.
400bad_requestMissing required path parameter.
404not_foundSlug does not match any safari.
500server_errorUnexpected. Please report.
{ "error": { "code": "invalid_token", "message": "Token does not match any active affiliate." } }

Usage and limits

Be reasonable and we will be too.

Every request is logged against your affiliate code for monitoring. There are no hard rate limits today, but if traffic from your token looks abusive we may throttle or rotate it. If you expect heavy or scheduled load, drop us a note in advance and we will give you the green light.

Images may be displayed inside your app or marketing material, with attribution crediting safari.com. Descriptions may be excerpted; please do not reproduce them verbatim at scale.

Support

Questions, feature requests, broken things.

Email affiliates@safari.com and we will come back to you, usually the same day. If a field you need is missing from the response shape, tell us what your use case is and we can usually add it.