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 |
|---|---|---|
| destination | slug | Safaris touching this destination, e.g. tanzania. |
| experience | slug | Trip type, e.g. honeymoon. |
| brand | slug | Single operator, e.g. singita. |
| lodge | slug | Safaris including a specific lodge. |
| currency | ISO | USD, ZAR, etc. |
| minPrice | number | From-price floor. |
| maxPrice | number | From-price ceiling. |
| q | string | Free-text prefix match against name and summary. |
| limit | integer | Default 50, max 200. |
| cursor | integer | Offset 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 |
|---|---|---|
| 401 | missing_token | No Authorization header. |
| 401 | invalid_token | Token does not match an active affiliate. |
| 400 | bad_request | Missing required path parameter. |
| 404 | not_found | Slug does not match any safari. |
| 500 | server_error | Unexpected. 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.