9292 API9292.nl ↗
Plan trips across Dutch trains, buses, trams, metros, and ferries by searching for locations and getting detailed journey information including travel times and costs. Find the best routes through the Netherlands' public transport network with real-time trip planning.
curl -X GET 'https://api.parse.bot/scraper/1f75bb0f-f76b-47f6-9036-0d839252dfe4/search_locations?limit=10&query=Amsterdam+Centraal' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace 9292-nl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: 9292 Dutch Public Transport SDK — bounded, re-runnable; every call capped."""
from parse_apis.api_9292_nl_api import NinetyTwoNinetyTwo, RequestType, LocationUnknown
client = NinetyTwoNinetyTwo()
# Search for locations to find valid station IDs.
for loc in client.locations.search(query="Utrecht", limit=3):
print(loc.label, loc.category, loc.place)
# Plan a trip between two stations.
origin = client.locations.search(query="Amsterdam Centraal", limit=1).first()
for trip in client.trip_plans.plan(
from_location=origin.id,
to_location="station-rotterdam-centraal",
request_type=RequestType.DEPARTURE,
limit=3,
):
print(trip.departure_time, trip.duration_minutes, "min", trip.price_euro_cents, "ct", trip.operators)
# Get full journey details for the first trip found.
trip = client.trip_plans.plan(
from_location="station-amsterdam-centraal",
to_location="station-rotterdam-centraal",
limit=1,
).first()
try:
detail = client.journey_details.get(journey_id=trip.journey_id)
print(detail.from_, "→", detail.to, "|", detail.duration_minutes, "min")
for leg in detail.legs:
print(" ", leg.departure.name, leg.departure.platform, "→", leg.arrival.name, leg.modality)
except LocationUnknown as e:
print("location not found:", e)
print("exercised: locations.search, trip_plans.plan, journey_details.get")
Search for public transport locations (stations, stops, addresses) by free-text query. Returns matching locations with their unique IDs, which are used as inputs to plan_trip. Results are ranked by relevance to the query.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return (1-50). |
| queryrequired | string | Free-text search query for a location name, station, stop, or address. |
{
"type": "object",
"fields": {
"locations": "array of location objects with id, label, category, place, lat_long, and location_type"
},
"sample": {
"data": {
"locations": [
{
"id": "station-amsterdam-centraal",
"label": "Amsterdam Centraal",
"place": "Amsterdam",
"category": "Treinstation",
"lat_long": "52.378706,4.900489",
"location_type": "Station"
}
]
},
"status": "success"
}
}About the 9292 API
The 9292 API on Parse exposes 3 endpoints for the publicly available data on 9292.nl. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.