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"
      }
    ]
  }
}
A test key's answer: the addresses are synthetic (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.

PlanPrice, excl. VATIncludes
UtvecklareSEK 02,000 calculations a month; 1,000 test requests a day; Test addresses in the same format as live data; Jobs are included from Bas
BasSEK 490 a month5,000 calculations/month included; 25,000 live calls a month; 10,000 addresses a day; +50,000 calculations/month as an add-on
ProSEK 1,990 a month50,000 calculations/month included; 200,000 live calls a month; 50,000 addresses a day
Avtalby quoteVendors: 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.