Transportation — entry 060 of 69
Transport for The Netherlands
Community-maintained, keyless REST API republishing the Dutch national KV78Turbo real-time transit feed (arrivals/departures per stop, line, or journey) covering nearly every Dutch operator. The service is HTTP-only in practice — its TLS certificate doesn't match the v0.ovapi.nl hostname — and the maintainers ask heavy users to request their own KV78 feed license from OpenOV rather than scraping this mirror.
OVapi is a free, keyless JSON API for live public transport in the Netherlands. It has real-time data for trams, buses, metro, and trains. You can look up a line, a stop (TPC), or a journey.
GreatAPIs Score
Auth quickstart
- No API key is needed. Send plain GET requests.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Read live trips on one tram line
GEThttp://v0.ovapi.nl/line/GVB_1_1
{"GVB_1_1":{"Line":{"LineWheelchairAccessible":"UNKNOWN","TransportType":"TRAM","DestinationName50":"Azartplein","DataOwnerCode":"NL","DestinationCode":"AZP","LinePublicNumber":"1","LinePlanningNumber":"1","LineName":"Lijn 1","LineDirection":1},"Actuals":{"NL_20260929_1_574_0":{"IsTimingStop":true,"DestinationName50":"Azartplein","DataOwnerCode":"NL","OperatorCode":"GVB","FortifyOrderNumber":0,"TransportType":"TRAM","Latitude":52.35372,"Longitude":4.77478,"JourneyNumber":574,"JourneyPatternCode":1912917788,"LocalServiceLevelCode":20260929,"LineDirection":1,"OperationDate":"2026-09-29","TimingPointCode":"30004402","WheelChairAccessible":"UNKNOWN","LineName":"Lijn 1","LinePublicNumber":"1","LastUpdateTimeStamp":"2026-09-28T19:25:35+0200","DestinationCode":"AZP","ExpectedDepartureTime":"2026-09-29T06:00:00","UserStopOrderNumber":1,"ProductFormulaType":"EMPTY","TimingPointName":"Matterhorn","LinePlanningNumber":"1","TimingPointDataOwnerCode":"ALGEMEEN","TimingPointTown":"unknown","TripStopStatus":"PLANNED","UserStopCode":"04402","JourneyStopType":"FIRST","TargetArrivalTime":"2026-09-29T06:00:00","TargetDepartureTime":"2026-09-29T06:00:00","ExpectedArrivalTime":"2026-09-29T06:00:00","TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE"}},"ServerTime":"2026-09-29T00:03:07Z","Network":{"757202361":{"1":{"Longitude":4.8833957,"Latitude":52.36305,"TimingPointTown":"unknown","TimingPointName":"Leidseplein","TimingPointCode":"30006062","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":true,"UserStopOrderNumber":1},"2":{"Longitude":4.8864403,"Latitude":52.361267,"TimingPointTown":"unknown","TimingPointName":"Rijksmuseum","TimingPointCode":"30006058","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":2},"3":{"Longitude":4.892274,"Latitude":52.359467,"TimingPointTown":"unknown","TimingPointName":"Vijzelgracht","TimingPointCode":"30008073","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":3},"4":{"Longitude":4.9002423,"Latitude":52.359715,"TimingPointTown":"unknown","TimingPointName":"Frederiksplein","TimingPointCode":"30008057","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":4},"5":{"Longitude":4.9094133,"Latitude":52.361458,"TimingPointTown":"unknown","TimingPointName":"Weesperplein","TimingPointCode":"30008054","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":5},"6":{"Longitude":4.914174,"Latitude":52.362442,"TimingPointTown":"unknown","TimingPointName":"K. 's-Gravesandestr.","TimingPointCode":"30008176","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":6},"8":{"Longitude":4.9248304,"Latitude":52.36688,"TimingPointTown":"unknown","TimingPointName":"Hoogte Kadijk","TimingPointCode":"30008255","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":8},"10":{"Longitude":4.9348106,"Latitude":52.37301,"TimingPointTown":"unknown","TimingPointName":"Rietlandpark","TimingPointCode":"30008261","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":10},"11":{"Longitude":4.9381247,"Latitude":52.373455,"TimingPointTown":"unknown","TimingPointName":"C. van Eesterenlaan","TimingPointCode":"30008233","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":11},"12":{"Longitude":4.9373565,"Latitude":52.37683,"TimingPointTown":"unknown","TimingPointName":"Azartplein","TimingPointCode":"30008014","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":12}},"1912917788":{"1":{"Longitude":4.77478,"Latitude":52.35372,"TimingPointTown":"unknown","TimingPointName":"Matterhorn","TimingPointCode":"30004402","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":true,"UserStopOrderNumber":1},"2":{"Longitude":4.776684,"Latitude":52.352966,"TimingPointTown":"unknown","TimingPointName":"Pilatus","TimingPointCode":"30004404","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":2},"3":{"Longitude":4.7831483,"Latitude":52.35037,"TimingPointTown":"unknown","TimingPointName":"Inaristraat","TimingPointCode":"30004406","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":3},"4":{"Longitude":4.788865,"Latitude":52.34981,"TimingPointTown":"unknown","TimingPointName":"Ecuplein","TimingPointCode":"30004408","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":4},"5":{"Longitude":4.795189,"Latitude":52.351055,"TimingPointTown":"unknown","TimingPointName":"Baden Powellweg","TimingPointCode":"30004410","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":5},"6":{"Longitude":4.8026104,"Latitude":52.35256,"TimingPointTown":"unknown","TimingPointName":"Hoekenes","TimingPointCode":"30004412","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":6},"7":{"Longitude":4.8091097,"Latitude":52.35393,"TimingPointTown":"unknown","TimingPointName":"Louis Davidsstraat","TimingPointCode":"30004414","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":7},"8":{"Longitude":4.8105884,"Latitude":52.356472,"TimingPointTown":"unknown","TimingPointName":"Meer en Vaart","TimingPointCode":"30004049","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":8},"9":{"Longitude":4.826264,"Latitude":52.357788,"TimingPointTown":"unknown","TimingPointName":"Johan Huizingalaan","TimingPointCode":"30004063","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":9},"10":{"Longitude":4.834601,"Latitude":52.35788,"TimingPointTown":"unknown","TimingPointName":"Station Lelylaan","TimingPointCode":"30004195","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":true,"UserStopOrderNumber":10},"11":{"Longitude":4.840149,"Latitude":52.35794,"TimingPointTown":"unknown","TimingPointName":"Derkinderenstraat","TimingPointCode":"30004061","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":11},"12":{"Longitude":4.8525224,"Latitude":52.35807,"TimingPointTown":"unknown","TimingPointName":"Surinameplein","TimingPointCode":"30006001","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":12},"13":{"Longitude":4.8532996,"Latitude":52.361805,"TimingPointTown":"unknown","TimingPointName":"Corantijnstraat","TimingPointCode":"30006013","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":13},"14":{"Longitude":4.8544445,"Latitude":52.364254,"TimingPointTown":"unknown","TimingPointName":"Hoofdweg","TimingPointCode":"30006114","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":14},"15":{"Longitude":4.859283,"Latitude":52.364807,"TimingPointTown":"unknown","TimingPointName":"Witte de Withstraat","TimingPointCode":"30003010","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":15},"16":{"Longitude":4.8653097,"Latitude":52.365417,"TimingPointTown":"unknown","TimingPointName":"Nicolaas Beetsstraat","TimingPointCode":"30006018","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":16},"17":{"Longitude":4.8717647,"Latitude":52.367126,"TimingPointTown":"unknown","TimingPointName":"Bilderdijkstraat","TimingPointCode":"30006021","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":17},"18":{"Longitude":4.8751016,"Latitude":52.362995,"TimingPointTown":"unknown","TimingPointName":"Overtoom","TimingPointCode":"30006043","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":18},"19":{"Longitude":4.8833957,"Latitude":52.36305,"TimingPointTown":"unknown","TimingPointName":"Leidseplein","TimingPointCode":"30006062","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":19},"20":{"Longitude":4.8864403,"Latitude":52.361267,"TimingPointTown":"unknown","TimingPointName":"Rijksmuseum","TimingPointCode":"30006058","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":20},"21":{"Longitude":4.892274,"Latitude":52.359467,"TimingPointTown":"unknown","TimingPointName":"Vijzelgracht","TimingPointCode":"30008073","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":21},"22":{"Longitude":4.9002423,"Latitude":52.359715,"TimingPointTown":"unknown","TimingPointName":"Frederiksplein","TimingPointCode":"30008057","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":22},"23":{"Longitude":4.9094133,"Latitude":52.361458,"TimingPointTown":"unknown","TimingPointName":"Weesperplein","TimingPointCode":"30008054","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":23},"24":{"Longitude":4.914174,"Latitude":52.362442,"TimingPointTown":"unknown","TimingPointName":"K. 's-Gravesandestr.","TimingPointCode":"30008176","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":24},"26":{"Longitude":4.9248304,"Latitude":52.36688,"TimingPointTown":"unknown","TimingPointName":"Hoogte Kadijk","TimingPointCode":"30008255","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":26},"28":{"Longitude":4.9348106,"Latitude":52.37301,"TimingPointTown":"unknown","TimingPointName":"Rietlandpark","TimingPointCode":"30008261","StopAreaCode":null,"TimingPointWheelChairAccessible":"ACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":28},"29":{"Longitude":4.9381247,"Latitude":52.373455,"TimingPointTown":"unknown","TimingPointName":"C. van Eesterenlaan","TimingPointCode":"30008233","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"ACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":29},"30":{"Longitude":4.9373565,"Latitude":52.37683,"TimingPointTown":"unknown","TimingPointName":"Azartplein","TimingPointCode":"30008014","StopAreaCode":null,"TimingPointWheelChairAccessible":"NOTACCESSIBLE","TimingPointVisualAccessible":"NOTACCESSIBLE","IsTimingStop":false,"UserStopOrderNumber":30}}}}}The Actuals map is truncated to one of its 9 trips in the live call. The trip object is unchanged. The key of each trip is a journey ID.
Developer reference
Gotchas & limits
- Use
http://. A live probe ofhttps://v0.ovapi.nlfailed certificate checks (curl exit code 60). The catalogue entry also lists HTTPS as unsupported. - A line ID with no live trips returns
200with an empty object,{}. It does not return an error or a 404. Lines such asNL_5302_1returned{}in the probe. GET /line/with no ID lists all line IDs. The probe returned about 4,150 lines in a body of about 1.1 MB. Do not call it in a loop.- The IDs are
<data owner>_<line planning number>_<direction>, for exampleGVB_1_1.LineDirectionis1or2. - Times such as
ExpectedDepartureTime(2026-09-29T06:00:00) have no time zone offset, butLastUpdateTimeStamphas one (+0200). Do not mix the two without care. Access-Control-Allow-Origin: *is set, so browser code can call the API. An HTTPS page cannot call it, because the browser blocks mixed content.