Discover/Ruter API
live

Ruter APIreise.ruter.no

Search Oslo transit stops and get real-time bus, tram, and metro departures from Ruter's network via 3 endpoints covering NSR stop IDs, platforms, and alerts.

Endpoint health
verified 7d ago
search_stop
get_bus_arrivals
get_departures
3/3 passing latest checkself-healing
Endpoints
3
Updated
22d ago

What is the Ruter API?

The Ruter (reise.ruter.no) API exposes 3 endpoints for accessing real-time public transit data across Oslo and the surrounding region. Use search_stop to find stops by name and retrieve their NSR stop place IDs, then pass those IDs to get_departures or get_bus_arrivals for live schedules including platform, line, destination, and real-time arrival times across buses, trams, and metro lines.

Try it
Search query for stop name (e.g. 'Jernbanetorget', 'Majorstuen', 'Oslo S')
Latitude coordinate for distance-based sorting of results
Longitude coordinate for distance-based sorting of results
api.parse.bot/scraper/795ebd94-5170-4a6d-8562-c97f6d8f9c08/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/795ebd94-5170-4a6d-8562-c97f6d8f9c08/search_stop?query=Jernbanetorget&latitude=59.911&longitude=10.75' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 reise-ruter-no-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: Ruter Bus Arrivals — search stops, get departures, get bus arrivals."""
from parse_apis.Ruter_Bus_Arrivals_API import Ruter, TransportMode, StopNotFound

client = Ruter()

# Search for stops matching a name — limit caps total items fetched.
for stop in client.stops.search(query="Jernbanetorget", limit=3):
    print(stop.name, stop.id, stop.distance)

# Drill down into the first SearchStopPlace result's departures.
stop = client.stop(id="NSR:StopPlace:58366")
for dep in stop.departures.list(transport_mode=TransportMode.BUS, limit=3):
    print(dep.line.line_number, dep.line.destination, dep.expected_time, dep.realtime_status)

# Get bus-only arrivals via the sub-resource.
for bus in stop.bus_arrivals.list(limit=3):
    print(bus.bus_number, bus.bus_name, bus.destination, bus.expected_time)

# Typed error handling for a non-existent stop.
try:
    bad_stop = client.stop(id="NSR:StopPlace:00000")
    list(bad_stop.departures.list(limit=1))
except StopNotFound as exc:
    print(f"Stop not found: {exc.stop_id}")

print("exercised: stops.search / stop.departures.list / stop.bus_arrivals.list / StopNotFound")
All endpoints · 3 totalmissing one? ·

Full-text search over transit stops by name. Returns stop places with IDs, coordinates, transport modes, and fare zones. Each result carries a type discriminator (SearchStopPlace, Place, PointOfInterest_v2). Only SearchStopPlace entries include transport_modes and zone. The returned stop ID feeds get_departures and get_bus_arrivals.

Input
ParamTypeDescription
queryrequiredstringSearch query for stop name (e.g. 'Jernbanetorget', 'Majorstuen', 'Oslo S')
latitudenumberLatitude coordinate for distance-based sorting of results
longitudenumberLongitude coordinate for distance-based sorting of results
Response
{
  "type": "object",
  "fields": {
    "stops": "array of stop objects with id, name, location, type, transport_modes, and zone info",
    "total": "integer total number of stops returned"
  },
  "sample": {
    "data": {
      "stops": [
        {
          "id": "NSR:StopPlace:58366",
          "name": "Jernbanetorget",
          "type": "SearchStopPlace",
          "zone": {
            "id": "RUT:FareZone:4",
            "name": "1"
          },
          "distance": 0.082,
          "location": {
            "latitude": 59.911898,
            "longitude": 10.75038
          },
          "description": "Oslo",
          "transport_modes": [
            {
              "mode": "Metro",
              "sub_mode": null
            },
            {
              "mode": "Tram",
              "sub_mode": null
            },
            {
              "mode": "Bus",
              "sub_mode": null
            }
          ]
        }
      ],
      "total": 7
    },
    "status": "success"
  }
}

About the Ruter API

Stop Search and Identification

The search_stop endpoint accepts a query string (e.g. 'Jernbanetorget' or 'Oslo S') and returns an array of stop objects, each containing an id (in NSR stop place format), name, location (latitude/longitude), type, transport_modes, and fare zone information. Passing optional latitude and longitude parameters sorts results by distance, which is useful when building location-aware apps. The total field tells you how many stops matched.

Departures Across All Modes

The get_departures endpoint takes an NSR stop_id and returns a full departure board for that stop. Results include a departures array where each entry carries platform, line, scheduled and real-time times, and realtime status. You can filter by transport_mode ('Bus', 'Tram', or 'Metro') and set a start_time in ISO 8601 format to retrieve future schedules. The response also includes a top-level alerts array for service disruptions and a transport_modes array showing which modes operate at that stop.

Bus-Specific Arrivals

The get_bus_arrivals endpoint is scoped to bus departures only and accepts either a stop_id or a stop_name — if you provide a name, it auto-resolves to the correct stop. Each entry in bus_arrivals includes bus_number, destination, platform, scheduled and real-time times, and realtime_status. The response also returns stop_name and location coordinates so you don't need a separate lookup. Like get_departures, it accepts an optional start_time for forward-looking queries.

Reliability & maintenanceVerified

The Ruter API is a managed, monitored endpoint for reise.ruter.no — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when reise.ruter.no changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official reise.ruter.no API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
7d ago
Latest check
3/3 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Display a live departure board for any Oslo bus stop using real-time times from get_bus_arrivals.
  • Build a transit app that auto-completes stop names and resolves NSR stop IDs via search_stop.
  • Filter get_departures by transport_mode: 'Metro' to show only T-bane lines at a given stop.
  • Surface active service alerts from the alerts field in get_departures before showing a departure list.
  • Sort nearby stops by distance by passing user GPS coordinates to search_stop as latitude and longitude.
  • Check future schedules for any stop by setting start_time to a specific ISO 8601 datetime.
  • Show fare zone information alongside stop results to help users estimate trip costs.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does Ruter have an official developer API?+
Yes. Ruter provides an open API called Ruter's Journey Planner API (based on the national Entur platform), documented at https://developer.entur.org. The Parse API surfaces a focused subset of that data oriented around real-time stop lookups and departures.
What does `get_departures` return that `get_bus_arrivals` does not?+
get_departures covers all transport modes — Bus, Tram, and Metro — and includes a top-level alerts array for service disruptions and a transport_modes list for the stop. get_bus_arrivals is scoped to buses only but adds convenience by accepting a stop_name string and auto-resolving it to an NSR stop ID without a separate search_stop call.
How far ahead do departure results reach?+
The API returns departures from start_time (defaulting to now) and covers upcoming scheduled services from Ruter's network. There is no documented upper time window exposed in the response schema, so very distant future queries may return fewer or no results depending on how far Ruter's timetable data extends.
Does the API cover transit lines outside Oslo, such as Viken or intercity trains?+
The API focuses on the Ruter operating area, which includes Oslo and parts of Viken. National intercity train services (e.g. NSB/Vy long-distance routes) and other operators outside Ruter's network are not currently covered. You can fork this API on Parse and revise it to add endpoints targeting other operators or the broader Entur national journey planner.
Is trip planning (e.g. routing between two stops) available?+
Not currently. The API covers stop search and real-time departure lookups, but does not include origin-to-destination journey planning or route calculation. You can fork it on Parse and revise to add a journey-planning endpoint against Ruter or Entur's routing data.
Page content last updated . Spec covers 3 endpoints from reise.ruter.no.
Related APIs in TravelSee all →
kvb.koeln API
Check real-time departure schedules and find stop information for Cologne's public transit system, including trams, buses, and regional trains. Search for any stop across the KVB network to get live transit data.
rfi.it API
Check real-time train schedules and station information across Italy's railway network, search for stations, and get live alerts about delays and service disruptions. Monitor train circulation status and access detailed station mappings to plan your journeys efficiently.
nationalrail.co.uk API
Check live train departure and arrival times at UK stations, search for specific stations, and get real-time service disruption alerts. Stay informed about rail service delays and changes to plan your journeys efficiently.
ratp.fr API
Monitor real-time traffic conditions and service disruptions across Paris's RATP and RER networks to plan your commute efficiently. Get instant updates on line statuses, delays, and service alerts for all metro and regional rail lines.
redbus.in API
Search and explore bus and train services on redBus.in. Look up city and station suggestions, find available routes, check schedules, and view seat layouts and fare details.
margdarshi.upsrtcvlt.com API
Find UPSRTC bus routes, schedules, and real-time arrival information across Uttar Pradesh. Search for specific stops, discover which buses operate between two locations, and plan journeys with detailed timetables, bus types, and comprehensive stop data from the Margdarshi passenger information system.
citymapper.com API
Get real-time transit information including live stop arrivals, service status, and line details across major cities worldwide. Search for nearby transit options and stay informed with service alerts to plan your commute efficiently.
mbta.com API
Track real-time subway, bus, and commuter rail departures across Greater Boston, check schedules and service alerts, and find detailed information about routes and stops. Plan your commute with up-to-the-minute MBTA transit data and never miss your connection.