Skip to content

Usage ​

Paste a key to see your org's calls, tiles and door misses per day, against its caps. Days run midnight to midnight, Ulaanbaatar time. A key with any scope works. It also shows your plan. A free key (from POST /v1/signup) sees its limits next to the partner plan. It lists the features open to your org (features, like cargo.eta). A table gives calls and door misses per route (endpoints, like GET /v1/door/:code). A route is a pattern only: never a building code, a name or a search text. This page calls GET /v1/usage. Your own code can call it the same way:

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/usage?days=30"

The key stays in this page only. Not stored, not put in the URL. This call is free and not counted.

Alerts ​

An alert tells you when today's calls, tiles or door misses pass a share of the daily cap. It fires at most once per Ulaanbaatar day, within about a minute, and shows on this page. Add one above or with POST /v1/alerts:

sh
curl -X POST -H "Authorization: Bearer $DOCK_KEY" -H "Content-Type: application/json" \
  -d '{"metric":"calls","percent":80,"webhook_url":"https://hooks.example.mn/dock"}' \
  https://geo.dock.mn/v1/alerts

metric is calls, tiles or door_misses. percent is 1 to 100, default 80. Up to 20 alerts per org. An alert never changes; ask dock to end one. The call is free and not counted.

With webhook_url (https, a public host name, default port), each firing is one POST with this JSON:

json
{ "type": "usage.alert", "alert": "al_7m4xq2b9kd", "metric": "calls", "percent": 80,
  "day": "2026-10-01", "value": 8004, "cap": 10000, "fired_at": "2026-10-01T06:12:00Z" }

Answer with any 2xx. Redirects are not followed. A failed send is tried 3 times, a minute apart. The header Dock-Signature: t=<unix seconds>,v1=<hex> is HMAC-SHA256 of <t>.<body> with the webhook_secret from the POST answer. It is shown once. Check it before you trust the body:

js
import { createHmac, timingSafeEqual } from 'node:crypto';
const [, t, v1] = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(req.headers['dock-signature']);
const want = createHmac('sha256', process.env.DOCK_WEBHOOK_SECRET).update(`${t}.${rawBody}`).digest();
const ok = timingSafeEqual(want, Buffer.from(v1, 'hex')) && Math.abs(Date.now() / 1000 - t) < 300;

Door names ​

When the door_names feature is open to your org, the page above lists your door names (GET /v1/door-names, names:write). Register a name for a door, or move your name to another door, with POST /v1/door-names; the code's shape is checked first, as a code that finds no door counts as a door miss. Per name, make a transfer code (POST /v1/door-names/{name}/transfer-code) or clear it (DELETE on the same path), and take a name with a code another org gave you (POST /v1/door-names/{name}/claim). A code shows once; the page does not keep it. A wrong code counts as a door miss, so its shape is checked before it is sent.

sh
curl -X POST -H "Authorization: Bearer $DOCK_KEY" -H "Content-Type: application/json" \
  -d '{"transfer_code":"dnt_..."}' "https://geo.dock.mn/v1/door-names/Сансар%20бэйкери/claim"

Door notes ​

When the hotel.notes feature is open to your org too, each name has a "Notes" button. It shows your notes for that name's door, waiting, accepted or refused, and when (GET /v1/door-names/{name}/notes). Write how guests find the door, in Mongolian, English or both, and send it for review (POST on the same path). Guests see it once a person accepts it. A note with a phone number or an e-mail does not leave the page.

sh
curl -X POST -H "Authorization: Bearer $DOCK_KEY" -H "Content-Type: application/json" \
  -d '{"instructions_mn":"Баруун талын хаалга, ногоон өнгөтэй","instructions_en":"West entrance, green gate"}' \
  "https://geo.dock.mn/v1/door-names/Сансар%20бэйкери/notes"

Driver confirmations ​

With a confirm:read key, the page above shows your drivers' confirmations and reports for a month (GET /v1/confirm/own): counts by result for each day, how many different drivers, and up to 100 doors your drivers said are wrong, missing or a duplicate. Drivers are only counted, never shown by id. No other org is read. A month is final 8 days after it ends: until then confirmations queued offline can still join. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/confirm/own?month=2026-10"

Minutes at the door ​

With a trace:read key, the page above shows how long your trips spent in their last 200 m for a month (GET /v1/traces/arrivals/own): trips, how many took 5 minutes or more, the median, p75 and p90, trips by minute band, and up to 100 cells of about 500 m where trips ended, most 5+ minute trips first, with each cell's centre. Parking and the walk to the door are in the minutes, so compare months and places. No other org is read. A month is final 14 days after it ends. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/arrivals/own?month=2026-10"

When, and to what kind of building ​

With a trace:read key, the page above shows your trips for a month in two ways. First, by the Ulaanbaatar weekday and hour of their first point (GET /v1/traces/hours/own): a 7 by 24 grid, the total for each weekday and each hour, and the busiest weekday and hour. Second, by the building at their last point (GET /v1/traces/kinds/own): apartment building, house in a ger area, shop or office and so on, with shares. The building is the one holding the point, else the nearest within 30 m. Its type is the one when the trip was stored. No other org is read. A month is final 14 days after it ends. This part counts as two calls.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/hours/own?month=2026-10"
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/kinds/own?month=2026-10"

Where ​

With a trace:read key, the page above shows every cell of about 500 m your trips passed through in a month (GET /v1/traces/cells/own), in one fixed box: the six central districts of Ulaanbaatar and Nalaikh, west 106.55, south 47.72, east 107.35, north 48.08. Baganuur and Bagakhangai are outside it. The page draws the cells, north up, shaded by trips, and lists the 20 busiest with each cell's centre. A trip counts in every cell it passes, so cell counts do not add up to trips. No other org is read. A month is final 14 days after it ends. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/cells/own?month=2026-10&bbox=106.55,47.72,107.35,48.08"

Where, all partners ​

With an insights:read key, the page above shows all partners' trips together for a published month as trips through each 500 m cell in the six central districts of Ulaanbaatar and Nalaikh (GET /v1/traces/cells): a north-up picture shaded on a log scale from the quietest to the busiest cell, and the 20 busiest cells. A trip counts in every cell it passes, so cell counts do not add up to trips. A cell shows only with trips from at least 3 organizations there that month, and 5 or more left after taking out the biggest one. No cell means too few trips, not zero. Test and internal organizations do not count. A month is published 14 days after it ends; trips received later are not counted. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/cells?month=2026-09&bbox=106.55,47.72,107.35,48.08"

Road speeds, all partners ​

With an insights:read key, the page above compares road speeds at peak hours with the rest of the week for a published month (GET /v1/traces/roads with band), in the same fixed box as Where. Morning peak is Monday to Friday 07:00-09:59, evening peak Monday to Friday 17:00-19:59, off-peak every other hour and the whole weekend, by the Ulaanbaatar time of a trip's first point. A road is compared when it has an off-peak speed and a speed in at least one peak. Slower by is the slower peak against off-peak. The page draws the compared roads, north up, shaded by how much slower they are at peak, and lists the 20 roads slowed most. These are all partners' trips together: a road shows in a band only with trips from at least 3 organizations there, and 5 or more left after taking out the biggest one. No road means too few trips, not an empty road. Test and internal organizations do not count. A month is published 14 days after it ends. This part counts as three calls.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/roads?month=2026-09&bbox=106.55,47.72,107.35,48.08&band=am_peak"

Slow cells, all partners ​

With an insights:read key, the page above shows all partners' trips together for a published month as moving speed per 500 m cell in the six central districts of Ulaanbaatar and Nalaikh (GET /v1/traces/speeds): a north-up picture and the 20 slowest cells. A segment counts when its two points are 1 to 60 seconds apart, it moves at 3 to 130 km/h, and its midpoint is more than 200 m from the trip's first and last point: parking and the walk to the door are not road speed. A cell shows only with trips from at least 3 organizations there that month, and 5 or more left after taking out the biggest one. No cell means too few trips, not a slow or empty road. There is no trip count. Test and internal organizations do not count. A month is published 14 days after it ends. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/speeds?month=2026-09&bbox=106.55,47.72,107.35,48.08"

When, all partners ​

With an insights:read key, the page above shows all partners' trips together for a published month by the Ulaanbaatar weekday and hour of each trip's first point (GET /v1/traces/hours), wherever the trip ran: a 7 by 24 grid and the busiest weekday and hour. A weekday and hour shows only with trips from at least 3 organizations that month, and 5 or more left after taking out the biggest one. A striped slot had too few trips, not zero. There are no totals: the API sends none, so a striped slot cannot be worked out. Test and internal organizations do not count. A month is published 14 days after it ends. This call counts as one call.

sh
curl -H "Authorization: Bearer $DOCK_KEY" "https://geo.dock.mn/v1/traces/hours?month=2026-09"