This specification contains interfaces to be used between PTOs (operators) and Ruter. The API describes a set of MQTT topics which are used to distribute data onboard public transport vehicles/vessels as well as between the vehicle/vessel and Ruter’s Back Office or vv.
The API follows the upgrade cycles of ADT. Major releases are done more or less once a year and usually include breaking changes.
Minor/build releases are performed as continual deliveries and are non-breaking. New versions of this document will be published when new topics and/or fields are added.
Clients consuming information posted on the topics must be tolerant to:
Generally, QoS level 1 is applied for most topics and the retain
flag is true for most topics. See the respective topic for precise info.
Subscribers should start with Clean Session set to True to assure that they get the latest information at reconnection (the retained info) and avoid first having to process a long queue of outdated old information that in reality hinders new relevant information to reach the subscriber.
Global topic names are generally written on the format of {recipient}/{sender}/{vehicleid}/{topic}
to make it easy to identify the source and destination of the messages.
Local topic names have omitted the {recipient}/{sender}/{vehicleid}
part in order to have onboard equipment pre-configured with vehicle independent settings.
All topic names must thus be rewritten local/global in the MQTT bridge according to a provided configuration file.
All data must be JSON and UTF-8 encoded.
The diagram below shows an overview of the most important messages that manage the assignment and journey of a vehicle.
For more information, please go to: Ruter’s ADT agreement.
Please open an issue here: ADT-DOC Issues
Ruters central MQTT broker
The mqtt broker is available through TCP (:8883) and Websockets (:9883)
Please reach out to rdp-support@ruter.no to request access.
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/backoffice/adt/v4/di/available_destination_displays |
Schema | available-destination-displays.json |
Maintainer | Assignment |
Producer | Assignment |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Provides a list of available destination displays. The list should be used for external displays, in case the vehicle has lost connection to the backoffice.
Note that the list of available destination displays is no longer available per vehicle. The topic structure includes
backoffice
at the vehicleId position. This is an effort to reduce the amount of data stored on the broker
Accepts the following message:
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"availableDestinationDisplays": [
{
"publicCode": "20",
"destination": " Galgeberg"
},
{
"destination": " Ikke i trafikk "
},
{
"publicCode": "N160",
"destination": " Oslo Bussterminal",
"alternativeMessage": " Ingen påstigning"
}
]
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/di/override_attempt/destination_display |
Schema | destination-display-override.json |
Maintainer | Assignment |
Producer | PTO |
Consumer | Assignment |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
To construct a message, refer to the Available Destination Displays Message list and ensure that all fields provided in the list are included in the message.
If an entry contains publicCode, destination, and alternativeMessage, all three fields must be included exactly as specified in the list. The only additional fields you need to provide are a current eventTimestamp and a unique traceId.
Accepts the following message:
Describes a request from MADT or other GUI to manually override the information shown on the destination display. It is up to the presenting system to decide how and for how long the override will apply. A rule could be until next journey begins or a new override_attempt/destination_display is received. The topic could be blanked (provided with a zero-byte payload) to indicate that any overriding information is no longer valid and that the destination display can return to normal
{
"eventTimestamp": "2023-04-10T16:45:33.901Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"publicCode": "250",
"destination": " Oslo bussterminal",
"alternativeMessage": " Ingen påstigning"
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/active_cab |
Schema | active-cab.json |
Maintainer | DPI |
Producer | PTO |
Consumer | DPI, Progress |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Accepts the following message:
Used to keep track of what direction the train is driving
{
"eventTimestamp": "2020-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"activeCab": "c1"
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/audio |
Schema | audio.json |
Maintainer | DPI |
Producer | DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
The topic used for transmitting these audio messages is dedicated exclusively to audio playback through the vehicle's speaker system. The audio messages may contain an array of sound clips that should be played sequentially as they were received.
In some cases, multiple speaker groups may be targeted by the same audio message.
Accepts the following message:
This topic provides an audio message intended for passengers onboard the vehicle that should be played on speaker(s) defined in the speaker property of the payload.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2018-11-13T11:40:02.749Z",
"expiryDateTime": "2018-11-13T08:40:32.249Z",
"preferredStartDateTime": "2018-11-13T08:39:32.749Z",
"ref": "RUT:StopPlace:03012453",
"source": "campaign",
"audio": [
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70
}
},
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70,
"EXTERNAL": 40
}
}
]
}
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2018-11-13T11:40:02.749Z",
"expiryDateTime": "2018-11-13T08:40:32.249Z",
"preferredStartDateTime": "2018-11-13T08:39:32.749Z",
"ref": "RUT:StopPlace:03012453",
"source": "situation",
"audio": [
{
"encoding": "OPUS",
"contentUrl": "http://webserver.local/resources/safety_long.opus",
"speakers": {
"INTERNAL": 70
}
},
{
"encoding": "MP3",
"content": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3...",
"speakers": {
"INTERNAL": 70
}
}
]
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/cardreader_diagnostics/vix/{deviceRef} |
Schema | vix-cardreader_diagnostics.json |
Maintainer | Betjent salg |
Producer | VIX |
Consumer | PTA |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Diagnostics message sent from any Vix-validator running Ruter-firmware in the vehicle. Can be used by both PTA and PTO to monitor the operational status of these units.
An unique ID of the unit.
Accepts the following message:
{
"eventTimestamp": "2022-05-24T07:00:25Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"deviceRef": "RUT1234",
"inService": true
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/door_lock |
Schema | door-lock.json |
Maintainer | DPI |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message is used to track if the vehicle doors are locked or unlocked.
Frequency: on change
Accepts the following message:
Door lock event
{
"eventTimestamp": "2020-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"locked": false
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/doors_individually |
Schema | doors-individually.json |
Maintainer | Passasjertelling |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This topic is used to track the individual status of doors. One use case is to improve the data quality of APC counts. See also topic sensors/door for status of anyDoorOpen/allDoorsClosed.
Accepts the following message:
This object is used to represent a door individually.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2021-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorRef": "1",
"isOpen": true
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/ack |
Schema | dpi-acknowledge.json |
Maintainer | DPI |
Producer | PTO, DPI |
Consumer | DPI |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
The DPI Ack topic is used to inform the PTA Backoffice
about the correct transfer and interpretation of messages to the vehicle.
PTA shall receive an acknowledgment message for the following topics:
Topic | Responsible for producing ack |
---|---|
External display messages | PTO |
Audio messages | PTO |
Journey messages | DPI application |
NextStop messages | DPI application |
The ack message should be produced as soon as the message is received and validated. This is a confirmation that the system on board the vehicle have received the data and is capable of acting on it.
No confirmation message should be returned if the system is unable to playback the content. (e.g. invalid message format)
Accepts the following message:
The DPI Ack topic.
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "2ccf77aa-463f-4b98-ad19-61ec5d213e36",
"clientId": "8fac6c64la4cap4b21R90d",
"physicalId": "screen1",
"messageReceived": {
"topic": "pe/dpi/journey",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "b88aaf6a-b15b-415a-8c44-ac7ad42de59e"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/arriving |
Schema | dpi-arriving.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Notice to passengers that the bus is approaching a stop.
Accepts the following message:
For display of arriving information to passengers
{
"eventTimestamp": "2024-11-28T13:51:06.337903113Z",
"traceId": "1acad49e-da9c-4ecc-8704-7b881d6cccc9",
"expiryTimestamp": "2024-11-28T13:51:21.337909232Z",
"ref": "NSR:StopPlace:6671",
"order": 29,
"journeyRef": "RUT:ServiceJourney:011578-018334-132500-31-2-Weekday-125",
"message": {
"en": {
"title": "Arriving at",
"text": "Kastellet"
},
"no": {
"title": "Ankommer",
"text": "Kastellet"
}
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/command |
Schema | dpi-command.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
This channels is reserved for command and control messages originated by the PTA. Typical use cases include:
The payload is defined as an object with no structure to provide flexibility.
Accepts the following message:
Message sent to bus to control DPI functions
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"type": "DEBUG",
"payload": {
"command": "LOG_TRANSFER",
"args": {
"level": "ERROR",
"limit": 10,
"page": 0
}
}
}
Responses generated from requests sent on /pe/dpi/command
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/command_response |
Schema | dpi-command_response.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
This API is reserved for command and control messages for debugging purposes of DPI client.
Accepts the following message:
Message sent from vehicle as response to DPI commands
{
"eventTimestamp": "2025-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"correlationId": "211be0f8-2901-a768-0b13-3841a26826a0",
"command": "GET_FEATURES",
"payload": {
"feature_1": false,
"feature_2": true
}
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/connection_status |
Schema | dpi-connection-status.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Connection messages sent when the DPI client connects and disconnects from the MQTT broker. It is used to monitor the connection status of the DPI client and detect screens where the browser may be in restart loop.
Accepts the following message:
DPI Connection status topic
{
"clientId": "ad71dba8-c881-11e8-a8d5-f2801f1b9fd1",
"lastLoaded": "2018-10-31T12:45:45Z",
"connected": false
}
{
"clientId": "ad71dba8-c881-11e8-a8d5-f2801f1b9fd1",
"lastLoaded": "2018-10-31T12:45:45Z",
"connected": true
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/connections |
Schema | dpi-connections.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
List of connections for the remaining stops on a journey with expected departures.
Accepts the following message:
This schema defines the connection message sent as an MQTT message to buses
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"expiryTimestamp": "2020-03-16T14:35:08.762206Z",
"nextStop": {
"stopPlaceId": "NSR:StopPlace:6498",
"quayId": "NSR:Quay:11950"
},
"journeyId": "RUT:ServiceJourney:60-138542-15631728",
"routeId": "RUT:Route:60-4",
"calls": [
{
"name": "Tøyenkirken",
"stopPlaceId": "NSR:StopPlace:6498",
"quayId": "NSR:Quay:11950",
"index": 4,
"connections": []
},
{
"name": "Tøyen skole",
"stopPlaceId": "NSR:StopPlace:6480",
"quayId": "NSR:Quay:11910",
"index": 5,
"connections": []
},
{
"name": "Tøyen",
"stopPlaceId": "NSR:StopPlace:6478",
"quayId": "NSR:Quay:11908",
"index": 6,
"connections": [
{
"line": {
"id": "RUT:Line:20",
"publicCode": "20",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Galgeberg",
"text": "5 min",
"departureTime": "2020-03-16T14:35:37Z",
"delay": "PT1M37S",
"journeyId": "RUT:ServiceJourney:20-131531-15685688"
},
{
"destination": "Galgeberg",
"text": "10 min",
"departureTime": "2020-03-16T14:40:58Z",
"delay": "PT1M58S",
"journeyId": "RUT:ServiceJourney:20-131531-15685689"
},
{
"destination": "Galgeberg",
"text": "15:45",
"departureTime": "2020-03-16T14:45:09Z",
"delay": "PT1M9S",
"journeyId": "RUT:ServiceJourney:20-131531-15685690"
}
]
},
{
"line": {
"id": "RUT:Line:20",
"publicCode": "20",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11906",
"description": "i Kjølberggata"
},
"direction": "2",
"departures": [
{
"destination": "Skøyen",
"text": "3 min",
"departureTime": "2020-03-16T14:34:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685534"
},
{
"destination": "Skøyen",
"text": "8 min",
"departureTime": "2020-03-16T14:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685535"
},
{
"destination": "Skøyen",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:20-131531-15685536"
}
]
}
]
},
{
"name": "Brinken",
"stopPlaceId": "NSR:StopPlace:6562",
"quayId": "NSR:Quay:12119",
"index": 7,
"connections": []
},
{
"name": "Kampen kirke",
"stopPlaceId": "NSR:StopPlace:6564",
"quayId": "NSR:Quay:12123",
"index": 8,
"connections": []
},
{
"name": "Kampen park",
"stopPlaceId": "NSR:StopPlace:6571",
"quayId": "NSR:Quay:12135",
"index": 9,
"connections": []
},
{
"name": "Ensjøveien",
"stopPlaceId": "NSR:StopPlace:6046",
"quayId": "NSR:Quay:11097",
"index": 10,
"connections": []
},
{
"name": "Tøyen stasjon",
"stopPlaceId": "NSR:StopPlace:6044",
"quayId": "NSR:Quay:11092",
"index": 11,
"connections": []
},
{
"name": "Hasle kirke",
"stopPlaceId": "NSR:StopPlace:6049",
"quayId": "NSR:Quay:11101",
"index": 12,
"connections": []
},
{
"name": "Hasle",
"stopPlaceId": "NSR:StopPlace:6031",
"quayId": "NSR:Quay:11076",
"index": 13,
"connections": [
{
"line": {
"id": "RUT:Line:21",
"publicCode": "21",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11069",
"publicCode": "D"
},
"direction": "1",
"departures": [
{
"destination": "Helsfyr T",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685155"
},
{
"destination": "Helsfyr T",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685156"
},
{
"destination": "Helsfyr T",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685157"
}
]
},
{
"line": {
"id": "RUT:Line:21",
"publicCode": "21",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11070",
"publicCode": "C"
},
"direction": "2",
"departures": [
{
"destination": "Tjuvholmen",
"text": "13 min",
"departureTime": "2020-03-16T14:44:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685274"
},
{
"destination": "Tjuvholmen",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685275"
},
{
"destination": "Tjuvholmen",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:21-131531-15685276"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11075",
"publicCode": "B"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "15:47",
"departureTime": "2020-03-16T14:47:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685026"
},
{
"destination": "Fornebu",
"text": "15:54",
"departureTime": "2020-03-16T14:54:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685039"
},
{
"destination": "Fornebu",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685027"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Økern T",
"text": "15:48",
"departureTime": "2020-03-16T14:48:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685014"
},
{
"destination": "Økern T",
"text": "15:57",
"departureTime": "2020-03-16T14:57:43Z",
"delay": "PT1M43S",
"journeyId": "RUT:ServiceJourney:28-131531-15685006"
},
{
"destination": "Økern T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685015"
}
]
}
]
},
{
"name": "Haslevangen",
"stopPlaceId": "NSR:StopPlace:6036",
"quayId": "NSR:Quay:11080",
"index": 14,
"connections": [
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Økern T",
"text": "15:49",
"departureTime": "2020-03-16T14:49:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685014"
},
{
"destination": "Økern T",
"text": "15:58",
"departureTime": "2020-03-16T14:58:43Z",
"delay": "PT1M43S",
"journeyId": "RUT:ServiceJourney:28-131531-15685006"
},
{
"destination": "Økern T",
"text": "16:04",
"departureTime": "2020-03-16T15:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685015"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11079"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "15:46",
"departureTime": "2020-03-16T14:46:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685026"
},
{
"destination": "Fornebu",
"text": "15:53",
"departureTime": "2020-03-16T14:53:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685039"
},
{
"destination": "Fornebu",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685027"
}
]
}
]
},
{
"name": "Økern",
"stopPlaceId": "NSR:StopPlace:5907",
"quayId": "NSR:Quay:10835",
"index": 15,
"connections": [
{
"line": {
"id": "RUT:Line:23",
"publicCode": "23",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10834",
"publicCode": "B"
},
"direction": "1",
"departures": [
{
"destination": "Simensbråten",
"text": "15:55",
"departureTime": "2020-03-16T14:55:18Z",
"delay": "PT18S",
"journeyId": "RUT:ServiceJourney:23-137908-16794834"
},
{
"destination": "Simensbråten",
"text": "16:05",
"departureTime": "2020-03-16T15:05:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794835"
},
{
"destination": "Simensbråten",
"text": "16:15",
"departureTime": "2020-03-16T15:15:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794836"
}
]
},
{
"line": {
"id": "RUT:Line:23",
"publicCode": "23",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Lysaker",
"text": "16:06",
"departureTime": "2020-03-16T15:06:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794741"
},
{
"destination": "Lysaker",
"text": "15:56",
"departureTime": "2020-03-16T14:56:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794740"
},
{
"destination": "Lysaker",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:23-137908-16794742"
}
]
},
{
"line": {
"id": "RUT:Line:24",
"publicCode": "24",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10834",
"publicCode": "B"
},
"direction": "1",
"departures": [
{
"destination": "Brynseng T",
"text": "15:55",
"departureTime": "2020-03-16T14:55:46Z",
"delay": "PT5M46S",
"journeyId": "RUT:ServiceJourney:24-137908-16794944"
},
{
"destination": "Brynseng T",
"text": "16:00",
"departureTime": "2020-03-16T15:00:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794945"
},
{
"destination": "Brynseng T",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794946"
}
]
},
{
"line": {
"id": "RUT:Line:24",
"publicCode": "24",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:11",
"departureTime": "2020-03-16T15:11:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794982"
},
{
"destination": "Fornebu",
"text": "16:41",
"departureTime": "2020-03-16T15:41:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794985"
},
{
"destination": "Fornebu",
"text": "16:31",
"departureTime": "2020-03-16T15:31:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:24-137908-16794984"
}
]
},
{
"line": {
"id": "RUT:Line:28",
"publicCode": "28",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10832",
"publicCode": "A"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:43",
"departureTime": "2020-03-16T15:43:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685030"
},
{
"destination": "Fornebu",
"text": "16:05",
"departureTime": "2020-03-16T15:05:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685040"
},
{
"destination": "Fornebu",
"text": "16:35",
"departureTime": "2020-03-16T15:35:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:28-131531-15685042"
}
]
},
{
"line": {
"id": "RUT:Line:345",
"publicCode": "345",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Vestvollen",
"text": "15:50",
"departureTime": "2020-03-16T14:50:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:345-138458-16752823"
},
{
"destination": "Vestvollen",
"text": "16:00",
"departureTime": "2020-03-16T15:00:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:345-138458-16752806"
},
{
"destination": "Vestvollen",
"text": "16:01",
"departureTime": "2020-03-16T15:01:22Z",
"delay": "PT21M22S",
"journeyId": "RUT:ServiceJourney:345-138458-16752805"
}
]
},
{
"line": {
"id": "RUT:Line:67",
"publicCode": "67",
"transportMode": "bus"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog sentrum",
"text": "15:51",
"departureTime": "2020-03-16T14:51:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631987"
},
{
"destination": "Lørenskog sentrum",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631988"
},
{
"destination": "Lørenskog sentrum",
"text": "16:11",
"departureTime": "2020-03-16T15:11:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:67-138542-15631989"
}
]
}
]
},
{
"name": "Økern næringspark",
"stopPlaceId": "NSR:StopPlace:5916",
"quayId": "NSR:Quay:10849",
"index": 16,
"connections": []
},
{
"name": "Lånekassen",
"stopPlaceId": "NSR:StopPlace:5918",
"quayId": "NSR:Quay:10852",
"index": 17,
"connections": []
},
{
"name": "Nedre Risløkka",
"stopPlaceId": "NSR:StopPlace:5928",
"quayId": "NSR:Quay:10872",
"index": 18,
"connections": []
},
{
"name": "Rabbeveien",
"stopPlaceId": "NSR:StopPlace:5930",
"quayId": "NSR:Quay:10875",
"index": 19,
"connections": []
},
{
"name": "Anton Tschudis vei",
"stopPlaceId": "NSR:StopPlace:5932",
"quayId": "NSR:Quay:10878",
"index": 20,
"connections": []
},
{
"name": "Kroklia",
"stopPlaceId": "NSR:StopPlace:5941",
"quayId": "NSR:Quay:10894",
"index": 21,
"connections": []
},
{
"name": "Øvre Risløkka",
"stopPlaceId": "NSR:StopPlace:5943",
"quayId": "NSR:Quay:10898",
"index": 22,
"connections": []
},
{
"name": "Økernbråten",
"stopPlaceId": "NSR:StopPlace:5945",
"quayId": "NSR:Quay:10902",
"index": 23,
"connections": [
{
"line": {
"id": "RUT:Line:58",
"publicCode": "58",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10901"
},
"direction": "1",
"departures": [
{
"destination": "Tveita T",
"text": "15:57",
"departureTime": "2020-03-16T14:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261911"
},
{
"destination": "Tveita T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261912"
},
{
"destination": "Tveita T",
"text": "16:27",
"departureTime": "2020-03-16T15:27:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:58-138542-17261913"
}
]
}
]
},
{
"name": "Linne hotell",
"stopPlaceId": "NSR:StopPlace:5952",
"quayId": "NSR:Quay:10916",
"index": 24,
"connections": []
},
{
"name": "Linderud T",
"stopPlaceId": "NSR:StopPlace:5950",
"quayId": "NSR:Quay:10911",
"index": 25,
"connections": []
},
{
"name": "Veitvetstubben",
"stopPlaceId": "NSR:StopPlace:5967",
"quayId": "NSR:Quay:10946",
"index": 26,
"connections": []
},
{
"name": "Linderud senter",
"stopPlaceId": "NSR:StopPlace:5974",
"quayId": "NSR:Quay:10960",
"index": 27,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843154"
},
{
"destination": "Lørenskog stasjon",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843009"
},
{
"destination": "Lørenskog stasjon",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:04",
"departureTime": "2020-03-16T15:04:11Z",
"delay": "PT2M11S",
"journeyId": "RUT:ServiceJourney:31-138571-15639652"
},
{
"destination": "Grorud T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:01Z",
"delay": "PT1H10M1S",
"journeyId": "RUT:ServiceJourney:31-138571-15639647"
},
{
"destination": "Grorud T",
"text": "16:14",
"departureTime": "2020-03-16T15:14:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10959"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632327"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:18",
"departureTime": "2020-03-16T15:18:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:33",
"departureTime": "2020-03-16T15:33:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
}
]
},
{
"name": "Linderudsletta",
"stopPlaceId": "NSR:StopPlace:5972",
"quayId": "NSR:Quay:10956",
"index": 28,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843093"
},
{
"destination": "Majorstuen",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843094"
},
{
"destination": "Majorstuen",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Snarøya",
"text": "16:07",
"departureTime": "2020-03-16T15:07:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639845"
},
{
"destination": "Snarøya",
"text": "16:19",
"departureTime": "2020-03-16T15:19:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639846"
},
{
"destination": "Snarøya",
"text": "16:27",
"departureTime": "2020-03-16T15:27:31Z",
"delay": "PT56M31S",
"journeyId": "RUT:ServiceJourney:31-138571-15639842"
}
]
},
{
"line": {
"id": "RUT:Line:2031",
"publicCode": "31E",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "1",
"departures": [
{
"destination": "Kalbakken",
"text": "16:03",
"departureTime": "2020-03-16T15:03:55Z",
"delay": "PT1M55S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640592"
},
{
"destination": "Kalbakken",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640593"
},
{
"destination": "Kalbakken",
"text": "16:22",
"departureTime": "2020-03-16T15:22:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:2031-138571-15640594"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:24",
"departureTime": "2020-03-16T15:24:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
},
{
"destination": "Filipstad",
"text": "16:39",
"departureTime": "2020-03-16T15:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
}
]
},
{
"line": {
"id": "RUT:Line:380",
"publicCode": "380",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10955"
},
"direction": "1",
"departures": [
{
"destination": "Oslo bussterminal",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659813"
},
{
"destination": "Oslo bussterminal",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659814"
},
{
"destination": "Oslo bussterminal",
"text": "16:57",
"departureTime": "2020-03-16T15:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659815"
}
]
},
{
"line": {
"id": "RUT:Line:380",
"publicCode": "380",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "2",
"departures": [
{
"destination": "Lillestrøm",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659969"
},
{
"destination": "Lillestrøm",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659970"
},
{
"destination": "Lillestrøm",
"text": "16:57",
"departureTime": "2020-03-16T15:57:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:380-136266-16659971"
}
]
},
{
"line": {
"id": "RUT:Line:390",
"publicCode": "390",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10950"
},
"direction": "2",
"departures": [
{
"destination": "Kongskog",
"text": "16:08",
"departureTime": "2020-03-16T15:08:19Z",
"delay": "PT42M19S",
"journeyId": "RUT:ServiceJourney:390-136266-16660240"
},
{
"destination": "Nittedal sentrum",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660219"
},
{
"destination": "Nittedal sentrum",
"text": "16:46",
"departureTime": "2020-03-16T15:46:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660220"
}
]
},
{
"line": {
"id": "RUT:Line:390",
"publicCode": "390",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10955"
},
"direction": "1",
"departures": [
{
"destination": "Oslo bussterminal",
"text": "16:03",
"departureTime": "2020-03-16T15:03:04Z",
"delay": "PT1M4S",
"journeyId": "RUT:ServiceJourney:390-136266-16660178"
},
{
"destination": "Oslo bussterminal",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660203"
},
{
"destination": "Oslo bussterminal",
"text": "16:32",
"departureTime": "2020-03-16T15:32:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:390-136266-16660179"
}
]
}
]
},
{
"name": "Kolåsbakken",
"stopPlaceId": "NSR:StopPlace:5978",
"quayId": "NSR:Quay:10969",
"index": 29,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:01",
"departureTime": "2020-03-16T15:01:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843154"
},
{
"destination": "Lørenskog stasjon",
"text": "16:08",
"departureTime": "2020-03-16T15:08:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843009"
},
{
"destination": "Lørenskog stasjon",
"text": "16:16",
"departureTime": "2020-03-16T15:16:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
}
]
},
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:02",
"departureTime": "2020-03-16T15:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843093"
},
{
"destination": "Majorstuen",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843094"
},
{
"destination": "Majorstuen",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:02",
"departureTime": "2020-03-16T15:02:05Z",
"delay": "PT1M5S",
"journeyId": "RUT:ServiceJourney:31-138571-15639652"
},
{
"destination": "Grorud T",
"text": "16:11",
"departureTime": "2020-03-16T15:11:01Z",
"delay": "PT1H10M1S",
"journeyId": "RUT:ServiceJourney:31-138571-15639647"
},
{
"destination": "Grorud T",
"text": "16:14",
"departureTime": "2020-03-16T15:14:24Z",
"delay": "PT1M24S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Snarøya",
"text": "16:08",
"departureTime": "2020-03-16T15:08:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639845"
},
{
"destination": "Snarøya",
"text": "16:20",
"departureTime": "2020-03-16T15:20:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639846"
},
{
"destination": "Snarøya",
"text": "16:28",
"departureTime": "2020-03-16T15:28:31Z",
"delay": "PT56M31S",
"journeyId": "RUT:ServiceJourney:31-138571-15639842"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:09",
"departureTime": "2020-03-16T15:09:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:24",
"departureTime": "2020-03-16T15:24:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
},
{
"destination": "Filipstad",
"text": "16:39",
"departureTime": "2020-03-16T15:39:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:10968"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:03",
"departureTime": "2020-03-16T15:03:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632327"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:18",
"departureTime": "2020-03-16T15:18:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:33",
"departureTime": "2020-03-16T15:33:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
}
]
},
{
"name": "Tonsenhagen",
"stopPlaceId": "NSR:StopPlace:6008",
"quayId": "NSR:Quay:11023",
"index": 30,
"connections": [
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Majorstuen",
"text": "16:19",
"departureTime": "2020-03-16T15:19:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843170"
},
{
"destination": "Majorstuen",
"text": "16:35",
"departureTime": "2020-03-16T15:35:36Z",
"delay": "PT1M36S",
"journeyId": "RUT:ServiceJourney:25-138571-16843096"
},
{
"destination": "Majorstuen",
"text": "16:42",
"departureTime": "2020-03-16T15:42:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843097"
}
]
},
{
"line": {
"id": "RUT:Line:25",
"publicCode": "25",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Lørenskog stasjon",
"text": "16:15",
"departureTime": "2020-03-16T15:15:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843010"
},
{
"destination": "Lørenskog stasjon",
"text": "16:37",
"departureTime": "2020-03-16T15:37:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843012"
},
{
"destination": "Lørenskog stasjon",
"text": "16:45",
"departureTime": "2020-03-16T15:45:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:25-138571-16843013"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Fornebu",
"text": "16:04",
"departureTime": "2020-03-16T15:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639929"
},
{
"destination": "Fornebu",
"text": "17:04",
"departureTime": "2020-03-16T16:04:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639934"
},
{
"destination": "Fornebu",
"text": "16:28",
"departureTime": "2020-03-16T15:28:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639931"
}
]
},
{
"line": {
"id": "RUT:Line:31",
"publicCode": "31",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Grorud T",
"text": "16:48",
"departureTime": "2020-03-16T15:48:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639656"
},
{
"destination": "Grorud T",
"text": "16:12",
"departureTime": "2020-03-16T15:12:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:31-138571-15639653"
},
{
"destination": "Grorud T",
"text": "16:58",
"departureTime": "2020-03-16T15:58:28Z",
"delay": "PT22M28S",
"journeyId": "RUT:ServiceJourney:31-138571-15639655"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"quay": {
"id": "NSR:Quay:11024"
},
"direction": "1",
"departures": [
{
"destination": "Ellingsrudåsen T",
"text": "16:17",
"departureTime": "2020-03-16T15:17:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632328"
},
{
"destination": "Ellingsrudåsen T",
"text": "17:02",
"departureTime": "2020-03-16T16:02:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632331"
},
{
"destination": "Ellingsrudåsen T",
"text": "16:32",
"departureTime": "2020-03-16T15:32:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632329"
}
]
},
{
"line": {
"id": "RUT:Line:33",
"publicCode": "33",
"transportMode": "bus"
},
"direction": "2",
"departures": [
{
"destination": "Filipstad",
"text": "16:10",
"departureTime": "2020-03-16T15:10:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632358"
},
{
"destination": "Filipstad",
"text": "16:40",
"departureTime": "2020-03-16T15:40:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632360"
},
{
"destination": "Filipstad",
"text": "16:25",
"departureTime": "2020-03-16T15:25:00Z",
"delay": "PT0S",
"journeyId": "RUT:ServiceJourney:33-138542-15632359"
}
]
}
]
}
]
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/diagnostics |
Schema | dpi-diagnostics.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Report to PTA BO about a screen.
The DPI application itself produces diagnostic messages. The payload is defined as an object with no pre-defined structure to provide flexibility.
Accepts the following message:
{
"eventTimestamp": "2019-10-09T10:16:07.000Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"clientId": "638f47b7-d0d4-4043-9125-2dd8db6b8a84",
"type": "HEARTBEAT",
"payload": {
"client": {
"version": "2019-08-16T08-11-58Z",
"display": "1",
"windowHeight": 1080,
"windowWidth": 1920
},
"routeId": "RUT:Route:0-54012"
}
}
{
"eventTimestamp": "2018-10-31T12:45:50.010Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"clientId": "ad71dba8-c881-11e8-a8d5-f2801f1b9fd1",
"type": "STATUS",
"payload": {
"version": {
"application": "2018-10-03T12:45:50Z",
"media": "2018-10-05T12:45:50Z"
},
"display": {
"type": "1",
"res": {
"height": 360,
"width": 1080
}
},
"stats": {
"logEntries": {
"error": 0,
"warning": 14,
"info": 123
},
"lastLoaded": "2018-10-31T12:45:45Z",
"pingFreq": 3600,
"usedStorage": "124kb"
}
}
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/display_status |
Schema | dpi-display-status.json |
Maintainer | DPI |
Producer | DPI |
Consumer | PTO, DPI |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
The DPI Display status topic is used to inform the Ruter BO about the current state (Tilstandsmelding) for DPI.
This messages is produced every fifth minute and every time a message is received on pe/dpi/journey
and used in SLA measurement.
Accepts the following message:
DPI Display status topic
{
"eventTimestamp": "2025-05-20T15:45:22.789Z",
"traceId": "cd5cfa81-8e44-4205-b6be-a753259b8976",
"type": "DISPLAY_STATUS",
"browser": {
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"
},
"client": {
"url": "http://webserver.local/app?clientId=bdfc2922-38e6-4dec-9421-da902277e645&physicalId=127.0.0.1#/display/1",
"version": "2025-05-12T08-21-51Z",
"clientId": "49dc634e-a3f0-4b04-8492-c8ee558e8e3f",
"physicalId": "127.0.0.1",
"connectivity": "ONLINE"
},
"media": {
"version": "2025-05-14T10:17:21Z"
},
"journey": {
"traceId": "550e8400-e29b-41d4-a716-446655440002",
"journeyRef": "820-2025-05-20T07:45:00+02:00",
"assignmentId": "ab599917ed214472a40c79c18e6cb6b0"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/eta |
Schema | dpi-eta.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Estimated arrival at the remaining stops.
Accepts the following message:
Estimated time of arrival for future stops on a journey
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"estimatedCalls": [
{
"eta": "2017-10-13T12:27:04.416Z",
"stopPlaceId": "RUT:StopPlace:03010510",
"text": "Nå"
},
{
"eta": "2017-10-13T12:27:04.416Z",
"stopPlaceId": "RUT:StopPlace:03010511",
"text": "1 Min"
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/externaldisplay |
Schema | dpi-externaldisplay.json |
Maintainer | DPI |
Producer | DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Message to be shown on the external destination display. Usually line number (publicCode) and routeName, with support for alternative message.
Accepts the following message:
Notification that the external displays should show new destination information
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"publicCode": "20",
"destination": "Galgeberg",
"alternativeMessage": "Duis aute irure dolor"
}
{
"eventTimestamp": "2021-03-04T15:08:07.519Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"destination": "Ikke i trafikk"
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/feature_toggle |
Schema | dpi-feature-toggle.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Message with all active and inactive features.
Accepts the following message:
Message sent to vehicle to feature toggle DPI functions
{
"eventTimestamp": "2025-05-20T09:07:39.927Z",
"traceId": "f59a4ade-1e65-4b02-8def-edd3641852e8",
"features": {
"qr_feedback": true,
"other_feedback": false
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/journey |
Schema | dpi-journey.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Message containing the stops included in the journey, connections to other lines, positions ++.
Accepts the following message:
List of stops for current journey in block
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"journeyId": "RUT:ServiceJourney:31-117215-13227462",
"journeyRef": "31001-2019-02-17T21:55:00+01:00",
"assignmentId": "ab599917ed214472a40c79c18e6cb6b0",
"route": {
"id": "RUT:Route:31-1041",
"name": "Fornebu vest-Tonsenhagen",
"line": {
"id": "RUT:Line:31",
"name": "Snarøya - Fornebu - Tonsenhagen - Grorud",
"publicCode": "31"
},
"journeyPatternRef": "RUT:JourneyPattern:011579",
"stopPlaces": [
{
"id": "RUT:StopPlace:02190017",
"name": "Fornebu vest",
"cancelled": false,
"location": {
"latitude": 12.33345,
"longitude": 12.33345
},
"tariffZones": [
"OST:TariffZone:227",
"RUT:TariffZone:1"
]
},
{
"id": "RUT:StopPlace:03010013",
"name": "Jernbanetorget",
"cancelled": false,
"location": {
"latitude": 12.33345,
"longitude": 12.33345
},
"tariffZones": [
"RUT:TariffZone:1"
]
}
]
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/key_stops |
Schema | dpi-key_stops.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
List of X number of most trafficked stops in the rest of the journey. Based on predicted number of passengers leaving on each stop
Accepts the following message:
This schema defines the Key Stops message sent as an MQTT message to vehicles
{
"eventTimestamp": "2022-05-10T10:35:16.708Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"id": "RUT:ServiceJourney:18-164036-22694106",
"lineId": "RUT:Line:18",
"linePublicCode": "18",
"stopPlaces": [
{
"stopPlaceId": "NSR:StopPlace:3986",
"stopPlaceIndex": 11,
"boarding": {
"predictedValue": 0.33333334,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 5.233333,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6258",
"stopPlaceIndex": 16,
"boarding": {
"predictedValue": 1.4375,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 0.28125,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6269",
"stopPlaceIndex": 20,
"boarding": {
"predictedValue": 6.6968083,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 12.484042,
"qualityIndicator": "GOOD"
}
},
{
"stopPlaceId": "NSR:StopPlace:6266",
"stopPlaceIndex": 26,
"boarding": {
"predictedValue": 1.5,
"qualityIndicator": "GOOD"
},
"alighting": {
"predictedValue": 0.4375,
"qualityIndicator": "GOOD"
}
}
]
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/dpi/logs |
Schema | dpi-logs.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Logs from the DPI client are published to this topic. The payload includes the log level and message, and may include a stack trace when available.
Accepts the following message:
Logs from the DPI client
{
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"payload": {
"level": "ERROR",
"message": "Connection timed out"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/nextstop |
Schema | dpi-nextstop.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Next stop on the buss route after leaving a stop.
Accepts the following message:
Notification that vehicle has a new next stop
{
"eventTimestamp": "2017-10-31T08:38:02.749Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"stopPlaceId": "RUT:StopPlace:03012453",
"index": 0
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/dpi/pa |
Schema | dpi-pa.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Message to be shown on internal displays. May contain references to videos, html, images, text etc.
Accepts the following message:
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "CLEAR_SCREEN"
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "IMAGE",
"duration": 5,
"src": "../media/logo.png"
},
{
"type": "HTML",
"duration": 10,
"src": "../media/kampanje.html"
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "TEXT",
"duration": 10,
"colorScheme": "INFO",
"icon": "ARROW_UP",
"iconAnchor": "LEFT",
"message": {
"no": {
"title": "Tittel på melding",
"paragraphs": [
"En tekst",
"En annen tekst"
]
}
}
}
]
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"ref": "757fd8b4-2e57-4ad3-9aee-76e793c514d9",
"content": [
{
"type": "VIDEO",
"duration": 10,
"src": "../media/1080p_Ruter_Takk.mp4"
}
]
}
Field | Value |
---|---|
Central Topic | {operatorId}/ruter/{vehicleId}/adt/v3/pe/input/stop_button |
Schema | stop-button.json |
Producer | Ruter DPI |
Consumer | PTO |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message should be interpreted as if the stop button, accessibility button or the stop was served by the vehicle.
A corresponding message should be produced on /sensors/stop_button
as normal, confirming that the stop signal lights was
lit and the vehicle actually served the stop.
Frequency: on change
Accepts the following message:
Describes if passengers have requested that the bus should stop (stop button pressed).
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": false,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": true
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/sales/current_stop |
Schema | sales-current_stop.json |
Maintainer | Betjent salg |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Used to alert the RuterSalg app about the current stop. This message is triggered when the Progress entity determines that the bus is arriving at the quay, meaning it is maximum 35 meters from the quay, approaching it. Contains information about the zone the current stop belongs to.
The message also contains information about the NEXT stop and its zone. This is used to determine if the bus is approaching a zone border. One use for this is whether or not to sell a "smart ticket" if the passenger has funds in their travel purse.
Accepts the following message:
{
"eventTimestamp": "2025-02-14T12:21:10Z",
"traceId": "50168016-ee07-4943-bf79-2c11c175500f",
"progressRef": "6edad7a4-6ccc-4403-9157-5471aa4704e9",
"actualCallRef": "2abec1bf-c5b2-4671-85b7-b8e3111fb363",
"vehicleRef": "XNL404P500D041753",
"assignmentRef": "9c720d43bba44dcd89b22ce98b07f8af",
"chainId": "130",
"journeyRef": "8169-2025-02-14T12:51:00+01:00",
"lineRef": "RUT:Line:580",
"lineName": "Kolbotn - Ski",
"blockId": "a83fc5a7-1002-4f34-b778-ca5ec85751f4",
"quayId": "NSR:Quay:6220",
"stopPlaceId": "NSR:StopPlace:3503",
"tariffZones": {
"onCurrentStop": {
"id": "RUT:TariffZone:228",
"name": "2S",
"nodId": "228",
"fareZoneId": "RUT:FareZone:10"
},
"onNextStop": {
"id": "RUT:TariffZone:228",
"name": "2S",
"nodId": "228",
"fareZoneId": "RUT:FareZone:10"
}
}
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/sales/diagnostics |
Schema | sales-diagnostics.json |
Maintainer | Betjent salg |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Diagnostics message generated by Betjent Salg
.
This topic is intended for applications interested in health status for the Betjent Salg
application on each vehicle. The health status is intended both as a real time surveillance of health status for each individual vehicle as well as for aggregating data per operator to see larger, more general issues. The topic can also, when enriched by other data, determine whether or not Betjent Salg
was used and working on a specific departure.
Accepts the following message:
{
"eventTimestamp": "2020-04-28T13:49:50.814Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"spanId": "76867064-33bb-4c3a-b692-1b688253441a",
"metrics": {
"nfcStatus": {
"interfaceType": "usb",
"connected": true,
"errorMessage": ""
},
"printerStatus": {
"connected": false,
"errorMessage": "Connection failed with error code 12345"
},
"internetConnectionStatus": {
"connected": true,
"errorMessage": ""
},
"loggedIn": false
},
"context": {
"vehicleRef": "XNL404P500D041745",
"lineRef": "RUT:Line:81",
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"stopPlaceId": "NSR:StopPlace:3996",
"tariffZone": "RUT:TariffZone:227",
"trigger": "StopPlace",
"appVersion": "2.7.1",
"userId": "nor12345"
}
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/pe/sales/sla |
Schema | sales-sla.json |
Maintainer | Betjent salg |
Producer | Betjent salg |
Consumer | Betjent salg |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
SLA message generated by Betjent salg (RuterSalg app and clones).
The topic is used in SLA measurements. The 'metrics' section contains the SLA-related fields, while the 'context' section contains meta data related to a potential breach.
Accepts the following message:
{
"eventTimestamp": "2020-04-28T13:49:50.814Z",
"traceId": "c6494c5c-eff7-45ec-a8d9-722a387eefb2",
"spanId": "76867064-33bb-4c3a-b692-1b688253441a:bdda2da8-72e7-467e-940c-21173b4aa3d9",
"metrics": {
"loggedIn": true
},
"context": {
"vehicleRef": "XNL404P500D041745",
"lineRef": "RUT:Line:81",
"progressRef": "3841a268-0c03-4588-b476-211be0f26a0d",
"currentStopTimestamp": "2020-04-28T13:49:50.814Z",
"assignmentRef": "bdc4e54425fb418fa7ca5ea769d18416",
"actualCallRef": "bd58550c-bd45-4047-adf5-a7f8cab3ff05",
"chainId": "130",
"journeyRef": "42911-2020-05-25T16:42:00+02:00",
"stopPlaceId": "NSR:StopPlace:3996",
"tariffZone": "RUT:TariffZone:227",
"appVersion": "2.7.1",
"userId": "nor12345",
"adtApiVersion": "3"
}
}
Field | Value |
---|---|
Central Topic | {operatorId}/{authorityId}/{vehicleId}/adt/v4/pe/vehicle/api |
Schema | api.json |
Maintainer | DPI |
Producer | DPI |
Consumer | DPI, Betjent salg |
Service Level | ⛔ PTA internal API. No restrictions apply. May be removed or modified freely by the PTA |
Message used by the PTA to distribute information about the vehicle and it's supported APIs as provided by the PTO.
Accepts the following message:
Vehicle API topic
{
"eventTimestamp": "2021-03-04T15:08:07.519Z",
"traceId": "2ccf77aa-463f-4b98-ad19-61ec5d213e36",
"operatorRef": "nobina",
"vehicleId": "VNE5046N40M039404",
"apiVersion": "3"
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/accelerometer |
Schema | accelerometer.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Expects a message that provides aggregated acceleration measurements over a 10-second interval. Each payload must include the minimum, maximum, and average acceleration values along the X, Y, and Z axes.
By default, the schema assumes the accelerometer is mounted so that:
If no orientation override fields are present, consumers should interpret the numerical values according to these defaults.
Producers may optionally set xOrientation
, yOrientation
or zOrientation
, each of which must be one of the six
values: F (forward), B (backward), L (left), R (right), U (up) or D (down). If none are
provided, the system assumes xOrientation = "F"
, yOrientation = "L"
, and zOrientation = "U"
.
For a valid override, exactly one axis must be aligned along the forward/backward direction (F or B), exactly one along the up/down direction (U or D), and exactly one along the left/right direction (L or R). In other words, among the three fields there must be one value from { F, B }, one from { U, D }, and one from { L, R }. Any other combination is considered invalid and must be corrected before publishing.
Accepts the following message:
Schema for accelerometer sensor data. Accelerations are measured along the sensor's axes: X points forward, Y points left, and Z points upward. 'Forward' is defined relative to the vehicle's front (as configured or physically marked). All acceleration values are in units of g (where 1g ≈ 9.81 m/s²). Any divergence from the standard must be specified using the optional axis orientation overrides (fields xOrientation, yOrientation, and zOrientation).
{
"eventTimestamp": "2025-05-13T12:00:00.000Z",
"traceId": "baf3d8ac-1234-4e0c-9e9e-abc123def456",
"messageNumber": 27,
"sensorId": "SN-456789",
"xMin": -0.059570834,
"xMax": 0.108400127,
"xAvg": 0.027750913,
"yMin": 0.023440518,
"yMax": 0.129880276,
"yAvg": 0.073010342,
"zMin": 0.878910442,
"zMax": 1.109380158,
"zAvg": 0.993550981
}
{
"eventTimestamp": "2025-05-13T12:00:00.000Z",
"traceId": "baf3d8ac-1234-4e0c-9e9e-abc123def456",
"messageNumber": 27,
"sensorId": "SN-456789",
"xMin": 0.023440518,
"xMax": 0.129880276,
"xAvg": 0.073010342,
"yMin": 0.059570834,
"yMax": -0.108400127,
"yAvg": -0.027750913,
"zMin": 0.878910442,
"zMax": 1.109380158,
"zAvg": 0.993550981,
"xOrientation": "L",
"yOrientation": "B"
}
{
"eventTimestamp": "2025-05-13T12:00:00.000Z",
"traceId": "baf3d8ac-1234-4e0c-9e9e-abc123def456",
"messageNumber": 27,
"sensorId": "SN-456789",
"yMin": 0.059570834,
"yMax": -0.108400127,
"yAvg": -0.027750913,
"xMin": -0.023440518,
"xMax": 0.129880276,
"xAvg": 0.073010342,
"zMin": -0.878910442,
"zMax": -1.109380158,
"zAvg": -0.993550981,
"xOrientation": "R",
"yOrientation": "B",
"zOrientation": "D"
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/apc/{sensorId} |
Schema | apc.json |
Maintainer | Passasjertelling |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Identification of the physical sensor, e.g. serial number
Accepts the following message:
Raw-data from door-sensor for later evaluation.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2023-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorRef": "1",
"alightingCount": 23,
"boardingCount": 12,
"categoryActivities": [
{
"categoryRef": "ADULT",
"alightingCount": 23,
"boardingCount": 9
},
{
"categoryRef": "CHILD",
"alightingCount": 0,
"boardingCount": 3
}
]
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/charging |
Schema | charging.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the charging status and details of an electric vehicle. The message includes information about whether the vehicle is connected to a charging point, if it's actively charging, and the current charging effect in kilowatts (kW).
Message frequency: Messages should be sent on change, i.e., when there's a change in connection status, charging status, or a change in charging effect more or equal to 10kW.
Properties:
Accepts the following message:
Schema for vehicle charging data
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": true,
"isCharging": true
}
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": true,
"isCharging": false
}
{
"eventTimestamp": "2023-05-10T14:30:00Z",
"traceId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"messageNumber": 42,
"isConnected": true,
"isCharging": true,
"chargingEffect": 155.1
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/door |
Schema | door.json |
Maintainer | Passasjertelling |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Frequency: on change
Accepts the following message:
Describes if any door is open (if the door lock is released). Also see topic pe/doors_individually for status on individual doors.
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"messageNumber": 123456,
"doorOpen": true
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/energy_consumption |
Schema | energy-consumption.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Energy consumption in kilowatt-hours (kWh), including all onboard systems such as HVAC. The value should always accumulate over time.
Accepts the following message:
Schema for energy consumption sensor data. The value represents accumulated energy consumption in kilowatt-hours (kWh), including all onboard systems such as HVAC. The value should always accumulate over time.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 0.972
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/location |
Schema | location.json |
Maintainer | Progress |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the GNSS navigation receiver feedback in metric format.
The GNSS type is expected to be GPS. The GNSS coordinate system is expected be “WGS84”. Negative values is used south of the equator and west of Greenwich.
Frequency is expected to be at 1 message per second.
Accepts the following message:
Location sensor data
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-10-31T12:45:50.749Z",
"latitudeDegree": 59.251356,
"longitudeDegree": 11.581231,
"altitude": 124,
"messageNumber": 12345,
"speedOverGround": 15.3,
"trackDegreeTrue": 324,
"signalQuality": 1,
"numberOfSatellites": 12,
"hdop": 2.4
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/odometer |
Schema | odometer.json |
Maintainer | Progress |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes an odometer value in meters based on total vehicle distance or similar. Absolute value of less importance but should be increasing within the scope of a journey.
Frequency is expected to be at 1 message per second.
Accepts the following message:
Odometer data
{
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"eventTimestamp": "2017-11-30T23:45:52.006Z",
"distance": 23434556,
"messageNumber": 12345
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/state_of_charge |
Schema | state-of-charge.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the current charge level of the vehicle's battery.
Accepts the following message:
Schema for state of charge sensor data. The value represents the battery's charge level as a percentage (%), typically ranging from 0 to 100. The value should generally increase while charging and decrease during operation.
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 50.7
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/stop_button |
Schema | stop-button.json |
Maintainer | DPI |
Producer | PTO |
Consumer | DPI |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
This message should be produced whenever the stop signal is turned on or off. Depending on whether the regular stop button is pressed or the blue accessebility button is pressed, a different signal should be produced.
Whenever the vehicle has serviced a stop, the signal is to be reset.
Frequency: on change
Accepts the following message:
Describes if passengers have requested that the bus should stop (stop button pressed).
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": false,
"accessibility": false
}
{
"eventTimestamp": "2021-11-30T23:45:52.006Z",
"traceId": "c26f450f-2418-4792-a567-05f6771cba7a",
"stopPressed": true,
"accessibility": true
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/temperature_indoor |
Schema | temperature-indoor.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the measured air temperature inside a vehicle. Each message corresponds to one physical sensor and includes contextual information that indicates its approximate location, based on defined temperature zones along the vehicle’s length and its vertical level if applicable.
To support consistent interpretation across vehicle types, each temperature message includes:
Field | Type | Description |
---|---|---|
zone |
Int |
Position along the vehicle’s length. Divided into zones (starting from front = 1 ). Zone 0 is reserved exclusively for the driver's cabin. |
level |
Int |
Vertical level of the sensor. Only applicable for multi-level vehicles. If not provided, it will be interpreted as 1 (platform level). |
Note: All zones are approximate and not intended to represent exact physical locations. They serve to provide a general understanding of where a sensor is located within the vehicle.
Accepts the following message:
Schema for indoor temperature sensor data. The value represents the measured air temperature in degrees Celsius (°C) at a specific location within the vehicle. Location is defined by the car, zone (front, middle, rear, driver cabin), and level (e.g. below platform, platform, or upper level).
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"zone": 1,
"value": 20.7
}
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"zone": 3,
"level": 2,
"value": 20.7
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/temperature_outdoor |
Schema | temperature-outdoor.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Measurement of the external temperature around the vehicle.
Accepts the following message:
Schema for outdoor temperature sensor data
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": 20.7
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/temperature_water |
Schema | temperature-water.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the water temperature in Celsius, measured 1 meter below the water surface. The value should be a float with a resolution of 1°C or better.
Accepts the following message:
Schema for water temperature sensor data
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4KP-3R8Q",
"value": 18.5
}
Field | Value |
---|---|
Central Topic | {authorityId}/{operatorId}/{vehicleId}/adt/v4/sensors/windscreen_wiper |
Schema | windscreen-wiper.json |
Maintainer | Miljødata |
Producer | PTO |
Consumer | PTA |
Service Level | ✅ External API. Restrictions apply. Only backward compatible changes may happen within the major version. |
Describes the activity of the windscreen wipers.
Accepts the following message:
Schema for windscreen wiper sensor data. The value represents the the active status of the windscreen wipers
{
"eventTimestamp": "2022-05-09T13:27:59.624Z",
"traceId": "3841a268-0c03-4588-b476-211be0f26a0d",
"messageNumber": 1,
"sensorId": "XB7F-9T2M-L4FC-3R8Q",
"value": true
}