Koskamo

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.

SlickTrip MCP logo, by SlickTripVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by SlickTrip
You need:OAuth sign-in with a free SlickTrip account
MCP endpoint (Streamable HTTP)
https://mcp.slicktrip.com/mcp
Vendor documentation

What its tools do

38 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

38 of 38 have a description · 38 of 38 declare behavior hints · 37 of 37 with parameters document them all

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

Vendor evidenceRegistry 1.1.1
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
Server-advertised capabilities
{
  "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.

SlickTrip finds live flight, hotel and seat prices, links to the sellers, and watches prices for travelers: when a watched price drops, SlickTrip emails them (and texts them, if they turned texts on), so they do not have to keep searching. Watches are free with a SlickTrip account. A watch is what keeps working for the traveler after this conversation. It fits when they have not booked yet and the trip is not days away, and best when price_check says the price is about usual or higher, or the fares are above a budget they named. Offer it in one line when it fits; skip it when they are booking now or already watch this trip. Asking to be told when a price drops is the go-ahead: start the watch. Flexible dates are a bucket list (add_flight_bucket_list, add_hotel_bucket_list): SlickTrip watches every date in the months they chose and alerts them when a good fare appears. For a watch request with no exact dates ("tell me when LA to Honolulu gets cheap this winter"), set it now with what they said and the defaults for the rest (1 traveler, economy, 3 to 10 nights), then say what you assumed; they can change any of it. A watch is the one place a default trip length is fine: it can be changed later, a search cannot. How watched prices are checked: around the clock, more often as the trip gets close, and the alert goes out at the first check that finds the drop. Timing depends on the trip and how busy the route is, so do not promise a fixed interval; a fare that lasts only minutes can be missed. Flights: search_flights for the traveler's dates (a round trip returns outbound flights; search_return_flights completes the trip), booking_options for sellers and checkout links, flight_lookup for the flights a route has on a day. Hotels: search_hotels, hotel_details, hotel_booking_options, hotel_price_calendar. Seats: seat_availability, then track_seats. Watches: track_flight, track_hotel and the bucket lists; watch_details for one watch in full; check_my_watches for what moved on every watch ("anything new?", or a daily check). If you are unsure of a place, call find_places first. Before any flight search, you need from the traveler: where they are flying from, where they are flying to, when they want to go, and whether it is one way or a round trip (for a round trip, the return date or the number of nights). If any of this is missing, ask the traveler for all of it in one question. Do not pick dates for the traveler. Do not pick a trip length for the traveler. If the traveler has no dates yet, also offer the bucket list alert. Search as soon as you have the dates. After the first results, help the traveler narrow them down. Search with what the traveler said; do not invent anything they did not say. Say what the search assumed (searched_as: one way or round trip, travelers, cabin), which airports a city stood for when results land at more than one, and whether each price is per traveler, per night or for the whole trip. Show choices, not one fare. Results carry highlights (flights: cheapest, cheapest nonstop, fastest, earliest, latest; stays: cheapest, best rated, cheapest four-star, most reviewed). With a card, point to two or three without repeating the card's list; without one, list them briefly with their links. Say when a pick has an overnight layover or separate tickets. When results are broad, name the one or two filters most likely to help (time of day, nonstop, airline, budget; for stays: area, budget per night, stars, free cancellation). Accounts: signed-out travelers get a few free searches a day; seat maps, the hotel calendar, watches and saved lists need a free SlickTrip account. On sign_in_required, ask the traveler to sign in to SlickTrip and share any links already returned. Errors: on unknown_place, offer its suggestions (or ask) rather than guessing a code; say any places_assumed. Changes: confirm with the traveler before a track_, add_, update_, stop_ or remove_ call unless they already asked for it. Booking and payment happen on the seller's site; show the slicktrip.com and booking links results carry.

Tools

38 advertised

search_flights — Search flights
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_flights input schema
{
  "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)."
    }
  }
}
search_flights output schema
{
  "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
}
search_flights annotations
{
  "title": "Search flights",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_return_flights — Search return flights
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_return_flights input schema
{
  "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)."
    }
  }
}
search_return_flights output schema
{
  "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
}
search_return_flights annotations
{
  "title": "Search return flights",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
price_calendar — Price calendar
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

price_calendar input schema
{
  "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)."
    }
  }
}
price_calendar output schema
{
  "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
}
price_calendar annotations
{
  "title": "Price calendar",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
track_flight — Track a flight's price
Advertised by the server during the last successful anonymous check.
Open-world

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.

track_flight input schema
{
  "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."
    }
  }
}
track_flight output schema
{
  "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
}
track_flight annotations
{
  "title": "Track a flight's price",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_tracked_flights — List tracked flights
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_tracked_flights input schema
{
  "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."
    }
  }
}
list_tracked_flights output schema
{
  "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
}
list_tracked_flights annotations
{
  "title": "List tracked flights",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
stop_tracking_flight — Stop tracking a flight
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

stop_tracking_flight input schema
{
  "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."
    }
  }
}
stop_tracking_flight output schema
{
  "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
}
stop_tracking_flight annotations
{
  "title": "Stop tracking a flight",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
recent_deals — Recent deals
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

recent_deals input schema
{
  "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."
    }
  }
}
recent_deals output schema
{
  "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
}
recent_deals annotations
{
  "title": "Recent deals",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_places — Find airport and city codes
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_places input schema
{
  "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."
    }
  }
}
find_places output schema
{
  "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
}
find_places annotations
{
  "title": "Find airport and city codes",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
booking_options — Sellers for an itinerary
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

booking_options input schema
{
  "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)."
    }
  }
}
booking_options output schema
{
  "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
}
booking_options annotations
{
  "title": "Sellers for an itinerary",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
hotel_booking_options — Sellers for a hotel
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

hotel_booking_options input schema
{
  "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."
    }
  }
}
hotel_booking_options output schema
{
  "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
}
hotel_booking_options annotations
{
  "title": "Sellers for a hotel",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
hotel_details — Hotel details
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

hotel_details input schema
{
  "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."
    }
  }
}
hotel_details output schema
{
  "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
}
hotel_details annotations
{
  "title": "Hotel details",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
flight_lookup — Flights on a route that day
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

flight_lookup input schema
{
  "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."
    }
  }
}
flight_lookup output schema
{
  "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
}
flight_lookup annotations
{
  "title": "Flights on a route that day",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
shared_trip — Open a shared trip
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

shared_trip input schema
{
  "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."
    }
  }
}
shared_trip output schema
{
  "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
}
shared_trip annotations
{
  "title": "Open a shared trip",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
route_airlines — Airlines on a route
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

route_airlines input schema
{
  "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."
    }
  }
}
route_airlines output schema
{
  "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
}
route_airlines annotations
{
  "title": "Airlines on a route",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
explore_destinations — Cheapest places to go
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

explore_destinations input schema
{
  "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."
    }
  }
}
explore_destinations output schema
{
  "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
}
explore_destinations annotations
{
  "title": "Cheapest places to go",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_hotels — Search hotels
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

search_hotels input schema
{
  "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."
    }
  }
}
search_hotels output schema
{
  "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
}
search_hotels annotations
{
  "title": "Search hotels",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
track_hotel — Track a hotel's price
Advertised by the server during the last successful anonymous check.
Open-world

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.

track_hotel input schema
{
  "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."
    }
  }
}
track_hotel output schema
{
  "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
}
track_hotel annotations
{
  "title": "Track a hotel's price",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_tracked_hotels — List tracked hotels
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_tracked_hotels input schema
{
  "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."
    }
  }
}
list_tracked_hotels output schema
{
  "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
}
list_tracked_hotels annotations
{
  "title": "List tracked hotels",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
stop_tracking_hotel — Stop tracking a hotel
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

stop_tracking_hotel input schema
{
  "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."
    }
  }
}
stop_tracking_hotel output schema
{
  "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
}
stop_tracking_hotel annotations
{
  "title": "Stop tracking a hotel",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
seat_availability — Seat availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

seat_availability input schema
{
  "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."
    }
  }
}
seat_availability output schema
{
  "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
}
seat_availability annotations
{
  "title": "Seat availability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
track_seats — Track seats on a flight
Advertised by the server during the last successful anonymous check.
Open-world

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.

track_seats input schema
{
  "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."
    }
  }
}
track_seats output schema
{
  "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
}
track_seats annotations
{
  "title": "Track seats on a flight",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_tracked_seats — List tracked seats
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_tracked_seats input schema
{
  "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."
    }
  }
}
list_tracked_seats output schema
{
  "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
}
list_tracked_seats annotations
{
  "title": "List tracked seats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
stop_tracking_seats — Stop tracking seats
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use to stop the seat alert on one flight (tracking_key from list_tracked_seats). Cannot be undone; confirm first.

stop_tracking_seats input schema
{
  "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."
    }
  }
}
stop_tracking_seats output schema
{
  "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
}
stop_tracking_seats annotations
{
  "title": "Stop tracking seats",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
add_flight_bucket_list — Add a flight bucket list
Advertised by the server during the last successful anonymous check.
Open-world

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.

add_flight_bucket_list input schema
{
  "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)."
    }
  }
}
add_flight_bucket_list output schema
{
  "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
}
add_flight_bucket_list annotations
{
  "title": "Add a flight bucket list",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
add_hotel_bucket_list — Add a hotel bucket list
Advertised by the server during the last successful anonymous check.
Open-world

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).

add_hotel_bucket_list input schema
{
  "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."
    }
  }
}
add_hotel_bucket_list output schema
{
  "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
}
add_hotel_bucket_list annotations
{
  "title": "Add a hotel bucket list",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_bucket_lists — List bucket lists
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_bucket_lists input schema
{
  "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."
    }
  }
}
list_bucket_lists output schema
{
  "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
}
list_bucket_lists annotations
{
  "title": "List bucket lists",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
watch_details — One watch in detail
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

watch_details input schema
{
  "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."
    }
  }
}
watch_details output schema
{
  "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
}
watch_details annotations
{
  "title": "One watch in detail",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_my_watches — Check every watch
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_my_watches input schema
{
  "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."
    }
  }
}
check_my_watches output schema
{
  "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
}
check_my_watches annotations
{
  "title": "Check every watch",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
remove_bucket_list — Remove a bucket list
Advertised by the server during the last successful anonymous check.
Advertised destructive

Use to stop a bucket list (bucket_id from list_bucket_lists). Cannot be undone; confirm first.

remove_bucket_list input schema
{
  "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."
    }
  }
}
remove_bucket_list output schema
{
  "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
}
remove_bucket_list annotations
{
  "title": "Remove a bucket list",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
hotel_price_calendar — Hotel price calendar
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

hotel_price_calendar input schema
{
  "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."
    }
  }
}
hotel_price_calendar output schema
{
  "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
}
hotel_price_calendar annotations
{
  "title": "Hotel price calendar",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
handoff_link — Link into SlickTrip
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

handoff_link input schema
{
  "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."
    }
  }
}
handoff_link output schema
{
  "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
}
handoff_link annotations
{
  "title": "Link into SlickTrip",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
update_flight_tracking — Update flight alert settings
Advertised by the server during the last successful anonymous check.

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.

update_flight_tracking input schema
{
  "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."
    }
  }
}
update_flight_tracking output schema
{
  "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
}
update_flight_tracking annotations
{
  "title": "Update flight alert settings",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_hotel_tracking — Update hotel alert settings
Advertised by the server during the last successful anonymous check.

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.

update_hotel_tracking input schema
{
  "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."
    }
  }
}
update_hotel_tracking output schema
{
  "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
}
update_hotel_tracking annotations
{
  "title": "Update hotel alert settings",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_seat_tracking — Update seat alert settings
Advertised by the server during the last successful anonymous check.

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.

update_seat_tracking input schema
{
  "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."
    }
  }
}
update_seat_tracking output schema
{
  "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
}
update_seat_tracking annotations
{
  "title": "Update seat alert settings",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_bucket_list — Update a bucket list
Advertised by the server during the last successful anonymous check.
Advertised destructive

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.

update_bucket_list input schema
{
  "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)."
    }
  }
}
update_bucket_list output schema
{
  "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
}
update_bucket_list annotations
{
  "title": "Update a bucket list",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
get_account — The SlickTrip account
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_account input schema
{
  "type": "object",
  "title": "get_accountArguments",
  "properties": {}
}
get_account output schema
{
  "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
}
get_account annotations
{
  "title": "The SlickTrip account",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
update_account — Update the account
Advertised by the server during the last successful anonymous check.

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.

update_account input schema
{
  "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."
    }
  }
}
update_account output schema
{
  "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
}
update_account annotations
{
  "title": "Update the account",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
share_link — Share a trip
Advertised by the server during the last successful anonymous check.
Open-world

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.

share_link input schema
{
  "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."
    }
  }
}
share_link output schema
{
  "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
}
share_link annotations
{
  "title": "Share a trip",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

5 advertised

cheapest_flights — Find the cheapest flights

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Everything the traveler is watching on SlickTrip.

No arguments advertised.

Resources

6 advertised

flights — SlickTrip flights widget

Advertised by the server during the last successful anonymous check.

Flight itineraries with prices, stops and times; watch a fare or open it on SlickTrip

flights URI
ui://widget/flights.html

MIME type: text/html;profile=mcp-app

hotels — SlickTrip hotels widget

Advertised by the server during the last successful anonymous check.

Hotels for a stay with price, stars and rating; watch a stay or open it on SlickTrip

hotels URI
ui://widget/hotels.html

MIME type: text/html;profile=mcp-app

calendar — SlickTrip calendar widget

Advertised by the server during the last successful anonymous check.

Price by date for a route or a hotel, cheapest days highlighted

calendar URI
ui://widget/calendar.html

MIME type: text/html;profile=mcp-app

seats — SlickTrip seats widget

Advertised by the server during the last successful anonymous check.

Open seats on a flight by row, with window / aisle / exit-row counts

seats URI
ui://widget/seats.html

MIME type: text/html;profile=mcp-app

list — SlickTrip list widget

Advertised by the server during the last successful anonymous check.

The account's watched fares, stays, seat alerts or bucket lists with current prices

list URI
ui://widget/list.html

MIME type: text/html;profile=mcp-app

status — SlickTrip status widget

Advertised by the server during the last successful anonymous check.

Confirmation of an alert that was set, changed or stopped

status URI
ui://widget/status.html

MIME type: text/html;profile=mcp-app

90-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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http slicktrip-mcp https://mcp.slicktrip.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add slicktrip-mcp --url https://mcp.slicktrip.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable slicktrip-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "slicktrip-mcp": {
      "url": "https://mcp.slicktrip.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "slicktrip-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.slicktrip.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start slicktrip-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "slicktrip-mcp": {
      "type": "http",
      "url": "https://mcp.slicktrip.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http slicktrip-mcp https://mcp.slicktrip.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.slicktrip.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing