DOCUMENTATION · ERRORS
Error codes
Every error response carries a code in its error field, and most a request_id. Branch on the code, not on the HTTP status alone. Quote the request_id (or the X-Request-ID header) when reporting a problem.
Contents
In short
| HTTP | Meaning |
|---|---|
| 400 | Invalid input, unknown section, or a cursor that does not belong to this address and section. |
| 401 | No credential, or one that could not be verified. |
| 402 | The account request allowance is exhausted. Review the allowance or top up in your account; retrying immediately does not restore it. |
| 403 | Authenticated, but without an active address grant — or a section this credential is not granted. |
| 404 | No address matches. |
| 409 | The address matched more than one record. The candidates are returned; choose one and resolve by address_id. |
| 429 | Rate limit exceeded. Retry-After gives the wait in seconds. |
| 503 | The address register itself could not be read. Distinct from a section being unavailable. |
A 401 has error "invalid_api_key" and a reason field saying why, or "authentication_required" when no key was sent. Until 6 October 2026 error read "Invalid API key" and "Authentication required". The codes themselves are in English, as the API writes them.
400 Bad request
choose_municipality_code_or_name
municipality_code and municipality were both sent.
What to do: Send one of them.
conflicting_postcodes
q contains a postcode that differs from the postal_code filter.
What to do: Remove one of the postcodes.
cursor_requires_section_endpoint
cursor was sent to the whole-address route, which does not paginate.
What to do: Page with /{address_id}/sections/{section}.
invalid_address_id
address_id is not 1 to 18 digits.
What to do: Use an address_id from /search or /resolve.
invalid_cursor
The cursor is malformed, or belongs to another address, section or property.
What to do: Send the next_cursor from the previous response with the same filters.
invalid_demo_address
The demo address id is not a number.
What to do: Use an address_id from the demo search.
invalid_demo_request
The economy demo does not take this parameter or this span; the demo answers at most 30 years per request.
What to do: Narrow the request, or use the data products API with a key.
invalid_demo_search
The demo search text is too short or too long.
What to do: Send 2 to 160 characters.
invalid_history_request
from or to is not YYYY or YYYY-MM, from is after to, or format is not json or csv.
What to do: Correct the period or format; hint repeats the rule.
invalid_house_number_or_letter
The house number or letter in q cannot be read.
What to do: Write the address as street, number and letter, e.g. Storgata 12A.
invalid_limit
On the opportunities pilot (GET /api/v1/opportunities): limit is not an integer from 1 to 50. parameter, minimum and maximum say which and what.
What to do: Send a limit between 1 and 50.
invalid_matrikkelenhet_id
matrikkelenhet_id is not 1 to 18 digits.
What to do: Use the matrikkelenhet_id from a property response.
invalid_meta
meta is not full or compact.
What to do: Use meta=full or meta=compact.
invalid_municipality
municipality is shorter than 2 or longer than 100 characters.
What to do: Send the start of a municipality name.
invalid_municipality_code
On the opportunities pilot (GET /api/v1/opportunities): municipality_code is not four digits.
What to do: Send four digits, e.g. 0301.
invalid_page
offset or limit is outside the job result's range.
What to do: hint gives the accepted range.
invalid_parameter
A parameter value is not one the product accepts. parameter and allowed say which.
What to do: Use one of the allowed values.
invalid_postcode_or_municipality_code
postal_code or municipality_code is not four digits.
What to do: Send four digits, e.g. 0155 or 0301.
invalid_prediction_request
The prediction body is not {model, version?, subject, options?}, the subject is neither an address id nor an EPSG:25833 point in Norway, or the model refused an option.
What to do: Fix the request; detail names the problem.
invalid_request_body
The body is not valid JSON in the run shape. hint shows an example.
What to do: Send {"subject": {...}, "parameters": {...}}.
invalid_search
q is shorter than 2 or longer than 160 characters, or cannot be read as an address.
What to do: Send at least 2 characters, or a geographic filter instead.
invalid_subject
The subject's type or id is not valid for its kind (address list size, distinct ids, code format).
What to do: hint says what was expected.
invalid_version
version is not a positive integer.
What to do: Omit version for the newest, or send one from the product's contract.
limit_must_be_1_to_100
limit is outside 1 to 100.
What to do: Send a limit between 1 and 100.
limit_must_be_1_to_20
limit on /search is outside 1 to 20.
What to do: Send a limit between 1 and 20, and narrow the query when has_more is true.
location_must_be_lat_lon
The location id or the lat/lon parameters are not WGS84 decimal degrees written as lat,lon.
What to do: Send e.g. 58.94,11.17: latitude first, then longitude.
location_outside_sweden
The point lies outside the box around Sweden (55.0–69.2 N, 10.5–24.3 E); often latitude and longitude are swapped.
What to do: Check the order: latitude first. Norwegian addresses use the Address API.
municipality_must_be_four_digits
municipality is not a four-digit municipality code.
What to do: Send a code such as 0301.
no_such_section_in_demo
The section is not part of the public demo.
What to do: Read the section with a key, or choose one the demo publishes.
package_cannot_be_combined_with_include_or_section
package selects a preset of sections and cannot be combined with include or a section path.
What to do: Send either package or include.
provide_address_id_or_exact_street_number_letter_postcode
/resolve takes either address_id, or street_name, house_number and postal_code (and letter if there is one). Not both, and not free text.
What to do: Use /search for free text, then resolve the chosen address_id.
provide_municipality_gnr_bnr
/properties needs municipality_code, gnr and bnr.
What to do: Send all three.
provide_search_or_geographic_filter
Neither q nor a postal_code, municipality_code or municipality filter was sent.
What to do: Send q or a filter.
query_too_long
On the opportunities pilot (GET /api/v1/opportunities): q is longer than 100 characters. parameter and maximum say which and how many.
What to do: Send at most 100 characters.
repeated_section
A section is named twice in include. section names it.
What to do: Name each section once.
source_cursor_requires_matrikkelenhet_id
A cursor from a source-checked property page was sent without the matrikkelenhet_id it belongs to.
What to do: Send the matrikkelenhet_id with the cursor.
subject_not_supported
The product does not answer for this subject type. supported lists the ones it does.
What to do: Use a supported subject type.
unknown_package
package is not one of the packages in /catalog.
What to do: Use a package id from the reference or /catalog.
unknown_parameter
The product does not take this parameter.
What to do: Remove it; the product's contract lists its parameters.
unknown_section
A section in include or the path is not in the catalogue. section names it.
What to do: Use a section id from /catalog.
unsupported_demo_parameter
The demo does not take this parameter.
What to do: The demo takes only the parameters shown in its examples; the keyed API takes the rest.
unsupported_or_repeated_parameter
A query parameter is not accepted by this route, or was sent twice. parameter names it.
What to do: Remove or de-duplicate the parameter. Each route's table lists what it accepts.
401 The key was not accepted
authentication_required
No credential was sent. methods lists what is accepted.
What to do: Send the key in the X-API-Key header, or as Authorization: Bearer apr_… .
reason: expired
The key's own expiry date has passed. A key can expire before the account's access does. A key chosen by id in the signed-in API tester answers 403 selected_key_unavailable with this reason instead.
What to do: Create a new key on the account page and deploy it.
internal_token_invalid
X-Internal-Token was sent and did not verify: bad signature, wrong issuer or audience, expired, or sent from outside Approach's network. Only Approach's own products send this header; it never falls back to key authentication.
What to do: Customers: remove the X-Internal-Token header and send your API key. Approach services: mint a fresh token for the address-api audience.
invalid_api_key
A key was sent and not accepted. reason says why; each reason is listed below under 401.
What to do: Act on reason: the codes below name the cause and the fix.
reason: ip_not_allowlisted
The key is restricted to IP addresses, and the request came from another one.
What to do: Call from an allowed address, or change the key's IP list on the account page.
reason: key_credit_budget_exhausted
The key's own credit budget is spent. A key chosen by id in the signed-in API tester answers 403 selected_key_unavailable with this reason instead.
What to do: Raise or remove the key's budget, or use another key.
reason: not_found
No key with this value exists.
What to do: Check that the whole key was copied. A key that was never shown in full cannot be recovered; create a new one on the account page.
reason: revoked
The key has been revoked, by you or by rotation. A key chosen by id in the signed-in API tester answers 403 selected_key_unavailable with this reason instead.
What to do: Use the key that replaced it, or create a new one on the account page.
reason: unknown_key_format
The value sent is not a Datakilde API key (keys start with apr_).
What to do: Send the key exactly as it was shown when it was created, in the X-API-Key header.
402 Allowance or plan missing
balance_insufficient
The prepaid balance cannot cover the listing run; no data or seller usage was published.
What to do: Top up before retrying.
monthly_safety_cap_reached
An agreed plan's monthly safety cap is reached. Repeat lookups of an address already counted today are still served.
What to do: Wait for resets_at (the first of next month, Oslo time) or contact us to raise the cap.
product_plan_required
The customer's Datakilde subscription does not include this API capability.
What to do: Check Datakilde access in the account page and contact us to enable the capability.
request_allowance_exhausted
The account's allowance is used up, or a prepaid period has ended. The body says which (prepaid_expired) and links to the account page (top_up).
What to do: Buy a bundle or top up on the account page. Retrying does not restore the allowance.
request_allowance_insufficient
A request priced by size needs more units than the allowance has left. Nothing was charged; the body gives required_units and available_units.
What to do: Narrow the request or top up.
test_daily_cap_reached
Test lookups (from the signed-in playground or a test key) are free up to a daily number of new subjects, and today's are used. Repeat lookups of a subject already fetched today, and the free routes, are still served. The body includes cap, used and resets_at; Retry-After gives seconds until reset.
What to do: Wait for resets_at (midnight, Oslo time), or call with a production key.
test_monthly_cap_reached
The effective monthly test allowance or agreed test-lookup cap is reached. New test subjects are refused; the response includes resets_at and Retry-After. Repeat lookups already counted today still work.
What to do: Wait for the next Oslo month or ask the customer administrator about additional test capacity. A purchase is available only if the account page offers one.
403 Not permitted
active_partner_grant_required
The key's organisation has no active access: it has expired or been withdrawn, or the key's owner is no longer a member.
What to do: Check the account page. Access can be renewed there or by contacting us.
address_details_not_granted
Property discovery needs the address_details section, which this key is not granted.
What to do: Ask for address_details to be added.
address_endpoint_not_allowed
The access does not include this endpoint (for example history, series, datasets or data products).
What to do: Ask us to add the endpoint. /access lists the endpoints a key can call.
admin_mode_key_revoked
The issuer of this internal test key no longer has administrator rights.
What to do: Ask a current Approach administrator to issue a new test key.
approved_address_access_required
The credential is not a production Datakilde key: for example a Data Market key or a key with other scopes.
What to do: Use a key created on the Datakilde account page.
buildings_not_granted
A full property identity (fnr, snr or matrikkelenhet_id) needs the buildings section, which requires a separate agreement.
What to do: Search by municipality_code, gnr and bnr only, or contact us about the agreement.
customer_not_member
The signed-in person is not a member of the customer named by this request.
What to do: Choose a customer you belong to or ask its owner for an invitation.
reason: customer_required
A selected key needs an explicit customer organisation.
What to do: Select the customer before using the key.
data_product_not_granted
The grant lacks sections the data product composes, or its field policy cannot serve an aggregate.
What to do: The body lists what is missing. Ask for those sections.
history_sections_not_allowed
The history endpoint is allowed, but none of the profile sections it exports are granted to this key.
What to do: Ask for the profile sections the history should cover.
internal_product_not_allowed
A verified internal token was sent without X-Product, or with a product that may not call Datakilde. allowed lists the products that may.
What to do: Send X-Product with one of the allowed products.
reason: invalid_key_id
The selected key identifier is malformed.
What to do: Choose a key from the account list.
reason: ip_allowlisted_key_requires_direct_call
The browser proxy cannot prove the originating IP for this key's allowlist.
What to do: Test the key directly from an allowed network.
job_access_revoked
A completed job no longer fits the current data-product, section or field-policy grant. Cached results are not reprojected after access narrows. The job's status and result routes both answer 403; the job list leaves the job out and counts it under withheld. A job whose product version is retired answers 410 data_product_version_retired instead.
What to do: Ask an administrator to review the current agreement, or start a new job under the current grant.
job_owner_unknown
The job cannot be tied to an organisation the caller acts for.
What to do: Read the job with a key from the organisation that started it.
reason: key_not_owned_by_customer
The selected key does not belong to this signed-in user and customer.
What to do: Choose one of your own keys for the selected customer.
model_not_granted
The subscription does not include this model.
What to do: Ask us to add the model. /access lists what a key may call.
section_not_available_to_product
An internal product asked for a section it may not read: one that needs an agreement, a review or is restricted, and that its licence list does not name. Grunnbok is never served to a product. In a profile the section is listed as restricted with this code in its error instead.
What to do: Read the section through the product's own licensed source, or ask for it to be added to ADDRESS_API_PRODUCT_LICENSED_SECTIONS.
reason: session_required
A selected key needs a valid signed-in session.
What to do: Sign in again.
usage_identity_required
/usage needs an organisation to answer for, and the credential does not resolve to one.
What to do: Call with an organisation's API key.
404 Not found
address_not_found
No address has this id, or no address matches the exact street, number, letter and postcode. In a data-product address_list run the same code marks a row instead.
What to do: Search again with /search.
demo_address_not_found
No address has this id.
What to do: Use an address_id from the demo search.
job_not_found
No job with this id belongs to the caller's organisation.
What to do: Use the id returned when the job was started.
location_not_in_sweden
The point is inside the box but in no SCB DeSO area: the sea, or a neighbouring country near the border.
What to do: Move the point onto Swedish land, or use the Address API for a Norwegian address.
model_not_found
No model with this id has a release served to Datakilde.
What to do: Use a model id from /api/v1/predictions/catalog.
municipality_not_found
No municipality has this code.
What to do: Send a current four-digit municipality code.
no_listing_rows
The Datamarked listing has no rows for this subject.
What to do: Choose another subject.
prediction_subject_not_found
The address id in the subject is not in the address register.
What to do: Find the address with /api/v1/addresses/search, or send a point.
route_not_found
No endpoint has this path. It used to be the plain text "404 page not found"; it is JSON with this code now.
What to do: Check the path against the reference, or the OpenAPI document of the API you mean (/api/v1/addresses/openapi.json and the other subjects').
subject_not_found
The subject has no addresses.
What to do: Check the code or id.
unknown_data_product
No data product has this id (or this version).
What to do: List products with GET /data-products.
405 Method not allowed
method_not_allowed
The path exists, but not for this method. The Allow header and the allowed member list the methods it takes.
What to do: Use one of the methods in Allow.
409 Conflict
ambiguous_address
The exact address matches more than one record. Up to 20 candidates are returned (truncated says if there were more).
What to do: Let the user choose, then resolve by address_id. Never pick the first candidate silently.
job_not_finished
The job's result is not ready. status gives the job's state.
What to do: Poll the job until it is done.
listing_paused
The seller has paused the Datamarked listing.
What to do: Try again later.
410 Gone
data_product_version_retired
The product version the job ran is retired, so its result is no longer served. The job's status route answers the same, and the job list leaves the job out and counts it under withheld.
What to do: Run the current version.
job_result_expired
The job's result file has been deleted after its retention period.
What to do: Run the product again.
413 Too large
prediction_request_too_large
The prediction request body is larger than 16 KiB.
What to do: Send one subject and its options only.
run_too_large
The run has more cells than the product answers synchronously or as a job.
What to do: Choose a coarser resolution or a smaller subject.
422 Cannot be answered
subject_too_small
The subject has fewer addresses than the product's privacy threshold (min_group_size).
What to do: Choose a larger area.
429 Too many requests
demo_busy
The demo is answering too many requests at once.
What to do: Retry after a few seconds.
demo_rate_limited
Too many demo requests from this address.
What to do: Wait the number of seconds in Retry-After.
job_limit_reached
This customer already has the maximum number of active data-product jobs.
What to do: Wait for a job to finish before starting another.
rate_limit_exceeded
Too many requests in the current minute, for the key's grant or for the calling IP address. The opportunities pilot (GET /api/v1/opportunities) limits per IP address, 60 a minute, and answers the same.
What to do: Wait the number of seconds in Retry-After. X-RateLimit-Remaining shows what is left.
too_many_failed_authentications
This IP address sent 30 keys or tokens that were not accepted within a minute, so further requests from it are refused for the rest of that minute before any key is checked. Requests with a valid key from the same address are refused too until then.
What to do: Fix the key (the earlier 401 responses say why in reason), then retry after the seconds in Retry-After.
500 Our error
csv_encoding_failed
The result could not be written as CSV.
What to do: Retry, or ask for JSON.
internal_error
The request failed on our side with an error the service did not expect. It is logged under the request_id; nothing was counted. Until 7 Oct 2026 this was an empty 500.
What to do: Retry once; if it persists, report it with the request_id.
parquet_encoding_failed
The result could not be written as Parquet.
What to do: Retry, or ask for JSON or CSV.
503 Temporarily unavailable
busy
The service is already running as much of this kind of work as it admits at once (address, company and region lookups, searches, data-product runs, series pulls, dataset page reads and exports, prediction runs, and the public demo), and refused this one after a short wait instead of queueing it. retry_after_seconds says when to retry.
What to do: Retry after the seconds in Retry-After. Nothing was counted.
data_product_timeout
The data-product run exceeded its execution deadline without a charge.
What to do: Choose a smaller subject or coarser resolution and retry.
job_result_unreadable
The job's result file could not be read.
What to do: Retry after a short wait.
job_storage_full
The deployment cannot safely store another job result.
What to do: Retry after storage capacity is restored.
jobs_not_available
Jobs are not enabled on this deployment, so runs above the synchronous limit cannot be queued.
What to do: Run a smaller subject synchronously.
prediction_capacity_exhausted
All model prediction workers are busy. Nothing was counted.
What to do: Retry with backoff after Retry-After seconds; avoid parallel retry bursts.
source_not_loaded
A source the product needs has not been loaded yet.
What to do: Try again later; the catalogue shows source status.
504
prediction_timeout
The model did not answer within its time limit. Nothing was counted.
What to do: Retry, or use the precomputed address section for the model if there is one.