Omio API

Omio API for Train, Bus and Flight Search, Prices, Carriers, and Route Ratings in Europe

Scrappa's Omio API returns structured JSON from Omio, the European travel comparison site. Find cities, stations and airports, search train, bus and flight trips for a route and date with prices, carriers, durations, changes and every leg, read the cheapest price per day and mode, open one trip, list carriers and discount cards, and read route ratings and reviews. Prices are integer minor units with a currency. Scrappa is an independent service and is not affiliated with Omio.

500 free credits
No card needed
From $0.20 / 1k
Pay as you go
Structured JSON
Ready for apps
API key access
Test in minutes
6
Endpoints
3
Travel modes
$0.20
Per 1k requests

Try it now

Make one request. Inspect structured JSON.

Use the first endpoint in this API family with a Scrappa API key. Every account includes 500 free monthly credits, so you can validate the response shape before buying credits.

Request preview
Request
curl -X GET "https://scrappa.co/api/omio/search?origin_id=376217&destination_id=379727&date=2027-03-14&adults=1&sort=price&limit=1" \
  -H "Accept: application/json" \
  -H "X-API-KEY: YOUR_API_KEY"
JSON response
{
  "success": true,
  "data": {
    "origin_id": 376217,
    "destination_id": 379727,
    "date": "2026-11-14",
    "passengers": {
      "adults": 1,
      "children": 0,
      "infants": 0
    },
    "currency": "EUR",
    "sort": "price",
    "sort_source": "client",
    "results_count": 8,
    "results_per_mode": {
      "train": 1,
      "bus": 3,
      "flight": 4
    },
    "price_floor_per_mode": {
      "bus": {
        "amount_minor": 5200,
        "currency": "EUR"
      },
      "flight": {
        "amount_minor": 15300,
        "currency": "EUR"
      },
      "train": {
        "amount_minor": 12000,
        "currency": "EUR"
      }
    },
    "pagination": {
      "page": 1,
      "page_size": 2,
      "total": 8,
      "has_more": true
    },
    "search_meta": {
      "search_id": "EEEEB9FDC8C6C4EA495BBAAB911D3E2D8",
      "upstream_calls": 2,
      "poll_count": 1,
      "modes_requested": [
        "train",
        "bus",
        "flight"
      ],
      "modes_done": [
        "flight",
        "bus",
        "train"
      ]
    },
    "results": [
      {
        "trip_id": "5607700354612381189-1045-bus-1",
        "journey_id": "26271589",
        "outbound_id": "5607700354612381189",
        "mode": "bus",
        "provider": {
          "id": 1045,
          "name": "FlixBus",
          "code": "meinfernbus_flixbus",
          "logo_url": "https://static.omio.design/web/logos/31/meinfernbus_flixbus.png",
          "toc_codes": [],
          "iata_codes": []
        },
        "price": {
          "amount_minor": 5600,
          "currency": "EUR"
        },
        "original_price": null,
        "duration_minutes": 983,
        "stops": 1,
        "departure_time": "2026-11-14T09:57:00.000+01:00",
        "arrival_time": "2026-11-15T02:20:00.000+01:00",
        "departure": {
          "position_id": 334196,
          "name": "Berlin Hbf",
          "city": "Berlin",
          "type": "station",
          "country_code": "DE",
          "iata_code": null,
          "latitude": 52.525102698597905,
          "longitude": 13.369429982803336
        },
        "arrival": {
          "position_id": 16834868,
          "name": "Paris, Quai de Bercy (Bercy Seine)",
          "city": "Paris",
          "type": "busstation",
          "country_code": "FR",
          "iata_code": null,
          "latitude": 48.83632528252408,
          "longitude": 2.3793135252719426
        },
        "legs": [
          {
            "index": 0,
            "mode": "train",
            "company": "FlixTrain",
            "marketing_company": null,
            "line_number": "FlixTrain",
            "class": null,
            "departure_time": "2026-11-14T09:57:00.000+01:00",
            "arrival_time": "2026-11-14T15:29:00.000+01:00",
            "duration_minutes": 332,
            "departure_zone": "Europe/Berlin",
            "arrival_zone": "Europe/Berlin",
            "no_change_for_next_segment": false,
            "tags": []
          }
        ],
        "changes": [
          {
            "after_leg": 0,
            "type": "transfer",
            "duration_minutes": 136,
            "from_position_id": 16904720,
            "to_position_id": 16904720
          }
        ],
        "offers": [
          {
            "type": "ONE_WAY",
            "class": null,
            "price": {
              "amount_minor": 5600,
              "currency": "EUR"
            },
            "discount_cards": [],
            "availability_rank": 99,
            "is_available": true,
            "unavailability_reasons": []
          }
        ],
        "tickets_left": null,
        "is_bookable": true,
        "is_split_ticket": false,
        "is_routed_connection": false,
        "selling_companies": [
          "FlixBus"
        ],
        "service_providers": [
          "Flixbus"
        ]
      }
    ]
  },
  "meta": {
    "endpoint_family": "trip_search",
    "billable": true
  }
}

What you can build

Structured data for real applications. Here are some ideas.

Multimodal Price Comparison

Compare train, bus and flight prices, durations and changes for the same route and date in one call.

Cheapest Day Finder

Read the cheapest price per day and mode for a date range to pick the best day to travel.

Travel Search Features

Add place autocomplete and trip results with carriers and legs to your own travel app.

Route Analysis

Measure how many trips, carriers and which price floor each mode has on a route.

Carrier Monitoring

See which carriers run a route and how their cheapest fares differ by mode.

Omio scraper API

Omio API for train, bus and flight search, prices, and routes

The Omio API is built for travel price comparison, route research and travel app features. Search trips between two places on a date and get the carrier, price, duration, stops and every leg of each trip, then open one trip, read the cheapest price per day, or check the rating of a route.

Find place ids for cities, stations and airports with the places endpoint.

Search trips by train, bus and flight in one call, with up to 100 trips per page.

Sort by price, duration, departure, arrival or smart order, and filter by travel mode.

Read prices as integer minor units with a currency, never as floats.

Open a trip by id for its legs, line numbers, classes, changes and fare offers.

Choose the right Omio API endpoint

Use Places for ids

Search a city, station or airport by name and take its position_id as origin_id or destination_id.

Open Omio Places API docs

Use Trip Search for coverage

Pass both ids and a date to get trips of all modes with price, carrier, duration and legs, sorted and paged by Scrappa.

Open Omio Trip Search API docs

Use Price Summary for the best day

Pass a date range to read the cheapest price per day and mode, with an optional calendar minimum.

Open Omio Price Summary API docs

Available endpoints

Everything you need in one API.

Scrappa vs ScrapingBee / ScraperAPI

See how Scrappa compares to the official API.

Omio trip data as JSON
Scrappa:
ScrapingBee / ScraperAPI: Build your own parser
Train, bus and flight in one search
Scrappa:
ScrapingBee / ScraperAPI:
Trip detail with legs and changes
Scrappa:
ScrapingBee / ScraperAPI:
Price per 1k requests
Scrappa: From $0.20
ScrapingBee / ScraperAPI: Varies by credits per request
Unified API key
Scrappa: Yes (80+ APIs)
ScrapingBee / ScraperAPI: Scraping only
Free tier
Scrappa: 500 credits/month
ScrapingBee / ScraperAPI: Trial credits

Key features

Place autocomplete for cities, stations and airports with ids for every other endpoint
Train, bus and flight trips in one search with price, carrier, duration and changes
Every leg with line number, class, zones and the change between legs
Sorting by price, duration, departure, arrival or smart order, and a travel mode filter
Cheapest price per day and mode for a date range, with a price calendar
Route ratings, review texts and a booking price ladder per city pair

Frequently asked questions

No. Scrappa is an independent service and is not affiliated with or endorsed by Omio. The Omio API returns structured JSON from public data through a Scrappa API key.

Every Scrappa account includes 500 free credits each month. After that, each request costs one credit, which works out to $0.20 to $0.30 per 1,000 requests depending on the credit pack or plan. Failed requests are never charged.

Every price is an integer in minor units (cents) with its currency, for example 13300 and EUR for 133.00 EUR. Choose the currency with the currency parameter.

The order that Omio returns is not strictly sorted by price or duration. Scrappa sorts the full result set itself and reports sort_source as client. Departure and arrival use the Omio order.

About two hours. The trip endpoint uses the search_id of a search response. After that the search has expired and you get a not found answer, which is not charged.

No. Empty answers, pages past the end, expired searches and every upstream failure are free.

Start using the Omio API

Sign up and get 500 free credits. No credit card required.