FlixBus API: Search bus trips
Finds dated FlixBus trip options between two cities, with stops, local times, availability and displayed per-person prices, including partner operators on some routes.
Unofficial. Not affiliated with or endorsed by FlixBus.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Date, required
date Local departure date (YYYY-MM-DD), for example 2026-10-15.
2026-11-12
- Adults optional
adults Number of adult travelers, for example 2.
1 (default)
Whole number from 1 to 9.
- Origin, required
origin Departure city, for example Berlin.
Berlin
- Currency optional
currency Three-letter fare currency, for example EUR.
EUR (default)
Exactly 3 characters.
- Destination, required
destination Arrival city, for example Prague.
Prague
- Max Results optional
max_results Maximum trips to return, for example 20.
20 (default)
Whole number from 1 to 50.
Input as JSON
{ "date": "2026-11-12", "origin": "Berlin", "destination": "Prague"}Output
{ "trips": [ { "bookable": true, "currency": "EUR", "operator": "FlixBus", "page_link": "https://shop.flixbus.com/search?departureCity=40d8f682-8646-11e6-9066-549f350fcb0c&arrivalCity=40de1ad1-8646-11e6-9066-549f350fcb0c&route=Berlin-Prague&rideDate=15.10.2026&adult=1&_locale=en_US&departureCountryCode=DE&arrivalCountryCode=CZ" , "transfers": 0, "seats_left": 2, "travel_time": "4h 25m", "arrival_stop": "Prague (Central Bus Station Florenc)", "arrival_time": "2026-10-15T04:40:00+02:00", "departure_stop": "Berlin Südkreuz", "departure_time": "2026-10-15T00:15:00+02:00", "arrival_stop_id": "dcbc6452-9603-11e6-9066-549f350fcb0c", "price_per_person": 23.48, "departure_stop_id": "dcbb994f-9603-11e6-9066-549f350fcb0c" }, { "bookable": true, "currency": "EUR", "operator": "FlixBus", "page_link": "https://shop.flixbus.com/search?departureCity=40d8f682-8646-11e6-9066-549f350fcb0c&arrivalCity=40de1ad1-8646-11e6-9066-549f350fcb0c&route=Berlin-Prague&rideDate=15.10.2026&adult=1&_locale=en_US&departureCountryCode=DE&arrivalCountryCode=CZ" , "transfers": 0, "seats_left": 2, "travel_time": "4h 45m", "arrival_stop": "Prague (Main Station)", "arrival_time": "2026-10-15T05:00:00+02:00", "departure_stop": "Berlin Südkreuz", "departure_time": "2026-10-15T00:15:00+02:00", "arrival_stop_id": "9b6adf77-3ecb-11ea-8017-02437075395e", "price_per_person": 23.48, "departure_stop_id": "dcbb994f-9603-11e6-9066-549f350fcb0c" }, { "bookable": true, "currency": "EUR", "operator": "FlixBus", "page_link": "https://shop.flixbus.com/search?departureCity=40d8f682-8646-11e6-9066-549f350fcb0c&arrivalCity=40de1ad1-8646-11e6-9066-549f350fcb0c&route=Berlin-Prague&rideDate=15.10.2026&adult=1&_locale=en_US&departureCountryCode=DE&arrivalCountryCode=CZ" , "transfers": 0, "seats_left": null, "travel_time": "5h 35m", "arrival_stop": "Prague (Central Bus Station Florenc)", "arrival_time": "2026-10-15T08:00:00+02:00", "departure_stop": "Berlin central bus station", "departure_time": "2026-10-15T02:25:00+02:00", "arrival_stop_id": "dcbc6452-9603-11e6-9066-549f350fcb0c", "price_per_person": 19.48, "departure_stop_id": "dcbaaee6-9603-11e6-9066-549f350fcb0c" } ], "search_link": "https://shop.flixbus.com/search?departureCity=40d8f682-8646-11e6-9066-549f350fcb0c&arrivalCity=40de1ad1-8646-11e6-9066-549f350fcb0c&route=Berlin-Prague&rideDate=15.10.2026&adult=1&_locale=en_US&departureCountryCode=DE&arrivalCountryCode=CZ" , "origin_city_id": "40d8f682-8646-11e6-9066-549f350fcb0c", "destination_city_id": "40de1ad1-8646-11e6-9066-549f350fcb0c"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"flixbus.com/search_bus_trips","input":{"date":"2026-11-12","origin":"Berlin","destination":"Prague"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "flixbus.com/search_bus_trips" , "input": { "date": "2026-11-12", "origin": "Berlin", "destination": "Prague" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "flixbus.com/search_bus_trips" , "input": { "date": "2026-11-12", "origin": "Berlin", "destination": "Prague" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run flixbus.com/search_bus_trips# with {"date":"2026-11-12","origin":"Berlin","destination":"Prague"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "origin", "destination", "date" ], "properties": { "date": { "type": "string", "description": "Local departure date (YYYY-MM-DD), for example 2026-10-15." }, "adults": { "type": "integer", "default": 1, "maximum": 9, "minimum": 1, "description": "Number of adult travelers, for example 2." }, "origin": { "type": "string", "minLength": 1, "description": "Departure city, for example Berlin." }, "currency": { "type": "string", "default": "EUR", "maxLength": 3, "minLength": 3, "description": "Three-letter fare currency, for example EUR." }, "destination": { "type": "string", "minLength": 1, "description": "Arrival city, for example Prague." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Maximum trips to return, for example 20." } }}Output schema
{ "type": "object", "required": [ "search_link", "origin_city_id", "destination_city_id", "trips" ], "properties": { "trips": { "type": "array", "items": { "type": "object", "required": [ "departure_stop", "arrival_stop", "departure_time", "arrival_time", "travel_time", "transfers", "operator", "price_per_person", "currency", "seats_left", "bookable", "page_link", "departure_stop_id", "arrival_stop_id" ], "properties": { "bookable": { "type": "boolean" }, "currency": { "type": "string" }, "operator": { "type": "string" }, "page_link": { "type": "string" }, "transfers": { "type": "integer" }, "seats_left": { "type": [ "integer", "null" ], "description": "Seats left at this price when shown." }, "travel_time": { "type": "string" }, "arrival_stop": { "type": [ "string", "null" ] }, "arrival_time": { "type": "string", "description": "Local ISO 8601 arrival time with offset." }, "departure_stop": { "type": [ "string", "null" ] }, "departure_time": { "type": "string", "description": "Local ISO 8601 departure time with offset." }, "arrival_stop_id": { "type": [ "string", "null" ], "x-fous-developer": true }, "price_per_person": { "type": [ "number", "null" ] }, "departure_stop_id": { "type": [ "string", "null" ], "x-fous-developer": true } }, "additionalProperties": false } }, "search_link": { "type": "string" }, "origin_city_id": { "type": "string", "x-fous-developer": true }, "destination_city_id": { "type": "string", "x-fous-developer": true } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
flixbus.com/search_bus_trips- Returns
- trips with stops, times, travel time, transfers, operator, price per person, seats left, bookable, search link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method flixbus.com/search_bus_trips with the inputs above.
Ask your agent
- Find bus trips from Munich to Vienna on 2026-11-03 for 2 adults, prices in EUR
- What FlixBus departures are there from Amsterdam to Brussels on March 14, 2026? I need seats left and travel times.
- Bus options Paris to Lyon on 2026-07-22 for 3 people, show me prices per person and whether there are transfers
- Check flixbus.com for buses from New York to Boston on 2026-09-05, prices in USD, top 10 results
- I need to get from Milan to Zurich by coach on 2026-12-18 — list departures, arrival times, operator and if they're still bookable, priced in CHF
See more
Finds priced flights between two cities or airports on Trip.com for the chosen dates, cheapest first; round trips pair each outbound flight with its available returns.
trip.com/search_flightsFinds Expedia flights between cities or airports on selected dates, with per-traveler USD prices. Round trips combine outbound and return choices; for round trips only the cheapest outbound choices are paired with their returns.
expedia.com/search_flightsFinds Google Flights options for a route and date with prices, local times, stops and emissions. Round-trip searches list outbound choices with their displayed round-trip fares.
google.com/search_flightsFinds hotels in a city on Trip.com for given dates, with prices, guest ratings, reviews and booking links. Only the initial public listing is read, so large limits may return fewer hotels.
trip.com/search_hotelsLists cheap round-trip destinations from a city on Google Travel Explore, sorted by fare, optionally within a region, travel month, trip length and nonstop only. Links search Google Flights for the shown dates.
google.com/list_cheap_destinationsFinds the lowest Google Flights fare for each departure date in a month between two places, for one-way trips or a fixed trip length, with the cheapest option and any price insight shown.
google.com/get_cheapest_datesFinds tours and experiences in a city on Viator, with optional keywords, date, currency and sorting. Prices are starting prices.
viator.com/search_toursSearches public Airbnb homes for a destination and travel dates. Each stay comes with its price, rating, room details and listing link. Prices are the displayed trip totals, including fees.
airbnb.com/search_stays