Find RegioJet train and bus connections with prices.
Searches RegioJet's trains and buses between two cities (Czechia, Slovakia, Austria, Hungary, Poland, Germany and more) on a date: departure and arrival times, stations, travel time, transfers, train or bus, the price range for one adult in your currency, free seats and whether it can be booked, with a link to the search on regiojet.cz.
- Site
- RegioJet, Czechia
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 9da1df4dcd61…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Find RegioJet train and bus connections with prices.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "regiojet.cz/search-connections", "params": { "date": "2026-12-10", "from": "Prague", "to": "Brno" } } }
Requests
sent from your browser, in order- 1GETbrn-ybus-pubapi.sa.cz/restapi/consts/locationsRegioJet's public REST API on brn-ybus-pubapi.sa.cz (RegioJet / Student Agency's own API; regiojet.cz calls it cross-origin, CORS allows regiojet.cz): the list of countries, cities (with aliases in several languages) and stations, used to find the two city ids and to name the stations.
- 2GETbrn-ybus-pubapi.sa.cz/restapi/routes/search/simple?departureDate&fromLocationId&fromLocationType&tariffs&toLocationId&toLocationTypeThe route search the site makes (routes/search/simple, adult REGULAR tariff), with the city ids resolved in the one-item foreach (case-insensitive name or alias).
Parameters
from your agentReturns
to your agentWhere it can send
- brn-ybus-pubapi.sa.cz
Anything else is blocked by the extension.
Reads from your session
Nothing. Your browser attaches the site's cookies by itself.
Used only in requests to the addresses on the left. Never sent to wield.run or your agent.
Checks
a run passes when- length(output.connections) > `10`
- output.from == 'Prague'
- output.to == 'Brno'
- length(output.connections[?starts_with(departure, '2026-12-10') && price_from > `0` && duration_min > `90` && duration_min < `400`]) == length(output.connections)
- length(output.connections[?from_station != `null` && to_station != `null`]) == length(output.connections)
- output.message == `null`
Raw recipe
Served as canonical JSON from /api/v1/recipes/regiojet.cz/search-connections, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/regiojet.cz/search-connections | shasum -a 256 # 9da1df4dcd61643c74fa4d7b6908f1e8f449c473021645d62420e150eed63269
{ "description": "Searches RegioJet's trains and buses between two cities (Czechia, Slovakia, Austria, Hungary, Poland, Germany and more) on a date: departure and arrival times, stations, travel time, transfers, train or bus, the price range for one adult in your currency, free seats and whether it can be booked, with a link to the search on regiojet.cz.", "effect": "read", "id": "regiojet.cz/search-connections", "keywords": [ "regiojet", "vlak", "autobus", "jízdenky", "spojení", "praha", "brno", "bratislava", "vienna", "wien", "budapest", "kraków", "train", "bus", "tickets", "czech", "cheap train", "student agency" ], "output": { "schema": { "properties": { "connections": { "items": { "properties": { "arrival": { "type": "string" }, "bookable": { "type": "boolean" }, "departure": { "description": "ISO 8601 with offset", "type": "string" }, "duration_min": { "type": [ "integer", "null" ] }, "free_seats": { "type": [ "integer", "null" ] }, "from_station": { "type": [ "string", "null" ] }, "price_from": { "description": "Cheapest fare for one adult", "type": [ "number", "null" ] }, "price_to": { "type": [ "number", "null" ] }, "to_station": { "type": [ "string", "null" ] }, "transfers": { "type": "integer" }, "url": { "type": "string" }, "vehicles": { "description": "TRAIN, BUS", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "type": "array" }, "currency": { "type": "string" }, "date": { "type": "string" }, "from": { "type": [ "string", "null" ] }, "message": { "description": "Set when a city name is not found", "type": [ "string", "null" ] }, "to": { "type": [ "string", "null" ] } }, "required": [ "from", "to", "connections" ], "type": "object" }, "value": "let $st = steps.locations.stations, $cur = params.currency || 'EUR', $date = params.date, $f = steps.search[0].f || `null` in let $base = join('', ['https://regiojet.cz/?tariffs=REGULAR&fromLocationType=CITY&fromLocationId=', to_string($f.from.id || ''), '&toLocationType=CITY&toLocationId=', to_string($f.to.id || ''), '&departureDate=', $date]) in {from: $f.from.name || params.from, to: $f.to.name || params.to, date: $date, currency: $cur, message: $f == `null` && 'No RegioJet city matches the from or to name (use the city name, e.g. Prague, Praha, Brno, Vienna)' || `null`, connections: map(&(let $r = @ in let $t = split($r.travelTime || '00:00', ':') in {departure: $r.departureTime, arrival: $r.arrivalTime, from_station: ($st[?id == $r.departureStationId] | [0].name) || `null`, to_station: ($st[?id == $r.arrivalStationId] | [0].name) || `null`, duration_min: (length($t) == `2` && (`60` * (to_number(join('', ['1', $t[0]])) - `100`) + (to_number(join('', ['1', $t[1][0:2]])) - `100`))) || `null`, transfers: $r.transfersCount, vehicles: $r.vehicleTypes, price_from: $r.priceFrom || `null`, price_to: $r.priceTo || `null`, free_seats: $r.freeSeatsCount, bookable: $r.bookable == `true`, url: $base}), steps.search[0].routes || `[]`)}" }, "params": { "additionalProperties": false, "properties": { "currency": { "default": "EUR", "enum": [ "EUR", "CZK", "PLN", "HUF", "UAH" ], "type": "string" }, "date": { "description": "Departure date YYYY-MM-DD", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, "from": { "description": "City as RegioJet names it (English or local name), e.g. 'Prague', 'Praha', 'Brno', 'Vienna', 'Bratislava', 'Kraków'", "maxLength": 60, "minLength": 2, "type": "string" }, "to": { "maxLength": 60, "minLength": 2, "type": "string" } }, "required": [ "from", "to", "date" ], "type": "object" }, "provenance": { "method": "browser-inspect", "notes": "regiojet.cz's booking app calls RegioJet's public REST API at https://brn-ybus-pubapi.sa.cz/restapi (RegioJet is part of the Student Agency group; sa.cz is its API domain). /consts/locations lists countries → cities (id, name, multilingual aliases) → stations (id, fullname); /routes/search/simple?tariffs=REGULAR&fromLocationType=CITY&fromLocationId&toLocationType=CITY&toLocationId&departureDate returns routes with ISO times, travelTime 'HH:MM h', transfersCount, vehicleTypes, priceFrom/priceTo in the X-Currency currency, freeSeatsCount and bookable. No key or cookie; CORS allows https://regiojet.cz. robots.txt of regiojet.cz has no disallow rules and no rules for Claude-User or anthropic agents; the API host has no robots.txt (404). travelTime is 'HH:MM\\u00a0h' (non-breaking space), parsed as hours and the first two minute digits. Answers servers.", "recorded_at": "2026-11-07T22:40:00+01:00", "recorded_by": "C4" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "CZ", "id": "regiojet.cz", "language": "en", "name": "RegioJet", "origin": "https://regiojet.cz", "origins": [ "https://brn-ybus-pubapi.sa.cz" ] }, "steps": [ { "description": "RegioJet's public REST API on brn-ybus-pubapi.sa.cz (RegioJet / Student Agency's own API; regiojet.cz calls it cross-origin, CORS allows regiojet.cz): the list of countries, cities (with aliases in several languages) and stations, used to find the two city ids and to name the stations.", "expect": { "assert": "length(body) > `0`", "content_type": "json", "status": [ 200 ] }, "extract": { "json": { "cities": "[].cities[].{id: id, name: name, aliases: aliases || `[]`}", "stations": "[].cities[].stations[].{id: id, name: fullname}" } }, "id": "locations", "request": { "credentials": "omit", "headers": { "Accept": "application/json", "X-Lang": "en" }, "method": "GET", "url": "https://brn-ybus-pubapi.sa.cz/restapi/consts/locations" } }, { "description": "The route search the site makes (routes/search/simple, adult REGULAR tariff), with the city ids resolved in the one-item foreach (case-insensitive name or alias).", "expect": { "assert": "body.routes != `null`", "content_type": "json", "status": [ 200 ] }, "extract": { "json": { "routes": "routes" } }, "foreach": { "as": "f", "in": "[{from: (let $q = lower(trim(params.from)) in steps.locations.cities[?lower(name) == $q || length(aliases[?lower(@) == $q]) > `0`] | [0]), to: (let $q = lower(trim(params.to)) in steps.locations.cities[?lower(name) == $q || length(aliases[?lower(@) == $q]) > `0`] | [0])}]", "max": 1 }, "id": "search", "request": { "credentials": "omit", "headers": { "Accept": "application/json", "X-Currency": "{{params.currency}}", "X-Lang": "en" }, "method": "GET", "query": { "departureDate": "{{params.date}}", "fromLocationId": "{{f.from.id}}", "fromLocationType": "CITY", "tariffs": "REGULAR", "toLocationId": "{{f.to.id}}", "toLocationType": "CITY" }, "url": "https://brn-ybus-pubapi.sa.cz/restapi/routes/search/simple" }, "when": "(let $q = lower(trim(params.from)) in steps.locations.cities[?lower(name) == $q || length(aliases[?lower(@) == $q]) > `0`] | [0]) && (let $q = lower(trim(params.to)) in steps.locations.cities[?lower(name) == $q || length(aliases[?lower(@) == $q]) > `0`] | [0])" } ], "task": "Find RegioJet train and bus connections with prices", "tos": { "notes": "robots.txt of regiojet.cz has no AI-agent rules (no Claude-User, ClaudeBot or anthropic-ai group, no Content-Signal); the API host has no robots.txt. Terms not reviewed yet for automated access. One person's search: 2 requests (the locations list and one route search), as the booking app makes them. Booking stays on regiojet.cz.", "reviewed": false }, "verify": { "checks": [ "length(output.connections) > `10`", "output.from == 'Prague'", "output.to == 'Brno'", "length(output.connections[?starts_with(departure, '2026-12-10') && price_from > `0` && duration_min > `90` && duration_min < `400`]) == length(output.connections)", "length(output.connections[?from_station != `null` && to_station != `null`]) == length(output.connections)", "output.message == `null`" ], "example_params": { "date": "2026-12-10", "from": "Prague", "to": "Brno" }, "max_ms": 6000 }, "version": 1 }