SlickTrip MCP
An official MCP server for SlickTrip that enables AI agents to access live flight, hotel, and seat prices, view cheapest-day calendars, and set price-drop alerts. It integrates with AI assistants like Claude and ChatGPT, allowing users to search for travel options and receive notifications when prices drop or seats become available.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.slicktrip.com/mcpWhat its tools do
38 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (23)
search_flightssearch_return_flightsprice_calendarlist_tracked_flightsrecent_dealsfind_placesbooking_optionshotel_booking_optionshotel_detailsflight_lookupshared_triproute_airlinesexplore_destinationssearch_hotelslist_tracked_hotelsseat_availabilitylist_tracked_seatslist_bucket_listswatch_detailscheck_my_watcheshotel_price_calendarhandoff_linkget_account
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to slicktrip.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for live flight and hotel prices
- View cheapest-day travel calendars
- Set price-drop alerts for specific routes
- Check real-time seat availability
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- SlickTrip 1.30.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 38 advertised
- Resources
- 6 advertised
- Resource templates
- 0 advertised
- Prompts
- 5 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"extensions": {
"io.modelcontextprotocol/ui": {
"mimeTypes": [
"text/html;profile=mcp-app"
]
}
},
"experimental": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
38 advertised
search_flights — Search flights
Call this tool to find flights once the traveler has told you their dates. It handles one-way trips, round trips, two possible dates each way, and up to three airports on each side at once. Before you call it, you need four things from the traveler: where they are flying from, where they are flying to, the date they want to leave, and, for a round trip, the date they want to come back. If the traveler has not told you any of these, ask them for everything that is missing in one question. Do not pick dates for the traveler. Do not guess whether the trip is one way or a round trip. A question like "what is the cheapest flight from Newark to Los Angeles" still needs dates. Ask the traveler when they want to go and whether it is one way or a round trip, then call this tool. If the traveler does not have dates yet, offer to set up a bucket list alert with add_flight_bucket_list, which watches the route for them and alerts them when a good fare appears. Search as soon as you have those four things. After the results, offer ways to narrow the choice: cabin, stops, airlines, times of day. You can search up to two departure dates and two return dates in one call by joining them with _ (for example 2026-11-20_2026-11-21). Fill in origin, destination, depart_date and, for a round trip, return_date. You can also pass the traveler's own words in query and leave the fields you do not know empty. SlickTrip fills in only what the traveler's words say. It does not guess the rest. The answer lists priced itineraries, cheapest first, each with an itinerary_id for track_flight and search_return_flights, and a search_url. When the traveler wants to be alerted about a route over flexible months, or does not have dates yet, use add_flight_bucket_list.
{
"type": "object",
"$defs": {
"Leg": {
"type": "object",
"title": "Leg",
"required": [
"origin",
"destination",
"depart_date"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"depart_date": {
"type": "string",
"title": "Depart Date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
}
},
"description": "One leg of a multi-city trip."
}
},
"title": "search_flightsArguments",
"properties": {
"legs": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Leg"
},
"maxItems": 5,
"minItems": 2
},
{
"type": "null"
}
],
"title": "Legs",
"default": null,
"description": "Multi-city trip: the legs in order, 2 to 5, each one airport or city code per side and one date. When given, origin / destination / depart_date / return_date are ignored."
},
"sort": {
"enum": [
"price",
"duration",
"departure"
],
"type": "string",
"title": "Sort",
"default": "price",
"description": "Order of results."
},
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin class."
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Query",
"default": null,
"examples": [
"JFK to Lisbon the first week of October, business"
],
"description": "The traveler's request in their own words, used to fill any field left empty."
},
"origin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Origin",
"default": null,
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"description": "A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"display": {
"anyOf": [
{
"enum": [
"compact",
"full"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Display",
"default": null,
"description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"DL",
"B6"
],
[
"JetBlue"
]
],
"description": "Only these marketing carriers, as IATA codes or names."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"max_stops": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Max Stops",
"default": null,
"description": "Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
},
"travelers": {
"type": "integer",
"title": "Travelers",
"default": 1,
"maximum": 30,
"minimum": 1,
"description": "Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
},
"depart_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(_\\d{4}-\\d{2}-\\d{2})*$"
},
{
"type": "null"
}
],
"title": "Depart Date",
"default": null,
"examples": [
"2026-11-03",
"2026-11-03_2026-11-04"
],
"description": "YYYY-MM-DD. More dates joined with _ search them all as flexible dates (2026-11-03_2026-11-04): about 4 each way on a round trip, or up to 8 one way when the other has 1 or 2."
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Destination",
"default": null,
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"description": "A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"lap_infants": {
"type": "integer",
"title": "Lap Infants",
"default": 0,
"maximum": 9,
"minimum": 0,
"description": "Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them."
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 8,
"maximum": 50,
"minimum": 1,
"description": "How many results to return, 1-50."
},
"return_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(_\\d{4}-\\d{2}-\\d{2})*$"
},
{
"type": "null"
}
],
"title": "Return Date",
"default": null,
"description": "YYYY-MM-DD for a round trip; empty for one way. More dates joined with _, as for depart_date."
},
"arrive_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"checked_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 2,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Checked Bags",
"default": null,
"description": "Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare."
},
"depart_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"arrive_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"carry_on_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carry On Bags",
"default": null,
"description": "Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare."
},
"depart_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"max_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "Highest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler."
},
"lower_emissions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Lower Emissions",
"default": null,
"description": "Only itineraries with lower emissions than is typical for the route."
},
"exclude_airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Airlines",
"default": null,
"examples": [
[
"G3"
],
[
"Gulf Air",
"Air India"
]
],
"description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'."
},
"max_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Max Layover Hours",
"default": null,
"description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'."
},
"min_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Min Layover Hours",
"default": null,
"description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'."
},
"max_duration_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 96,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Duration Hours",
"default": null,
"description": "Longest itinerary to show, in hours."
},
"connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Connecting Airports",
"default": null,
"examples": [
[
"MIA",
"ATL",
"IAH"
]
],
"description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs."
},
"no_overnight_layovers": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "No Overnight Layovers",
"default": null,
"description": "Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'."
},
"exclude_connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Connecting Airports",
"default": null,
"examples": [
[
"DOH"
],
[
"LOND"
]
],
"description": "Leave out itineraries that change planes at these airports (codes or city codes)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance on trip type or why empty"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"counts": {
"type": [
"object",
"null"
],
"description": "priced, matching_filters, returned integers"
},
"search": {
"type": [
"object",
"null"
],
"description": "Route dict: origin, destination, names, destination_image, cabin, travelers, dates, trip_type, legs (multi-city), search_key, retrieved_at"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"filters": {
"type": [
"object",
"null"
],
"description": "Filters as the caller gave them (max_stops, airlines, max_price_usd, ...)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"highlights": {
"type": [
"object",
"null"
],
"description": "The spread over every matching fare: cheapest, cheapest_nonstop, fastest, earliest, latest; each with itinerary_id, price, airlines, stops, duration_minutes, departs_at"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com search page link with attribution"
},
"itineraries": {
"type": [
"array",
"null"
],
"description": "Items: itinerary_id, price {total_usd, per_traveler_usd}, outbound leg, needs_leg, track_url, optional depart_date + search_key"
},
"searched_as": {
"type": [
"string",
"null"
],
"description": "What the search assumed: trip type, travelers, cabin"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Search flights",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_return_flights — Search return flights
Use after search_flights when the traveler wants a specific return, or the next leg of a multi-city trip (once per remaining leg). Takes an outbound itinerary_id; returns complete itineraries with the trip total, needs_leg false once the trip is whole. Filters apply to the leg being chosen. Not needed for an outbound watch.
{
"type": "object",
"title": "search_return_flightsArguments",
"required": [
"itinerary_id"
],
"properties": {
"sort": {
"enum": [
"price",
"duration",
"departure"
],
"type": "string",
"title": "Sort",
"default": "price",
"description": "Order of results."
},
"display": {
"anyOf": [
{
"enum": [
"compact",
"full"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Display",
"default": null,
"description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"DL",
"B6"
],
[
"JetBlue"
]
],
"description": "Only these marketing carriers, as IATA codes or names."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"max_stops": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Max Stops",
"default": null,
"description": "Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 8,
"maximum": 50,
"minimum": 1,
"description": "How many results to return, 1-50."
},
"arrive_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"checked_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 2,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Checked Bags",
"default": null,
"description": "Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fees, shown as price_with_bags next to the fare."
},
"depart_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"itinerary_id": {
"type": "string",
"title": "Itinerary Id",
"description": "An outbound (or partial multi-city) itinerary_id from search_flights or a previous call."
},
"arrive_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"carry_on_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carry On Bags",
"default": null,
"description": "Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare."
},
"depart_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"max_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "Highest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler."
},
"lower_emissions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Lower Emissions",
"default": null,
"description": "Only itineraries with lower emissions than is typical for the route."
},
"exclude_airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Airlines",
"default": null,
"examples": [
[
"G3"
],
[
"Gulf Air",
"Air India"
]
],
"description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'."
},
"max_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Max Layover Hours",
"default": null,
"description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'."
},
"min_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Min Layover Hours",
"default": null,
"description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'."
},
"max_duration_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 96,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Duration Hours",
"default": null,
"description": "Longest itinerary to show, in hours."
},
"connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Connecting Airports",
"default": null,
"examples": [
[
"MIA",
"ATL",
"IAH"
]
],
"description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs."
},
"no_overnight_layovers": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "No Overnight Layovers",
"default": null,
"description": "Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'."
},
"exclude_connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Connecting Airports",
"default": null,
"examples": [
[
"DOH"
],
[
"LOND"
]
],
"description": "Leave out itineraries that change planes at these airports (codes or city codes)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance on totals and next step"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"counts": {
"type": [
"object",
"null"
],
"description": "priced, matching_filters, returned integers"
},
"search": {
"type": [
"object",
"null"
],
"description": "Route dict plus search_key, outbound_itinerary_id; multi-city adds leg_number, legs_total"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"filters": {
"type": [
"object",
"null"
],
"description": "Filters as the caller gave them"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"outbound": {
"type": [
"object",
"null"
],
"description": "Leg shape: airlines, stops, duration_minutes, segments, layovers"
},
"track_url": {
"type": [
"string",
"null"
],
"description": "Outbound handoff tracking link (round-trip path only)"
},
"highlights": {
"type": [
"object",
"null"
],
"description": "The spread over every matching return: cheapest, cheapest_nonstop, fastest, earliest, latest"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com search page link"
},
"itineraries": {
"type": [
"array",
"null"
],
"description": "Items: itinerary_id, price, return (round trip) or next_leg (multi-city) leg object, needs_leg"
},
"legs_chosen": {
"type": [
"array",
"null"
],
"description": "Multi-city only: leg objects chosen so far"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Search return flights",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}price_calendar — Price calendar
Use price_calendar only for a traveler who is flexible within a period they named (for example "sometime in March", "any weekend in December", "this winter"), has told you how many nights they want to stay, and wants to know which days are cheapest. It shows the cheapest fare for each departure day, across about two months starting with the month you give. With max_stops=0 it also shows which days have a nonstop flight, for a traveler who is flexible within a period they named and wants a nonstop. Every price in the calendar is for one exact trip: a set number of nights away, one cabin, one number of travelers, and one set of stops, airlines and times. If any of these is guessed, every price in the calendar is for a trip the traveler will not take. Before you call it, you need from the traveler: the month or period, and for a round trip the number of nights they want to stay. Also pass any preferences the traveler gave you: nonstop or not, airlines, times of day, cabin, and number of travelers. If the traveler has not told you the period, or for a round trip the number of nights, ask them in one question. Do not choose a month for the traveler. Do not choose a trip length for the traveler. Do not call this tool when the traveler has given you dates. Search those dates with search_flights instead. Do not call this tool when the traveler has given no dates at all. Ask them when they want to go instead, and offer a bucket list alert with add_flight_bucket_list, which watches the route for them. Call it once, or twice at most, per answer. Then show the traveler the two or three cheapest days. The answer tells you how to close: one question that offers flights for the day they pick, or a bucket list alert that watches the whole period.
{
"type": "object",
"title": "price_calendarArguments",
"required": [
"origin",
"destination"
],
"properties": {
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin class."
},
"month": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Month",
"default": null,
"examples": [
"2026-11"
],
"description": "The month the traveler named, as YYYY-MM. Leave it empty only when the traveler asked about the next few weeks. Do not choose a month for the traveler."
},
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"UA",
"LH"
],
[
"oneworld"
]
],
"description": "Up to 3 carriers as IATA codes, or one alliance: star alliance, oneworld, skyteam."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"depart_to": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart To",
"default": null,
"description": "YYYY-MM-DD, the last day the traveler could leave."
},
"max_stops": {
"type": "integer",
"title": "Max Stops",
"default": 2,
"maximum": 9,
"minimum": 0,
"description": "Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
},
"travelers": {
"type": "integer",
"title": "Travelers",
"default": 1,
"maximum": 30,
"minimum": 1,
"description": "Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
},
"trip_type": {
"enum": [
"roundtrip",
"one-way"
],
"type": "string",
"title": "Trip Type",
"default": "roundtrip",
"description": "Round trip or one way."
},
"depart_from": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart From",
"default": null,
"description": "YYYY-MM-DD, with depart_to: only departures in the traveler's own window (\"any day before Christmas\" is December 1 to 24; \"mid-March through April\" is March 15 to April 30). It can run to the end of the month after depart_from."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"lap_infants": {
"type": "integer",
"title": "Lap Infants",
"default": 0,
"maximum": 9,
"minimum": 0,
"description": "Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them."
},
"arrive_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"checked_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 2,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Checked Bags",
"default": null,
"description": "Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"depart_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"arrive_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"carry_on_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carry On Bags",
"default": null,
"description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"depart_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"lower_emissions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Lower Emissions",
"default": null,
"description": "Only itineraries with lower emissions than is typical for the route."
},
"exclude_airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Airlines",
"default": null,
"examples": [
[
"G3"
],
[
"Gulf Air",
"Air India"
]
],
"description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'."
},
"trip_length_days": {
"anyOf": [
{
"type": "integer",
"maximum": 90,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Trip Length Days",
"default": null,
"description": "How many nights the traveler wants to stay. Round trips only. Every price in the calendar is for exactly this many nights. If the traveler has not told you how many nights, ask them. Do not pick a number for the traveler."
},
"max_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Max Layover Hours",
"default": null,
"description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'."
},
"min_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Min Layover Hours",
"default": null,
"description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'."
},
"max_duration_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 96,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Duration Hours",
"default": null,
"description": "Longest itinerary to show, in hours."
},
"connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Connecting Airports",
"default": null,
"examples": [
[
"MIA",
"ATL",
"IAH"
]
],
"description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs."
},
"exclude_connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Connecting Airports",
"default": null,
"examples": [
[
"DOH"
],
[
"LOND"
]
],
"description": "Leave out itineraries that change planes at these airports (codes or city codes)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"days": {
"type": [
"array",
"null"
],
"description": "Items: depart_date, return_date, price_usd, day_of_week, low_price"
},
"note": {
"type": [
"string",
"null"
],
"description": "Next-step guidance or why no data"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"query": {
"type": [
"object",
"null"
],
"description": "The calendar query: origin, destination, cabin, travelers, trip_type, stops, month, airlines"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"summary": {
"type": [
"object",
"null"
],
"description": "Partner grid summary stats for the window"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com flights tab link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Price calendar",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}track_flight — Track a flight's price
Use to start price alerts on an itinerary from a search, after the traveler confirms (asking for alerts is confirming). One way: any itinerary_id from search_flights. Round trip: an outbound itinerary_id from search_flights watches that outbound with its cheapest return; a complete itinerary_id from search_return_flights tracks that exact pairing. Multi-city: a complete itinerary_id. Alerts go to the account's channels on a new low; alert_rule any hears every move; target_price_usd sets a bar.
{
"type": "object",
"title": "track_flightArguments",
"required": [
"itinerary_id"
],
"properties": {
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"alert_rule": {
"anyOf": [
{
"enum": [
"lowest",
"any",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Alert Rule",
"default": null,
"description": "When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead."
},
"itinerary_id": {
"type": "string",
"title": "Itinerary Id",
"description": "From search_flights (one way) or search_return_flights (a complete round trip or multi-city)."
},
"target_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Target Price Usd",
"default": null,
"description": "Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
}
}
}{
"type": "object",
"properties": {
"fid": {
"type": [
"string",
"null"
],
"description": "Tracked itinerary id (flight numbers)"
},
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Note about text alerts needing a verified phone"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Route dict: origin, destination, cabin, travelers, dates, trip_type (+names on outbound watch)"
},
"watch": {
"type": [
"string",
"null"
],
"description": "\"outbound\" when an outbound-only watch was saved"
},
"alerts": {
"type": [
"string",
"null"
],
"description": "Plain-words description of what alerts fire"
},
"status": {
"type": [
"string",
"null"
],
"description": "tracking | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "{email: boolean, text: boolean} stored alert channels"
},
"saved_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-flights page link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The tracked route's search key"
},
"alerts_when": {
"type": [
"string",
"null"
],
"description": "When alerts fire, from the alert preference"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"outbound_fid": {
"type": [
"string",
"null"
],
"description": "Outbound watch only: the outbound fid"
},
"price_at_save": {
"type": [
"number",
"null"
],
"description": "Price recorded when tracking started"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"text_not_enabled": {
"type": [
"string",
"null"
],
"description": "Text asked but no verified phone on account"
},
"text_unconfirmed": {
"type": [
"string",
"null"
],
"description": "Could not confirm text-alert status"
}
},
"additionalProperties": true
}{
"title": "Track a flight's price",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_tracked_flights — List tracked flights
Use to see the flight price alerts on the signed-in account: route, dates, cabin, alert settings, each itinerary's current price against the price when tracking began, and the search_key and fid that stop_tracking_flight and update_flight_tracking take.
{
"type": "object",
"title": "list_tracked_flightsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many to return, newest first, 1-200."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to stop a tracking"
},
"count": {
"type": [
"number",
"null"
],
"description": "Number of flight trackings on the account"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"trackings": {
"type": [
"array",
"null"
],
"description": "Items: route fields, search_key, alert_preference, alert_method, prices, last_alert_sent, itineraries[], manage_url"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-flights page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "List tracked flights",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}stop_tracking_flight — Stop tracking a flight
Use to stop price alerts for a tracked route (search_key from list_tracked_flights), or one itinerary in it (fid). Cannot be undone; confirm first.
{
"type": "object",
"title": "stop_tracking_flightArguments",
"required": [
"search_key"
],
"properties": {
"fid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Fid",
"default": null,
"description": "An itinerary's fid from list_tracked_flights, to stop only that one and keep the route."
},
"search_key": {
"type": "string",
"title": "Search Key",
"description": "The route's search_key from list_tracked_flights."
}
}
}{
"type": "object",
"properties": {
"fid": {
"type": [
"string",
"null"
],
"description": "The single itinerary removed, if any"
},
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Route dict parsed from the key with place names"
},
"scope": {
"type": [
"string",
"null"
],
"description": "\"one itinerary\" or \"whole route\""
},
"status": {
"type": [
"string",
"null"
],
"description": "stopped | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-flights page link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The route that was stopped"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Stop tracking a flight",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}recent_deals — Recent deals
Use for 'any deals right now?': the freshest price-drop alerts SlickTrip actually sent, by category (flights, hotels, seats, flexible routes). Not a search; no account needed.
{
"type": "object",
"title": "recent_dealsArguments",
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "These are real alerts sent recently"
},
"site": {
"type": [
"string",
"null"
],
"description": "slicktrip.com homepage link with attribution"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"alerts": {
"type": [
"object",
"null"
],
"description": "Category name to array of recent alert items (route, price, prevPrice, dates, url, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Recent deals",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}find_places — Find airport and city codes
Use when unsure of an airport or city code before searching. Matches a place name or code and returns the code to pass as origin or destination, whether it is one airport or all airports in a city, and the airports a city code covers. Not needed for well-known codes like JFK or LHR.
{
"type": "object",
"title": "find_placesArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 8,
"maximum": 20,
"minimum": 1,
"description": "Most matches to return."
},
"query": {
"type": "string",
"title": "Query",
"examples": [
"Rome",
"Tokyo",
"FCO"
],
"maxLength": 80,
"minLength": 1,
"description": "A city or airport name, or a code to check."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to use the code, or no-match hint"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"places": {
"type": [
"array",
"null"
],
"description": "Items: code, name, kind, country, plus airports[] (city) or city (airport)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Find airport and city codes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}booking_options — Sellers for an itinerary
Use when the traveler wants to book flights they have chosen: the sellers offering that exact itinerary (airline direct and agencies), each with its price and a link that opens its checkout on the seller's site. An airline lists each of its fares by name (Basic Economy, Main Cabin and so on) with what that fare includes: seat choice, changes, refunds, carry-on and checked bags. So it also answers what a fare includes or what the fare without the basic restrictions costs. Takes a complete itinerary_id: one-way from search_flights, round trip from search_return_flights. Not for an outbound alone (choose a return first) and not a price watch (track_flight).
{
"type": "object",
"title": "booking_optionsArguments",
"required": [
"itinerary_id"
],
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"itinerary_id": {
"type": "string",
"title": "Itinerary Id",
"minLength": 3,
"description": "A complete itinerary_id from search_flights (one way) or search_return_flights (round trip)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Links open seller checkout; last a day"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | book_on_site | needs_return | unavailable | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Explanation for non-ok statuses or wrapper errors"
},
"sellers": {
"type": [
"array",
"null"
],
"description": "Items: seller, price_usd, airline_direct, separate_tickets, book_url"
},
"outbound": {
"type": [
"object",
"null"
],
"description": "On needs_return: the outbound leg (airlines, segments, layovers) the answer is about"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The search key of the itinerary"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com search page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"itinerary_id": {
"type": [
"string",
"null"
],
"description": "The itinerary the sellers are for"
},
"flight_numbers": {
"type": [
"array",
"null"
],
"description": "Strings: flight numbers of every segment"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"trip_total_usd": {
"type": [
"number",
"null"
],
"description": "The itinerary's searched total price"
}
},
"additionalProperties": true
}{
"title": "Sellers for an itinerary",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}hotel_booking_options — Sellers for a hotel
Use when the traveler wants to book a hotel from search_hotels: every seller quoting it for those dates (the hotel itself and booking sites), each with the stay total and a link that opens its checkout on the seller's site. Takes the search_key and hotel_id from search_hotels. Not a price watch (track_hotel).
{
"type": "object",
"title": "hotel_booking_optionsArguments",
"required": [
"search_key",
"hotel_id"
],
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"hotel_id": {
"type": "string",
"title": "Hotel Id",
"minLength": 3,
"description": "The hotel_id from search_hotels."
},
"search_key": {
"type": "string",
"title": "Search Key",
"minLength": 3,
"description": "The search_key from search_hotels."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "Hotel name"
},
"note": {
"type": [
"string",
"null"
],
"description": "Links open seller checkout; last a day"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | unavailable | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Explanation for unavailable or wrapper errors"
},
"sellers": {
"type": [
"array",
"null"
],
"description": "Items: seller, total_usd, per_night_usd, hotel_direct, free_cancellation, book_url"
},
"hotel_id": {
"type": [
"string",
"null"
],
"description": "The hotel's property token"
},
"hotel_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com hotel page link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The hotel search key"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Sellers for a hotel",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}hotel_details — Hotel details
Use when the traveler asks for the details, more information, photos, rooms or description of one hotel from search_hotels: description, photos, guest rating, amenities, the sellers' stay totals, the rooms, check-in and check-out times. Takes the search_key and hotel_id from search_hotels. Not for prices across dates (hotel_price_calendar). Booking links are hotel_booking_options; call that only when they say book.
{
"type": "object",
"title": "hotel_detailsArguments",
"required": [
"search_key",
"hotel_id"
],
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"hotel_id": {
"type": "string",
"title": "Hotel Id",
"minLength": 3,
"description": "The hotel_id from search_hotels."
},
"search_key": {
"type": "string",
"title": "Search Key",
"minLength": 3,
"description": "The search_key from search_hotels."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "Hotel name"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance for the assistant"
},
"stay": {
"type": [
"object",
"null"
],
"description": "location, check_in, check_out, adults, children"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"rooms": {
"type": [
"array",
"null"
],
"description": "Rooms: name, seller, total_usd, free_cancellation"
},
"stars": {
"type": [
"number",
"null"
],
"description": "Star class"
},
"images": {
"type": [
"array",
"null"
],
"description": "Photo URLs"
},
"nights": {
"type": [
"number",
"null"
],
"description": "Nights in the stay"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"address": {
"type": [
"string",
"null"
],
"description": "Street address"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in text"
},
"reviews": {
"type": [
"number",
"null"
],
"description": "Review count"
},
"sellers": {
"type": [
"array",
"null"
],
"description": "Stay total by seller, cheapest first: seller, total_usd, per_night_usd, hotel_direct, free_cancellation"
},
"hotel_id": {
"type": [
"string",
"null"
],
"description": "Hotel id"
},
"amenities": {
"type": [
"array",
"null"
],
"description": "Amenity names"
},
"hotel_url": {
"type": [
"string",
"null"
],
"description": "The hotel on slicktrip.com"
},
"total_usd": {
"type": [
"number",
"null"
],
"description": "Cheapest room stay total"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The hotel search key"
},
"description": {
"type": [
"string",
"null"
],
"description": "Hotel description"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"guest_rating": {
"type": [
"number",
"null"
],
"description": "Guest rating out of 5"
},
"check_in_time": {
"type": [
"string",
"null"
],
"description": "Check-in time"
},
"per_night_usd": {
"type": [
"number",
"null"
],
"description": "Cheapest room per night"
},
"check_out_time": {
"type": [
"string",
"null"
],
"description": "Check-out time"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Hotel details",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}flight_lookup — Flights on a route that day
Call this tool when the traveler wants to know which flights operate on a route on a given date, or when you need a flight number for seat_availability or track_seats. It returns the departure and arrival times, the airline, the aircraft and the stops. It does not return prices. To find prices, use search_flights.
{
"type": "object",
"title": "flight_lookupArguments",
"required": [
"origin",
"destination",
"depart_date"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"display": {
"anyOf": [
{
"enum": [
"compact",
"full"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Display",
"default": null,
"description": "compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does."
},
"depart_date": {
"type": "string",
"title": "Depart Date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"flight_number": {
"anyOf": [
{
"type": "string",
"maxLength": 8
},
{
"type": "null"
}
],
"title": "Flight Number",
"default": null,
"description": "Only this flight, like AA100."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance for the assistant"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"search": {
"type": [
"object",
"null"
],
"description": "origin, destination, depart_date with names"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"flights": {
"type": [
"array",
"null"
],
"description": "Scheduled flights: flight_numbers, aircraft, airlines, stops, duration_minutes, segments"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in text"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"seat_tracker_url": {
"type": [
"string",
"null"
],
"description": "The seat tracker on slicktrip.com"
}
},
"additionalProperties": true
}{
"title": "Flights on a route that day",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}shared_trip — Open a shared trip
Use when the traveler pastes a slicktrip.com/share link: the shared itinerary or bucket list and its current price, so they can start their own watch on it. Takes the link or its code. Not for making a link (share_link).
{
"type": "object",
"title": "shared_tripArguments",
"required": [
"share_url"
],
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"share_url": {
"type": "string",
"title": "Share Url",
"maxLength": 200,
"minLength": 4,
"description": "A slicktrip.com/share/<code> link, or just the code."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "flight | bucket_list"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance for the assistant"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Route with names and dates"
},
"months": {
"type": [
"array",
"null"
],
"description": "Bucket list months"
},
"nights": {
"type": [
"array",
"null"
],
"description": "min and max nights"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in text"
},
"max_stops": {
"type": [
"number",
"null"
],
"description": "Stops allowed"
},
"best_deals": {
"type": [
"array",
"null"
],
"description": "Deals found so far"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The route's search key"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "The search on slicktrip.com"
},
"share_code": {
"type": [
"string",
"null"
],
"description": "The share code"
},
"itineraries": {
"type": [
"array",
"null"
],
"description": "fid, price_usd, outbound, return legs"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"max_price_usd": {
"type": [
"number",
"null"
],
"description": "Bucket list price bar"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"current_price_usd": {
"type": [
"number",
"null"
],
"description": "Shared watch's current price"
}
},
"additionalProperties": true
}{
"title": "Open a shared trip",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}route_airlines — Airlines on a route
Use when the traveler asks who flies a route, or before filtering by airline: the carriers on the route, nonstop ones first, with the codes the airlines filters take. Not a fare search.
{
"type": "object",
"title": "route_airlinesArguments",
"required": [
"origin",
"destination"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Guidance for the assistant"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"origin": {
"type": [
"string",
"null"
],
"description": "Origin code"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in text"
},
"airlines": {
"type": [
"array",
"null"
],
"description": "code, name, nonstop"
},
"destination": {
"type": [
"string",
"null"
],
"description": "Destination code"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Airlines on a route",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}explore_destinations — Cheapest places to go
Use when the traveler wants the cheapest place to fly from somewhere, or ideas for where to go, instead of a destination they already chose: "the cheapest flight from Warsaw, anywhere", "where can I go cheaply", "the cheapest city in Brazil". Returns destinations cheapest first with the airline, stops and a search_url: priced on the traveler's dates when you give depart_date (and return_date for a round trip), else each on its own cheapest dates in the coming months.
{
"type": "object",
"title": "explore_destinationsArguments",
"required": [
"origin"
],
"properties": {
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin class."
},
"abroad": {
"type": "boolean",
"title": "Abroad",
"default": false,
"description": "Only places outside the origin's country, when the traveler says out of the country, abroad or international."
},
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"nonstop": {
"type": "boolean",
"title": "Nonstop",
"default": false,
"description": "Nonstop flights only."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"travelers": {
"type": "integer",
"title": "Travelers",
"default": 1,
"maximum": 30,
"minimum": 1,
"description": "Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
},
"trip_type": {
"enum": [
"roundtrip",
"one_way"
],
"type": "string",
"title": "Trip Type",
"default": "roundtrip",
"description": "Round trip or one way."
},
"depart_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Date",
"default": null,
"description": "YYYY-MM-DD: price every place on this day (the traveler's own). Empty: each on its own cheapest dates."
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "How many destinations to list."
},
"return_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Return Date",
"default": null,
"description": "YYYY-MM-DD, with depart_date, for a round trip."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"max_price_usd": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "Only fares at or under this total, in US dollars."
},
"country_or_region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country Or Region",
"default": null,
"examples": [
"Brazil",
"Europe",
"Caribbean",
"Italy"
],
"description": "Only destinations in this country or region, as the traveler said it."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to read and use the list"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"search": {
"type": [
"object",
"null"
],
"description": "origin, trip_type, travelers, cabin, nonstop, country_or_region, max_price_usd"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "What went wrong, when status is error"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"total_found": {
"type": [
"number",
"null"
],
"description": "Destinations that fit, before max_results"
},
"destinations": {
"type": [
"array",
"null"
],
"description": "city, country, airport, price_usd (total), per_traveler_usd, depart_date, return_date, airline, stops, duration_minutes, search_url"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Cheapest places to go",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_hotels — Search hotels
Use when the traveler wants a hotel or a place to stay for known dates, tonight included: in a city or neighbourhood, near a landmark, venue or airport (near Heathrow, near the convention center), or a hotel by name. Returns hotels cheapest first with star class, guest rating, per-night and whole-stay price, what is nearby, hotel_ids and a search_key for track_hotel and hotel_price_calendar, and a search_url. Filters match the site: price per night (under $200), stars, guest rating, property kinds, amenities, free cancellation, hotels or vacation rentals, bedrooms (rentals), sort. Not for flexible months (add_hotel_bucket_list).
{
"type": "object",
"title": "search_hotelsArguments",
"required": [
"location",
"check_in",
"check_out"
],
"properties": {
"sort": {
"enum": [
"price",
"rating"
],
"type": "string",
"title": "Sort",
"default": "price",
"description": "Cheapest first, or best rated first."
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand",
"default": null,
"examples": [
"Four Seasons",
"Ritz-Carlton",
"Hilton"
],
"description": "Only stays of this brand or chain, matched in the hotel's name. Put the city in location, the brand here."
},
"adults": {
"type": "integer",
"title": "Adults",
"default": 2,
"maximum": 16,
"minimum": 1,
"description": "Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16."
},
"check_in": {
"type": "string",
"title": "Check In",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"location": {
"type": "string",
"title": "Location",
"examples": [
"Miami Beach",
"near the Louvre, Paris",
"near Heathrow Airport"
],
"description": "A city, neighbourhood, landmark, airport or venue, or a hotel name."
},
"amenities": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Amenities",
"default": null,
"examples": [
[
"pool",
"free breakfast"
]
],
"description": "Hotels: free parking, pool, gym, spa, free breakfast, beach access, pet-friendly, child-friendly, free wi-fi, air conditioning, all-inclusive, wheelchair accessible, ev charger, bar, restaurant, room service. Vacation rentals: kitchen, hot tub, fireplace, patio, grill, crib, beach access, pet-friendly, gym, air conditioning."
},
"check_out": {
"type": "string",
"title": "Check Out",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"min_stars": {
"anyOf": [
{
"type": "integer",
"maximum": 5,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Stars",
"default": null,
"description": "Lowest star class to show, 1-5."
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 8,
"maximum": 50,
"minimum": 1,
"description": "How many results to return, 1-50."
},
"min_bedrooms": {
"anyOf": [
{
"type": "integer",
"maximum": 20,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Bedrooms",
"default": null,
"description": "Vacation rentals with at least this many bedrooms, as the traveler said it (\"a 5-bedroom house\": 5). Searches vacation rentals; each home says its bedrooms, bathrooms and how many it sleeps."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"children_ages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "integer"
}
},
{
"type": "null"
}
],
"title": "Children Ages",
"default": null,
"examples": [
[
4,
9
]
],
"description": "One age per child, 1-17."
},
"property_type": {
"enum": [
"hotel",
"vacation_rental"
],
"type": "string",
"title": "Property Type",
"default": "hotel",
"description": "Hotels, or vacation rentals."
},
"property_kinds": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Property Kinds",
"default": null,
"examples": [
[
"resort",
"spa hotel"
]
],
"description": "Hotels: resort, boutique hotel, hostel, inn, motel, spa hotel, bed and breakfast, apartment hotel, beach hotel, ryokan. Vacation rentals: apartment, house, villa, cabin, cottage, chalet, bungalow, houseboat."
},
"min_guest_rating": {
"anyOf": [
{
"type": "number",
"maximum": 10,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Guest Rating",
"default": null,
"description": "Lowest guest rating out of 5; 3.5, 4 or 4.5 work best. A rating out of 10 (8 and up) is read as half."
},
"free_cancellation": {
"type": "boolean",
"title": "Free Cancellation",
"default": false,
"description": "Only stays with free cancellation."
},
"max_price_per_night": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Per Night",
"default": null,
"description": "Highest price per night to show, USD."
},
"min_price_per_night": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Price Per Night",
"default": null,
"description": "Lowest price per night to show, USD."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Prices are whole-stay; how to track"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"hotels": {
"type": [
"array",
"null"
],
"description": "Items: hotel_id, name, image, type, stars, guest_rating, reviews, per_night_usd, total_usd, amenities, description, hotel_url; vacation rentals add sleeps, bedrooms, bathrooms"
},
"search": {
"type": [
"object",
"null"
],
"description": "location, check_in, check_out, adults, children_ages, nights, search_key"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"filters": {
"type": [
"object",
"null"
],
"description": "Applied filters: property_type, min_stars, free_cancellation, min_bedrooms, advanced, sort"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"highlights": {
"type": [
"object",
"null"
],
"description": "The spread over every priced stay: cheapest, best_rated, cheapest_4_star_plus, most_reviewed; each with hotel_id, name, per_night_usd, total_usd, stars, guest_rating, reviews"
},
"search_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com hotels search link"
},
"searched_as": {
"type": [
"string",
"null"
],
"description": "What the search assumed: guests, hotels or vacation rentals"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"total_found": {
"type": [
"number",
"null"
],
"description": "Total hotels found before max_results cut"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Search hotels",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}track_hotel — Track a hotel's price
Use to start price alerts on one hotel from search_hotels for those dates, after the traveler confirms. Alerts go to the account's channels when the price drops.
{
"type": "object",
"title": "track_hotelArguments",
"required": [
"search_key",
"hotel_id"
],
"properties": {
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"hotel_id": {
"type": "string",
"title": "Hotel Id",
"description": "A hotel_id from search_hotels."
},
"alert_rule": {
"anyOf": [
{
"enum": [
"lowest",
"any",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Alert Rule",
"default": null,
"description": "When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead."
},
"search_key": {
"type": "string",
"title": "Search Key",
"description": "The search_key from search_hotels."
},
"search_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search Url",
"default": null,
"description": "The search_url from the same search_hotels result, so the alert reopens the same filtered search (stars, price range, amenities). Empty tracks against the plain search."
},
"target_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Target Price Usd",
"default": null,
"description": "Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Manage on saved-hotels page or already tracked"
},
"stay": {
"type": [
"object",
"null"
],
"description": "location, check_in, check_out, adults, children"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"alerts": {
"type": [
"string",
"null"
],
"description": "Plain-words description of alerts"
},
"status": {
"type": [
"string",
"null"
],
"description": "tracking | already_tracking | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"hotel_id": {
"type": [
"string",
"null"
],
"description": "The tracked hotel's property token"
},
"hotel_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com hotel page link"
},
"saved_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-hotels page link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The hotel search key"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_id": {
"type": [
"string",
"null"
],
"description": "The stay's tracking record id"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"current_price_usd": {
"type": [
"number",
"null"
],
"description": "already_tracking only: current tracked price"
},
"added_to_existing_stay": {
"type": [
"boolean",
"null"
],
"description": "Merged into an existing stay record"
}
},
"additionalProperties": true
}{
"title": "Track a hotel's price",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_tracked_hotels — List tracked hotels
Use to see the hotel price alerts on the signed-in account: stay dates, guests, each hotel's current price against the price when tracking began, and the tracking_id and hotel_id the update and stop tools take.
{
"type": "object",
"title": "list_tracked_hotelsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many to return, newest first, 1-200."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to stop a tracking"
},
"count": {
"type": [
"number",
"null"
],
"description": "Number of hotel stays tracked"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"trackings": {
"type": [
"array",
"null"
],
"description": "Items: tracking_id, name, check_in, check_out, adults, children, alert settings, prices, hotels[], manage_url"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-hotels page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "List tracked hotels",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}stop_tracking_hotel — Stop tracking a hotel
Use to stop price alerts for a tracked stay (tracking_id from list_tracked_hotels), or one hotel in it (hotel_id). Cannot be undone; confirm first.
{
"type": "object",
"title": "stop_tracking_hotelArguments",
"required": [
"tracking_id"
],
"properties": {
"hotel_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Hotel Id",
"default": null,
"description": "Drop only this hotel from the stay and keep the rest."
},
"tracking_id": {
"type": "string",
"title": "Tracking Id",
"description": "The stay's tracking_id from list_tracked_hotels."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Set when last hotel removal deleted the stay"
},
"stay": {
"type": [
"object",
"null"
],
"description": "location, hotel_name, name, check_in, check_out, adults"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"scope": {
"type": [
"string",
"null"
],
"description": "\"whole stay\" or \"one hotel\""
},
"status": {
"type": [
"string",
"null"
],
"description": "stopped | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"hotel_id": {
"type": [
"string",
"null"
],
"description": "The single hotel removed, if any"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_id": {
"type": [
"string",
"null"
],
"description": "The stay tracking id stopped"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Stop tracking a hotel",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}seat_availability — Seat availability
Use to see which seats are open right now on one flight (needs a signed-in SlickTrip account; nothing is charged or changed): open seat numbers by row, counts of window, aisle, middle and exit-row seats, and rows with two seats together. Needs the flight number, route and date. Then track_seats to be told when a seat opens. Not for prices.
{
"type": "object",
"title": "seat_availabilityArguments",
"required": [
"flight_number",
"origin",
"destination",
"depart_date"
],
"properties": {
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first",
"any"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin to look at; any = every cabin on the flight."
},
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"depart_date": {
"type": "string",
"title": "Depart Date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"flight_number": {
"type": "string",
"title": "Flight Number",
"pattern": "^[A-Za-z0-9]{2}\\s?\\d{1,4}[A-Za-z]?$",
"examples": [
"UA254",
"BA182"
],
"description": "Airline code and number, no space."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Use track_seats to be alerted"
},
"cabin": {
"type": [
"string",
"null"
],
"description": "Cabin tier queried"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"counts": {
"type": [
"object",
"null"
],
"description": "seats, available, window, aisle, middle, exit_row, rows_with_2_together"
},
"flight": {
"type": [
"object",
"null"
],
"description": "flight_number, origin, destination, departure_time, arrival_time, aircraft, airline"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "No seat map explanation or wrapper error"
},
"exit_rows": {
"type": [
"array",
"null"
],
"description": "Row numbers with exit-row seats"
},
"seat_kinds": {
"type": [
"object",
"null"
],
"description": "Seat letter to window | aisle | middle"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"seat_map_svg": {
"type": [
"object",
"null"
],
"description": "url, view_box, aircraft, seats[] with x/y/w/h/status/kind"
},
"seat_map_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com seat-tracker setup page link"
},
"open_seat_ids": {
"type": [
"string",
"null"
],
"description": "Every open seat id in the cabin, space-separated"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"taken_seat_ids": {
"type": [
"string",
"null"
],
"description": "Every taken seat id in the cabin, space-separated"
},
"available_seats": {
"type": [
"array",
"null"
],
"description": "Items: seat, kind, exit_row (up to 80)"
},
"seat_tracker_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com seat-tracker route link"
}
},
"additionalProperties": true
}{
"title": "Seat availability",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}track_seats — Track seats on a flight
Use to start seat alerts on one flight, after the traveler confirms: named seats, or every seat of a kind (window, aisle, middle, any), optionally only when N seats open together in a row. Alerts go to the account's channels when a watched seat opens.
{
"type": "object",
"title": "track_seatsArguments",
"required": [
"flight_number",
"origin",
"destination",
"depart_date"
],
"properties": {
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first",
"any"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin to look at; any = every cabin on the flight."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"seats": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Seats",
"default": null,
"examples": [
[
"12A",
"12B"
]
],
"description": "Seat numbers to watch."
},
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"seat_type": {
"anyOf": [
{
"enum": [
"window",
"aisle",
"middle",
"any"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Seat Type",
"default": null,
"description": "Watch every open seat of this kind instead of naming seats."
},
"depart_date": {
"type": "string",
"title": "Depart Date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"flight_number": {
"type": "string",
"title": "Flight Number",
"pattern": "^[A-Za-z0-9]{2}\\s?\\d{1,4}[A-Za-z]?$",
"examples": [
"UA254",
"BA182"
],
"description": "Airline code and number, no space."
},
"seats_together": {
"anyOf": [
{
"type": "integer",
"maximum": 6,
"minimum": 2
},
{
"type": "null"
}
],
"title": "Seats Together",
"default": null,
"description": "Alert only when this many seats are open together in one row, 2-6."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Manage on saved-seats page"
},
"cabin": {
"type": [
"string",
"array",
"null"
],
"description": "Cabin tracked, or list when several"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"alerts": {
"type": [
"string",
"null"
],
"description": "Plain-words description of alerts"
},
"flight": {
"type": [
"object",
"null"
],
"description": "flight_number, origin, destination, departure_time, arrival_time, aircraft, airline"
},
"status": {
"type": [
"string",
"null"
],
"description": "tracking | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"tracked": {
"type": [
"object",
"null"
],
"description": "seats, seat_type, specific_seats, seats_together, open_now"
},
"channels": {
"type": [
"object",
"null"
],
"description": "Alert channels on the record: email, text (booleans)"
},
"saved_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-seats page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_key": {
"type": [
"string",
"null"
],
"description": "Seat tracking key: route;departure_time;flight_number"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"merged_with_existing": {
"type": [
"boolean",
"null"
],
"description": "Added to an existing seat alert"
}
},
"additionalProperties": true
}{
"title": "Track seats on a flight",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_tracked_seats — List tracked seats
Use to see the seat alerts on the signed-in account: flight, departure, cabin, the seats watched and which are open now, and the tracking_key the update and stop tools take.
{
"type": "object",
"title": "list_tracked_seatsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many to return, newest first, 1-200."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to stop a seat alert"
},
"count": {
"type": [
"number",
"null"
],
"description": "Number of seat alerts on the account"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"trackings": {
"type": [
"array",
"null"
],
"description": "Items: tracking_key, flight_number, origin, destination, departure_time, aircraft, cabins, seats_together, tracked_seats, open_now, alert_method, created_at, manage_url"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-seats page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "List tracked seats",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}stop_tracking_seats — Stop tracking seats
Use to stop the seat alert on one flight (tracking_key from list_tracked_seats). Cannot be undone; confirm first.
{
"type": "object",
"title": "stop_tracking_seatsArguments",
"required": [
"tracking_key"
],
"properties": {
"tracking_key": {
"type": "string",
"title": "Tracking Key",
"description": "The alert's tracking_key from list_tracked_seats."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "stopped | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_key": {
"type": [
"string",
"null"
],
"description": "The seat alert key stopped"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Stop tracking seats",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}add_flight_bucket_list — Add a flight bucket list
Call this tool when the traveler wants to be alerted about a route over flexible dates, for example "tell me when New York to Tokyo drops under $700 this winter". SlickTrip keeps searching the months or dates the traveler chose and alerts them when a fare is under their price limit. It returns a bucket_id. When the traveler asks to be alerted, call it now: that is their go-ahead. Otherwise offer it first. Use the months, the number of nights and the price limit the traveler gave you, and the defaults for anything they did not say (every month on sale, 3 to 10 nights, 1 traveler); then tell them what you assumed. They can change any of it with update_bucket_list. Do not use this tool for fixed dates. Search those dates with search_flights, then use track_flight to watch the flight the traveler picks.
{
"type": "object",
"title": "add_flight_bucket_listArguments",
"required": [
"origin",
"destination"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"examples": [
"Japan road trip",
"Tokyo this winter"
],
"description": "A short name for the list in the traveler's words; give one. It is how the list is called in every alert and on the site."
},
"cabin": {
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"type": "string",
"title": "Cabin",
"default": "economy",
"description": "Cabin class."
},
"months": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Months",
"default": null,
"examples": [
[
"November",
"December"
],
[
"2026-11",
"2026-12"
]
],
"description": "Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default)."
},
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"DL",
"B6"
],
[
"JetBlue"
]
],
"description": "Only these marketing carriers, as IATA codes or names."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"end_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "End Date",
"default": null,
"description": "Last travel date, YYYY-MM-DD."
},
"max_stops": {
"type": "integer",
"title": "Max Stops",
"default": 1,
"maximum": 2,
"minimum": 0,
"description": "Most stops allowed: 0 nonstop, 1, or 2."
},
"travelers": {
"type": "integer",
"title": "Travelers",
"default": 1,
"maximum": 30,
"minimum": 1,
"description": "Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
},
"trip_type": {
"enum": [
"roundtrip",
"one-way"
],
"type": "string",
"title": "Trip Type",
"default": "roundtrip",
"description": "Round trip or one way."
},
"max_nights": {
"type": "integer",
"title": "Max Nights",
"default": 10,
"maximum": 30,
"minimum": 1,
"description": "Longest trip, nights (round trips)."
},
"min_nights": {
"type": "integer",
"title": "Min Nights",
"default": 3,
"maximum": 30,
"minimum": 1,
"description": "Shortest trip, nights (round trips)."
},
"start_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Start Date",
"default": null,
"description": "First travel date, YYYY-MM-DD. Give with end_date instead of months."
},
"depart_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Depart Days",
"default": null,
"description": "Only depart on these weekdays."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"return_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Return Days",
"default": null,
"description": "Only return on these weekdays."
},
"arrive_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"checked_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 2,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Checked Bags",
"default": null,
"description": "Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"depart_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"arrive_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"carry_on_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carry On Bags",
"default": null,
"description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"depart_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"max_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "The price bar, USD per traveler (or the trip total when price_is_total)."
},
"price_is_total": {
"type": "boolean",
"title": "Price Is Total",
"default": false,
"description": "max_price_usd is the total for all travelers."
},
"lower_emissions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Lower Emissions",
"default": null,
"description": "Only itineraries with lower emissions than is typical for the route."
},
"exclude_airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Airlines",
"default": null,
"examples": [
[
"G3"
],
[
"Gulf Air",
"Air India"
]
],
"description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'."
},
"max_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Max Layover Hours",
"default": null,
"description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'."
},
"min_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Min Layover Hours",
"default": null,
"description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'."
},
"max_duration_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 96,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Duration Hours",
"default": null,
"description": "Longest itinerary to show, in hours."
},
"connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Connecting Airports",
"default": null,
"examples": [
[
"MIA",
"ATL",
"IAH"
]
],
"description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs."
},
"exclude_connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Connecting Airports",
"default": null,
"examples": [
[
"DOH"
],
[
"LOND"
]
],
"description": "Leave out itineraries that change planes at these airports (codes or city codes)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "Always \"flight\""
},
"name": {
"type": [
"string",
"null"
],
"description": "Custom name if given"
},
"note": {
"type": [
"string",
"null"
],
"description": "First results timing"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "origin, destination, names, destination_image, trip_type, cabin, travelers"
},
"alerts": {
"type": [
"string",
"null"
],
"description": "Plain-words description of alerts"
},
"months": {
"type": [
"array",
"null"
],
"description": "Month names watched"
},
"nights": {
"type": [
"array",
"null"
],
"description": "[min_nights, max_nights] for round trips"
},
"status": {
"type": [
"string",
"null"
],
"description": "watching | error | sign_in_required"
},
"window": {
"type": [
"object",
"null"
],
"description": "{start, end} date window"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"airlines": {
"type": [
"array",
"null"
],
"description": "IATA carrier codes"
},
"channels": {
"type": [
"object",
"null"
],
"description": "Alert channels on the record: email, text (booleans)"
},
"bucket_id": {
"type": [
"string",
"null"
],
"description": "The new bucket list record id"
},
"max_stops": {
"type": [
"number",
"null"
],
"description": "Stop limit 0-2"
},
"saved_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-buckets page link"
},
"handoff_url": {
"type": [
"string",
"null"
],
"description": "Bucket-list autosave link on slicktrip.com"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"display_name": {
"type": [
"string",
"null"
],
"description": "Name as the card shows it"
},
"max_price_usd": {
"type": [
"number",
"null"
],
"description": "Price bar"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Add a flight bucket list",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}add_hotel_bucket_list — Add a hotel bucket list
Use for flexible-date hotel watches on a place or one named hotel: SlickTrip keeps searching stays of the given length across the chosen months or date window and alerts when a stay clears the per-night bar. Returns a bucket_id. When the traveler asks to be alerted, call it now; otherwise offer it first. Not for fixed dates (search_hotels, then track_hotel).
{
"type": "object",
"title": "add_hotel_bucket_listArguments",
"required": [
"location",
"nights"
],
"properties": {
"adults": {
"type": "integer",
"title": "Adults",
"default": 2,
"maximum": 16,
"minimum": 1,
"description": "Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16."
},
"months": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Months",
"default": null,
"examples": [
[
"November",
"December"
],
[
"2026-11",
"2026-12"
]
],
"description": "Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default)."
},
"nights": {
"type": "integer",
"title": "Nights",
"maximum": 30,
"minimum": 1,
"description": "Nights, 1-30."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"end_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "End Date",
"default": null,
"description": "Latest check-in, YYYY-MM-DD."
},
"location": {
"type": "string",
"title": "Location",
"examples": [
"Lisbon",
"South Beach, Miami"
],
"description": "A city, area or landmark."
},
"min_stars": {
"anyOf": [
{
"type": "integer",
"maximum": 5,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Stars",
"default": null,
"description": "Lowest star class to show, 1-5."
},
"hotel_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Hotel Name",
"default": null,
"description": "Pin one exact hotel instead of the whole area."
},
"start_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Start Date",
"default": null,
"description": "Earliest check-in, YYYY-MM-DD. Give with end_date instead of months."
},
"user_request": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"title": "User Request",
"default": null,
"examples": [
"we're 6 friends from madrid, want somewhere cheap and fun in europe dec 20-24, morning flights pls",
"necesito llevar a mi mamá de Calgary a Kolkata a fines de octubre, no puede hacer escala en Estados Unidos"
],
"description": "Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs its own travel parser on these words: when a search fails or comes back empty, it compares what the traveler said with the arguments sent and returns a corrected search, so you can fix it without asking them again. It has caught Cancun sent as MEX instead of CUN, and travelers dropped from the party. A summary loses exactly the details it checks. If the message only answers a question (\"yes, the 20th\"), quote the message where they asked for the trip. Send the same quote on every call for this request. Leave out anything not about the trip, and never include names, contact details, or payment or ID information. The words also help SlickTrip improve its search."
},
"check_in_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Check In Days",
"default": null,
"description": "Only check in on these weekdays."
},
"max_price_per_night": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Per Night",
"default": null,
"description": "The price bar, USD per night."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "Always \"hotel\""
},
"note": {
"type": [
"string",
"null"
],
"description": "First results timing"
},
"stay": {
"type": [
"object",
"null"
],
"description": "location, hotel_name, nights, adults"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"alerts": {
"type": [
"string",
"null"
],
"description": "Plain-words description of alerts"
},
"months": {
"type": [
"array",
"null"
],
"description": "Month names watched"
},
"status": {
"type": [
"string",
"null"
],
"description": "watching | error | sign_in_required"
},
"window": {
"type": [
"object",
"null"
],
"description": "{start, end} date window"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "Alert channels on the record: email, text (booleans)"
},
"bucket_id": {
"type": [
"string",
"null"
],
"description": "The new bucket list record id"
},
"min_stars": {
"type": [
"number",
"null"
],
"description": "Minimum star rating"
},
"saved_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved hotel-buckets link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"max_price_per_night_usd": {
"type": [
"number",
"null"
],
"description": "Nightly price bar"
}
},
"additionalProperties": true
}{
"title": "Add a hotel bucket list",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}list_bucket_lists — List bucket lists
Use to see the flight and hotel bucket lists on the signed-in account, each with its settings, the best deals found so far, and the bucket_id that update_bucket_list, remove_bucket_list and share_link take.
{
"type": "object",
"title": "list_bucket_listsArguments",
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"description": "Only the bucket lists the traveler asked about: words from a list's name or its places, e.g. 'Firefall' or 'Lisbon'. Leave out to list them all."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many to return, newest first, 1-200."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to remove; price semantics"
},
"count": {
"type": [
"number",
"null"
],
"description": "Number of bucket lists returned"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-buckets page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"bucket_lists": {
"type": [
"array",
"null"
],
"description": "Flight items (bucket_id, kind, route fields, months, window, nights, price, best_deals...) and hotel items (location, nights, adults, months, best_deals...)"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "List bucket lists",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}watch_details — One watch in detail
Use when the traveler asks about ONE of their watches (a tracked flight, a bucket list, a hotel stay or a seat watch): how it is doing, its price history, when it went up or down, the alerts sent. Returns its settings, the price now against the first price seen, the lowest and highest with dates, every recorded price move with its time (oldest first), each day's low and high and the alerts sent (flights), the best dates found (bucket lists), and when the last alert went out. Not for listing every watch (use the list_ tools).
{
"type": "object",
"title": "watch_detailsArguments",
"required": [
"watch"
],
"properties": {
"watch": {
"type": "string",
"title": "Watch",
"maxLength": 300,
"minLength": 1,
"description": "The watch: its id from a list tool (search_key, bucket_id, tracking_id or tracking_key), or a name or place in the traveler's words, like 'Japan Road Trip' or 'Lisbon'. If several watches match, the answer lists them to choose from."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "flight | bucket_list | hotel_bucket_list | hotel | seat"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to read the prices and lists"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"price": {
"type": [
"object",
"null"
],
"description": "now_usd, first_seen_usd/at, change_since_first_usd, lowest_usd/at, highest_usd/at, at_lowest"
},
"title": {
"type": [
"string",
"null"
],
"description": "The watch in words: route and dates, or the list's name"
},
"watch": {
"type": [
"object",
"null"
],
"description": "Its settings, as the matching list tool returns them (itineraries, best_deals, alert settings...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | choose | not_found | no_watches, or error | sign_in_required"
},
"matches": {
"type": [
"array",
"null"
],
"description": "status choose: the watches that match (watch, kind, label)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"watches": {
"type": [
"array",
"null"
],
"description": "status not_found: every watch on the account (watch, kind, label)"
},
"watch_id": {
"type": [
"string",
"null"
],
"description": "The watch's id (search_key, bucket_id, tracking_id or tracking_key)"
},
"travelers": {
"type": [
"number",
"null"
],
"description": "Travelers on a flight watch when more than one"
},
"alerts_sent": {
"type": [
"array",
"null"
],
"description": "Flights: the alerts sent on this route: at, price_usd, previous_usd, kind"
},
"price_moves": {
"type": [
"array",
"null"
],
"description": "Every recorded price change, oldest first: at, price_usd, previous_usd, airlines"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"daily_prices": {
"type": [
"array",
"null"
],
"description": "Flights: each day's low_usd, high_usd, close_usd and checks"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"last_alert_sent": {
"type": [
"string",
"null"
],
"description": "When the last alert went out"
}
},
"additionalProperties": true
}{
"title": "One watch in detail",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_my_watches — Check every watch
Use for a routine check of everything the traveler watches (for example a daily scheduled check, or "anything new on my watches?"): what dropped, what rose, new lows and the alerts SlickTrip sent in the last since_hours, with whether each moved price is lower than usual. One call covers every flight, bucket list, hotel and seat watch, from SlickTrip's records; it never runs a new search. For one watch in full, use watch_details.
{
"type": "object",
"title": "check_my_watchesArguments",
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"since_hours": {
"type": "integer",
"title": "Since Hours",
"default": 24,
"maximum": 168,
"minimum": 1,
"description": "How far back to look, in hours: 24 for a daily check (the default), up to 168."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "How to report the check"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"moved": {
"type": [
"array",
"null"
],
"description": "Watches that moved or sent an alert: watch, kind, title, now_usd, was_usd, change_usd, lowest_seen, alerts_sent, price_check"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_watches, or error | sign_in_required"
},
"steady": {
"type": [
"array",
"null"
],
"description": "Watches with no move: watch, kind, title, now_usd"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"summary": {
"type": [
"object",
"null"
],
"description": "Counts: watches, dropped, rose, new_low, alerts_sent, off_sale"
},
"since_hours": {
"type": [
"number",
"null"
],
"description": "The window checked, in hours"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Check every watch",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}remove_bucket_list — Remove a bucket list
Use to stop a bucket list (bucket_id from list_bucket_lists). Cannot be undone; confirm first.
{
"type": "object",
"title": "remove_bucket_listArguments",
"required": [
"bucket_id"
],
"properties": {
"bucket_id": {
"type": "string",
"title": "Bucket Id",
"description": "The list's bucket_id from list_bucket_lists."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "\"flight\" or \"hotel\""
},
"name": {
"type": [
"string",
"null"
],
"description": "The bucket's name"
},
"stay": {
"type": [
"object",
"null"
],
"description": "Hotel only: location, hotel_name, nights, adults"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Flight only: origin, destination, names, trip_type, cabin, travelers"
},
"status": {
"type": [
"string",
"null"
],
"description": "removed | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"bucket_id": {
"type": [
"string",
"null"
],
"description": "The removed bucket list id"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved buckets page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"display_name": {
"type": [
"string",
"null"
],
"description": "Name as the card shows it"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Remove a bucket list",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}hotel_price_calendar — Hotel price calendar
Use for 'when is this hotel cheapest' (signed-in account): one hotel's nightly price by check-in date across a span of months. Needs a hotel_id from search_hotels. Then search_hotels with the chosen dates to track it.
{
"type": "object",
"title": "hotel_price_calendarArguments",
"required": [
"hotel_id"
],
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"hotel_id": {
"type": "string",
"title": "Hotel Id",
"description": "A hotel_id from search_hotels."
},
"end_month": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "End Month",
"default": null,
"description": "Last month, as a name or YYYY-MM. Empty means next month."
},
"hotel_name": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"title": "Hotel Name",
"default": null,
"description": "The hotel's name from search_hotels, for the card's title."
},
"start_month": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Start Month",
"default": null,
"examples": [
"2026-11"
],
"description": "First month, as a name or YYYY-MM. Empty means this month."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"days": {
"type": [
"array",
"null"
],
"description": "Items: check_in, per_night_usd, day_of_week"
},
"note": {
"type": [
"string",
"null"
],
"description": "Per-night semantics and next step"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"months": {
"type": [
"array",
"null"
],
"description": "[start_month_name, end_month_name]"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | no_data | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "No-data explanation or wrapper error"
},
"summary": {
"type": [
"object",
"null"
],
"description": "priced_days, cheapest_per_night_usd, cheapest_check_in, median_per_night_usd, first_date, last_date"
},
"hotel_id": {
"type": [
"string",
"null"
],
"description": "The hotel property token"
},
"hotel_name": {
"type": [
"string",
"null"
],
"description": "The hotel name as given by the caller"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Hotel price calendar",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}handoff_link — Link into SlickTrip
Use when the traveler wants to continue on slicktrip.com, wants to send a flights or hotels search to someone (a bucket_list link saves the list for whoever opens it, so never send one), or the account is not connected: builds a link that lands them fully configured without running a search (a flights search with a track_url that starts tracking on arrival, a bucket list that saves on arrival, a hotel search, or the seat tracker).
{
"type": "object",
"$defs": {
"Leg": {
"type": "object",
"title": "Leg",
"required": [
"origin",
"destination",
"depart_date"
],
"properties": {
"origin": {
"type": "string",
"title": "Origin",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"depart_date": {
"type": "string",
"title": "Depart Date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-11-03"
],
"description": "YYYY-MM-DD."
},
"destination": {
"type": "string",
"title": "Destination",
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"maxLength": 40,
"minLength": 3,
"description": "A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ search them together (JFK_EWR). A place name works when one place clearly matches; otherwise the result is an unknown_place error listing suggestions. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
}
},
"description": "One leg of a multi-city trip."
}
},
"title": "handoff_linkArguments",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"flights",
"bucket_list",
"hotels",
"seats"
],
"type": "string",
"title": "Kind",
"description": "Which page to land on."
},
"legs": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/$defs/Leg"
},
"maxItems": 5,
"minItems": 2
},
{
"type": "null"
}
],
"title": "Legs",
"default": null,
"description": "Multi-city trip: the legs in order, 2 to 5, each one airport or city code per side and one date. When given, origin / destination / depart_date / return_date are ignored."
},
"cabin": {
"type": "string",
"title": "Cabin",
"default": "economy",
"examples": [
"economy",
"economy+business"
],
"description": "Cabin class; several joined with + to compare them (economy+business)."
},
"adults": {
"type": "integer",
"title": "Adults",
"default": 2,
"maximum": 16,
"minimum": 1,
"description": "Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16."
},
"months": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Months",
"default": null,
"examples": [
[
"November",
"December"
],
[
"2026-11",
"2026-12"
]
],
"description": "Months to watch, as names or YYYY-MM. Give this OR start_date + end_date."
},
"origin": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Origin",
"default": null,
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"description": "A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"DL",
"B6"
],
[
"JetBlue"
]
],
"description": "Only these marketing carriers, as IATA codes or names."
},
"check_in": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Check In",
"default": null,
"description": "YYYY-MM-DD."
},
"end_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "End Date",
"default": null,
"description": "YYYY-MM-DD."
},
"hotel_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Hotel Id",
"default": null,
"description": "hotels: open this one hotel from search_hotels."
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Location",
"default": null,
"description": "hotels: a city, area, landmark or hotel name."
},
"check_out": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Check Out",
"default": null,
"description": "YYYY-MM-DD."
},
"max_stops": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Max Stops",
"default": null,
"description": "Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
},
"min_stars": {
"anyOf": [
{
"type": "integer",
"maximum": 5,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Stars",
"default": null,
"description": "Lowest star class to show, 1-5."
},
"travelers": {
"type": "integer",
"title": "Travelers",
"default": 1,
"maximum": 30,
"minimum": 1,
"description": "Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat and is not counted here."
},
"max_nights": {
"anyOf": [
{
"type": "integer",
"maximum": 30,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Nights",
"default": null,
"description": "Nights, 1-30."
},
"min_nights": {
"anyOf": [
{
"type": "integer",
"maximum": 30,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Nights",
"default": null,
"description": "Nights, 1-30."
},
"start_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Start Date",
"default": null,
"description": "YYYY-MM-DD."
},
"depart_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(_\\d{4}-\\d{2}-\\d{2})?$"
},
{
"type": "null"
}
],
"title": "Depart Date",
"default": null,
"examples": [
"2026-11-03",
"2026-11-03_2026-11-04"
],
"description": "YYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction."
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Destination",
"default": null,
"examples": [
"JFK",
"NYCA",
"JFK_EWR"
],
"description": "A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airport, send the city (its name or code), not one of its airports: one airport can miss the cheapest or the only flights. Unsure of the code: call find_places."
},
"return_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Return Date",
"default": null,
"description": "YYYY-MM-DD."
},
"children_ages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "integer"
}
},
{
"type": "null"
}
],
"title": "Children Ages",
"default": null,
"examples": [
[
4,
9
]
],
"description": "One age per child, 1-17."
},
"flight_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Flight Number",
"default": null,
"examples": [
"UA254"
],
"description": "seats: the flight to open in the seat tracker."
},
"max_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "bucket_list: the price bar, USD."
},
"flight_numbers": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Flight Numbers",
"default": null,
"examples": [
[
"BA182"
],
[
"TP210+TP1368"
]
],
"description": "flights: the itinerary's flight numbers, connections joined with +; adds a track_url that starts tracking on arrival."
},
"max_price_per_night": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Per Night",
"default": null,
"description": "Highest price per night to show, USD."
}
}
}{
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The slicktrip.com landing link"
},
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "flights | bucket_list | hotels | seats"
},
"note": {
"type": [
"string",
"null"
],
"description": "What the links do on arrival"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "error | sign_in_required (absent on success)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"setup_url": {
"type": [
"string",
"null"
],
"description": "seats with flight_number: seat setup page link"
},
"track_url": {
"type": [
"string",
"null"
],
"description": "flights with flight_numbers: autosave tracking link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "flights/hotels: the search key built"
},
"prefill_url": {
"type": [
"string",
"null"
],
"description": "bucket_list: form pre-filled, not saved"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Link into SlickTrip",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}update_flight_tracking — Update flight alert settings
Use to change how a tracked route alerts: the alert rule, a target price, or the email and text channels. Only the fields given change. Confirm first.
{
"type": "object",
"title": "update_flight_trackingArguments",
"required": [
"search_key"
],
"properties": {
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"alert_rule": {
"anyOf": [
{
"enum": [
"lowest",
"any",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Alert Rule",
"default": null,
"description": "When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead."
},
"search_key": {
"type": "string",
"title": "Search Key",
"description": "The route's search_key from list_tracked_flights."
},
"target_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Target Price Usd",
"default": null,
"description": "Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Text alerts need a verified phone"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "updated | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "{email: boolean, text: boolean} stored channels"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-flights page link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The updated route's search key"
},
"alerts_when": {
"type": [
"string",
"null"
],
"description": "When alerts fire, from the alert preference"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"text_not_enabled": {
"type": [
"string",
"null"
],
"description": "Text asked but no verified phone"
},
"text_unconfirmed": {
"type": [
"string",
"null"
],
"description": "Could not confirm text-alert status"
}
},
"additionalProperties": true
}{
"title": "Update flight alert settings",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_hotel_tracking — Update hotel alert settings
Use to change how a tracked stay alerts: the alert rule, a target price, the email and text channels, or its name. Only the fields given change. Confirm first.
{
"type": "object",
"title": "update_hotel_trackingArguments",
"required": [
"tracking_id"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"examples": [
"Anniversary weekend"
],
"description": "Rename the stay, as it appears on the saved-hotels page."
},
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"alert_rule": {
"anyOf": [
{
"enum": [
"lowest",
"any",
"none"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Alert Rule",
"default": null,
"description": "When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead."
},
"tracking_id": {
"type": "string",
"title": "Tracking Id",
"description": "The stay's tracking_id from list_tracked_hotels."
},
"target_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 1000000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Target Price Usd",
"default": null,
"description": "Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "New stay name if renamed"
},
"note": {
"type": [
"string",
"null"
],
"description": "Text alerts need a verified phone"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "updated | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "{email: boolean, text: boolean} stored channels"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved-hotels page link"
},
"alerts_when": {
"type": [
"string",
"null"
],
"description": "When alerts fire, from the alert preference"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_id": {
"type": [
"string",
"null"
],
"description": "The updated stay tracking id"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"text_not_enabled": {
"type": [
"string",
"null"
],
"description": "Text asked but no verified phone"
},
"text_unconfirmed": {
"type": [
"string",
"null"
],
"description": "Could not confirm text-alert status"
}
},
"additionalProperties": true
}{
"title": "Update hotel alert settings",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_seat_tracking — Update seat alert settings
Use to pause or resume a seat alert, or change its seats-together rule or channels. To watch different seats call track_seats again (it adds to the alert). Only the fields given change. Confirm first.
{
"type": "object",
"title": "update_seat_trackingArguments",
"required": [
"tracking_key"
],
"properties": {
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"alerts_on": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Alerts On",
"default": null,
"description": "false pauses the alert, true resumes it."
},
"tracking_key": {
"type": "string",
"title": "Tracking Key",
"description": "The alert's tracking_key from list_tracked_seats."
},
"seats_together": {
"anyOf": [
{
"type": "integer",
"maximum": 6,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Seats Together",
"default": null,
"description": "Alert only when this many seats are open together, 2-6; 0 clears the rule."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"note": {
"type": [
"string",
"null"
],
"description": "Change seats via track_seats"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "updated | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"alertMethod": {
"type": [
"object",
"null"
],
"description": "{email, text} if channels changed"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"tracking_key": {
"type": [
"string",
"null"
],
"description": "The updated seat alert key"
},
"seatsTogether": {
"type": [
"number",
"null"
],
"description": "Seats-together count if changed"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"alertPreference": {
"type": [
"string",
"null"
],
"description": "\"any\" (on) or \"none\" (off) if changed"
}
},
"additionalProperties": true
}{
"title": "Update seat alert settings",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_bucket_list — Update a bucket list
Use to edit a bucket list: the price bar, months or date window, nights, stops, airlines, preferred weekdays, name, guests, stars, or channels, and a flight list's filters (airlines left out, connecting airports, times, duration, layovers, emissions, bags). Only the fields given change; a filter given replaces the stored one, and clear_filters names the ones to remove. A changed search resets the deals found so far. Confirm first.
{
"type": "object",
"title": "update_bucket_listArguments",
"required": [
"bucket_id"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"description": "A new label for the list."
},
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Send alerts by email. Empty keeps the account's setting."
},
"adults": {
"anyOf": [
{
"type": "integer",
"maximum": 6,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Adults",
"default": null,
"description": "Hotel lists: adults, 1-6."
},
"months": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Months",
"default": null,
"examples": [
[
"November",
"December"
],
[
"2026-11",
"2026-12"
]
],
"description": "Months to watch, as names or YYYY-MM. Give this OR start_date + end_date."
},
"airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Airlines",
"default": null,
"examples": [
[
"DL",
"B6"
],
[
"JetBlue"
]
],
"description": "Only these marketing carriers, as IATA codes or names."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"CAD",
"EUR",
"GBP",
"ILS"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "The currency the traveler wants prices in: USD, CAD, EUR, GBP or ILS. Send it when the traveler names a currency or says where they live (euros for someone in Spain). Empty answers in US dollars, or in the currency the traveler picked on SlickTrip. Amounts you send in (max_price_usd, target_price_usd, a price per night) stay US dollars."
},
"end_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "End Date",
"default": null,
"description": "YYYY-MM-DD."
},
"bucket_id": {
"type": "string",
"title": "Bucket Id",
"description": "The list's bucket_id from list_bucket_lists."
},
"max_stops": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Max Stops",
"default": null,
"description": "Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number)."
},
"min_stars": {
"anyOf": [
{
"type": "integer",
"maximum": 5,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Stars",
"default": null,
"description": "Hotel lists: lowest star class, 1-5."
},
"max_nights": {
"anyOf": [
{
"type": "integer",
"maximum": 30,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Nights",
"default": null,
"description": "Flight lists: longest trip. Hotel lists: the stay length."
},
"min_nights": {
"anyOf": [
{
"type": "integer",
"maximum": 30,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Min Nights",
"default": null,
"description": "Flight lists: shortest trip. Hotel lists: the stay length."
},
"start_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"title": "Start Date",
"default": null,
"description": "YYYY-MM-DD."
},
"depart_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Depart Days",
"default": null,
"description": "Flight lists: only depart on these weekdays."
},
"return_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Return Days",
"default": null,
"description": "Flight lists: only return on these weekdays."
},
"arrive_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"checked_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 2,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Checked Bags",
"default": null,
"description": "Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"clear_window": {
"type": "boolean",
"title": "Clear Window",
"default": false,
"description": "Remove the date window and watch the months instead."
},
"depart_after": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart After",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"arrive_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Arrive Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"carry_on_bags": {
"anyOf": [
{
"type": "integer",
"maximum": 1,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Carry On Bags",
"default": null,
"description": "Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them."
},
"check_in_days": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Check In Days",
"default": null,
"description": "Hotel lists: only check in on these weekdays."
},
"clear_filters": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"exclude_airlines",
"connecting_airports",
"exclude_connecting_airports",
"depart_after",
"depart_before",
"arrive_after",
"arrive_before",
"max_duration_hours",
"min_layover_hours",
"max_layover_hours",
"lower_emissions",
"bags"
],
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Clear Filters",
"default": null,
"description": "Flight lists: filters to remove."
},
"depart_before": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
{
"type": "null"
}
],
"title": "Depart Before",
"default": null,
"examples": [
"06:00",
"21:30"
],
"description": "HH:MM, local time at that airport."
},
"max_price_usd": {
"anyOf": [
{
"type": "integer",
"maximum": 100000,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "The price bar, USD: per traveler for a flight list (total when price_is_total), per night for a hotel list."
},
"price_is_total": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Price Is Total",
"default": null,
"description": "Flight lists: max_price_usd is the total for all travelers."
},
"lower_emissions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Lower Emissions",
"default": null,
"description": "Only itineraries with lower emissions than is typical for the route."
},
"exclude_airlines": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Airlines",
"default": null,
"examples": [
[
"G3"
],
[
"Gulf Air",
"Air India"
]
],
"description": "Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'."
},
"max_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Max Layover Hours",
"default": null,
"description": "Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'."
},
"min_layover_hours": {
"anyOf": [
{
"type": "number",
"maximum": 26,
"minimum": 0.5
},
{
"type": "null"
}
],
"title": "Min Layover Hours",
"default": null,
"description": "Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'."
},
"max_duration_hours": {
"anyOf": [
{
"type": "integer",
"maximum": 96,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Max Duration Hours",
"default": null,
"description": "Longest itinerary to show, in hours."
},
"connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Connecting Airports",
"default": null,
"examples": [
[
"MIA",
"ATL",
"IAH"
]
],
"description": "Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs."
},
"exclude_connecting_airports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Exclude Connecting Airports",
"default": null,
"examples": [
[
"DOH"
],
[
"LOND"
]
],
"description": "Leave out itineraries that change planes at these airports (codes or city codes)."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"kind": {
"type": [
"string",
"null"
],
"description": "\"flight\" or \"hotel\""
},
"name": {
"type": [
"string",
"null"
],
"description": "The bucket's name (pre-update record)"
},
"stay": {
"type": [
"object",
"null"
],
"description": "Hotel only: location, hotel_name, nights, adults"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Flight only: origin, destination, names, trip_type, cabin, travelers"
},
"status": {
"type": [
"string",
"null"
],
"description": "updated | error | sign_in_required"
},
"changed": {
"type": [
"object",
"null"
],
"description": "Fields sent to the update handler, site vocabulary (price, stops, preferredMonths, ...)"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"bucket_id": {
"type": [
"string",
"null"
],
"description": "The updated bucket list id"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com saved buckets page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"display_name": {
"type": [
"string",
"null"
],
"description": "Name as the card shows it"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Update a bucket list",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}get_account — The SlickTrip account
Use before offering text alerts, or when the traveler asks about their account: name, member since, which alert channels work (text needs a phone verified on the site), the plan and its free limit, and how many fares, stays, seats and bucket lists are watched.
{
"type": "object",
"title": "get_accountArguments",
"properties": {}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "Display name on the account"
},
"note": {
"type": [
"string",
"null"
],
"description": "Text alerts need verified phone, when unverified"
},
"plan": {
"type": [
"string",
"null"
],
"description": "\"premium\" or \"free\""
},
"email": {
"type": [
"string",
"null"
],
"description": "Signed-in email"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "email, text, text_available booleans"
},
"watching": {
"type": [
"object",
"null"
],
"description": "Counts: flights, hotels, seats, bucket_lists"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com profile page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"member_since": {
"type": [
"string",
"null"
],
"description": "Account creation date YYYY-MM-DD"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"free_limit_per_type": {
"type": [
"number",
"null"
],
"description": "Free-tier tracking cap; null on premium"
}
},
"additionalProperties": true
}{
"title": "The SlickTrip account",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_account — Update the account
Use to change the display name, or the default alert channels (email, text) for new alerts, optionally applied to everything already watched. Phones are verified on the site, not here. Only the fields given change. Confirm first.
{
"type": "object",
"title": "update_accountArguments",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"examples": [
"Dovi"
],
"description": "The traveler's display name."
},
"text": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Text alerts on new alerts by default; needs a verified phone."
},
"email": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Email",
"default": null,
"description": "Email alerts on new alerts by default."
},
"apply_to_all": {
"type": "boolean",
"title": "Apply To All",
"default": false,
"description": "Also set these channels on every alert already watched."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "Display name after the update"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"status": {
"type": [
"string",
"null"
],
"description": "updated | error | sign_in_required"
},
"applied": {
"type": [
"object",
"null"
],
"description": "Handler's per-type apply-to-all result, when returned"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"channels": {
"type": [
"object",
"null"
],
"description": "{email: boolean, text: boolean} stored default channels"
},
"manage_url": {
"type": [
"string",
"null"
],
"description": "slicktrip.com profile page link"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"applied_to_all": {
"type": [
"boolean",
"null"
],
"description": "Channels pushed onto existing trackings"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
},
"text_not_enabled": {
"type": [
"string",
"null"
],
"description": "Text asked but no verified phone"
}
},
"additionalProperties": true
}{
"title": "Update the account",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}share_link — Share a trip
Use when the traveler wants to share a tracked route or a flight bucket list: a public slicktrip.com link, the same one the site's Share button makes, showing the itinerary and its price and nothing about the account. Made once and reused. To share a flights or hotels search that is not watched (a guest, or before a watch is set), use handoff_link with kind flights or hotels instead: it needs no watch and no sign-in. Never a bucket_list handoff link: it saves the list for whoever opens it.
{
"type": "object",
"title": "share_linkArguments",
"properties": {
"bucket_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Bucket Id",
"default": null,
"description": "A flight bucket list's bucket_id from list_bucket_lists."
},
"search_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search Key",
"default": null,
"description": "A tracked route's search_key from list_tracked_flights."
}
}
}{
"type": "object",
"properties": {
"code": {
"type": [
"string",
"null"
],
"description": "On an error: a machine-readable kind, e.g. unknown_place"
},
"name": {
"type": [
"string",
"null"
],
"description": "The bucket list's name when the link shares a list"
},
"note": {
"type": [
"string",
"null"
],
"description": "What the link exposes"
},
"field": {
"type": [
"string",
"null"
],
"description": "On unknown_place: which argument (origin, destination, ...)"
},
"route": {
"type": [
"object",
"null"
],
"description": "Route dict with names for a tracked route"
},
"status": {
"type": [
"string",
"null"
],
"description": "ok | error | sign_in_required"
},
"message": {
"type": [
"string",
"null"
],
"description": "Error or sign-in message from the server wrapper"
},
"bucket_id": {
"type": [
"string",
"null"
],
"description": "The shared flight bucket id, if any"
},
"share_url": {
"type": [
"string",
"null"
],
"description": "Public slicktrip.com/share link"
},
"search_key": {
"type": [
"string",
"null"
],
"description": "The shared tracked route key, if any"
},
"suggestions": {
"type": [
"array",
"null"
],
"description": "On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country"
},
"places_assumed": {
"type": [
"array",
"null"
],
"description": "Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler"
}
},
"additionalProperties": true
}{
"title": "Share a trip",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}Prompts
5 advertised
cheapest_flights — Find the cheapest flights
Cheapest flights on a route for a trip, with an offer to watch the best fare.
- origin
- No description (required)
- destination
- No description (required)
- when
- No description (required)
cheapest_days — When is it cheapest to fly
The cheapest days to fly a route in a month.
- origin
- No description (required)
- destination
- No description (required)
- month
- No description (required)
watch_a_route — Watch a route for a deal
A flexible-months watch that alerts when a route drops under a price.
- origin
- No description (required)
- destination
- No description (required)
- months
- No description (required)
- max_price
- No description (required)
hotel_deal — Find a hotel
Hotels for a stay, cheapest first, with an offer to watch one.
- city
- No description (required)
- check_in
- No description (required)
- check_out
- No description (required)
my_alerts — What am I watching
Everything the traveler is watching on SlickTrip.
Resources
6 advertised
flights — SlickTrip flights widget
Flight itineraries with prices, stops and times; watch a fare or open it on SlickTrip
ui://widget/flights.htmlhotels — SlickTrip hotels widget
Hotels for a stay with price, stars and rating; watch a stay or open it on SlickTrip
ui://widget/hotels.htmlcalendar — SlickTrip calendar widget
Price by date for a route or a hotel, cheapest days highlighted
ui://widget/calendar.htmlseats — SlickTrip seats widget
Open seats on a flight by row, with window / aisle / exit-row counts
ui://widget/seats.htmllist — SlickTrip list widget
The account's watched fares, stays, seat alerts or bucket lists with current prices
ui://widget/list.htmlstatus — SlickTrip status widget
Confirmation of an alert that was set, changed or stopped
ui://widget/status.html90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1683 ms
- 95th percentile latency
- 1683 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1683 ms · metadata changed · 38 tool(s), 6 resource(s), 0 resource template(s), 5 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http slicktrip-mcp https://mcp.slicktrip.com/mcpCodex
codex mcp add slicktrip-mcp --url https://mcp.slicktrip.com/mcpCursor
{
"mcpServers": {
"slicktrip-mcp": {
"url": "https://mcp.slicktrip.com/mcp"
}
}
}Cline
{
"mcpServers": {
"slicktrip-mcp": {
"type": "streamableHttp",
"url": "https://mcp.slicktrip.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"slicktrip-mcp": {
"type": "http",
"url": "https://mcp.slicktrip.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http slicktrip-mcp https://mcp.slicktrip.com/mcpClaude Desktop
https://mcp.slicktrip.com/mcpWindsurf
{
"mcpServers": {
"slicktrip-mcp": {
"serverUrl": "https://mcp.slicktrip.com/mcp"
}
}
}Let your agent find its tools
Find servers like SlickTrip MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run SlickTrip MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.