{"openapi":"3.1.0","info":{"title":"Unsold Adventures API","version":"1","description":"Curated activities run by local operators. Booking links go through /go/{slug}, our attributed redirect."},"servers":[{"url":"https://unsoldadventures.com"}],"paths":{"/api/v1/itinerary-accounts/session":{"get":{"summary":"The current verified email account, or null. Private, no-store; authenticated by a secure HttpOnly session cookie.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/itinerary-accounts/sign-in":{"post":{"summary":"Send a single-use email sign-in link. An optional draft is saved only after email verification. Requires a same-origin request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"},"patch":{"$ref":"#/components/schemas/DraftPatch"},"creationId":{"type":"string","pattern":"^[A-Za-z0-9]{24}$"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Origin rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"503":{"description":"Email delivery unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/verify":{"post":{"summary":"Exchange a single-use email token for an account session. Tokens expire in 15 minutes. Requires a same-origin request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid or expired link","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Origin rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/preview-sign-in":{"post":{"summary":"Preview the email for explicit sign-in confirmation without consuming the token.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","pattern":"^[A-Za-z0-9]{32}$"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}}}}}},"400":{"description":"Expired or used link","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/sign-out":{"post":{"summary":"Revoke the current account session and remove its cookie. Requires a same-origin request.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Origin rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/sources/trip/{id}":{"get":{"summary":"Resolve a retained immutable itinerary source for a generated trip. Omits traveler email and account information.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}},{"name":"version","in":"query","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"description":"Exact retained source version; omitted to initialize or retrieve the original snapshot."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"$ref":"#/components/schemas/ItinerarySource"},"version":{"type":"string"}}}}}},"400":{"description":"Invalid version","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/saved":{"get":{"summary":"The signed-in account’s saved itineraries with per-URL visit counts. Never lists another account’s itineraries.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SavedItinerary"}}}}},"401":{"description":"Sign-in required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/saved/{id}":{"get":{"summary":"Shared compact itinerary data. Account email, credentials and ownership id are excluded.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedItinerary"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}},"put":{"summary":"Create or autosave an account-owned compact itinerary. Revision 0 creates; updates require the current revision. Identical retries are idempotent. Requires same-origin request and account session.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["patch","revision"],"properties":{"patch":{"$ref":"#/components/schemas/DraftPatch"},"revision":{"type":"integer","minimum":0}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedItinerary"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedItinerary"}}}},"400":{"description":"Invalid source or edits","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Sign-in required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"403":{"description":"Not owned by this account","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Revision conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}},"delete":{"summary":"Remove an itinerary from the signed-in owner’s library.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Sign-in required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/itinerary-accounts/visits":{"post":{"summary":"Record one browser page load, deduplicated by visitId. Edits and URL replacement do not produce visits. Sends itinerary identity only, never the encoded descriptions.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["visitId","identity","source","state"],"properties":{"visitId":{"type":"string"},"identity":{"type":"string"},"source":{"type":"string"},"state":{"type":"string","enum":["template","draft","saved","trip"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid visit","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Too many visits","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/creator-itineraries":{"get":{"summary":"Search published creator itineraries without transcript or model calls","parameters":[{"name":"city","in":"query","schema":{"type":"string","maxLength":200}},{"name":"creator","in":"query","schema":{"type":"string","maxLength":200}},{"name":"q","in":"query","schema":{"type":"string","maxLength":200}},{"name":"cursor","in":"query","schema":{"type":"integer","minimum":0,"maximum":100000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid filters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/creator-itineraries/{slug}":{"get":{"summary":"Read one attributed creator itinerary; .json and .md twins share the publication service","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorItinerary"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/creator-remixes":{"post":{"summary":"Save a derived creator plan anonymously or with private email association. Returns independent read/edit capabilities once; no mail is sent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRemixInput"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"remix":{"$ref":"#/components/schemas/CreatorRemix"},"readToken":{"type":"string"},"editToken":{"type":"string"},"shareUrl":{"type":"string"}}}}}},"400":{"description":"Invalid plan","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"413":{"description":"Plan exceeds 64 KiB","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Save limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/creator-remixes/{readToken}":{"get":{"summary":"Unlisted saved read; .json/.md twins. Private email/edit key omitted; reads do not extend expiry.","parameters":[{"name":"readToken","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{32}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRemix"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}},"put":{"summary":"Owner-only update with Bearer edit capability and If-Match revision; source baseline is immutable","parameters":[{"name":"readToken","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"integer"}}],"security":[{"creatorOwner":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRemixInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorRemix"}}}},"400":{"description":"Invalid plan","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"409":{"description":"Revision conflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"429":{"description":"Mutation limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}},"delete":{"summary":"Owner-only deletion, including archived baselines","parameters":[{"name":"readToken","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"creatorOwner":[]}],"responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/catalog":{"get":{"summary":"Every published destination and activity","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Catalog"}}}}}}},"/api/v1/destinations":{"get":{"summary":"Published destinations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Destination"}}}}}}}},"/api/v1/activities":{"get":{"summary":"Published activities, optionally filtered","parameters":[{"name":"dest","in":"query","schema":{"type":"string"},"description":"Destination slug"},{"name":"theme","in":"query","schema":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}},{"name":"format","in":"query","schema":{"type":"string","enum":["small-group","private","family","self-guided"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}}}},"400":{"description":"Invalid query","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/activities/{slug}":{"get":{"summary":"One published activity","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Activity"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/trips":{"post":{"summary":"Plan a trip around basket activities with our AI. The human traveler's email is required and never returned.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trip"}}}},"400":{"description":"Invalid request or unknown activity slugs","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"502":{"description":"Our AI could not build a valid plan","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/trips/{id}":{"get":{"summary":"A planned trip. The id is the access token. Also at /api/v1/trips/{id}.json and, as Markdown with booking links, /api/v1/trips/{id}.md","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trip"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/api/v1/trips/{id}/advisor":{"post":{"summary":"Ask a human advisor to book the trip (optional note and phone)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorLeadRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"502":{"description":"Saved, but the advisor could not be notified","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}}},"components":{"securitySchemes":{"creatorOwner":{"type":"http","scheme":"bearer","description":"Independent saved-plan edit capability"}},"schemas":{"DraftPatch":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"v":{"type":"number","const":1},"source":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"template"},"id":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"version":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["kind","id","version"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"trip"},"id":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"},"version":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["kind","id","version"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"scratch"},"id":{"type":"string","const":"new"},"version":{"type":"string","const":"1"}},"required":["kind","id","version"],"additionalProperties":false}]},"startDate":{"default":null,"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"removed":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160}},"descriptions":{"default":{},"type":"object","propertyNames":{"type":"string","maxLength":160},"additionalProperties":{"type":"string","maxLength":1000}},"added":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"day":{"type":"string","maxLength":40},"activity":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["day","activity"],"additionalProperties":false}},"title":{"type":"string","minLength":1,"maxLength":150},"days":{"type":"integer","minimum":1,"maximum":30}},"required":["v","source","startDate","removed","descriptions","added"],"additionalProperties":false},"SavedItinerary":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"},"patch":{"type":"object","properties":{"v":{"type":"number","const":1},"source":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"template"},"id":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"version":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["kind","id","version"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"trip"},"id":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"},"version":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["kind","id","version"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"scratch"},"id":{"type":"string","const":"new"},"version":{"type":"string","const":"1"}},"required":["kind","id","version"],"additionalProperties":false}]},"startDate":{"default":null,"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"removed":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160}},"descriptions":{"default":{},"type":"object","propertyNames":{"type":"string","maxLength":160},"additionalProperties":{"type":"string","maxLength":1000}},"added":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"day":{"type":"string","maxLength":40},"activity":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["day","activity"],"additionalProperties":false}},"title":{"type":"string","minLength":1,"maxLength":150},"days":{"type":"integer","minimum":1,"maximum":30}},"required":["v","source","startDate","removed","descriptions","added"],"additionalProperties":false},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","patch","revision","createdAt","updatedAt"],"additionalProperties":false},"ItinerarySource":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"intro":{"type":"string","maxLength":6000},"prefs":{"type":"object","properties":{"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"days":{"type":"integer","minimum":1,"maximum":30},"pace":{"type":"string","enum":["relaxed","balanced","packed"]},"travelers":{"type":"integer","minimum":1,"maximum":20},"budget":{"type":"string","enum":["value","mid","premium"]},"interests":{"default":[],"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}}},"required":["days","pace","travelers","interests"],"additionalProperties":false},"days":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"place":{"type":"string"},"elements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160},"kind":{"type":"string","enum":["activity","free"]},"title":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":6000},"activity":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"optional":{"type":"boolean"}},"required":["id","kind","title","description"],"additionalProperties":false}},"transfers":{"type":"array","items":{"type":"string"}},"stay":{"type":"string"}},"required":["id","title","place","elements","transfers"],"additionalProperties":false}}},"required":["title","description","intro","days"],"additionalProperties":false},"CreatorItinerary":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"type":"string","minLength":1,"maxLength":2000},"city":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"source":{"type":"object","properties":{"videoId":{"type":"string","pattern":"^[A-Za-z0-9_-]{11}$"},"url":{"type":"string","maxLength":1000,"format":"uri"},"title":{"type":"string","minLength":1,"maxLength":500},"creator":{"type":"string","minLength":1,"maxLength":200},"creatorUrl":{"type":"string","maxLength":1000,"format":"uri"}},"required":["videoId","url","title","creator","creatorUrl"],"additionalProperties":false},"notes":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":1000}},"stops":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"day":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99},"name":{"type":"string","minLength":1,"maxLength":300},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"seconds":{"type":"number","minimum":0,"maximum":86400},"category":{"type":"string","maxLength":40},"role":{"type":"string","enum":["main","optional","alternative","context"]},"resolution":{"type":"string","enum":["branch_unverified","official_source_found","unnamed","name_review","area_context"]},"officialUrl":{"type":"string","maxLength":1000,"format":"uri"},"sourceDay":{"anyOf":[{"type":"integer","minimum":1,"maximum":30},{"type":"null"}]},"evidence":{"type":"object","properties":{"acquisition":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"segmentStart":{"type":"integer","minimum":0,"maximum":9007199254740991},"segmentEnd":{"type":"integer","minimum":0,"maximum":9007199254740991},"startMs":{"type":"number","minimum":0},"endMs":{"type":"number","minimum":0}},"required":["acquisition","segmentStart","segmentEnd","startMs","endMs"],"additionalProperties":false},"placeId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,255}$"}},"required":["id","day","order","name","neighborhood","seconds","category","role","resolution"],"additionalProperties":false}},"relationships":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relation":{"type":"string","enum":["exact_place","same_neighborhood","same_city_theme"]},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"mentionIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"}},"suggestedDay":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["id","activitySlug","relation","neighborhood","mentionIds","suggestedDay","reason"],"additionalProperties":false}},"relatedItineraries":{"maxItems":3,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"title":{"type":"string","maxLength":300},"days":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","maxLength":1000},"requiredActivitySlugs":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}},"required":["slug","title","days","reason","requiredActivitySlugs"],"additionalProperties":false}},"status":{"type":"string","const":"published"},"matches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relation":{"type":"string","enum":["exact_place","same_neighborhood","same_city_theme"]},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"mentionIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"}},"suggestedDay":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","minLength":1,"maxLength":1000},"activity":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"partner":{"type":"string","enum":["viator","projectexpedition","magicaltrip"]},"partnerCode":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"highlights":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"whyWePicked":{"type":"string","minLength":1},"images":{"minItems":1,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"durationMin":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceFrom":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},"rating":{"type":"number","minimum":0,"maximum":5},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string","enum":["small-group","private","family","self-guided"]},"themes":{"minItems":1,"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}},"languages":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$"}},"featured":{"type":"boolean"},"bookUrl":{"type":"string","format":"starts_with","pattern":"^\\/go\\/.*"},"metaTitle":{"type":"string","minLength":1},"metaDescription":{"type":"string","minLength":1},"faq":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"q":{"type":"string","minLength":1},"a":{"type":"string","minLength":1}},"required":["q","a"],"additionalProperties":false}},"goodToKnow":{"maxItems":6,"type":"array","items":{"type":"string","minLength":1}},"whoItSuits":{"type":"string","minLength":1}},"required":["slug","destinationSlug","partner","partnerCode","title","hook","summary","description","highlights","whyWePicked","images","durationMin","priceFrom","rating","reviewCount","format","themes","languages","featured","bookUrl"],"additionalProperties":false}},"required":["id","activitySlug","relation","neighborhood","mentionIds","suggestedDay","reason","activity"],"additionalProperties":false}}},"required":["id","slug","version","title","summary","city","destinationSlug","source","notes","stops","relationships","relatedItineraries","status","matches"],"additionalProperties":false},"CreatorRemix":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"baseline":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":300},"summary":{"type":"string","minLength":1,"maxLength":2000},"city":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"source":{"type":"object","properties":{"videoId":{"type":"string","pattern":"^[A-Za-z0-9_-]{11}$"},"url":{"type":"string","maxLength":1000,"format":"uri"},"title":{"type":"string","minLength":1,"maxLength":500},"creator":{"type":"string","minLength":1,"maxLength":200},"creatorUrl":{"type":"string","maxLength":1000,"format":"uri"}},"required":["videoId","url","title","creator","creatorUrl"],"additionalProperties":false},"notes":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":1000}},"stops":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"day":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99},"name":{"type":"string","minLength":1,"maxLength":300},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"seconds":{"type":"number","minimum":0,"maximum":86400},"category":{"type":"string","maxLength":40},"role":{"type":"string","enum":["main","optional","alternative","context"]},"resolution":{"type":"string","enum":["branch_unverified","official_source_found","unnamed","name_review","area_context"]},"officialUrl":{"type":"string","maxLength":1000,"format":"uri"},"sourceDay":{"anyOf":[{"type":"integer","minimum":1,"maximum":30},{"type":"null"}]},"evidence":{"type":"object","properties":{"acquisition":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"segmentStart":{"type":"integer","minimum":0,"maximum":9007199254740991},"segmentEnd":{"type":"integer","minimum":0,"maximum":9007199254740991},"startMs":{"type":"number","minimum":0},"endMs":{"type":"number","minimum":0}},"required":["acquisition","segmentStart","segmentEnd","startMs","endMs"],"additionalProperties":false},"placeId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,255}$"}},"required":["id","day","order","name","neighborhood","seconds","category","role","resolution"],"additionalProperties":false}},"relationships":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relation":{"type":"string","enum":["exact_place","same_neighborhood","same_city_theme"]},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"mentionIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"}},"suggestedDay":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","minLength":1,"maxLength":1000}},"required":["id","activitySlug","relation","neighborhood","mentionIds","suggestedDay","reason"],"additionalProperties":false}},"relatedItineraries":{"maxItems":3,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"title":{"type":"string","maxLength":300},"days":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","maxLength":1000},"requiredActivitySlugs":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}},"required":["slug","title","days","reason","requiredActivitySlugs"],"additionalProperties":false}},"status":{"type":"string","const":"published"},"matches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relation":{"type":"string","enum":["exact_place","same_neighborhood","same_city_theme"]},"neighborhood":{"type":"string","minLength":1,"maxLength":200},"mentionIds":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"}},"suggestedDay":{"type":"integer","minimum":1,"maximum":30},"reason":{"type":"string","minLength":1,"maxLength":1000},"activity":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"partner":{"type":"string","enum":["viator","projectexpedition","magicaltrip"]},"partnerCode":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"highlights":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"whyWePicked":{"type":"string","minLength":1},"images":{"minItems":1,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"durationMin":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceFrom":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},"rating":{"type":"number","minimum":0,"maximum":5},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string","enum":["small-group","private","family","self-guided"]},"themes":{"minItems":1,"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}},"languages":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$"}},"featured":{"type":"boolean"},"bookUrl":{"type":"string","format":"starts_with","pattern":"^\\/go\\/.*"},"metaTitle":{"type":"string","minLength":1},"metaDescription":{"type":"string","minLength":1},"faq":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"q":{"type":"string","minLength":1},"a":{"type":"string","minLength":1}},"required":["q","a"],"additionalProperties":false}},"goodToKnow":{"maxItems":6,"type":"array","items":{"type":"string","minLength":1}},"whoItSuits":{"type":"string","minLength":1}},"required":["slug","destinationSlug","partner","partnerCode","title","hook","summary","description","highlights","whyWePicked","images","durationMin","priceFrom","rating","reviewCount","format","themes","languages","featured","bookUrl"],"additionalProperties":false}},"required":["id","activitySlug","relation","neighborhood","mentionIds","suggestedDay","reason","activity"],"additionalProperties":false}}},"required":["id","slug","version","title","summary","city","destinationSlug","source","notes","stops","relationships","relatedItineraries","status","matches"],"additionalProperties":false},"revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"mode":{"type":"string","enum":["anonymous","email"]},"selection":{"type":"object","properties":{"stops":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"sourceStopId":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"assignedDay":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99}},"required":["sourceStopId","assignedDay","order"],"additionalProperties":false}},"additions":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relationshipId":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"assignedDay":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99}},"required":["activitySlug","relationshipId","assignedDay","order"],"additionalProperties":false}}},"required":["stops","additions"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["baseline","revision","mode","selection","createdAt","updatedAt","expiresAt"],"additionalProperties":false},"CreatorRemixInput":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"baseline":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","version"],"additionalProperties":false},"stops":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"sourceStopId":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"assignedDay":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99}},"required":["sourceStopId","assignedDay","order"],"additionalProperties":false}},"additions":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"relationshipId":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"},"assignedDay":{"type":"integer","minimum":1,"maximum":30},"order":{"type":"integer","minimum":0,"maximum":99}},"required":["activitySlug","relationshipId","assignedDay","order"],"additionalProperties":false}},"mode":{"type":"string","enum":["anonymous","email"]},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["baseline","stops","additions","mode"],"additionalProperties":false},"Destination":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"country":{"type":"string","minLength":1},"region":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"intro":{"type":"string","minLength":1},"hero":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"required":["slug","name","country","hook","intro","hero"],"additionalProperties":false},"Activity":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"partner":{"type":"string","enum":["viator","projectexpedition","magicaltrip"]},"partnerCode":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"highlights":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"whyWePicked":{"type":"string","minLength":1},"images":{"minItems":1,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"durationMin":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceFrom":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},"rating":{"type":"number","minimum":0,"maximum":5},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string","enum":["small-group","private","family","self-guided"]},"themes":{"minItems":1,"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}},"languages":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$"}},"featured":{"type":"boolean"},"bookUrl":{"type":"string","format":"starts_with","pattern":"^\\/go\\/.*"},"metaTitle":{"type":"string","minLength":1},"metaDescription":{"type":"string","minLength":1},"faq":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"q":{"type":"string","minLength":1},"a":{"type":"string","minLength":1}},"required":["q","a"],"additionalProperties":false}},"goodToKnow":{"maxItems":6,"type":"array","items":{"type":"string","minLength":1}},"whoItSuits":{"type":"string","minLength":1}},"required":["slug","destinationSlug","partner","partnerCode","title","hook","summary","description","highlights","whyWePicked","images","durationMin","priceFrom","rating","reviewCount","format","themes","languages","featured","bookUrl"],"additionalProperties":false},"Catalog":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"destinations":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"country":{"type":"string","minLength":1},"region":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"intro":{"type":"string","minLength":1},"hero":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"required":["slug","name","country","hook","intro","hero"],"additionalProperties":false}},"activities":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"destinationSlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"partner":{"type":"string","enum":["viator","projectexpedition","magicaltrip"]},"partnerCode":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"hook":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"highlights":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}},"whyWePicked":{"type":"string","minLength":1},"images":{"minItems":1,"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"alt":{"type":"string","minLength":1}},"required":["url","alt"],"additionalProperties":false}},"durationMin":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"priceFrom":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amount","currency"],"additionalProperties":false},"rating":{"type":"number","minimum":0,"maximum":5},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string","enum":["small-group","private","family","self-guided"]},"themes":{"minItems":1,"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}},"languages":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z]{2,3}(?:-[A-Z]{2})?$"}},"featured":{"type":"boolean"},"bookUrl":{"type":"string","format":"starts_with","pattern":"^\\/go\\/.*"},"metaTitle":{"type":"string","minLength":1},"metaDescription":{"type":"string","minLength":1},"faq":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"q":{"type":"string","minLength":1},"a":{"type":"string","minLength":1}},"required":["q","a"],"additionalProperties":false}},"goodToKnow":{"maxItems":6,"type":"array","items":{"type":"string","minLength":1}},"whoItSuits":{"type":"string","minLength":1}},"required":["slug","destinationSlug","partner","partnerCode","title","hook","summary","description","highlights","whyWePicked","images","durationMin","priceFrom","rating","reviewCount","format","themes","languages","featured","bookUrl"],"additionalProperties":false}}},"required":["generatedAt","destinations","activities"],"additionalProperties":false},"TripRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"basket":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,40}$"},"items":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}},"required":["items"],"additionalProperties":false},"prefs":{"type":"object","properties":{"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"days":{"type":"integer","minimum":1,"maximum":30},"pace":{"type":"string","enum":["relaxed","balanced","packed"]},"travelers":{"type":"integer","minimum":1,"maximum":20},"budget":{"type":"string","enum":["value","mid","premium"]},"interests":{"default":[],"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}}},"required":["days","pace","travelers","interests"],"additionalProperties":false},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["basket","prefs","email"],"additionalProperties":false},"Trip":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9]{12,32}$"},"basket":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,40}$"},"items":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}},"required":["items"],"additionalProperties":false},"prefs":{"type":"object","properties":{"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"days":{"type":"integer","minimum":1,"maximum":30},"pace":{"type":"string","enum":["relaxed","balanced","packed"]},"travelers":{"type":"integer","minimum":1,"maximum":20},"budget":{"type":"string","enum":["value","mid","premium"]},"interests":{"default":[],"type":"array","items":{"type":"string","enum":["adventure","culture","food","wildlife","family"]}}},"required":["days","pace","travelers","interests"],"additionalProperties":false},"plan":{"type":"object","properties":{"title":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"days":{"minItems":1,"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","minimum":1,"maximum":9007199254740991},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"title":{"type":"string","minLength":1},"anchors":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"inBetween":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"kind":{"type":"string","enum":["walk","market","viewpoint","food","rest","other"]}},"required":["title","description","kind"],"additionalProperties":false}},"baseArea":{"type":"string","minLength":1},"transferNotes":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1},"to":{"type":"string","minLength":1},"mode":{"type":"string","minLength":1},"approxMinutes":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"note":{"type":"string","minLength":1}},"required":["from","to","mode","approxMinutes"],"additionalProperties":false}}},"required":["day","title","anchors","inBetween","baseArea","transferNotes"],"additionalProperties":false}},"suggestedExtras":{"maxItems":2,"type":"array","items":{"type":"object","properties":{"activitySlug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"day":{"type":"integer","minimum":1,"maximum":9007199254740991},"reason":{"type":"string","minLength":1}},"required":["activitySlug","day","reason"],"additionalProperties":false}}},"required":["title","summary","days","suggestedExtras"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","basket","prefs","plan","createdAt"],"additionalProperties":false},"AdvisorLeadRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"note":{"type":"string","maxLength":2000},"phone":{"type":"string","pattern":"^\\+?[0-9 ()-]{6,24}$"}},"additionalProperties":false}}}}