Use case · road context
Speed limit, road owner and surface at a coordinate
Every reverse geocoding answer names road: the nearest drivable road with a name or a number within 100 m of the coordinate, from Trafikverket's national road database NVDB (CC0). The roads are the same for every key: a test key's addresses are synthetic, its roads NVDB's.
The call
Request
curl -X POST https://api.kartpunkt.se/v1/reverse-geocode \
-H "Authorization: Bearer $KARTPUNKT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"point":{"lat":59.8599,"lon":17.6443},"limit":2}'Answer
{
"results": [
{
"id": "se.syn.syn-0000uvt",
"type": "address",
"label": "Järngatan 2, 755 41 Uppsala",
"street": "Järngatan",
"number": 2,
"letter": null,
"postcode": "75541",
"locality": "Uppsala",
"municipality_code": "0380",
"municipality": "Uppsala",
"county_code": "03",
"county": "Uppsala län",
"district_code": "903802",
"district": "Uppsala södra",
"point": {
"lat": 59.859903789196885,
"lon": 17.64433171466342
},
"position_type": "driveway",
"match_type": null,
"score": 1,
"distance_m": 1.83
},
{
"id": "se.syn.syn-0000uvs",
"type": "address",
"label": "Järngatan 1, 755 41 Uppsala",
"street": "Järngatan",
"number": 1,
"letter": null,
"postcode": "75541",
"locality": "Uppsala",
"municipality_code": "0380",
"municipality": "Uppsala",
"county_code": "03",
"county": "Uppsala län",
"district_code": "903802",
"district": "Uppsala södra",
"point": {
"lat": 59.860088490002525,
"lon": 17.644471061598395
},
"position_type": "entrance",
"match_type": null,
"score": 1,
"distance_m": 23.08
}
],
"road": {
"name": "Järngatan",
"road_number": null,
"road_class": 8,
"speed_limit_kmh": 30,
"speed_limit_varies": false,
"owner": "municipal",
"surface": "paved",
"municipality_code": "0380",
"distance_m": 1.83,
"fallback": false
},
"provenance": {
"synthetic": true,
"network": {
"id": "snap_01m45nmn6mfey8z9wvaf31nb9n",
"dataset": "nvdb",
"source_date": "2026-10-05",
"built_at": "2026-10-05T09:17:11.764Z",
"graph": "snap_01m45nmnryfey8z9x29xcd08tq"
},
"sources": [
{
"id": "synthetic",
"name": "Kartpunkt synthetic test addresses",
"licence": "CC0-1.0",
"attribution": "Syntetiska testadresser från Kartpunkt, inte verkliga adresser.",
"url": "https://creativecommons.org/publicdomain/zero/1.0/",
"updated": "2026-10-05"
},
{
"id": "nvdb",
"name": "Trafikverket, NVDB",
"licence": "CC0-1.0",
"attribution": "Vägdata från NVDB, Trafikverket, CC0 1.0",
"url": "https://creativecommons.org/publicdomain/zero/1.0/",
"updated": "2026-10-05"
}
]
}
}provenance.synthetic: true), and road is NVDB's.road carries speed_limit_kmh (the base limit; speed_limit_varies is true when a limit bound to certain times or vehicles also applies), owner (state, municipal or private: who keeps the road, never who by name), surface (paved or gravel), municipality_code (the kommunkod NVDB registers the road in, which near a kommun border can differ from the address's), road_number, road_class (0 to 9) and distance_m.
The road is not an address
The road has no id and adds nothing to the result count. fallback is true when no address in results is within 50 m of the coordinate: then the road, not an address, is what to store. In the answer above it is false, since Järngatan 2 is 2 m away, and the road's name, Roslagsgatan, is not the address's street.
What it is used for
- Who keeps the road to an address: the state, the kommun or a private road association, for snow clearing and maintenance questions.
- The speed limit where a vehicle was, for trip logs and telematics.
- Gravel or paved, for deliveries and services that care.
POST /v1/route gives the facts you ask for on each segment of a route, such as speed_limit, road_owner, surface and road_class, with the segment's road reference.
Price
Test keys are free on every plan and answer from the synthetic dataset. Live calls need a paid plan and an account approved for live access. All prices are in Swedish kronor, excl. VAT.
| Plan | Price, excl. VAT | Includes |
|---|---|---|
| Utvecklare | SEK 0 | 2,000 calculations a month; 1,000 test requests a day; Test addresses in the same format as live data; Jobs are included from Bas |
| Bas | SEK 490 a month | 5,000 calculations/month included; 25,000 live calls a month; 10,000 addresses a day; +50,000 calculations/month as an add-on |
| Pro | SEK 1,990 a month | 50,000 calculations/month included; 200,000 live calls a month; 50,000 addresses a day |
| Avtal | by quote | Vendors: priced per municipality; Operators: priced per vehicle; Network version and source in every answer; The API runs in the EU; Data processing agreement: draft on request |
Create a test key on your account page (the account pages are in Swedish), read how to start, or see all plans.