Use case · trip logs
Addresses for trip logs
A körjournal is the Swedish trip log for a company car, and Skatteverket asks for an address for each trip. Kartpunkt turns the vehicle's GPS position at a trip's start and end into the nearest official address from Lantmäteriet's register, and names the road the vehicle is on, with its speed limit.
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},"radius_m":5000,"distinct":"street","limit":3}'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-0000taj",
"type": "address",
"label": "Bredstigen 11, 756 46 Uppsala",
"street": "Bredstigen",
"number": 11,
"letter": null,
"postcode": "75646",
"locality": "Uppsala",
"municipality_code": "0380",
"municipality": "Uppsala",
"county_code": "03",
"county": "Uppsala län",
"district_code": "903805",
"district": "Uppsala landsbygd",
"point": {
"lat": 59.85826774209593,
"lon": 17.64290149051346
},
"position_type": "driveway",
"match_type": null,
"score": 1,
"distance_m": 198.02
},
{
"id": "se.syn.syn-0000t9s",
"type": "address",
"label": "Örnvägen 2, 753 45 Uppsala",
"street": "Örnvägen",
"number": 2,
"letter": null,
"postcode": "75345",
"locality": "Uppsala",
"municipality_code": "0380",
"municipality": "Uppsala",
"county_code": "03",
"county": "Uppsala län",
"district_code": "903804",
"district": "Uppsala västra",
"point": {
"lat": 59.86256320677179,
"lon": 17.645462724134184
},
"position_type": "building",
"match_type": null,
"score": 1,
"distance_m": 303.78
}
],
"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.With distinct street and limit 3, the answer is the nearest address of each of the three nearest streets, and road is the road the coordinate is on. Store the first address whose street equals road.name when it is within 50 m. When road.fallback is true, no address is within 50 m: store the road (its name, else its number) with the kommun. Otherwise store the first address. llms.txt has the rule in full.
What to save with the trip
Store the address's id and label with the trip. Kartpunkt's answers may be stored with the trip they were looked up for, shared between your users and systems, and shown on any map, with the attribution.
The road and its speed limit
road names the road with its speed limit (speed_limit_kmh), its number, its road class, its road owner and its surface, from Trafikverket's NVDB. More in road context.
Drivers' positions
A vehicle's position is personal data about its driver. Kartpunkt never logs or stores the coordinates you send: about a call it keeps only the key, the operation, the status, the response time and counts.
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.