Skip to content
Scrappa Get API key
Omio API 1 credit/request

Omio Route Page API Documentation

GET https://scrappa.co/api/omio/route-page

Omio Route Page API Documentation Read the public page of a route between two cities: the average rating with the number of reviews, review texts with the points guests liked or disliked, the price ladder by days before departure with the best booking time, sample departures with provider and price, and the route questions with answers. Prices are in minor units (cents). Reviewer names are not returned. Not every route has ratings, and bus pages often have none.

Omio Route Page API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/omio/route-page
Auth header
x-api-key
Cost
1 credit/request
origin = example destination = example
Response preview
200 OK
{
    "data": {
        "faq": [
            {
                "answer": "Train ticket prices from Berlin to Paris can vary. The cheapest ticket starts at $9 (\u20ac7), while the average price is around $103 (\u20ac86).",
                "question": "How much is a train ticket from Berlin to Paris?"
            },
            {
                "answer": "The train from Berlin to Paris takes 7h 21m and runs 32 per day.",
                "question": "How long is the train from Berlin to Paris?"
            },
            {
                "answer": "The first train from Berlin to Paris leaves at 12:02 AM.",
                "question": "What time does the first train from Berlin to Paris leave?"
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

2 required parameters needed before sending a request.

1 optional filter available.

origin string Required

Lowercase city slug of the departure city. Example: berlin.

Example value example
destination string Required

Lowercase city slug of the arrival city. Example: paris.

Example value example
mode string Optional

trains, buses or flights. Defaults to trains.

Example value example

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

data meta success
JSON Response
200 OK
{
    "data": {
        "faq": [
            {
                "answer": "Train ticket prices from Berlin to Paris can vary. The cheapest ticket starts at $9 (\u20ac7), while the average price is around $103 (\u20ac86).",
                "question": "How much is a train ticket from Berlin to Paris?"
            },
            {
                "answer": "The train from Berlin to Paris takes 7h 21m and runs 32 per day.",
                "question": "How long is the train from Berlin to Paris?"
            },
            {
                "answer": "The first train from Berlin to Paris leaves at 12:02 AM.",
                "question": "What time does the first train from Berlin to Paris leave?"
            }
        ],
        "mode": "trains",
        "origin": "berlin",
        "rating": {
            "value": 4.529411764705882,
            "review_count": 17
        },
        "reviews": [
            {
                "text": "All in all, a good train journey. Although there was a slight delay of about ten minutes, everything else was fine. The seat was comfortable, the compartment clean and pleasantly quiet. Wifi was available, although not particularly fast. The power socket worked. The staff were friendly but a little short-staffed. I would use the connection again, as the border crossing also worked without any problems. I can recommend it!",
                "rating": 4,
                "best_rating": 5,
                "published_at": null,
                "negative_notes": [
                    "small delay"
                ],
                "positive_notes": [
                    "Comfortable seats",
                    "clean",
                    "Equipment"
                ]
            },
            {
                "text": "My train journey from Berlin to Paris involved two changes, first in Hanover and then in Karlsruhe. The first section from Berlin to Hanover was relaxed. The seats were comfortable, the compartments clean and the quiet atmosphere made for a pleasant start. The changeover in Hanover went smoothly. The onward journey to Karlsruhe also went smoothly. The train staff were helpful and the wifi worked without interruption, so I was able to use the journey productively. Once I arrived in Karlsruhe, I changed trains for the second time before travelling on to Paris. Here too, the cleanliness and comfort of the train were impressive, and the wide range of seats made the long journey through France very pleasant. All connections were well coordinated, so that the journey remained relaxed overall. The entire route was characterised by reliability and comfort. Despite the two changes, the connection seemed well thought out and ensured a relaxed arrival in Paris. Everything ran on time",
                "rating": 5,
                "best_rating": 5,
                "published_at": null,
                "negative_notes": [],
                "positive_notes": [
                    "Comfort",
                    "Punctuality",
                    "Planning"
                ]
            },
            {
                "text": "The train journey from Berlin to Paris was a wonderful experience for me. As soon as I boarded, I had the feeling that everything was well organised. The carriages were clean, the seats were comfortable and I had enough space to stretch out and sit comfortably. The air conditioning in the train was suitable. The changing scenery en route made the journey particularly entertaining. I also noticed that the announcements were clear and helpful. Overall, everything went very smoothly, from departure to arrival. It was a journey I would do again.",
                "rating": 5,
                "best_rating": 5,
                "published_at": null,
                "negative_notes": [],
                "positive_notes": [
                    "Very nice view",
                    "Air conditioning",
                    "Clear announcements"
                ]
            }
        ],
        "departures": [
            {
                "type": "TrainTrip",
                "price": {
                    "currency": "EUR",
                    "amount_minor": 13000
                },
                "distance": "878 km",
                "provider": "Deutsche Bahn",
                "leg_count": 3,
                "arrival_time": "2026-10-21T09:50:00+02:00",
                "departure_time": "2026-10-21T00:08:00+02:00",
                "departure_station": "Berlin Hbf"
            },
            {
                "type": "TrainTrip",
                "price": {
                    "currency": "EUR",
                    "amount_minor": 13000
                },
                "distance": "878 km",
                "provider": "Deutsche Bahn",
                "leg_count": 3,
                "arrival_time": "2026-10-21T12:51:00+02:00",
                "departure_time": "2026-10-21T04:41:00+02:00",
                "departure_station": "Berlin Hbf"
            }
        ],
        "destination": "paris",
        "price_ladder": {
            "steps": [
                {
                    "amount_minor": 3800,
                    "days_before_departure": 91
                },
                {
                    "amount_minor": 3800,
                    "days_before_departure": 84
                },
                {
                    "amount_minor": 2800,
                    "days_before_departure": 77
                },
                {
                    "amount_minor": 3800,
                    "days_before_departure": 70
                },
                {
                    "amount_minor": 3800,
                    "days_before_departure": 63
                },
                {
                    "amount_minor": 3800,
                    "days_before_departure": 56
                }
            ],
            "currency": "EUR",
            "best_booking_days_before": 77
        }
    },
    "meta": {
        "billable": true,
        "endpoint_family": "route_page"
    },
    "success": true
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Validation Error

A required parameter is missing or invalid. This response is not billable.

{
    "errors": {
        "origin": [
            "An origin city slug is required, e.g. berlin."
        ]
    },
    "message": "The request validation failed"
}
404

Resource Not Found

The search, trip or route was not found or has expired. This response is not billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "route_page"
    },
    "error": {
        "code": "NOT_FOUND",
        "message": "The requested Omio resource was not found."
    },
    "success": false
}
503

Service Unavailable

Omio could not be reached, did not finish the search in time, or answered with an unexpected shape. This response is not billable.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "route_page"
    },
    "error": {
        "code": "UPSTREAM_UNAVAILABLE",
        "message": "The Omio API is temporarily unavailable. Please retry."
    },
    "success": false
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.