Address validation
Validate Swedish addresses
POST /v1/addresses/validate checks that an address exists exactly as given in Lantmäteriet's address register, and reports what is wrong in issues instead of silently correcting it. Use it at checkout or sign-up, before you ship to an address or store it, and in a CRM to check the addresses you hold.
The call
Request
curl -X POST https://api.kartpunkt.se/v1/addresses/validate \
-H "Authorization: Bearer $KARTPUNKT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"street":"Järngatan","number":2,"letter":"C","postcode":"75541"}'Answer
{
"valid": false,
"match": {
"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": "partial",
"score": 1
},
"issues": [
"letter_not_found"
],
"suggestions": [],
"provenance": {
"synthetic": true,
"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"
}
]
}
}provenance.synthetic: true), and road is NVDB's.The customer typed 2C, and the register has no letter C at Järngatan 2 in 755 41. valid is false, issues says letter_not_found, and match is the closest address, for you to compare with what was typed. It is never a correction made for you.
What issues can say
street_not_found: no such street;suggestionsholds search hits for what was sent.number_not_found: the street has no such number;suggestionsholds the nearest numbers on the street.letter_not_found: the number has no such letter.postcode_mismatch: the postnummer sent is not the address's.locality_mismatch: the postort or kommun sent is not the address's.ambiguous: what was sent fits several addresses.
valid is true only when issues is empty.
In an address form
For the form itself, POST /v1/geocode is autocomplete that tolerates typos: misspellings, å, ä and ö typed without diacritics, and abbreviations such as sthlm. It answers street-level hits until a house number is typed. Each hit says in match_type whether it is exact, corrected (a word was read as a misspelling: ask the user) or partial.
Request
curl -X POST https://api.kartpunkt.se/v1/geocode \
-H "Authorization: Bearer $KARTPUNKT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"jarngatan 2 upsala","limit":1}'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": "corrected",
"score": 6.057753791356872
}
],
"provenance": {
"synthetic": true,
"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"
}
]
}
}provenance.synthetic: true), and road is NVDB's.Know when an address you hold changes
Store each address's id with its label. POST /v1/addresses/changes then says, for up to 20 stored ids at a time, whether each is unchanged, changed or closed since a date you give.
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.