concierge
Search Africa safari destinations, generate day-by-day itineraries, and price expert travel work.
Should I use this
Quality & Safety
Findings (1)
- LOWin add_day
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"concierge": {
"url": "https://concierge.iconic-expeditions.com/mcp"
}
}
}Remote endpoints
https://concierge.iconic-expeditions.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (23)
🟢search_content(type, search, per_page)
Search Iconic Expeditions content across itineraries, activities, destinations, and posts. Flows through the content chain (WordPress -> local cache -> AI fallback), so gaps WordPress doesn't cover are filled with clearly-labeled AI-synthesized results. Each item includes a `source` field (wordpress | cache | ai).
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"description": "Content type to search"
},
"search": {
"description": "Search keyword",
"type": "string"
},
"per_page": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢search_wp_content(type, search, per_page)
Alias of search_content, kept for backwards compatibility. Prefer search_content.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"description": "Content type to search"
},
"search": {
"description": "Search keyword",
"type": "string"
},
"per_page": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_content(type, id)
Fetch a single content item by type and id, walking the content chain (WordPress -> cache). Returns the item with its `source`.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"itinerary",
"activity",
"destination",
"post"
]
},
"id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Source content id (WordPress post id)"
}
},
"required": [
"type",
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_wp_content(type, id)
Alias of get_content, kept for backwards compatibility. Prefer get_content.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"itinerary",
"activity",
"destination",
"post"
]
},
"id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Source content id (WordPress post id)"
}
},
"required": [
"type",
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_destinations(region, category, limit)
List destinations from the database, optionally filtered by region or category.
Input Schema
{
"type": "object",
"properties": {
"region": {
"description": "Filter by region name, e.g. 'Matabeleland North'",
"type": "string"
},
"category": {
"description": "Filter by category, e.g. 'National Park'",
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_destination(identifier)
Get full details for a single destination by slug or id.
Input Schema
{
"type": "object",
"properties": {
"identifier": {
"type": "string",
"description": "Either a destination id or its URL slug"
}
},
"required": [
"identifier"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_itinerary(itinerary_id)
Get a full itinerary with all days and activities, sorted by day number and time slot. Public itineraries are readable without a token; private ones require the owning token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The UUID of the itinerary"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_itineraries
List itineraries created by the Iconic Expeditions concierge, most recent first. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡create_itinerary(title, num_days, description, start_date)
Create a new (empty) itinerary attributed to the Iconic Expeditions concierge, made public and returned with its share link. Days are created automatically. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Itinerary title, e.g. '7-Day Hwange Safari'"
},
"num_days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"description": "Number of days"
},
"description": {
"description": "Optional short description",
"type": "string"
},
"start_date": {
"description": "Optional ISO date string for day 1, e.g. '2025-06-01'",
"type": "string"
}
},
"required": [
"title",
"num_days"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢generate_itinerary_from_places(title, places, num_days, preferences, language)
Give at least 3 places plus optional traveller preferences and let the AI concierge build a full, bespoke day-by-day itinerary. It mines Iconic Expeditions content for real detail and synthesizes an ORIGINAL plan tailored to the guest (never a copy of a published itinerary). Attributed to the Iconic Expeditions account and made public. Returns immediately with the itinerary id + share link; poll get_itinerary for progress (generation_status: pending -> building -> complete). Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Itinerary title, e.g. 'Highlights of Zimbabwe'"
},
"places": {
"minItems": 3,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "At least 3 place names, e.g. ['Victoria Falls', 'Hwange', 'Mana Pools']"
},
"num_days": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"description": "Number of days for the trip"
},
"preferences": {
"description": "Traveller preferences that should shape the plan: pace, interests, budget, travel style",
"type": "string"
},
"language": {
"description": "Language for day titles, notes, and activity text: 'en' (English), 'ru' (Russian), or 'zh' (Chinese). Defaults to English.",
"type": "string",
"enum": [
"en",
"ru",
"zh"
]
}
},
"required": [
"title",
"places",
"num_days"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡update_itinerary(itinerary_id, title, description, start_date, is_public)
Update metadata (title, description, dates, public status) on a concierge itinerary. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"start_date": {
"type": "string"
},
"is_public": {
"description": "Set false to unpublish the shareable link",
"type": "boolean"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴delete_itinerary(itinerary_id)
Permanently delete a concierge itinerary and all its days and activities. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡add_day(itinerary_id, title, notes)
Append an extra day to a concierge itinerary and increment num_days. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"title": {
"description": "Optional day label, e.g. 'Drive to Hwange'",
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_itinerary_dossier(itinerary_id)
Read an itinerary's planning dossier: its legs, month-by-month seasonality, cost model, booking order, field notes and open choices. Public — no token needed. Returns nulls for blocks the itinerary doesn't have; older itineraries have none of them.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢price_itinerary(itinerary_id, tier_id, option_ids, nights, travellers)
Price an itinerary's cost model against a selection: a comfort tier, any per-line choices, a trip length and a traveller count. Returns the per-person line breakdown and the group total. Public — no token needed. Amounts are in minor units. Call get_itinerary_dossier first for the tier and option ids.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"tier_id": {
"description": "Defaults to the cheapest tier",
"type": "string"
},
"option_ids": {
"description": "One entry per cost option group you want to choose in",
"type": "array",
"items": {
"type": "object",
"properties": {
"group_id": {
"type": "string"
},
"option_id": {
"type": "string"
}
},
"required": [
"group_id",
"option_id"
]
}
},
"nights": {
"description": "Defaults to the cost model's reference length",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"travellers": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡set_itinerary_dossier(itinerary_id, countries, legs, seasonality, cost_model, ...)
Write the planning layer above an itinerary's day-by-day. Every block is optional — send only the ones you mean to write. Each block you DO send REPLACES that block entirely, so restate it in full: a partial legs list silently deletes the rest of the legs. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"countries": {
"description": "How many countries the route crosses",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"legs": {
"description": "The route's chapters. Every day must belong to exactly one leg, and legs must not overlap.",
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Where this stretch is, in a word or two"
},
"summary": {
"description": "A sentence or two on what these nights are for",
"type": "string"
},
"start_day": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"end_day": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"title",
"start_day",
"end_day"
]
}
},
"seasonality": {
"description": "One row per thing the trip is timed around, scored 0-3 across all twelve months, plus a verdict per month worth arguing about",
"type": "object",
"properties": {
"rows": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"description": "What is being scored — a wildlife event, a trail condition, a sea state"
},
"scores": {
"minItems": 12,
"maxItems": 12,
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"description": "January first. 0 = avoid, 1 = poor, 2 = workable, 3 = peak"
}
},
"required": [
"label",
"scores"
]
}
},
"months": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"month": {
"type": "integer",
"minimum": 1,
"maximum": 12
},
"rank": {
"type": "string",
"enum": [
"primary",
"alternative",
"workable",
"avoid"
]
},
"verdict": {
"type": "string",
"minLength": 1,
"description": "Why this month is or isn't the one, in two or three sentences"
},
"tags": {
"maxItems": 4,
"type": "array",
"items": {
"type": "string"
},
"description": "Short labels: 'Peak crossings', 'Books out first', 'Avoid'"
}
},
"required": [
"month",
"rank",
"verdict",
"tags"
]
}
},
"recommended_month": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "The month this plan is actually built around"
}
},
"required": [
"rows",
"months",
"recommended_month"
]
},
"cost_model": {
"description": "Per-person breakdown lines, amounts per comfort tier, and any per-line choices",
"type": "object",
"properties": {
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3,
"description": "ISO 4217, lowercase — 'usd'"
},
"reference_nights": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991,
"description": "The trip length the amounts are quoted at"
},
"length_options": {
"description": "Shorter or longer variants offered to the reader, in nights",
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"lines": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"minLength": 1,
"description": "Short stable key used by tiers and option groups — 'land', 'permits', 'park_fees', 'flights'"
},
"label": {
"type": "string",
"minLength": 1
},
"scales_with_length": {
"type": "boolean",
"description": "True for nightly costs (camps, park fees), false for per-trip costs (permits, internal flights)"
}
},
"required": [
"key",
"label",
"scales_with_length"
]
}
},
"tiers": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"description": "'Lean', 'Mid-range', 'Luxury'"
},
"amounts": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"line_key": {
"type": "string"
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Per person, in minor units — 620000 for $6,200"
}
},
"required": [
"line_key",
"amount"
]
},
"description": "One entry per cost line"
}
},
"required": [
"label",
"amounts"
]
}
},
"option_groups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"line_key": {
"type": "string",
"minLength": 1,
"description": "Which cost line this choice overrides"
},
"options": {
"minItems": 2,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Per person, in minor units — 620000 for $6,200"
},
"is_default": {
"type": "boolean"
}
},
"required": [
"label",
"amount"
]
}
}
},
"required": [
"label",
"line_key",
"options"
]
}
},
"notes": {
"description": "What the figures exclude and how firm they are",
"type": "string"
}
},
"required": [
"currency",
"reference_nights",
"lines",
"tiers"
]
},
"booking_order": {
"description": "What to book, in the order it has to happen",
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"detail": {
"type": "string",
"minLength": 1,
"description": "Why it sits at this point in the order"
}
},
"required": [
"title",
"detail"
]
}
},
"field_notes": {
"description": "Visas, certificates, luggage limits, kit",
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"heading": {
"type": "string",
"minLength": 1,
"description": "'Visas', 'Yellow fever', 'Luggage'"
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"heading",
"body"
]
}
},
"choices": {
"description": "Either/ors deliberately left open for the traveller",
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "'Pick your coast'"
},
"options": {
"minItems": 2,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1
},
"subtitle": {
"type": "string"
},
"body": {
"type": "string",
"minLength": 1,
"description": "What this option is actually like, and who should choose it"
}
},
"required": [
"label",
"body"
]
}
}
},
"required": [
"title",
"options"
]
}
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡write_itinerary_day_detail(itinerary_id, day_number, narrative, callouts)
Write one day out at length — why it is shaped this way, what its timing depends on, what the alternatives cost — plus up to three callouts. Replaces that day's existing narrative and callouts. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"day_number": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"narrative": {
"type": "string",
"minLength": 1,
"description": "Two or three short paragraphs, separated by blank lines. Plain text, no markup."
},
"callouts": {
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"alternative",
"swap",
"warning",
"note"
]
},
"title": {
"type": "string",
"minLength": 1,
"description": "'Alternative', 'Swap worth considering'"
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"kind",
"title",
"body"
]
}
}
},
"required": [
"itinerary_id",
"day_number",
"narrative"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡add_activity(itinerary_id, day_id, slot, title, description, ...)
Add an activity to a specific day and time slot (morning/afternoon/evening). Optionally link to a content item using its type and id. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Parent itinerary UUID"
},
"day_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The day UUID to add the activity to"
},
"slot": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
]
},
"title": {
"type": "string",
"minLength": 1,
"description": "Short title for the activity"
},
"description": {
"type": "string"
},
"duration_minutes": {
"type": "integer",
"minimum": 5,
"maximum": 9007199254740991
},
"wp_content_type": {
"description": "Content type to link",
"type": "string",
"enum": [
"itinerary",
"activity",
"destination",
"post"
]
},
"wp_content_id": {
"description": "Source content id",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"itinerary_id",
"day_id",
"slot",
"title"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴delete_activity(activity_id)
Remove an activity from a concierge itinerary day. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"activity_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_pricing
List the paid concierge service tiers and their prices: itinerary verification, verification + full booking, and full guided service. Read-only and public — use this to quote a traveller before they buy.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪request_verification(itinerary_id, contact_email, notes)
Start a PAID itinerary verification. Our travel experts manually confirm availability, seasonality, routing and current lodge rates, then return a feasibility report and final price. Returns a Stripe checkout URL. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"contact_email": {
"description": "Where to send the report + receipt",
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"notes": {
"description": "Anything the experts should know (dates, group size, budget)",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪request_bookings(itinerary_id, contact_email, notes)
Start a PAID booking service: verification PLUS we make all the bookings (lodges, transfers, activities, permits). Returns a Stripe checkout URL. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"contact_email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"notes": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪request_full_service(itinerary_id, contact_email, notes)
Start a PAID full-service, fully-guided expedition with Iconic Expeditions guides. This $500 is a deposit; the final custom price is quoted by an expert afterward based on the itinerary. Returns a Stripe checkout URL. Requires a bearer token.
Input Schema
{
"type": "object",
"properties": {
"itinerary_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"contact_email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"notes": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence