{"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}