No results? When the response is an empty list
Work through a checklist when the API answers 200 with an empty list, from side and street names to status, srid, autocomplete type and datavask.
An empty list ([]) with status 200 means the call was valid, but nothing matched all the filters. The API does not tell you which filter was too narrow. Remove the filters one at a time, and use the checklist below. Most cases come down to the format of a code or a filter that works differently than expected.
Run the same call with fewer filters
The quickest diagnosis is to remove one filter at a time until results appear. The last filter you removed is the culprit. This example shows a common one: an abbreviated street name.
import os import requests API = "https://api.danadresse.dk" headers = {"X-Api-Key": os.environ["DANADRESSE_API_KEY"]} for name in ("Gl. Kongevej", "Gammel Kongevej"): r = requests.get(f"{API}/adgangsadresser", params={"vejnavn": name, "postnr": "1610", "per_side": 1}, headers=headers, timeout=10) r.raise_for_status() print(f"vejnavn={name}: {len(r.json())} result(s)")
vejnavn=Gl. Kongevej: 0 result(s) vejnavn=Gammel Kongevej: 1 result(s)
The checklist
Pagination
- Symptom: Page 1 has data, a later page is empty.
- Cause:
sideis past the last page. There is no header with the total count. - Fix: Stop the loop when a page has fewer rows than
per_side. See Pagination.
Codes
- Symptom: Your own code finds no match for municipality 101 or postcode 800 in the response.
- Cause: Codes in responses always have leading zeros:
"kommunekode": "0101","nr": "0800". As input the API accepts bothkommunekode=101and0101. - Fix: Compare zero-padded strings:
str(code).zfill(4)in Python,String(code).padStart(4, "0")in JavaScript.
- Symptom: A postcode gives
[]even though the address exists. - Cause: The address is in another postcode than you think. Streets in Copenhagen and Frederiksberg change postcode along the way, and large-recipient postcodes (companies' own postcodes) have no addresses.
- Fix: Remove
postnrand see which postcode the address has.
Status: retired and provisional addresses
- Symptom: A new or an old address is missing.
- Cause: Without
statusormedtagnedlagte, lists return current and provisional addresses (status 1 and 3, so new builds are included). Retired addresses (status 2 and 4) are left out./autocompleteand search only find addresses that are in use: a closed address leaves the search. - Fix: Use
medtagnedlagteorstatus=2/status=4on/adresserand/adgangsadresser.medtagnedlagtealso works together withcirkelandpolygon. See status, darstatus and retired addresses.
Filters on street name, house number, floor and door
- Symptom:
vejnavn=Gl. Kongevejorvejnavn=Soendergadegives[]. - Cause:
vejnavnmatches the start of the official name. Abbreviations (Gl.for Gammel,Skt.for Sankt) do not match, and you cannot count on a spelling without æøå to match either. - Fix: Use
/autocompleteor/datavask/adresserfor text users have typed. Only usevejnavn=with names you got from the API.
- Symptom:
husnr=12 Agives[]. - Cause: The house number is one string without a space:
12A. - Fix: Remove the space between the number and the letter.
- Symptom:
etage=1. salordør=t.h.gives[]. - Cause: Floor and door have fixed codes: floor
st,kl,1,2…, doorth,tv,mfor a number. - Fix: Use the codes without dots and without "sal".
Ids
- Symptom:
/adresser?id=…gives[]even though the id is valid. - Cause: The id belongs to an access address. Addresses and access addresses have different ids.
- Fix: Use
/adresser?adgangsadresseid=…to get the units behind a door, or/adgangsadresser/{id}. See Adresse or adgangsadresse?
Coordinates
- Symptom:
cirkel=gives[], or reverse gives 404No address within range. - Cause: Longitude and latitude are swapped, UTM coordinates were sent without
srid=25832, or the radius is too small. The order is always longitude, latitude:cirkel=12.5683,55.6761,100. - Fix: See Coordinates and srid.
Autocomplete
Symptom: /autocomplete gives []. Go through these:
qis empty. An empty search always gives an empty list.kommunekode=,postnr=oradgangsadresseid=excludes the address. These filters narrow the suggestions. Remove them and try again.type=vejnavnonly returns street names, andtype=adgangsadressestops at the house number. Withouttypethe step follows what the user has typed. See Adresse or adgangsadresse?- A floor and door that do not exist at the address (for example
3. thin a house without a 3rd floor) give no suggestions. - Typo tolerance is a flag, as in DAWA: send
fuzzy(orfuzzy=) to turn it on. Without it, or withfuzzy=false, a misspelled word gives no suggestions.
Datavask
- Symptom:
/datavask/adresser?betegnelse=…gives"kategori": "C"and"resultater": []. - Cause: No street matched. The parser reads floor and door (
2. tv,st. th,1.mf), house letters in lower case (12a), a postcode anywhere in the text and spellings without æøå (Aabenraa,Kobenhavn). Words it cannot place, such as a c/o line, a company name or "Att.", end up invaskeresultat.ukendtetokensof a match. Whenresultateris empty, the street is usually missing from that postcode, or the text is too far from the official name. - Fix: Send only the address lines, without names and c/o lines, or send the fields separately. That works with both GET and POST:
curl -s -G "https://api.danadresse.dk/datavask/adresser" \ --data-urlencode "vejnavn=Rådhuspladsen" \ --data-urlencode "husnr=1" \ --data-urlencode "etage=st" \ --data-urlencode "dør=th" \ --data-urlencode "postnr=4200" \ -H "X-Api-Key: $DANADRESSE_API_KEY"
The opposite: too many results
A parameter name the API does not know is ignored without an error, as in DAWA. Known filters do filter. ?postnummer=8000 filters on nothing, and you get the first addresses in the whole country. If you get results that do not match the filter, check the spelling. See Error 400 and 404 for a function that catches unknown parameters.
Next steps
Related guides
Markdown source Spotted an error? Tell us API-reference (Swagger)