{"openapi":"3.1.0","info":{"title":"Travel Companions API","version":"0.2.0","summary":"Find and connect with travel companions. Agent-first: REST + remote MCP from one schema.","description":"Search travel companions publicly with masked details, post trips, get ranked matches with a 'why you match' sentence, and connect by double opt-in.\n\n**Trust ladder.** 0 public search · 1 signed-in account (post trips) · 2 accepted Terms + 18+ (connect, message) · 3 ID verified (contact exchange).\nErrors carry `error.nextStep`, an instruction an agent can follow verbatim (which tool to call or link to show).\n\n**Same tools over MCP:** `https://travel.coticsy.com/mcp` (Streamable HTTP, stateless). Each `POST /v1/tools/{name}` equals the MCP tool `{name}`.\n**Caching:** anonymous GETs send `Cache-Control: public` and `ETag`; send `If-None-Match` for 304s.\n**Retries:** send `Idempotency-Key` on POST/PATCH/DELETE; successful results are replayed for 24 h.","contact":{"name":"Travel Companions Support","email":"support@travelcompanions.ai","url":"https://travel.coticsy.com/docs"},"termsOfService":"https://travel.coticsy.com/terms","license":{"name":"Proprietary","url":"https://travel.coticsy.com/terms"},"x-logo":{"url":"https://travel.coticsy.com/icon-512.png"}},"servers":[{"url":"https://travel.coticsy.com","description":"Production"}],"externalDocs":{"description":"Docs, MCP setup and examples","url":"https://travel.coticsy.com/docs"},"x-mcp":{"url":"https://travel.coticsy.com/mcp","transport":"streamable-http","serverCard":"https://travel.coticsy.com/.well-known/mcp/server-card.json"},"x-a2a":{"agentCard":"https://travel.coticsy.com/.well-known/agent-card.json"},"x-llms-txt":"https://travel.coticsy.com/llms.txt","tags":[{"name":"discover","description":"Public search (no account)"},{"name":"account","description":"Account status and lifecycle"},{"name":"profile","description":"Traveler profile"},{"name":"trips","description":"Trip posts and matches"},{"name":"connect","description":"Connections, messaging, reviews, webhooks"},{"name":"safety","description":"Report and block"},{"name":"billing","description":"Premium and ID verification"},{"name":"booking","description":"Affiliate booking helpers"},{"name":"tools","description":"Tool catalog"},{"name":"system","description":"Health"}],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"paths":{"/healthz":{"get":{"operationId":"healthz","summary":"Liveness","tags":["system"],"security":[{}],"responses":{"200":{"description":"OK"}}}},"/v1/tools":{"get":{"operationId":"list_tools","summary":"List tools with input schemas","tags":["tools"],"security":[{}],"responses":{"200":{"description":"Tool catalog"}}}},"/v1/tools/search_trips":{"post":{"operationId":"search_trips","summary":"Search travel companions","description":"Find travelers looking for companions. Works without an account. Filter by destination, origin, dates, needs (share_room, split_costs...), languages, sex, age range. Free text `q` matches plans and interests semantically. Results are ranked by compatibility and include masked traveler cards (first name + initial, age range, city).\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"search_trips","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTripsInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTripsOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/search_travelers":{"post":{"operationId":"search_travelers","summary":"Search travelers","description":"Browse masked traveler cards (not trip posts). Filter by destination of their open trips, languages, age, nationality, interests, or free text. Useful when the user asks who is going somewhere rather than for a specific date window.\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"search_travelers","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTravelersInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTravelersOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_trip":{"post":{"operationId":"get_trip","summary":"Get a trip","description":"Get the public view of one trip by id, including the masked traveler card.\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"get_trip","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_traveler_card":{"post":{"operationId":"get_traveler_card","summary":"Get a traveler card","description":"Get the public, masked card of a traveler by their public id.\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"get_traveler_card","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTravelerCardInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTravelerCardOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/list_popular_destinations":{"post":{"operationId":"list_popular_destinations","summary":"Popular destinations","description":"Destinations with the most open trips right now. Useful to suggest where companions are easiest to find.\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"list_popular_destinations","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPopularDestinationsInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPopularDestinationsOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/list_needs_taxonomy":{"post":{"operationId":"list_needs_taxonomy","summary":"List suggested needs","description":"Suggested `needs` tags. Any snake_case tag is accepted, but these are the common ones.\n\nRequires: public.","tags":["discover"],"x-min-trust":0,"x-mcp-tool":"list_needs_taxonomy","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListNeedsTaxonomyInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListNeedsTaxonomyOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_my_status":{"post":{"operationId":"get_my_status","summary":"Get my account status","description":"Tells the agent what the current user can do: trust level, plan, whether a profile exists, and the next steps to unlock more (create profile, accept terms, verify ID).\n\nRequires: public.","tags":["account"],"x-min-trust":0,"x-mcp-tool":"get_my_status","security":[{},{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyStatusInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyStatusOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/create_or_update_profile":{"post":{"operationId":"create_or_update_profile","summary":"Create or update my profile","description":"Create the traveler profile on first call (all required fields) or update parts of it later. Birth date and postal code stay private; others see an age range and city only.\n\nRequires: account.","tags":["profile"],"x-min-trust":1,"x-mcp-tool":"create_or_update_profile","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrUpdateProfileInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrUpdateProfileOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_my_profile":{"post":{"operationId":"get_my_profile","summary":"Get my profile","description":"Return the full profile of the authenticated user.\n\nRequires: account.","tags":["profile"],"x-min-trust":1,"x-mcp-tool":"get_my_profile","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyProfileInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyProfileOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/post_trip":{"post":{"operationId":"post_trip","summary":"Post a trip","description":"Publish a trip to find companions. kind=solo (default) for a traveler seeking companions, kind=group to organize a group with N spots, kind=meetup when already at the destination. Requires a profile.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"post_trip","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/update_trip":{"post":{"operationId":"update_trip","summary":"Update a trip","description":"Update fields of one of my trips.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"update_trip","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/close_trip":{"post":{"operationId":"close_trip","summary":"Close a trip","description":"Close or cancel one of my trips so it no longer appears in search.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"close_trip","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/list_my_trips":{"post":{"operationId":"list_my_trips","summary":"List my trips","description":"List the authenticated user's trips, optionally filtered by status.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"list_my_trips","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMyTripsInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMyTripsOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_my_matches":{"post":{"operationId":"get_my_matches","summary":"Get matches for my trip","description":"Ranked compatible travelers for one of my trips, with reasons. Uses my profile preferences and the other side's preferences.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"get_my_matches","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyMatchesInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyMatchesOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/create_group_trip":{"post":{"operationId":"create_group_trip","summary":"Create a group trip","description":"Create a group trip with multiple open spots. Same fields as post_trip; kind is forced to group.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"create_group_trip","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/meet_at_destination":{"post":{"operationId":"meet_at_destination","summary":"Meet at destination","description":"Post a meetup for someone already at (or about to arrive at) a destination. kind is forced to meetup.\n\nRequires: account.","tags":["trips"],"x-min-trust":1,"x-mcp-tool":"meet_at_destination","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetAtDestinationInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetAtDestinationOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/join_group_trip":{"post":{"operationId":"join_group_trip","summary":"Join a group trip","description":"Request to join an open group trip. Requires terms acceptance. Owner must accept via respond_to_connection.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"join_group_trip","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinGroupTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinGroupTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/accept_terms":{"post":{"operationId":"accept_terms","summary":"Accept terms","description":"Record that the user is 18+ and accepts the Terms of Service. Required before connecting with other travelers. Send them {base}/terms first.\n\nRequires: account.","tags":["connect"],"x-min-trust":1,"x-mcp-tool":"accept_terms","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptTermsInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptTermsOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/request_connection":{"post":{"operationId":"request_connection","summary":"Request a connection","description":"Send a connection request to the owner of a trip. Both sides must accept before contact is shared. Requires accept_terms first.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"request_connection","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestConnectionInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestConnectionOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/respond_to_connection":{"post":{"operationId":"respond_to_connection","summary":"Respond to a connection","description":"Accept or decline an incoming connection request.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"respond_to_connection","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RespondToConnectionInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RespondToConnectionOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/list_connections":{"post":{"operationId":"list_connections","summary":"List my connections","description":"List incoming and outgoing connection requests and accepted connections.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"list_connections","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConnectionsInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConnectionsOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/send_message":{"post":{"operationId":"send_message","summary":"Send a message","description":"Send a relayed message on an accepted connection. Emails stay private.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"send_message","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_messages":{"post":{"operationId":"get_messages","summary":"Get messages","description":"List relayed messages on an accepted connection.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"get_messages","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessagesInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessagesOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/reveal_contact":{"post":{"operationId":"reveal_contact","summary":"Reveal contact","description":"Reveal the counterpart's email (and phone if set) after both sides accept. Requires ID verification (trust level 3).\n\nRequires: ID verified.","tags":["connect"],"x-min-trust":3,"x-mcp-tool":"reveal_contact","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealContactInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevealContactOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/leave_review":{"post":{"operationId":"leave_review","summary":"Leave a review","description":"Leave a 1-5 star review after an accepted connection. One review per traveler per trip.\n\nRequires: terms accepted (18+).","tags":["connect"],"x-min-trust":2,"x-mcp-tool":"leave_review","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveReviewInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveReviewOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/subscribe_match_webhook":{"post":{"operationId":"subscribe_match_webhook","summary":"Subscribe to match webhooks","description":"Register an HTTPS URL that receives signed POSTs when new matches or connection events fire for this user. Agents use this to proactively notify travelers. The signing secret is returned once.\n\nRequires: account.","tags":["connect"],"x-min-trust":1,"x-mcp-tool":"subscribe_match_webhook","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeMatchWebhookInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeMatchWebhookOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/report_user":{"post":{"operationId":"report_user","summary":"Report a traveler","description":"Report a traveler for spam, scam, harassment, fake profile or safety concerns.\n\nRequires: account.","tags":["safety"],"x-min-trust":1,"x-mcp-tool":"report_user","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportUserInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportUserOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/block_user":{"post":{"operationId":"block_user","summary":"Block a traveler","description":"Block a traveler. Neither side will see the other in search or be able to connect.\n\nRequires: account.","tags":["safety"],"x-min-trust":1,"x-mcp-tool":"block_user","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockUserInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockUserOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/export_my_data":{"post":{"operationId":"export_my_data","summary":"Export my data","description":"Return everything stored about the authenticated user (GDPR/CCPA export).\n\nRequires: account.","tags":["account"],"x-min-trust":1,"x-mcp-tool":"export_my_data","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportMyDataInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportMyDataOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/delete_my_account":{"post":{"operationId":"delete_my_account","summary":"Delete my account","description":"Permanently delete the account, profile, trips and messages. Irreversible. The agent must confirm with the user first.\n\nRequires: account.","tags":["account"],"x-min-trust":1,"x-mcp-tool":"delete_my_account","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMyAccountInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMyAccountOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/start_id_verification":{"post":{"operationId":"start_id_verification","summary":"Start ID verification","description":"Create a Stripe Identity verification session. Send the returned URL to the user. Unlocks the verified badge and contact reveal.\n\nRequires: terms accepted (18+).","tags":["billing"],"x-min-trust":2,"x-mcp-tool":"start_id_verification","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartIdVerificationInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartIdVerificationOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/start_premium_checkout":{"post":{"operationId":"start_premium_checkout","summary":"Start premium checkout","description":"Create a Stripe Checkout (Link-compatible) session for Premium. Send the returned URL to the user.\n\nRequires: account.","tags":["billing"],"x-min-trust":1,"x-mcp-tool":"start_premium_checkout","security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartPremiumCheckoutInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartPremiumCheckoutOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/get_subscription":{"post":{"operationId":"get_subscription","summary":"Get subscription","description":"Return the current plan, status and usage limits.\n\nRequires: account.","tags":["billing"],"x-min-trust":1,"x-mcp-tool":"get_subscription","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubscriptionInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubscriptionOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/find_shared_stay":{"post":{"operationId":"find_shared_stay","summary":"Find a shared stay","description":"Affiliate search for hotels/villas near the destination that two matched travelers can share.\n\nRequires: terms accepted (18+).","tags":["booking"],"x-min-trust":2,"x-mcp-tool":"find_shared_stay","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindSharedStayInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindSharedStayOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/find_flights_together":{"post":{"operationId":"find_flights_together","summary":"Find flights together","description":"Affiliate flight search for matched travelers sharing an itinerary.\n\nRequires: terms accepted (18+).","tags":["booking"],"x-min-trust":2,"x-mcp-tool":"find_flights_together","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindFlightsTogetherInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindFlightsTogetherOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/find_travel_insurance":{"post":{"operationId":"find_travel_insurance","summary":"Find travel insurance","description":"Affiliate link for travel insurance suitable for companion trips.\n\nRequires: account.","tags":["booking"],"x-min-trust":1,"x-mcp-tool":"find_travel_insurance","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindTravelInsuranceInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindTravelInsuranceOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/tools/find_esim":{"post":{"operationId":"find_esim","summary":"Find an eSIM","description":"Affiliate link for destination eSIMs.\n\nRequires: account.","tags":["booking"],"x-min-trust":1,"x-mcp-tool":"find_esim","security":[{"bearerAuth":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindEsimInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindEsimOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"500":{"$ref":"#/components/responses/Error"}}}},"/v1/trips":{"get":{"operationId":"list_trips","summary":"Search trips","description":"Find travelers looking for companions. Works without an account. Filter by destination, origin, dates, needs (share_room, split_costs...), languages, sex, age range. Free text `q` matches plans and interests semantically. Results are ranked by compatibility and include masked traveler cards (first name + initial, age range, city).\n\nSame as POST /v1/tools/search_trips. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"to.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Destination filter: city"},{"name":"to.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Destination filter: country"},{"name":"to.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Destination filter: lat"},{"name":"to.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Destination filter: lon"},{"name":"to.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Destination filter: radiusKm"},{"name":"from.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Origin filter: city"},{"name":"from.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Origin filter: country"},{"name":"from.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Origin filter: lat"},{"name":"from.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Origin filter: lon"},{"name":"from.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Origin filter: radiusKm"},{"name":"startDate","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"description":"Calendar date, YYYY-MM-DD"},{"name":"endDate","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"description":"Calendar date, YYYY-MM-DD"},{"name":"minOverlapDays","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":60}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["solo","group","meetup"]}},{"name":"needs","in":"query","required":false,"schema":{"description":"Match trips that list any of these needs","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"style":"form","explode":false,"description":"Match trips that list any of these needs"},{"name":"languages","in":"query","required":false,"schema":{"description":"Travelers who speak any of these languages","maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"style":"form","explode":false,"description":"Travelers who speak any of these languages"},{"name":"sex","in":"query","required":false,"schema":{"description":"Traveler sex filter, e.g. [\"female\"] for women-only","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"style":"form","explode":false,"description":"Traveler sex filter, e.g. [\"female\"] for women-only"},{"name":"ageMin","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"ageMax","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"verifiedOnly","in":"query","required":false,"schema":{"default":false,"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"description":"Free text, semantically matched against plans and interests","type":"string","maxLength":300},"description":"Free text, semantically matched against plans and interests"},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTripsOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"create_trip","summary":"Post a trip","description":"Publish a trip to find companions. kind=solo (default) for a traveler seeking companions, kind=group to organize a group with N spots, kind=meetup when already at the destination. Requires a profile.\n\nSame as POST /v1/tools/post_trip.","tags":["trips"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTripInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/trips/search":{"get":{"operationId":"search_trips_get","summary":"Search trips (alias)","description":"Find travelers looking for companions. Works without an account. Filter by destination, origin, dates, needs (share_room, split_costs...), languages, sex, age range. Free text `q` matches plans and interests semantically. Results are ranked by compatibility and include masked traveler cards (first name + initial, age range, city).\n\nSame as POST /v1/tools/search_trips. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"to.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Destination filter: city"},{"name":"to.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Destination filter: country"},{"name":"to.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Destination filter: lat"},{"name":"to.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Destination filter: lon"},{"name":"to.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Destination filter: radiusKm"},{"name":"from.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Origin filter: city"},{"name":"from.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Origin filter: country"},{"name":"from.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Origin filter: lat"},{"name":"from.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Origin filter: lon"},{"name":"from.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Origin filter: radiusKm"},{"name":"startDate","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"description":"Calendar date, YYYY-MM-DD"},{"name":"endDate","in":"query","required":false,"schema":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"description":"Calendar date, YYYY-MM-DD"},{"name":"minOverlapDays","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":60}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["solo","group","meetup"]}},{"name":"needs","in":"query","required":false,"schema":{"description":"Match trips that list any of these needs","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"style":"form","explode":false,"description":"Match trips that list any of these needs"},{"name":"languages","in":"query","required":false,"schema":{"description":"Travelers who speak any of these languages","maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"style":"form","explode":false,"description":"Travelers who speak any of these languages"},{"name":"sex","in":"query","required":false,"schema":{"description":"Traveler sex filter, e.g. [\"female\"] for women-only","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"style":"form","explode":false,"description":"Traveler sex filter, e.g. [\"female\"] for women-only"},{"name":"ageMin","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"ageMax","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"verifiedOnly","in":"query","required":false,"schema":{"default":false,"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"description":"Free text, semantically matched against plans and interests","type":"string","maxLength":300},"description":"Free text, semantically matched against plans and interests"},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTripsOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/trips/{tripId}":{"get":{"operationId":"get_trip_get","summary":"Get a public trip","description":"Get the public view of one trip by id, including the masked traveler card.\n\nSame as POST /v1/tools/get_trip. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"tripId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTripOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patch_trip","summary":"Update one of my trips","description":"Update fields of one of my trips.\n\nSame as POST /v1/tools/update_trip.","tags":["trips"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"tripId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"default":"solo","description":"solo: looking for 1+ companions; group: organizer with N spots; meetup: already at destination","type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Where the traveler departs from"},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Destination"},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"flexibilityDays":{"default":0,"description":"How many days the dates can shift","type":"integer","minimum":0,"maximum":14},"needs":{"description":"What the traveler wants from a companion, e.g. share_room, split_costs","maxItems":15,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"plans":{"default":"","description":"Free text plans and expectations","type":"string","maxLength":2000},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"default":1,"description":"How many companions wanted","type":"integer","minimum":1,"maximum":20},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"visibility":{"default":"public","type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"default":false,"description":"If false, public views show the week range instead of exact dates","type":"boolean"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTripOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"delete_trip","summary":"Close one of my trips","tags":["trips"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"tripId","in":"path","required":true,"schema":{"type":"string"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","enum":["found_companion","cancelled","other"]}}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseTripOutput"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/travelers":{"get":{"operationId":"list_travelers","summary":"Search travelers","description":"Browse masked traveler cards (not trip posts). Filter by destination of their open trips, languages, age, nationality, interests, or free text. Useful when the user asks who is going somewhere rather than for a specific date window.\n\nSame as POST /v1/tools/search_travelers. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"to.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Travelers with open trips to this destination: city"},{"name":"to.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Travelers with open trips to this destination: country"},{"name":"to.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Travelers with open trips to this destination: lat"},{"name":"to.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Travelers with open trips to this destination: lon"},{"name":"to.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Travelers with open trips to this destination: radiusKm"},{"name":"languages","in":"query","required":false,"schema":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"style":"form","explode":false},{"name":"sex","in":"query","required":false,"schema":{"maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"style":"form","explode":false},{"name":"ageMin","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"ageMax","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"nationality","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"ISO 3166-1 alpha-2 country code, e.g. US"},{"name":"interests","in":"query","required":false,"schema":{"description":"Match travelers listing any of these interests","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"style":"form","explode":false,"description":"Match travelers listing any of these interests"},{"name":"verifiedOnly","in":"query","required":false,"schema":{"default":false,"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"description":"Free text matched against bio, interests and trip plans","type":"string","maxLength":300},"description":"Free text matched against bio, interests and trip plans"},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTravelersOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/travelers/search":{"get":{"operationId":"search_travelers_get","summary":"Search travelers (alias)","description":"Browse masked traveler cards (not trip posts). Filter by destination of their open trips, languages, age, nationality, interests, or free text. Useful when the user asks who is going somewhere rather than for a specific date window.\n\nSame as POST /v1/tools/search_travelers. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"to.city","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Travelers with open trips to this destination: city"},{"name":"to.country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"Travelers with open trips to this destination: country"},{"name":"to.lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90},"description":"Travelers with open trips to this destination: lat"},{"name":"to.lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180},"description":"Travelers with open trips to this destination: lon"},{"name":"to.radiusKm","in":"query","required":false,"schema":{"default":100,"type":"number","minimum":1,"maximum":2000},"description":"Travelers with open trips to this destination: radiusKm"},{"name":"languages","in":"query","required":false,"schema":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"style":"form","explode":false},{"name":"sex","in":"query","required":false,"schema":{"maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"style":"form","explode":false},{"name":"ageMin","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"ageMax","in":"query","required":false,"schema":{"type":"integer","minimum":18,"maximum":99}},{"name":"nationality","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"ISO 3166-1 alpha-2 country code, e.g. US"},{"name":"interests","in":"query","required":false,"schema":{"description":"Match travelers listing any of these interests","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"style":"form","explode":false,"description":"Match travelers listing any of these interests"},{"name":"verifiedOnly","in":"query","required":false,"schema":{"default":false,"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"description":"Free text matched against bio, interests and trip plans","type":"string","maxLength":300},"description":"Free text matched against bio, interests and trip plans"},{"name":"limit","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchTravelersOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/travelers/{publicId}":{"get":{"operationId":"get_traveler_card_get","summary":"Get a traveler card","description":"Get the public, masked card of a traveler by their public id.\n\nSame as POST /v1/tools/get_traveler_card. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"publicId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetTravelerCardOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/destinations/popular":{"get":{"operationId":"list_popular_destinations_get","summary":"Popular destinations","description":"Destinations with the most open trips right now. Useful to suggest where companions are easiest to find.\n\nSame as POST /v1/tools/list_popular_destinations. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"description":"ISO 3166-1 alpha-2 country code, e.g. US"},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":50}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListPopularDestinationsOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/needs":{"get":{"operationId":"list_needs_get","summary":"Suggested needs tags","description":"Suggested `needs` tags. Any snake_case tag is accepted, but these are the common ones.\n\nSame as POST /v1/tools/list_needs_taxonomy. Requires: public. Anonymous responses are cacheable (Cache-Control: public, ETag).","tags":["discover"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListNeedsTaxonomyOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/matches":{"get":{"operationId":"get_my_matches_get","summary":"Matches for my trip","description":"Ranked compatible travelers for one of my trips, with reasons. Uses my profile preferences and the other side's preferences.\n\nSame as POST /v1/tools/get_my_matches. Requires: account.","tags":["trips"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"tripId","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Opaque identifier"},{"name":"limit","in":"query","required":false,"schema":{"default":10,"type":"integer","minimum":1,"maximum":50}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyMatchesOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/me":{"get":{"operationId":"get_my_status_get","summary":"My account status and next steps","description":"Tells the agent what the current user can do: trust level, plan, whether a profile exists, and the next steps to unlock more (create profile, accept terms, verify ID).\n\nSame as POST /v1/tools/get_my_status. Requires: public.","tags":["account"],"security":[{},{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyStatusOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/me/profile":{"get":{"operationId":"get_my_profile_get","summary":"My profile","description":"Return the full profile of the authenticated user.\n\nSame as POST /v1/tools/get_my_profile. Requires: account.","tags":["profile"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMyProfileOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"upsert_profile","summary":"Create or update my profile","description":"Create the traveler profile on first call (all required fields) or update parts of it later. Birth date and postal code stay private; others see an age range and city only.\n\nSame as POST /v1/tools/create_or_update_profile.","tags":["profile"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrUpdateProfileInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrUpdateProfileOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/me/trips":{"get":{"operationId":"list_my_trips_get","summary":"My trips","description":"List the authenticated user's trips, optionally filtered by status.\n\nSame as POST /v1/tools/list_my_trips. Requires: account.","tags":["trips"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","full","closed","cancelled"]}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMyTripsOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/connections":{"get":{"operationId":"list_connections_get","summary":"My connections","description":"List incoming and outgoing connection requests and accepted connections.\n\nSame as POST /v1/tools/list_connections. Requires: terms accepted (18+).","tags":["connect"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListConnectionsOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"create_connection","summary":"Request a connection","description":"Send a connection request to the owner of a trip. Both sides must accept before contact is shared. Requires accept_terms first.\n\nSame as POST /v1/tools/request_connection.","tags":["connect"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestConnectionInput"}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestConnectionOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/connections/{connectionId}/messages":{"get":{"operationId":"get_messages_get","summary":"Messages on a connection","description":"List relayed messages on an accepted connection.\n\nSame as POST /v1/tools/get_messages. Requires: terms accepted (18+).","tags":["connect"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMessagesOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"send_message_post","summary":"Send a relayed message","description":"Send a relayed message on an accepted connection. Emails stay private.\n\nSame as POST /v1/tools/send_message.","tags":["connect"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":2000}},"required":["body"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/subscription":{"get":{"operationId":"get_subscription_get","summary":"My subscription","description":"Return the current plan, status and usage limits.\n\nSame as POST /v1/tools/get_subscription. Requires: account.","tags":["billing"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubscriptionOutput"}}}},"304":{"description":"Not Modified (ETag matched)"},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/connections/{connectionId}/respond":{"post":{"operationId":"respond_connection","summary":"Accept or decline a connection","description":"Accept or decline an incoming connection request.\n\nSame as POST /v1/tools/respond_to_connection.","tags":["connect"],"security":[{"bearerAuth":[]},{"apiKey":[]}],"parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["accept","decline"]}},"required":["decision"]}}}},"responses":{"200":{"description":"Success","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RespondToConnectionOutput"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"OAuth 2.1 access token (authorization code + PKCE)"},"oauth2":{"type":"oauth2","description":"OAuth 2.1 with PKCE (S256) and dynamic client registration","flows":{"authorizationCode":{"authorizationUrl":"https://travel.coticsy.com/oauth/authorize","tokenUrl":"https://travel.coticsy.com/oauth/token","refreshUrl":"https://travel.coticsy.com/oauth/token","scopes":{"profile":"Read and edit your profile","trips":"Post and manage trips","connect":"Connect and message travelers","offline_access":"Stay signed in"}}}},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"tc_live_… or tc_test_… API key"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128},"description":"Unique key to make retries safe; a successful response is replayed for 24 h. Reusing a key with a different body returns 422."},"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"ETag from a previous response; 304 if unchanged."}},"headers":{"ETag":{"schema":{"type":"string"},"description":"Weak entity tag of the response body"},"RateLimitLimit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window"},"RateLimitRemaining":{"schema":{"type":"integer"},"description":"Requests left in the current window"}},"schemas":{"SearchTripsInput":{"type":"object","properties":{"to":{"description":"Destination filter","type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"default":100,"type":"number","minimum":1,"maximum":2000}}},"from":{"description":"Origin filter","type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"default":100,"type":"number","minimum":1,"maximum":2000}}},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"minOverlapDays":{"default":1,"type":"integer","minimum":1,"maximum":60},"kind":{"type":"string","enum":["solo","group","meetup"]},"needs":{"description":"Match trips that list any of these needs","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"languages":{"description":"Travelers who speak any of these languages","maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"sex":{"description":"Traveler sex filter, e.g. [\"female\"] for women-only","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"verifiedOnly":{"default":false,"type":"boolean"},"q":{"description":"Free text, semantically matched against plans and interests","type":"string","maxLength":300},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}}},"SearchTripsOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"trip":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},"score":{"type":"integer","minimum":0,"maximum":100},"reasons":{"type":"array","items":{"type":"string"},"description":"Short human-readable reasons agents can relay verbatim"},"why":{"type":"string","description":"Single 'why you match' paragraph agents can read aloud"},"overlapDays":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["trip","score","reasons","why","overlapDays"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"],"additionalProperties":false},"SearchTravelersInput":{"type":"object","properties":{"to":{"description":"Travelers with open trips to this destination","type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radiusKm":{"default":100,"type":"number","minimum":1,"maximum":2000}}},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"sex":{"maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"interests":{"description":"Match travelers listing any of these interests","maxItems":10,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"verifiedOnly":{"default":false,"type":"boolean"},"q":{"description":"Free text matched against bio, interests and trip plans","type":"string","maxLength":300},"limit":{"default":20,"type":"integer","minimum":1,"maximum":50},"cursor":{"type":"string"}}},"SearchTravelersOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"openTrips":{"type":"integer","minimum":0,"maximum":9007199254740991},"sampleDestinations":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"}},"required":["city","country"],"additionalProperties":false}}},"required":["traveler","openTrips","sampleDestinations"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"],"additionalProperties":false},"GetTripInput":{"type":"object","properties":{"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},"required":["tripId"]},"GetTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},"GetTravelerCardInput":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},"required":["publicId"]},"GetTravelerCardOutput":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"ListPopularDestinationsInput":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"limit":{"default":10,"type":"integer","minimum":1,"maximum":50}}},"ListPopularDestinationsOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"openTrips":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["city","country","openTrips"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"ListNeedsTaxonomyInput":{"type":"object","properties":{}},"ListNeedsTaxonomyOutput":{"type":"object","properties":{"needs":{"type":"array","items":{"type":"string"}}},"required":["needs"],"additionalProperties":false},"GetMyStatusInput":{"type":"object","properties":{}},"GetMyStatusOutput":{"type":"object","properties":{"authenticated":{"type":"boolean"},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"plan":{"type":"string","enum":["free","premium","business"]},"hasProfile":{"type":"boolean"},"termsAccepted":{"type":"boolean"},"verified":{"type":"boolean"},"nextSteps":{"type":"array","items":{"type":"string"},"description":"Ordered suggestions for what the agent can do next to unlock more"}},"required":["authenticated","trustLevel","plan","hasProfile","termsAccepted","verified","nextSteps"],"additionalProperties":false},"CreateOrUpdateProfileInput":{"type":"object","properties":{"displayName":{"type":"string","minLength":2,"maxLength":60,"description":"Full name or first name. Public view shows first name + last initial."},"birthDate":{"type":"string","format":"date","description":"Private. Used to derive a public age range. Must be 18+."},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"A place. Provide lat/lon when known for better geo matching."},"bio":{"type":"string","maxLength":600},"interests":{"maxItems":25,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"travelStyle":{"default":"flexible","type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"smoker":{"type":"boolean"},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"preferredLanguage":{"description":"Language the user prefers to be addressed in","type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$"},"extra":{"description":"Free-form additional attributes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"CreateOrUpdateProfileOutput":{"type":"object","properties":{"displayName":{"type":"string","minLength":2,"maxLength":60,"description":"Full name or first name. Public view shows first name + last initial."},"birthDate":{"type":"string","format":"date","description":"Private. Used to derive a public age range. Must be 18+."},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"bio":{"type":"string","maxLength":600},"interests":{"default":[],"maxItems":25,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"default":"flexible","type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"smoker":{"type":"boolean"},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"preferredLanguage":{"description":"Language the user prefers to be addressed in","type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$"},"extra":{"description":"Free-form additional attributes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"userId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable public handle used in cards and links"},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["displayName","birthDate","sex","nationality","languages","home","interests","travelStyle","userId","publicId","trustLevel","badges","trustScore","createdAt","updatedAt"],"additionalProperties":false},"GetMyProfileInput":{"type":"object","properties":{}},"GetMyProfileOutput":{"type":"object","properties":{"displayName":{"type":"string","minLength":2,"maxLength":60,"description":"Full name or first name. Public view shows first name + last initial."},"birthDate":{"type":"string","format":"date","description":"Private. Used to derive a public age range. Must be 18+."},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"bio":{"type":"string","maxLength":600},"interests":{"default":[],"maxItems":25,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"default":"flexible","type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"smoker":{"type":"boolean"},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"preferredLanguage":{"description":"Language the user prefers to be addressed in","type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$"},"extra":{"description":"Free-form additional attributes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"userId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Stable public handle used in cards and links"},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["displayName","birthDate","sex","nationality","languages","home","interests","travelStyle","userId","publicId","trustLevel","badges","trustScore","createdAt","updatedAt"],"additionalProperties":false},"PostTripInput":{"type":"object","properties":{"kind":{"default":"solo","description":"solo: looking for 1+ companions; group: organizer with N spots; meetup: already at destination","type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Where the traveler departs from"},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Destination"},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"flexibilityDays":{"default":0,"description":"How many days the dates can shift","type":"integer","minimum":0,"maximum":14},"needs":{"description":"What the traveler wants from a companion, e.g. share_room, split_costs","maxItems":15,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"plans":{"default":"","description":"Free text plans and expectations","type":"string","maxLength":2000},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"default":1,"description":"How many companions wanted","type":"integer","minimum":1,"maximum":20},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"visibility":{"default":"public","type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"default":false,"description":"If false, public views show the week range instead of exact dates","type":"boolean"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["from","to","startDate","endDate"]},"PostTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false},"UpdateTripInput":{"type":"object","properties":{"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"changes":{"type":"object","properties":{"kind":{"default":"solo","description":"solo: looking for 1+ companions; group: organizer with N spots; meetup: already at destination","type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Where the traveler departs from"},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Destination"},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"flexibilityDays":{"default":0,"description":"How many days the dates can shift","type":"integer","minimum":0,"maximum":14},"needs":{"description":"What the traveler wants from a companion, e.g. share_room, split_costs","maxItems":15,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"plans":{"default":"","description":"Free text plans and expectations","type":"string","maxLength":2000},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"default":1,"description":"How many companions wanted","type":"integer","minimum":1,"maximum":20},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"visibility":{"default":"public","type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"default":false,"description":"If false, public views show the week range instead of exact dates","type":"boolean"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}}},"required":["tripId","changes"]},"UpdateTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false},"CloseTripInput":{"type":"object","properties":{"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"reason":{"default":"other","type":"string","enum":["found_companion","cancelled","other"]}},"required":["tripId"]},"CloseTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false},"ListMyTripsInput":{"type":"object","properties":{"status":{"type":"string","enum":["open","full","closed","cancelled"]}}},"ListMyTripsOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"GetMyMatchesInput":{"type":"object","properties":{"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"limit":{"default":10,"type":"integer","minimum":1,"maximum":50}},"required":["tripId"]},"GetMyMatchesOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"trip":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},"score":{"type":"integer","minimum":0,"maximum":100},"reasons":{"type":"array","items":{"type":"string"},"description":"Short human-readable reasons agents can relay verbatim"},"why":{"type":"string","description":"Single 'why you match' paragraph agents can read aloud"},"overlapDays":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["trip","score","reasons","why","overlapDays"],"additionalProperties":false}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"],"additionalProperties":false},"CreateGroupTripInput":{"type":"object","properties":{"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Where the traveler departs from"},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Destination"},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"flexibilityDays":{"default":0,"description":"How many days the dates can shift","type":"integer","minimum":0,"maximum":14},"needs":{"description":"What the traveler wants from a companion, e.g. share_room, split_costs","maxItems":15,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"plans":{"default":"","description":"Free text plans and expectations","type":"string","maxLength":2000},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"default":4,"type":"integer","minimum":2,"maximum":20},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"visibility":{"default":"public","type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"default":false,"description":"If false, public views show the week range instead of exact dates","type":"boolean"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["from","to","startDate","endDate"]},"CreateGroupTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false},"MeetAtDestinationInput":{"type":"object","properties":{"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Where the traveler departs from"},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"description":"Destination"},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"flexibilityDays":{"default":0,"description":"How many days the dates can shift","type":"integer","minimum":0,"maximum":14},"needs":{"description":"What the traveler wants from a companion, e.g. share_room, split_costs","maxItems":15,"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string"}},"plans":{"default":"","description":"Free text plans and expectations","type":"string","maxLength":2000},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"default":1,"description":"How many companions wanted","type":"integer","minimum":1,"maximum":20},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}}},"visibility":{"default":"public","type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"default":false,"description":"If false, public views show the week range instead of exact dates","type":"boolean"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["from","to","startDate","endDate"]},"MeetAtDestinationOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"ownerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"from":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"to":{"type":"object","properties":{"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"description":"State/province, optional","type":"string","maxLength":120},"zip":{"description":"Postal code. Never shown publicly in full.","type":"string","maxLength":16},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"required":["city","country"],"additionalProperties":false,"description":"A place. Provide lat/lon when known for better geo matching."},"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plans":{"type":"string"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"companionPreferences":{"type":"object","properties":{"sex":{"description":"Acceptable companion sexes; empty means any","maxItems":5,"type":"array","items":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]}},"ageMin":{"type":"integer","minimum":18,"maximum":99},"ageMax":{"type":"integer","minimum":18,"maximum":99},"languages":{"maxItems":10,"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"verifiedOnly":{"type":"boolean"}},"additionalProperties":false},"visibility":{"type":"string","enum":["public","link_only","private"]},"exactDatesPublic":{"type":"boolean"},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"memberUserIds":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"description":"Accepted companions (group trips)"},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"updatedAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","ownerUserId","kind","from","to","startDate","endDate","days","flexibilityDays","needs","plans","groupSizeWanted","visibility","exactDatesPublic","status","memberUserIds","createdAt","updatedAt"],"additionalProperties":false},"JoinGroupTripInput":{"type":"object","properties":{"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"message":{"default":"","type":"string","maxLength":500}},"required":["tripId"]},"JoinGroupTripOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"targetUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterTripId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},{"type":"null"}]},"targetTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"status":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]},"message":{"type":"string","maxLength":500},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"respondedAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},{"type":"null"}]},"expiresAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"direction":{"type":"string","enum":["outgoing","incoming"]},"counterpart":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"trip":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},{"type":"null"}]},"contactRevealed":{"type":"boolean"}},"required":["id","requesterUserId","targetUserId","requesterTripId","targetTripId","status","message","createdAt","respondedAt","expiresAt","direction","counterpart","trip","contactRevealed"],"additionalProperties":false},"AcceptTermsInput":{"type":"object","properties":{"confirmAge18":{"type":"boolean","const":true},"acceptTerms":{"type":"boolean","const":true},"termsVersion":{"description":"Defaults to the current TERMS_VERSION","type":"string"}},"required":["confirmAge18","acceptTerms"]},"AcceptTermsOutput":{"type":"object","properties":{"authenticated":{"type":"boolean"},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"plan":{"type":"string","enum":["free","premium","business"]},"hasProfile":{"type":"boolean"},"termsAccepted":{"type":"boolean"},"verified":{"type":"boolean"},"nextSteps":{"type":"array","items":{"type":"string"},"description":"Ordered suggestions for what the agent can do next to unlock more"}},"required":["authenticated","trustLevel","plan","hasProfile","termsAccepted","verified","nextSteps"],"additionalProperties":false},"RequestConnectionInput":{"type":"object","properties":{"targetTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"myTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"message":{"default":"","type":"string","maxLength":500}},"required":["targetTripId"]},"RequestConnectionOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"targetUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterTripId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},{"type":"null"}]},"targetTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"status":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]},"message":{"type":"string","maxLength":500},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"respondedAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},{"type":"null"}]},"expiresAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"direction":{"type":"string","enum":["outgoing","incoming"]},"counterpart":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"trip":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},{"type":"null"}]},"contactRevealed":{"type":"boolean"}},"required":["id","requesterUserId","targetUserId","requesterTripId","targetTripId","status","message","createdAt","respondedAt","expiresAt","direction","counterpart","trip","contactRevealed"],"additionalProperties":false},"RespondToConnectionInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"decision":{"type":"string","enum":["accept","decline"]}},"required":["connectionId","decision"]},"RespondToConnectionOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"targetUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterTripId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},{"type":"null"}]},"targetTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"status":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]},"message":{"type":"string","maxLength":500},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"respondedAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},{"type":"null"}]},"expiresAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"direction":{"type":"string","enum":["outgoing","incoming"]},"counterpart":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"trip":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},{"type":"null"}]},"contactRevealed":{"type":"boolean"}},"required":["id","requesterUserId","targetUserId","requesterTripId","targetTripId","status","message","createdAt","respondedAt","expiresAt","direction","counterpart","trip","contactRevealed"],"additionalProperties":false},"ListConnectionsInput":{"type":"object","properties":{"status":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]}}},"ListConnectionsOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"targetUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"requesterTripId":{"anyOf":[{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},{"type":"null"}]},"targetTripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"status":{"type":"string","enum":["pending","accepted","declined","expired","withdrawn"]},"message":{"type":"string","maxLength":500},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"respondedAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},{"type":"null"}]},"expiresAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},"direction":{"type":"string","enum":["outgoing","incoming"]},"counterpart":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"trip":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"kind":{"type":"string","enum":["solo","group","meetup"]},"traveler":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"displayName":{"type":"string","description":"Masked, e.g. Maria S."},"ageRange":{"type":"string","pattern":"^(\\d{2}-\\d{2}|\\d{2}\\+)$","description":"Five-year age bracket such as 25-29, or 65+"},"sex":{"type":"string","enum":["female","male","non_binary","other","prefer_not_to_say"]},"nationality":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"languages":{"type":"array","items":{"type":"string","pattern":"^[a-z]{2}(-[a-z]{2})?$","description":"ISO 639-1 language code, e.g. en, es, pt-br"}},"home":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"bio":{"type":"string"},"interests":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"travelStyle":{"type":"string","enum":["budget","mid","luxury","backpacker","flexible"]},"trustLevel":{"anyOf":[{"type":"number","const":0},{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"badges":{"type":"array","items":{"type":"string","enum":["verified","premium","trusted_reviewer","founding_member"]}},"trustScore":{"type":"integer","minimum":0,"maximum":100},"reviewCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"averageRating":{"anyOf":[{"type":"number","minimum":0,"maximum":5},{"type":"null"}]}},"required":["publicId","displayName","ageRange","sex","nationality","languages","home","interests","travelStyle","trustLevel","badges","trustScore","reviewCount","averageRating"],"additionalProperties":false},"from":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"to":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"region":{"type":"string"},"zipPrefix":{"description":"First 3 characters of the postal code, if shared","type":"string"}},"required":["city","country"],"additionalProperties":false},"dates":{"type":"object","properties":{"start":{"type":"string","format":"date","description":"Exact start, or Monday of the start week when approximate"},"end":{"type":"string","format":"date","description":"Exact end, or Sunday of the end week when approximate"},"approximate":{"type":"boolean"}},"required":["start","end","approximate"],"additionalProperties":false},"days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"flexibilityDays":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"needs":{"type":"array","items":{"description":"Short snake_case tag, e.g. share_room or hiking","type":"string","pattern":"^[a-z0-9_]{2,40}$"}},"plansSummary":{"type":"string","description":"First 280 characters of plans"},"budgetRange":{"type":"string","enum":["under_500","500_1500","1500_4000","over_4000","flexible"]},"groupSizeWanted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"spotsLeft":{"type":"integer","minimum":0,"maximum":9007199254740991},"status":{"type":"string","enum":["open","full","closed","cancelled"]},"url":{"type":"string","format":"uri","description":"Public shareable page"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","kind","traveler","from","to","dates","days","flexibilityDays","needs","plansSummary","groupSizeWanted","spotsLeft","status","url","createdAt"],"additionalProperties":false},{"type":"null"}]},"contactRevealed":{"type":"boolean"}},"required":["id","requesterUserId","targetUserId","requesterTripId","targetTripId","status","message","createdAt","respondedAt","expiresAt","direction","counterpart","trip","contactRevealed"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"SendMessageInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"body":{"type":"string","minLength":1,"maxLength":2000}},"required":["connectionId","body"]},"SendMessageOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"senderUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"body":{"type":"string","minLength":1,"maxLength":2000},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","connectionId","senderUserId","body","createdAt"],"additionalProperties":false},"GetMessagesInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"limit":{"default":50,"type":"integer","minimum":1,"maximum":100}},"required":["connectionId"]},"GetMessagesOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"senderUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"body":{"type":"string","minLength":1,"maxLength":2000},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","connectionId","senderUserId","body","createdAt"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"RevealContactInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},"required":["connectionId"]},"RevealContactOutput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"},"note":{"type":"string"}},"required":["note"],"additionalProperties":false},"LeaveReviewInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"rating":{"type":"integer","minimum":1,"maximum":5},"text":{"type":"string","maxLength":1000}},"required":["connectionId","rating"]},"LeaveReviewOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"reviewerUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"revieweeUserId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"tripId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"rating":{"type":"integer","minimum":1,"maximum":5},"text":{"type":"string","maxLength":1000},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","reviewerUserId","revieweeUserId","tripId","rating","createdAt"],"additionalProperties":false},"SubscribeMatchWebhookInput":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"default":["match.new","connection.requested","connection.accepted"],"minItems":1,"type":"array","items":{"type":"string","enum":["match.new","connection.requested","connection.accepted","message.received"]}}},"required":["url"]},"SubscribeMatchWebhookOutput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"url":{"type":"string","format":"uri"},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["match.new","connection.requested","connection.accepted","message.received"]}},"signingSecret":{"description":"Shown once on creation. Verify X-TC-Signature: t=<unix>,v1=<hex HMAC-SHA256 of `${t}.${body}`>","type":"string"},"createdAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["id","url","events","createdAt"],"additionalProperties":false},"ReportUserInput":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"reason":{"type":"string","enum":["spam","scam","harassment","fake_profile","inappropriate","safety","other"]},"details":{"type":"string","maxLength":2000}},"required":["publicId","reason"]},"ReportUserOutput":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"BlockUserInput":{"type":"object","properties":{"publicId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"}},"required":["publicId"]},"BlockUserOutput":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"ExportMyDataInput":{"type":"object","properties":{}},"ExportMyDataOutput":{"type":"object","properties":{"exportedAt":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["exportedAt","data"],"additionalProperties":false},"DeleteMyAccountInput":{"type":"object","properties":{"confirm":{"type":"boolean","const":true}},"required":["confirm"]},"DeleteMyAccountOutput":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"StartIdVerificationInput":{"type":"object","properties":{}},"StartIdVerificationOutput":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Send the user here to complete ID verification"},"status":{"type":"string","enum":["requires_input","processing","verified","canceled"]}},"required":["url","status"],"additionalProperties":false},"StartPremiumCheckoutInput":{"type":"object","properties":{"plan":{"default":"premium","type":"string","enum":["premium","business"]}}},"StartPremiumCheckoutOutput":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Send the user here to pay"},"expiresAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"}},"required":["url","expiresAt"],"additionalProperties":false},"GetSubscriptionInput":{"type":"object","properties":{}},"GetSubscriptionOutput":{"type":"object","properties":{"plan":{"type":"string","enum":["free","premium","business"]},"status":{"type":"string","enum":["active","past_due","cancelled","none"]},"renewsAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$","description":"Timestamp, RFC 3339"},{"type":"null"}]},"limits":{"type":"object","properties":{"activeTrips":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"searchesPerDay":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"connectionsPerDay":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priorityRank":{"type":"boolean"}},"required":["activeTrips","searchesPerDay","connectionsPerDay","priorityRank"],"additionalProperties":false}},"required":["plan","status","renewsAt","limits"],"additionalProperties":false},"FindSharedStayInput":{"type":"object","properties":{"connectionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque identifier"},"city":{"type":"string","minLength":1,"maxLength":120},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"checkIn":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"checkOut":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"guests":{"default":2,"type":"integer","minimum":1,"maximum":20}},"required":["city","country","checkIn","checkOut"]},"FindSharedStayOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"category":{"type":"string","enum":["flight","stay","insurance","esim","activity"]},"title":{"type":"string"},"priceFrom":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["provider","category","title","priceFrom","currency","url"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"FindFlightsTogetherInput":{"type":"object","properties":{"fromCity":{"type":"string","minLength":1,"maxLength":120},"toCity":{"type":"string","minLength":1,"maxLength":120},"date":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"passengers":{"default":2,"type":"integer","minimum":1,"maximum":9}},"required":["fromCity","toCity","date"]},"FindFlightsTogetherOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"category":{"type":"string","enum":["flight","stay","insurance","esim","activity"]},"title":{"type":"string"},"priceFrom":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["provider","category","title","priceFrom","currency","url"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"FindTravelInsuranceInput":{"type":"object","properties":{"startDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"endDate":{"type":"string","format":"date","description":"Calendar date, YYYY-MM-DD"},"travelers":{"default":1,"type":"integer","minimum":1,"maximum":10}},"required":["startDate","endDate"]},"FindTravelInsuranceOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"category":{"type":"string","enum":["flight","stay","insurance","esim","activity"]},"title":{"type":"string"},"priceFrom":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["provider","category","title","priceFrom","currency","url"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"FindEsimInput":{"type":"object","properties":{"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code, e.g. US"},"days":{"default":7,"type":"integer","minimum":1,"maximum":90}},"required":["country"]},"FindEsimOutput":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"category":{"type":"string","enum":["flight","stay","insurance","esim","activity"]},"title":{"type":"string"},"priceFrom":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","minLength":3,"maxLength":3},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["provider","category","title","priceFrom","currency","url"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["VALIDATION","NOT_FOUND","UNAUTHENTICATED","FORBIDDEN","TRUST_REQUIRED","CONFLICT","RATE_LIMITED","PAYMENT_REQUIRED","INTERNAL"]},"message":{"type":"string"},"nextStep":{"type":"string","description":"Agent-readable instruction on what to do next"},"requiredTrustLevel":{"type":"integer","minimum":0,"maximum":3},"details":{}}}}}},"responses":{"Error":{"description":"Error with an agent-readable next step","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait (429 only)"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}