# ÖBB Train Ticket and Connection Scraper (`jindrich.bar/oebb-ticket-scraper`) Actor

Scrape live Austrian Federal Railways train connections, schedules, ticket prices, transfers, delays, and fares across Austria and Europe. Extract structured ÖBB timetable data for travel apps, price monitoring, analytics, and AI agents.

- **URL**: https://apify.com/jindrich.bar/oebb-ticket-scraper.md
- **Developed by:** [Jindřich Bär](https://apify.com/jindrich.bar) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 trips

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ÖBB train tickets & connections scraper

Search ÖBB (Austrian Railways) train connections and ticket prices across Austria and neighbouring
countries, and get back a structured dataset of routes, times, transfers, and fares — ready to plug
into spreadsheets, databases, dashboards, or AI agents.

Pulls live data from the official ÖBB ticket shop ([shop.oebbtickets.at](https://shop.oebbtickets.at/de/ticket/timetable)),
so you always get the same trains, prices, and schedules a passenger would see when booking online.

### What you can do with it

- **Compare ticket prices** between stations in real time — Wien to Salzburg, Graz to Innsbruck,
  Linz to Wien, and any other route the ÖBB timetable covers (including cross-border Railjet, EuroCity,
  and Nightjet services to Prague, Munich, Zürich, Budapest, and beyond).
- **Find direct trains** with the `direct` option, or restrict results to regional trains only.
- **Filter for accessibility and bikes** — request only wheelchair-accessible journeys or connections
  with bicycle carriage.
- **Monitor fares over time** by scheduling the actor to run daily / hourly and writing the results to
  your own datastore.
- **Build a travel-planning assistant** — feed the JSON output directly into an LLM agent that answers
  "what's the cheapest train from Wien to Salzburg on date Z" or "is there a direct Railjet from Wien
  to Graz tomorrow morning."

Typical use cases: travel comparison sites, price-monitoring tools, business-trip planners, train
spotters, journalists working on transport coverage, and AI agents that need a structured rail-data
source for Austria and Central Europe.

### Input

| Field | Required | Default | Description |
| --- | --- | --- | --- |
| `from` | yes | — | Departure station (e.g. `"Wien Hbf"`, `"Salzburg Hbf"`, `"Praha hl.n."`) |
| `to` | yes | — | Destination station |
| `date` | no | today | Departure date (date picker, ISO `YYYY-MM-DD`) |
| `time` | no | now | Departure time (`HH:MM`, 24-hour, Vienna local time) |
| `adults` | no | `1` | Number of adult passengers (1–6) |
| `direct` | no | `false` | Only return direct connections (no transfers) |
| `regionalTrainsOnly` | no | `false` | Restrict results to regional trains (exclude long-distance RJ/EC/NJ) |
| `bikeCarriage` | no | `false` | Only return journeys where bicycle carriage is available |
| `wheelchair` | no | `false` | Only return wheelchair-accessible journeys |
| `sortBy` | no | `DEPARTURE` | Order results by `DEPARTURE`, `ARRIVAL`, or `DURATION` |
| `maxResults` | no | `20` | Maximum number of connections to push to the dataset (1–200) |

Station names are matched against the official ÖBB station list — local accents, German umlauts, and
foreign-station names are all supported. The actor automatically paginates forward in time, so you
reliably get the requested number of connections.

#### Example input

```json
{
    "from": "Wien Hbf",
    "to": "Salzburg Hbf",
    "date": "2026-06-15",
    "time": "08:00",
    "adults": 1,
    "direct": true,
    "sortBy": "DEPARTURE",
    "maxResults": 25
}
````

### Output

Each item in the dataset describes one train connection.

#### Example item

```json
{
    "id": "ca8d20e4b00038a3f8584c5626018b8f…",
    "from": "Wien Hbf",
    "to": "Salzburg Hbf",
    "fromId": "1290401",
    "toId": "8100002",
    "departure": "2026-06-15T08:30:00.000",
    "arrival": "2026-06-15T11:22:00.000",
    "durationMinutes": 172,
    "transfers": 0,
    "priceAmount": 32.4,
    "priceCurrency": "EUR",
    "priceCoversFullJourney": true,
    "priceCoverage": null,
    "legs": [
        {
            "tripId": null,
            "line": "RJX 162",
            "direction": "Bregenz",
            "from": "Wien Hbf",
            "to": "Salzburg Hbf",
            "fromId": "1290401",
            "toId": "8100002",
            "departure": "2026-06-15T08:30:00.000",
            "arrival": "2026-06-15T11:22:00.000",
            "departurePlatform": "11",
            "arrivalPlatform": "5",
            "departureDelayMinutes": null,
            "arrivalDelayMinutes": null,
            "durationMinutes": 172,
            "walking": false
        }
    ]
}
```

#### Field reference

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Stable identifier for the journey |
| `from` / `to` | string | Station names |
| `fromId` / `toId` | string | ÖBB station IDs |
| `departure` / `arrival` | ISO 8601 datetime | Scheduled time in Vienna local time |
| `durationMinutes` | integer | Total travel time |
| `transfers` | integer | Number of transfers (0 = direct) |
| `priceAmount` | number or `null` | Cheapest 2nd-class fare in `priceCurrency`. Null when no bookable offer is available. **May cover only part of the journey** — see `priceCoversFullJourney` |
| `priceCurrency` | string or `null` | ISO 4217 (`"EUR"`) |
| `priceCoversFullJourney` | boolean | `true` when `priceAmount` covers the whole origin → destination journey; `false` for a partial fare (or when there's no price) |
| `priceCoverage` | array or `null` | When the price covers only part of the journey, the station range(s) the fare actually covers (e.g. `[{ "from": "Wien Hbf", "to": "Trieste Centrale" }]`); `null` when the price covers the whole journey |
| `legs[]` | array | Per-leg breakdown: line name (RJX, RJ, EC, NJ, REX, …), direction, departure/arrival, platforms, walking transfers |

`priceAmount` is `null` on journeys where ÖBB doesn't sell a through-ticket (e.g. some cross-border
or operator-only fares). Walking legs between platforms or stations are included in `legs[]` with
`walking: true`.

#### Partial prices on cross-border routes

ÖBB can't always sell a single through-ticket for an entire international journey — some legs are
operated by partners (e.g. Italian regional trains, Nightjet sections) that aren't bookable through
the ÖBB shop. In those cases the returned `priceAmount` covers **only the portion ÖBB can ticket**,
not the whole trip.

When this happens, `priceCoversFullJourney` is `false` and `priceCoverage` tells you exactly which
segment the price applies to. For example, a Praha → Trieste Centrale search may return:

```json
{
    "priceAmount": 109.1,
    "priceCurrency": "EUR",
    "priceCoversFullJourney": false,
    "priceCoverage": [{ "from": "Wien Hbf", "to": "Trieste Centrale" }]
}
```

Here €109.10 only covers Wien → Trieste; the Praha → Wien leg must be bought separately. Only treat
`priceAmount` as the full-journey fare when `priceCoversFullJourney` is `true`.

### Pricing

Pay-per-event — one `search-result` event is charged for each connection pushed to the dataset. That
means a query with `maxResults: 10` charges for at most ten events, regardless of how many requests
the actor makes under the hood.

### Using the API

Trigger runs from your own code via the Apify API. With your Apify API token, a `POST` request runs
the actor synchronously and returns the dataset items:

```bash
curl -X POST "https://api.apify.com/v2/acts/jindrich.bar~oebb-ticket-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"from": "Wien Hbf", "to": "Salzburg Hbf", "maxResults": 10}'
```

Or run asynchronously and poll for status / dataset items:

```bash
## Start a run
curl -X POST "https://api.apify.com/v2/acts/jindrich.bar~oebb-ticket-scraper/runs?token=<APIFY_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"from": "Wien Hbf", "to": "Salzburg Hbf"}'

## When it's done, read the dataset
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<APIFY_TOKEN>"
```

Official client libraries are available for [JavaScript / TypeScript](http://docs.apify.com/sdk/js),
[Python](http://docs.apify.com/sdk/python), and via the [Apify REST API](http://docs.apify.com/api/v2)
directly.

### Scheduling

Run the actor on a cron schedule from the **Schedules** tab in the Apify console — daily, hourly, or
any custom cron expression. Common patterns:

- **Daily price snapshot at 09:00** — track fare changes for a fixed Wien → Salzburg route and chart
  the trend over weeks.
- **Hourly refresh for a launch week** — keep a real-time price board for a route during a promotional
  campaign.
- **Weekly market scan** — compare a basket of intercity routes (`Wien↔Graz`, `Wien↔Innsbruck`,
  `Salzburg↔Linz`) for week-over-week price changes.

Schedules can fan out into multiple datasets, push to a webhook, or trigger downstream actors when the
run finishes.

### Use with AI Agents (Apify MCP)

This actor is exposed through the
[Apify Model Context Protocol (MCP) server](https://docs.apify.com/platform/integrations/mcp), so any
AI agent that speaks MCP — Claude, ChatGPT custom agents, OpenAI Agents SDK, Cursor, etc. — can call it
directly to fetch live ÖBB ticket prices and connection options.

Once the Apify MCP server is connected, the agent picks up the actor's input schema automatically.
Typical prompts that work out of the box:

- *"What's the cheapest train from Wien to Salzburg tomorrow morning?"*
- *"Find me a direct Railjet from Wien Hbf to Graz Hbf on 2026-06-15."*
- *"How long does the train from Wien to Innsbruck take, and when does the next one leave?"*
- *"List the next five trains from Linz to Wien."*
- *"Are there any direct overnight Nightjet trains from Wien to Hamburg in the next two weeks?"*

The agent fills the input, runs the actor, and reads the structured dataset items back — no scraping,
no HTML parsing, no scheduling logic on the agent side.

#### Why this works well for agents

- **Typed input schema** — every field has a title, type, default, and validation rules, so an agent
  can call the actor without trial-and-error prompting.
- **Typed output** — `departure`, `arrival`, `durationMinutes`, `transfers`, `priceAmount` are all
  numbers / ISO timestamps, ready to be diffed, sorted, or compared directly.
- **Predictable pagination** — results come back in chronological order with duplicates removed, so the
  agent doesn't have to reason about paging.

### Troubleshooting & support

Most issues come from date/time formatting or sparsely-served routes. Try the fixes below before
opening an issue.

#### Common problems

**No results returned**

- The departure date is in the past, or beyond the ÖBB timetable horizon. Pick a date within the next
  year.
- The route genuinely has no service on the requested day. Try shifting the date or turning off
  `direct` / `regionalTrainsOnly`.

**`priceAmount` is `null` on some / all journeys**

- ÖBB doesn't sell a through-ticket for the connection. This is normal for some cross-border legs or
  operator-only fares. The connection is still returned with full timing and leg details — only the
  price is missing.

**`priceAmount` looks too low for the route**

- Check `priceCoversFullJourney`. On cross-border journeys ÖBB often can only ticket part of the trip,
  so when it's `false` the price covers just the segment listed in `priceCoverage` (e.g. Wien → Trieste,
  not Praha → Trieste). The rest of the journey must be booked separately.

**Fewer results than `maxResults`**

- On sparsely-served routes (small regional stations, late-night cross-border), the timetable simply
  may not have enough matching trains. Try turning off `direct`, allowing long-distance trains
  (`regionalTrainsOnly: false`), or starting from a larger nearby hub.

**`Invalid date` or `Invalid time` error**

- `date` must be `YYYY-MM-DD` (e.g. `2026-06-15`). `time` must be `HH:MM` in 24-hour format (e.g.
  `08:00`, not `8 AM`). Both fields are optional — leave them empty to use "now".

**Delays show as `null`**

- This actor returns scheduled timetable data; real-time delay forecasts aren't included, so
  `departureDelayMinutes` and `arrivalDelayMinutes` are always `null`.

**Different prices than the ÖBB shop shows in a browser**

- The actor returns the cheapest available 2nd-class fare (Sparschiene / Standard) for the requested
  journey. Promo codes, Vorteilscard discounts, and group fares aren't applied — those require a
  logged-in ÖBB account.

#### FAQs

**Can I search by station ID instead of name?**
Not currently — `from` and `to` accept station names only. The actor resolves them to the official
ÖBB station IDs and returns those as `fromId` / `toId` so you can round-trip them.

**Does it cover S-Bahn, trams, or buses?**
Long-distance and regional rail (Railjet, EuroCity, Nightjet, InterCity, REX, regional) plus operator
partners visible in the ÖBB timetable. Urban transit is largely out of scope. For long-distance buses,
see the Flixbus actor below.

**Does it work for routes that don't touch Austria?**
Coverage is strongest for journeys that start, end, or pass through Austria, including cross-border
routes like Wien–Praha, Wien–München, and Wien–Budapest. For purely-domestic journeys in other
countries, use the relevant national actor instead.

**Can I get seat availability or book a ticket?**
No — the actor returns timetable and fare data only. Booking requires ÖBB's authenticated checkout
flow.

#### Support

Open an issue on the actor's **Issues** tab in the Apify console. Include the full input JSON, the run
ID (visible in the run URL), and the expected vs. actual output — that lets the maintainer pull the
exact logs and reproduce the issue quickly.

### Need a different data source?

If you're scraping connections across multiple operators, check our companion actors:

- [**Deutsche Bahn ticket scraper**](https://apify.com/jindrich.bar/deutsche-bahn-ticket-scraper) — German and European rail timetable and ticket prices.
- [**České dráhy connection scraper**](https://apify.com/jindrich.bar/ceske-drahy-connections) — Czech rail timetable and ticket prices.
- [**Flixbus connection scraper**](https://apify.com/jindrich.bar/flixbus-connections) — long-distance bus routes across Europe and the US.

All these actors emit a comparable schema (`from`, `to`, `departure`, `arrival`, `price`, leg-level
breakdown), so an aggregator agent can merge their outputs into a single multi-modal travel search.

# Actor input Schema

## `from` (type: `string`):

Departure station name (e.g. "Wien Hbf", "Praha hl.n.", "PRAHA").

## `to` (type: `string`):

Destination station name.

## `date` (type: `string`):

Departure date (YYYY-MM-DD). Leave empty to use today.

## `time` (type: `string`):

Time in HH:MM (24h) format. Leave empty to use the current time.

## `adults` (type: `integer`):

Number of adult passengers.

## `direct` (type: `boolean`):

Only return direct connections (no transfers).

## `regionalTrainsOnly` (type: `boolean`):

Restrict results to regional trains (exclude long-distance trains like RJ/EC/NJ).

## `bikeCarriage` (type: `boolean`):

Only return journeys where bicycle carriage is available.

## `wheelchair` (type: `boolean`):

Only return wheelchair-accessible journeys.

## `sortBy` (type: `string`):

Ordering of the returned connections.

## `maxResults` (type: `integer`):

Maximum number of journeys to push to the dataset.

## Actor input object example

```json
{
  "from": "Wien Hbf",
  "to": "Graz Hbf",
  "adults": 1,
  "direct": false,
  "regionalTrainsOnly": false,
  "bikeCarriage": false,
  "wheelchair": false,
  "sortBy": "DEPARTURE",
  "maxResults": 20
}
```

# Actor output Schema

## `journeys` (type: `string`):

Default dataset items — one entry per connection, with legs and transfer count.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jindrich.bar/oebb-ticket-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("jindrich.bar/oebb-ticket-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call jindrich.bar/oebb-ticket-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jindrich.bar/oebb-ticket-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ÖBB Train Ticket and Connection Scraper",
        "description": "Scrape live Austrian Federal Railways train connections, schedules, ticket prices, transfers, delays, and fares across Austria and Europe. Extract structured ÖBB timetable data for travel apps, price monitoring, analytics, and AI agents.",
        "version": "0.0",
        "x-build-id": "khhrkTstN5QOiOSQu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jindrich.bar~oebb-ticket-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jindrich.bar-oebb-ticket-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jindrich.bar~oebb-ticket-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jindrich.bar-oebb-ticket-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jindrich.bar~oebb-ticket-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jindrich.bar-oebb-ticket-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "from",
                    "to"
                ],
                "properties": {
                    "from": {
                        "title": "From station",
                        "type": "string",
                        "description": "Departure station name (e.g. \"Wien Hbf\", \"Praha hl.n.\", \"PRAHA\").",
                        "default": "Wien Hbf"
                    },
                    "to": {
                        "title": "To station",
                        "type": "string",
                        "description": "Destination station name.",
                        "default": "Graz Hbf"
                    },
                    "date": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "Departure date (YYYY-MM-DD). Leave empty to use today."
                    },
                    "time": {
                        "title": "Departure time",
                        "pattern": "^\\d{1,2}:\\d{2}$",
                        "type": "string",
                        "description": "Time in HH:MM (24h) format. Leave empty to use the current time."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 6,
                        "type": "integer",
                        "description": "Number of adult passengers.",
                        "default": 1
                    },
                    "direct": {
                        "title": "Direct only",
                        "type": "boolean",
                        "description": "Only return direct connections (no transfers).",
                        "default": false
                    },
                    "regionalTrainsOnly": {
                        "title": "Regional trains only",
                        "type": "boolean",
                        "description": "Restrict results to regional trains (exclude long-distance trains like RJ/EC/NJ).",
                        "default": false
                    },
                    "bikeCarriage": {
                        "title": "Bike carriage",
                        "type": "boolean",
                        "description": "Only return journeys where bicycle carriage is available.",
                        "default": false
                    },
                    "wheelchair": {
                        "title": "Wheelchair accessible",
                        "type": "boolean",
                        "description": "Only return wheelchair-accessible journeys.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "DEPARTURE",
                            "ARRIVAL",
                            "DURATION"
                        ],
                        "type": "string",
                        "description": "Ordering of the returned connections.",
                        "default": "DEPARTURE"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of journeys to push to the dataset.",
                        "default": 20
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
