Skip to main content
GET
Detailed adventure record

Authorizations

Authorization
string
header
default:sk_test_DEMO0000_replace_with_your_sandbox_key
required

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

Accept-Language
enum<string>
default:fr

Language of the returned labels (titles, descriptions, categories).

Available options:
fr,
en,
ar

Path Parameters

slug
string
required

Stable adventure slug (usable as an ID in partner links). The example is illustrative — obtain a real value from GET /adventures. The sandbox catalogue mirrors production with every slug suffixed -sandbox; production slugs have no suffix.

Maximum string length: 200
Pattern: ^[a-z0-9-]+$

Response

Adventure found

id
string<uuid>
required
slug
string
required
Example:

"marrakech-3-jours-desert-sandbox"

type
enum<string>
required
  • EXPERIENCE: short adventure (a few hours to 1 day), hourly slots.
  • TRIP: multi-day tour with an itinerary.
Available options:
EXPERIENCE,
TRIP
title
string
required
duration
object
required
cover_image_url
string<uri>
required
price_from
object
required
rating
object
required
description
string
required
includes
string[]
required
excludes
string[]
required
rate_packs
object[]
required
subtitle
string | null
cover_image_blurhash
string | null

Compact placeholder (BlurHash) for instant rendering before the cover image loads.

cover_image_variants
object | null

Responsive variant URLs of the cover image.

destinations
string[]

Main destination labels.

categories
string[]
pricing
object

Indicative revenue breakdown on price_from (indicative = true).

agency
object | null

Owning agency. name may be null if the agency record was deleted between indexing and read.

availability_hint
enum<string> | null

Computed at search-time from booking ratios. Surfaces UI badges ("plus que 2 places", "complet"). Null if no signal available.

Available options:
AVAILABLE,
FEW_LEFT,
SOLD_OUT
distance_km
number<double> | null

Haversine distance between the search reference point (lat/lng query params) and the adventure's primary location. Null if the search was not geo-anchored.

Required range: x >= 0
highlights
string[]
what_to_bring
string[]
good_to_know
string[]
itinerary
object[]
itinerary_periods
object[]

Multi-day periods grouping consecutive itinerary days (e.g. days 1-3 = "Marrakech to dunes"). Provided alongside itinerary for richer day-by-day rendering on long trips. Empty for EXPERIENCE adventures.

accommodations
object[]
meeting_points
object[] | null

Where travellers meet the guide (EXPERIENCE only). More than one entry means the operator offers a choice, made at booking time. Coordinates are frequently absent: roughly two thirds of the catalogue declares a name alone, so render the name and the instructions without assuming a map is available.

faq
object[]

Frequently asked questions, ordered by display index.

host
object | null

Host profile (EXPERIENCE adventures only).

departure_cities
string[]
departure_dates
string<date>[]

Future bookable dates, ascending, for every adventure type: the union of the calendars that apply to the rate packs (a pack calendar overrides the adventure one), with past dates and dates past their booking cut-off already removed. Empty when nothing is bookable. For a short-duration adventure these are the bookable days.

next_departure_date
string<date> | null

Soonest bookable future departure (respects per-pack booking cutoff).

translation_source
enum<string> | null

Set when the returned content has been translated from the source language for the requested Accept-Language. null if the requested locale equals the adventure's source language (content delivered as authored).

Available options:
auto,
manual
age_brackets
object

Age boundaries used to price travellers: 0..infant_max_age is an infant, infant_max_age+1..child_max_age a child, above child_max_age an adult.