{"openapi":"3.1.0","info":{"title":"intercontinental-zoe Actions","version":"0.1.0","description":"REST mirror of the Intercontinental Zoe MCP tools, suitable for use as a ChatGPT Custom GPT Action. Every tool is exposed as a POST under /actions/:toolName. Responses wrap the MCP tool result in {actionId, result}. The server's canonical data is the only source of truth — never invent destinations, services, prices, or URLs."},"servers":[{"url":"https://intercontinental-zoe-chat-gpt.vercel.app"}],"paths":{"/actions/list_videos":{"post":{"operationId":"list_videos","summary":"List International Zoe's travel videos","description":"List videos from International Zoe's unified travel catalog across all per-country playlists (channel: @INTERNATIONALZOE). Default tool for any generic \"show me videos\", \"what have you filmed\", \"videos from places you've been\", or \"latest uploads\" request — call with no query and no arguments. Use destinationId to scope to a single country. Never call search_videos for a generic browse request. Returns `youtubeUrl` on every item and (when destinationId is passed) a top-level `playlistUrl`. For per-country playlist URLs without scoping, call list_destinations. Return only values from the server's canonical data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"destinationId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":500,"default":50},"offset":{"type":"integer","minimum":0,"default":0},"sort":{"type":"string","enum":["newest","oldest","longest","shortest"],"default":"newest"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/get_video_details":{"post":{"operationId":"get_video_details","summary":"Get full details for a video","description":"Return full metadata (title, description, duration, statistics, parsed chapters, destinations) for a video in the canonical catalog.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"videoId":{"type":"string","minLength":5,"maxLength":32,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["videoId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/get_video_transcript":{"post":{"operationId":"get_video_transcript","summary":"Fetch a video transcript","description":"Return the public caption transcript for a video in Zoe's catalog — segments and full text. notFound when no captions are available.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"videoId":{"type":"string","minLength":5,"maxLength":32,"pattern":"^[A-Za-z0-9_-]+$"},"language":{"type":"string","minLength":2,"maxLength":10,"pattern":"^[a-zA-Z-]+$"}},"required":["videoId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/search_videos":{"post":{"operationId":"search_videos","summary":"Search International Zoe's travel catalog","description":"Search International Zoe's unified video catalog by EXPLICIT KEYWORD only — matches title, description, and tags. The catalog is drawn from the International Zoe YouTube channel (@INTERNATIONALZOE); \"International Zoe\" is the canonical catalog keyword. Use ONLY when the user has provided a real search term. For \"show me videos\" / \"what have you filmed\" / generic browse requests, call list_videos instead — never fabricate an unrelated query, and never search for \"Intercontinental Zoe\" (the channel is named International Zoe). Optionally scope to one destinationId; scoped responses include a top-level `playlistUrl`. Unscoped responses include a `playlists` array listing the destinations the matches came from, each with its own `playlistUrl`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1},"destinationId":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"publishedAfter":{"type":"string"},"publishedBefore":{"type":"string"}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/list_destinations":{"post":{"operationId":"list_destinations","summary":"List destinations Zoe has visited","description":"List the destinations Zoe has visited, optionally filtered by region, country, or continent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"region":{"type":"string"},"country":{"type":"string"},"continent":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/get_destination_overview":{"post":{"operationId":"get_destination_overview","summary":"Full overview for a destination","description":"Return a bundled overview for a destination — summary, recent videos, the matching guide, available rentals, recommended services, and tips. First call when a user wants to plan a trip.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"destinationIdOrName":{"type":"string","minLength":1},"maxVideos":{"type":"integer","minimum":1,"maximum":20,"default":5}},"required":["destinationIdOrName"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/list_services":{"post":{"operationId":"list_services","summary":"List Zoe's travel services","description":"List all travel services Zoe offers with name, tagline, price, and duration. Prices are exact and canonical.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/get_service_details":{"post":{"operationId":"get_service_details","summary":"Get details for a service","description":"Return full details for a specific service — description, what's included, deliverables, price, PayPal link, Crisp chat link, and the next-step CTA.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"serviceId":{"type":"string","minLength":1}},"required":["serviceId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/list_products":{"post":{"operationId":"list_products","summary":"List products, rentals, and guides","description":"List products Zoe offers — guides, rentals, or merchandise — optionally filtered by destination.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["guide","rental","merchandise"]},"destination":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/list_support_options":{"post":{"operationId":"list_support_options","summary":"Ways to support Zoe","description":"List all the ways a visitor can support Intercontinental Zoe — donations, Patreon, merchandise, affiliates.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/get_profile":{"post":{"operationId":"get_profile","summary":"Get Intercontinental Zoe's profile","description":"Return Intercontinental Zoe's canonical profile: name, brand aliases (Global Gallivant, International Zoe), pronouns (he/him), gender, bio, and YouTube channel URL. Call before making any claims about Zoe's identity, pronouns, brand names, or channel.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/actions/start_lead":{"post":{"operationId":"start_lead","summary":"Capture a visitor lead for Zoe","description":"Capture a visitor's contact info and interest. Sends an email to Zoe via Resend and returns a PayPal link (for service leads) and Crisp chat link.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"leadType":{"type":"string","enum":["consultation","guide","rental","merchandise","donation","general"]},"name":{"type":"string","minLength":1},"email":{"type":"string","format":"email"},"message":{"type":"string","minLength":1},"destinationId":{"type":"string"},"serviceId":{"type":"string"},"productId":{"type":"string"}},"required":["leadType","name","email","message"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool invocation succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"actionId":{"type":"string"},"result":{"type":"object","description":"MCP tool result envelope with content[] and structuredContent.","additionalProperties":true}},"required":["actionId","result"]}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"Missing or invalid bearer token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}