Traffic
GET /v1/traffic/typical gives the usual speed on the roads inside a box, for the hour band of this moment. It is a typical speed, not a live one. The answer says "label": "ердийн" (typical). Show that word beside the layer, and never write "live" there.
The three bands
The band is read from the Ulaanbaatar clock at the moment of the call.
| Band | When | In plain words |
|---|---|---|
am_peak | Monday to Friday, 07:00 to 09:59 | Morning rush: people going to work and school. |
pm_peak | Monday to Friday, 17:00 to 19:59 | Evening rush: people going home. |
off_peak | Every other hour, and all of Saturday and Sunday | The rest of the week. |
A trip counts in the band of its first stored point. The speed of a road is the total metres over the total seconds of the counted segments in that band.
Call it
Any key with tiles:read works, so the public map key does. The call counts like a tile request: no per-minute limit, and the answer is cached for 5 minutes. Send the box of the map view, at most 1 degree on each side. Draw from zoom 12 up.
curl -H "Authorization: Bearer $DOCK_KEY" \
"https://geo.dock.mn/v1/traffic/typical?bbox=106.91,47.912,106.925,47.924"What a road needs to show
A road appears only when it passes the group rule: 3 or more organizations, and 5 or more trips after the biggest organization. All partners count together, and no organization is named. No trip, vehicle, time or organization is in the answer.
A road without enough traces is left out. Draw nothing there, not grey and not green: no road in the answer means no speed, not an empty road.
A real answer
Recorded from geo.dock.mn (API 0.96.1) on 2026-10-20, 17:12 Ulaanbaatar time, for the box around Sukhbaatar square. It was a Tuesday evening, so the band is pm_peak. No road in the box passes the group rule yet, so features is empty and typical.month is null. That is a correct answer, and the page draws nothing from it.
{
"type": "FeatureCollection",
"kind": "typical",
"typical": {
"label": "ердийн",
"band": "pm_peak",
"hours": "Monday to Friday, 17:00 to 19:59 Ulaanbaatar time",
"month": null
},
"rule": {
"min_orgs": 3,
"min_trips_without_largest_org": 5,
"orgs": "all partners together; test and internal organizations left out; no organization is named",
"road": "an OSM way, from Valhalla map matching (Meili) of the stored points; the line is dock's current road with that OSM id",
"segment": "two stored points of a trip 1 to 60 seconds apart, at 3 to 130 km/h, its midpoint more than 200 m from the first and last point of the trip, both points matched to the same way",
"km_h": "the counted segments' total meters over their total seconds on the way, to 0.1",
"period": "Ulaanbaatar calendar month, published 14 days after it ends"
},
"source": "trace",
"source_date": null,
"features": []
}When a road passes the rule, it is one Feature with a LineString or MultiLineString and these properties: km_h (to 0.1), highway, name_mn and name_en (null when unknown). typical.month is the newest closed month that has any road in the box, as YYYY-MM.
In the JS SDK the call is dock.trafficTypical(bbox). The full field list is in the API reference.