Developer API
Build a tour-operator website on KwaWingu data.
A clean per-operator REST API. One call returns the whole site — profile, tours with full detail, destinations, gallery, team and reviews. Reads are open; writes use scoped keys. An OpenAPI spec ships with every operator, so humans and AI can integrate in minutes.
Base URL
Per operator:/api/v1/{operatorSlug}
Authentication
Send X-API-Key. Reads are open; writes need a key with the matching scope.
Rate limit
1,000 requests per hour, per key / caller.
OpenAPI 3
Every operator exposes /openapi.json — works with Swagger, Postman & AI codegen.
The fastest way to build a site
GET /site — everything in one call
The /site endpoint returns a complete website bundle so you never have to stitch calls together:
profile— branding, contact, abouttours— every tour with full detaildestinations— parks, regions, best monthsgallery— image library URLsteam— guides & staff profilesreviews— guest ratings & reviews
const res = await fetch(
"https://tours.kwawingu.com/api/v1/{operatorSlug}/site",
{ headers: { "X-API-Key": "kw_live_…" } } // optional for reads
);
const {
profile, tours, destinations, gallery, team, reviews
} = await res.json();
// Every tour in `tours` already includes full detail —
// itinerary, pricing matrix, gallery, reviews and more.curl https://tours.kwawingu.com/api/v1/{operatorSlug}/site \
-H "X-API-Key: kw_live_…" # header optional for readsEndpoint reference
All paths are relative to /api/v1/{operatorSlug}. Reads are open to anonymous callers; writes require a key carrying the listed scope.
| Method | Path | Scope | Description |
|---|---|---|---|
| GET | /site | site:read | One-call website bundle: profile, tours (full detail), destinations, gallery, team, reviews. |
| GET | /profile | profile:read | Company profile, branding, contact details, about copy. |
| GET | /tours?page&size | tours:read | Paginated tour summaries with pricing, seasons, ratings and cover images. |
| GET | /tours/{tourSlug} | tours:read | Full tour detail — itinerary, pricing matrix, accommodation tiers, gallery, FAQs, reviews. |
| GET | /tours/{tourSlug}/availability?month&date&pax | availability:read | Live departures and seat availability for a tour. |
| GET | /destinations | destinations:read | Destinations — parks, regions, best months, descriptions. |
| GET | /gallery | gallery:read | Image library URLs for the website. |
| GET | /team | team:read | Public staff & guide profiles for a 'Meet the team' page. |
| GET | /reviews?page&size | reviews:read | Guest reviews and ratings. |
| GET | /openapi.json | none | Machine-readable OpenAPI 3 spec for this operator. |
| POST | /quote | quotes:write | Calculate a price quote for a trip. |
| POST | /bookings | bookings:write | Create a booking. |
| POST | /inquiries | inquiries:write | Submit a contact / date inquiry to the operator's inbox. |
| POST | /chatbot | chatbot:write | Query the grounded operator AI assistant. |
What a tour returns
GET /tours/{tourSlug} (and every tour inside /site) returns rich, render-ready content:
Itinerary
Day-by-day itineraryDays — each with meals, activities, location, and tiered accommodation (accommodations[{tier,name,note}]).
Seasons & pricing matrix
seasons[{name,startMonth,endMonth,note}] and pricingMatrix[{tier,season,minPax,maxPax,adult,child}].
Guiding & audience
guidingOptions, targetAudience, supportedBookingModels, accommodationTiers.
Inclusions & packing
included, excluded, packingList, highlights, descriptionFull.
Gallery & add-ons
galleryImageUrls, coverImageUrl, addons, and per-tour FAQs.
Reviews & operator
Per-tour reviews, averageRating, plus the embedded operator block.
Fetch a single tour
const res = await fetch(
"https://tours.kwawingu.com/api/v1/{operatorSlug}/tours/{tourSlug}"
);
const tour = await res.json();
tour.itineraryDays // day-by-day plan + accommodation tiers
tour.pricingMatrix // [{ tier, season, minPax, maxPax, adult, child }]
tour.seasons // [{ name, startMonth, endMonth, note }]
tour.included // string[]
tour.galleryImageUrls // string[]
tour.faqs // [{ question, answer }]
tour.reviews // guest reviewscurl https://tours.kwawingu.com/api/v1/{operatorSlug}/tours/serengeti-migration-safariAvailability
Add live departures with GET /tours/{tourSlug}/availability?month=2026-08.
Ship a typed client in minutes
Every operator publishes a machine-readable OpenAPI 3 spec at /api/v1/{operatorSlug}/openapi.json. Import it into Swagger, Postman, or an AI code generator to scaffold a fully typed client.
Operators create and manage scoped API keys from Dashboard → Booking Engine → Developers.