Skip to content

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

HTTPMeaning
400Invalid input, unknown section, or a cursor that does not belong to this address and section.
401No credential, or one that could not be verified.
402The account request allowance is exhausted. Review the allowance or top up in your account; retrying immediately does not restore it.
403Authenticated, but without an active address grant — or a section this credential is not granted.
404No address matches.
409The address matched more than one record. The candidates are returned; choose one and resolve by address_id.
429Rate limit exceeded. Retry-After gives the wait in seconds.
503The 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_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_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.

selected_key_unavailable

The signed-in API tester cannot use the key it selected by id. reason says why: invalid_key_id, session_required, customer_required, key_not_owned_by_customer, ip_allowlisted_key_requires_direct_call, or the key's own refusal (revoked, expired, key_credit_budget_exhausted). It is a 403 for all of them, because the person is signed in; the same key sent in X-API-Key answers 401 invalid_api_key with the key's own reason.

What to do: Choose an active key you own for this customer, or use your signed-in test session.

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

full_property_identity_unavailable

fnr, snr or matrikkelenhet_id was asked for, but no checked source identity is cached for the property.

What to do: Search by municipality_code, gnr and bnr; the answer is labelled as a partial identity.

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

access_details_unavailable

/access could not read the grant.

What to do: Retry after a short wait.

access_policy_unavailable

Access or allowance could not be read, so the request was refused rather than served unchecked.

What to do: Retry after a short wait. Nothing was counted.

address_source_unavailable

The address register itself could not be read. Distinct from a section that is unavailable.

What to do: Retry after a short wait. Nothing was counted.

allowance_unavailable

The allowance could not be read or charged, so the run was not started.

What to do: Retry after a short wait. Nothing was charged.

auth_unavailable

The credential could not be checked (the key store did not answer in time), so the request was neither served nor counted. A key that is fine is never reported as invalid for this.

What to do: Retry after the seconds in Retry-After.

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.

coverage_unavailable

The coverage table could not be read.

What to do: Retry after a short wait.

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.

data_product_unavailable

The product could not be computed.

What to do: Retry after a short wait. Nothing was charged.

demo_unavailable

The public demo is switched off or could not read its source.

What to do: Try again later, or use the API with a key.

history_unavailable

The history export could not be read completely. An incomplete export is never returned as a success.

What to do: Retry after a short wait. Nothing was counted.

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.

jobs_unavailable

The job queue could not be read or written.

What to do: Retry after a short wait.

location_register_unavailable

SCB's area map, which places the point in its municipality, did not answer.

What to do: Retry after a short wait; no lookup was counted.

meter_unavailable

The lookup could not be recorded, and a counted response is never delivered without its record.

What to do: Retry after a short wait. Nothing was counted.

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.

prediction_service_unavailable

The model service could not be reached or answered outside its contract. Nothing was counted.

What to do: Retry after Retry-After seconds.

property_source_unavailable

The cadastral property source could not be read.

What to do: Retry after a short wait.

service_unavailable

The health probe could not reach a database, so the service is not ready for traffic.

What to do: Retry with backoff.

source_not_loaded

A source the product needs has not been loaded yet.

What to do: Try again later; the catalogue shows source status.

usage_unavailable

/usage could not read the recorded usage.

What to do: Retry after a short wait.

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.