{"id":"banenor","name":"Bane NOR train data","description":"Real-time station boards, train movements and rail disruptions from the infrastructure manager.","documentation":"https://www.banenor.no/reise-og-trafikk/apne-data/","operations":[{"name":"get_station_board","description":"Live departure/arrival board for one Norwegian railway station, straight\nfrom Bane NOR - the data shown on the physical station screens.","parameters":[{"name":"station","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"Bane NOR station code, e.g. \"OSL\" (Oslo S), \"BRG\" (Bergen), \"TND\" (Trondheim S). Use lookup_station to find a code. Unknown codes error."},{"name":"direction","type":"string","schema":{"type":"string"},"display_type":"string","required":false,"default":"all","description":"\"all\" (default), \"departures\" or \"arrivals\"."},{"name":"minutes_ahead","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":120,"description":"Window from now, in minutes (default 120)."},{"name":"line","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Only this line, e.g. \"L2\", \"R12\", \"FLY1\". Exact match."},{"name":"destination","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Only trains whose final stop is this station NAME (e.g. \"Skien\", not \"SKN\")."},{"name":"operator","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Only this operator code, e.g. \"VY\", \"VYG\", \"FLY\", \"GAG\", \"SJN\"."},{"name":"max_trains","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":20,"description":"Cap on trains returned (default 20), applied upstream to the trains departing/arriving next."},{"name":"include_formation","type":"boolean","schema":{"type":"boolean"},"display_type":"yes/no","required":false,"default":false,"description":"Also return train formation per train where reported: wagon order and types, open/closed state, on-board services (bicycle, quiet, wheelchair, bistro, wlan, ...) and automatic passenger-count occupancy. Verbose; off by default."},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100)."},{"name":"offset","type":"integer","schema":{"type":"integer","minimum":0,"default":0},"display_type":"integer","required":false,"default":0,"description":"Number of list items to skip before returning the page."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_station_board?station={station}&direction=all&minutes_ahead=120&line={line}&destination={destination}&operator={operator}&max_trains=20&include_formation=false&limit=25&offset=0","output_fields":["station","train_count","trains","trains[].train","trains[].line","trains[].operator","trains[].product","trains[].service","trains[].origin","trains[].destination","trains[].via","trains[].at_stop","trains[].formation","trains[].formation.wagon_count","trains[].formation.wagons","trains[].prediction_inaccurate","attribution"],"output_fields_truncated":false,"canonical_field_aliases":{},"description_language":"en","documentation":"Live departure/arrival board for one Norwegian railway station, straight\nfrom Bane NOR - the data shown on the physical station screens.\n\nArgs:\n    station: Bane NOR station code, e.g. \"OSL\" (Oslo S), \"BRG\" (Bergen),\n        \"TND\" (Trondheim S). Use lookup_station to find a code. Unknown\n        codes error.\n    direction: \"all\" (default), \"departures\" or \"arrivals\".\n    minutes_ahead: Window from now, in minutes (default 120).\n    line: Only this line, e.g. \"L2\", \"R12\", \"FLY1\". Exact match.\n    destination: Only trains whose final stop is this station NAME\n        (e.g. \"Skien\", not \"SKN\").\n    operator: Only this operator code, e.g. \"VY\", \"VYG\", \"FLY\", \"GAG\",\n        \"SJN\".\n    max_trains: Cap on trains returned (default 20), applied upstream to\n        the trains departing/arriving next.\n    include_formation: Also return train formation per train where\n        reported: wagon order and types, open/closed state, on-board\n        services (bicycle, quiet, wheelchair, bistro, wlan, ...) and\n        automatic passenger-count occupancy. Verbose; off by default.\n\nEach train has train (the national train number), line, operator,\nproduct, origin, destination, at_stop (physically at the platform now),\nand the known subset of aimed/expected/actual arrival and departure\ntimes (ISO 8601), platform and status (onTime, delayed, arrived,\ndeparted, noReport). Times reflect Bane NOR's business rules: delays\nunder ~3 minutes still count as onTime.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/banenor/get_station_board/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/banenor/get_station_board/?station={station}&direction=all&minutes_ahead=120&line={line}&destination={destination}&operator={operator}&max_trains=20&include_formation=false&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_station_board","response_schema":{"type":"object","properties":{"station":{"type":"string"},"train_count":{"type":"integer"},"trains":{"type":"array","items":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"train":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"line":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"operator":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"product":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"service":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"origin":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"destination":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"via":{"type":"array","items":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}},"at_stop":{"type":"boolean"},"formation":{"anyOf":[{"type":"null"},{"anyOf":[{"type":"object","properties":{"wagon_count":{"type":"integer"},"wagons":{"type":"array","items":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"number":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"type":{"type":["string","null"]},"open":{"type":"boolean"},"engine":{"type":"boolean"},"occupancy":{"type":"integer"},"goods":{"type":"boolean"},"services":{"type":"array","items":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."}}},"additionalProperties":false}]}}},"additionalProperties":false},{"type":"null"}]}]},"prediction_inaccurate":{"type":"boolean"}},"additionalProperties":false}]}},"attribution":{"type":["object","null"],"properties":{},"additionalProperties":false}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["rail_station"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_station_board/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_station_board","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_station_board?station={station}&direction=all&minutes_ahead=120&line={line}&destination={destination}&operator={operator}&max_trains=20&include_formation=false&limit=25&offset=0"},{"name":"get_train","description":"Current status of one train by its national train number: every stop\nwith planned, expected and actually observed times and platforms.","parameters":[{"name":"train_number","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"The train number, e.g. \"605\" (Oslo S-Bergen), \"43\" (Dovrebanen). This is the number shown on tickets and boards (VY 605 -> \"605\"). Freight trains are included - something neither Entur nor other public APIs offer."},{"name":"date","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Optional \"YYYY-MM-DD\" to disambiguate when the same number runs on several days inside Bane NOR's data horizon (roughly the current day). Default: all matches."},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100)."},{"name":"offset","type":"integer","schema":{"type":"integer","minimum":0,"default":0},"display_type":"integer","required":false,"default":0,"description":"Number of list items to skip before returning the page."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_train?train_number={train_number}&date={date}&limit=25&offset=0","output_fields":["train_number","match_count","matches","matches[].train","matches[].date","matches[].line","matches[].operator","matches[].product","matches[].service","matches[].origin","matches[].destination","matches[].calls","matches[].calls[].station","matches[].calls[].name","attribution"],"output_fields_truncated":false,"canonical_field_aliases":{"date":["matches[].date"],"name":["matches[].calls[].name"]},"description_language":"en","documentation":"Current status of one train by its national train number: every stop\nwith planned, expected and actually observed times and platforms.\n\nArgs:\n    train_number: The train number, e.g. \"605\" (Oslo S-Bergen), \"43\"\n        (Dovrebanen). This is the number shown on tickets and boards\n        (VY 605 -> \"605\"). Freight trains are included - something\n        neither Entur nor other public APIs offer.\n    date: Optional \"YYYY-MM-DD\" to disambiguate when the same number\n        runs on several days inside Bane NOR's data horizon (roughly\n        the current day). Default: all matches.\n\nReturns `matches` (usually one journey). Stops the train has already\nmade carry actual_arrival/actual_departure (observed), upcoming stops\ncarry expected_* and status. The last call with actual times is the\ntrain's last confirmed position. An empty `matches` means Bane NOR's\nfeed has no such train right now - it may run tomorrow, or not at all;\nit does not necessarily mean the number is invalid.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/banenor/get_train/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/banenor/get_train/?train_number={train_number}&date={date}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_train","response_schema":{"type":"object","properties":{"train_number":{"type":"boolean"},"match_count":{"type":"integer"},"matches":{"type":"array","items":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"train":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"date":{"type":["string","null"],"format":"date"},"line":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"null"}]},"operator":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"product":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"service":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"origin":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"destination":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"calls":{"type":"array","items":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"station":{"type":["object","null"],"properties":{},"additionalProperties":false},"name":{"type":["string","null"]}},"additionalProperties":false}]}}},"additionalProperties":false}]}},"attribution":{"type":["object","null"],"properties":{},"additionalProperties":false}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["rail_station"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_train/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_train","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_train?train_number={train_number}&date={date}&limit=25&offset=0"},{"name":"get_disruptions","description":"Cancellations and disruptions of individual train journeys, from Bane\nNOR's situation exchange feed.","parameters":[{"name":"hours_ahead","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":24,"description":"Only situations starting within this many hours from now (default 24). The full feed carries ~a week of planned changes (thousands of records); keep this small unless you really want them all."},{"name":"station","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Only situations touching this station code (e.g. \"OSL\")."},{"name":"train_number","type":"string","schema":{"anyOf":[{"type":"string"},{"type":"null"}]},"display_type":"string","required":false,"default":null,"description":"Only situations for this train number."},{"name":"max_results","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":50,"description":"Page size (default 50). `total_count` is the number matching before paging."},{"name":"offset","type":"integer","schema":{"type":"integer"},"display_type":"integer","required":false,"default":0,"description":"Skip this many matching situations (default 0). When the response is truncated it carries `next_offset`; pass that back as offset for the next page. Prefer narrowing with station, train_number or hours_ahead over paging through the national feed."},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100)."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_disruptions?hours_ahead=24&station={station}&train_number={train_number}&max_results=50&offset=0&limit=25","output_fields":["total_count","offset","disruptions","disruptions.situation","disruptions.condition","disruptions.train","disruptions.date","disruptions.valid_from","disruptions.affected_stops","disruptions.affected_stops[].code","disruptions.affected_stops[].name","truncated","attribution","next_offset","note"],"output_fields_truncated":false,"canonical_field_aliases":{"date":["disruptions.date"],"identifier":["disruptions.affected_stops[].code"],"name":["disruptions.affected_stops[].name"]},"description_language":"en","documentation":"Cancellations and disruptions of individual train journeys, from Bane\nNOR's situation exchange feed.\n\nArgs:\n    hours_ahead: Only situations starting within this many hours from\n        now (default 24). The full feed carries ~a week of planned\n        changes (thousands of records); keep this small unless you\n        really want them all.\n    station: Only situations touching this station code (e.g. \"OSL\").\n    train_number: Only situations for this train number.\n    max_results: Page size (default 50). `total_count` is the number\n        matching before paging.\n    offset: Skip this many matching situations (default 0). When the\n        response is truncated it carries `next_offset`; pass that back\n        as offset for the next page. Prefer narrowing with station,\n        train_number or hours_ahead over paging through the national\n        feed.\n\nEach situation has the affected train (number + date), a condition\n(disrupted, altered or diverted), when it starts, and the affected\nstops, sorted by start time (soonest first). These are machine records\nof cancellations/changes per journey - Bane NOR publishes no free-text\nexplanation in this feed.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/banenor/get_disruptions/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/banenor/get_disruptions/?hours_ahead=24&station={station}&train_number={train_number}&max_results=50&offset=0&limit=25","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_disruptions","response_schema":{"type":"object","properties":{"total_count":{"type":"integer"},"offset":{"type":["integer","null"]},"disruptions":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"object","properties":{"situation":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"condition":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"train":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"date":{"type":["string","null"],"format":"date"},"valid_from":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"affected_stops":{"type":"array","items":{"type":"object","properties":{"code":{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},"name":{"type":["string","null"]}},"additionalProperties":false}}},"additionalProperties":false}]},"truncated":{"type":"boolean"},"attribution":{"type":["object","null"],"properties":{},"additionalProperties":false},"next_offset":{"anyOf":[{"x-allemannsdata-schema-status":"unresolved","description":"Response shape is not yet declared; any JSON value is permitted."},{"type":"integer"}]},"note":{"type":"string"}},"additionalProperties":false},"response_schema_status":{"status":"incomplete","codegen_safe":false,"description":"Not suitable for typed model generation: the container shape and field names are useful, but unresolved values accept any JSON value."},"entity_projection":{"status":"projected","entity_types":["rail_station"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_disruptions/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_disruptions","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/get_disruptions?hours_ahead=24&station={station}&train_number={train_number}&max_results=50&offset=0&limit=25"},{"name":"lookup_station","description":"Find a station's Bane NOR code by name, or its name by code.","parameters":[{"name":"query","type":"string","schema":{"type":"string"},"display_type":"string","required":true,"default":null,"description":"Station code (e.g. \"OSL\") or part of a station name (e.g. \"Lilleham\"). Case-insensitive."},{"name":"limit","type":"integer","schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"display_type":"integer","required":false,"default":25,"description":"Maximum list items returned by the gateway (default 25, maximum 100)."},{"name":"offset","type":"integer","schema":{"type":"integer","minimum":0,"default":0},"display_type":"integer","required":false,"default":0,"description":"Number of list items to skip before returning the page."}],"json_get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station?query={query}&limit=25&offset=0","output_fields":["[].code","[].name"],"output_fields_truncated":false,"canonical_field_aliases":{"identifier":["[].code"],"name":["[].name"]},"description_language":"en","documentation":"Find a station's Bane NOR code by name, or its name by code.\n\nArgs:\n    query: Station code (e.g. \"OSL\") or part of a station name (e.g.\n        \"Lilleham\"). Case-insensitive.\n\nReturns up to 25 [{code, name}] matches. The list is built from the\nstations appearing in Bane NOR's live timetable feed (~345 stations),\nso a station with no rail traffic at all in the current data horizon\ncan be missing.","documentation_language":"en","wiki_get_endpoint":"https://allemannsdata.com/wiki/kilder/banenor/lookup_station/","wiki_get_url_template":"https://allemannsdata.com/wiki/kilder/banenor/lookup_station/?query={query}&limit=25&offset=0","json_endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station","response_schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false,"required":["code","name"]}},"response_schema_status":{"status":"declared","codegen_safe":true,"description":"Maintained response contract."},"entity_projection":{"status":"projected","entity_types":["rail_station"],"description":"Recognized records and stable operation identifiers are projected; an empty array means the successful payload contained no recognizable entity."},"response_schema_url":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station/schema","endpoint":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station","get_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station?query={query}&limit=25&offset=0","response_example":{"source":"banenor","operation":"lookup_station","parameters":{"query":"example value"},"data":[{"code":"example value","name":"Example"}],"entities":[],"_meta":{"retrieved_at":"2026-01-15T12:00:00Z","language":"en","content_languages":["en"],"sources":[{"id":"banenor","name":"Bane NOR train data","description":"Real-time station boards, train movements and rail disruptions from the infrastructure manager.","cache_ttl_seconds":30,"documentation":"https://www.banenor.no/reise-og-trafikk/apne-data/"}]},"_provenance":{"data":{"source":"banenor","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/banenor"},"entities":{"source":"banenor","source_api":"https://allemannsdata.com/wiki/api/v1/kilder/banenor","derived_from":"#/data","description":"Normalized projection of data."}},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/lookup_station","source":"https://allemannsdata.com/wiki/api/v1/kilder/banenor","wiki":"https://allemannsdata.com/wiki/kilder/banenor/lookup_station/"}}}],"operation_schema_url_template":"https://allemannsdata.com/wiki/api/v1/kilder/banenor/{operation}/schema","related_sources":[{"id":"entur","name":"Entur","reason":"National multimodal journey planning and public-transport departures.","api":"https://allemannsdata.com/wiki/api/v1/kilder/entur","wiki":"https://allemannsdata.com/wiki/kilder/entur/"}],"_meta":{"retrieved_at":"2026-08-02T14:01:38Z","language":"en","content_languages":["en"],"sources":[{"id":"banenor","name":"Bane NOR train data","description":"Real-time station boards, train movements and rail disruptions from the infrastructure manager.","documentation":"https://www.banenor.no/reise-og-trafikk/apne-data/","cache_ttl_seconds":30}]},"_links":{"self":"https://allemannsdata.com/wiki/api/v1/kilder/banenor","names":"https://allemannsdata.com/wiki/api/v1/kilder/banenor?view=names","compact":"https://allemannsdata.com/wiki/api/v1/kilder/banenor?view=compact","full":"https://allemannsdata.com/wiki/api/v1/kilder/banenor","wiki":"https://allemannsdata.com/wiki/kilder/banenor/"}}
