omio.com APIomio.com ↗
Search and compare train, bus, flight, and ferry tickets across Europe via the Omio API. Get trip details, fare classes, and date-range pricing in structured JSON.
curl -X GET 'https://api.parse.bot/scraper/b6eb475f-3bd9-47ad-b7bc-66a60f5e53ce/search_location_autocomplete?query=Berlin' \ -H 'X-API-Key: $PARSE_API_KEY'
Get autocomplete suggestions for locations based on a search term. Returns hierarchical results with cities and their child stations.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search term for location autocomplete (e.g. 'Berlin', 'Munich', 'Paris') |
{
"type": "object",
"fields": {
"data": "array of location objects with positionId, displayName, countryCode, type, and children (sub-stations)",
"status": "string, always 'success'"
},
"sample": {
"data": [
{
"type": "location",
"children": [
{
"type": "station",
"positionId": 334196,
"displayName": "Berlin Hbf"
}
],
"positionId": 376217,
"countryCode": "DE",
"displayName": "Berlin"
}
],
"status": "success"
}
}About the omio.com API
The Omio API exposes 6 endpoints for searching and comparing ground, air, and sea transport across European routes. Starting with search_location_autocomplete to resolve city and station IDs, you can run a full trip search via search_trips, retrieve fare classes and cancellation policies through get_trip_details, and scan cheapest prices across a date range with get_price_by_date — all returning structured JSON.
Location Resolution and Route Discovery
search_location_autocomplete accepts a plain-text query and returns an array of location objects, each with a positionId, displayName, countryCode, type, and a children array of sub-stations. These positionId values are required inputs for every other endpoint. get_popular_destinations takes a single position_id and returns destination objects that include population and nested popularDestinations, useful for surfacing common routes from a given city.
Trip Search and Session Management
search_trips requires origin_id, destination_id, and departure_date (accepted as YYYY-MM-DD or DD/MM/YYYY). An optional travel_mode parameter accepts a comma-separated list of train, bus, flight, and/or ferry to narrow results. The response includes a trips array and a search_id string. That search_id can be passed to get_search_results to retrieve the same session's results again, but sessions expire quickly — treat the search_id as short-lived. Each trip object in the trips array carries journeyId and outboundId fields needed downstream.
Trip Details and Fare Data
get_trip_details requires trip_id (the journeyId), outbound_id (the outboundId), and a valid search_id from a recent search_trips call. The response includes overview, journeys, segments, ticketOptions, and cancellation policies. This is where fare class distinctions and ticket conditions live. A separate travel_mode filter can be supplied here as well.
Date-Range Pricing
get_price_by_date accepts from_id, to_id, start_date, and end_date, all in YYYY-MM-DD format. The response is a date-keyed object where each date entry carries priceCents and numberOfResults broken down by transport mode. This makes it straightforward to identify the cheapest travel days across a window without running individual search_trips calls for each date.
- Build a flexible-date fare calendar showing the cheapest train or bus prices across a month using
get_price_by_date - Display autocomplete location suggestions as users type a city name, resolving station-level
positionIdvalues for accurate searches - Compare train vs. bus vs. flight options on a single route by filtering
search_tripsresults with thetravel_modeparameter - Show fare class and cancellation policy details per ticket using
get_trip_detailsresponse fields liketicketOptionsand cancellation policies - Populate a route inspiration page using
get_popular_destinationsto surface common city pairs from a given origin - Aggregate multi-modal journey segments to display layover times and carrier names from the
segmentsarray inget_trip_details - Monitor price fluctuations on a specific European corridor by querying
get_price_by_dateat regular intervals
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Omio have an official developer API?+
What does `get_trip_details` return beyond what `search_trips` shows?+
get_trip_details returns the full ticket breakdown including ticketOptions, individual segments with carrier and timing data, and cancellation policy terms. The search_trips result gives trip-level summaries and the journeyId/outboundId identifiers you need to call get_trip_details, but fare conditions and segment-level detail only appear in the details response.How quickly do search sessions expire?+
search_id expire quickly after the initial search_trips call. Both get_search_results and get_trip_details require a search_id from a recent search. In practice, you should call get_trip_details in the same workflow as search_trips rather than storing search_id values for later reuse.Does the API support return or multi-city trip searches?+
search_trips covers one-way searches between a single origin and destination pair for a single departure date. You can fork this API on Parse and revise it to add a return-leg or multi-city search endpoint.Does the API return seat availability or real-time inventory counts?+
numberOfResults counts per transport mode, but does not expose seat-level availability figures. You can fork this API on Parse and revise it to surface inventory fields if they become accessible on the route.