Skip to content

ADDRESS API · ENDPOINTS

Endpoints

Parameters, bounds and responses are read from the OpenAPI document the API serves, and the error codes from the same table the API uses. Parameter descriptions are in English, as in the contract.

Contents

With a key

https://api.approach.no/api/v1/addresses

GET

/catalog

no key required

List every section and its field contract. The catalogue is the contract. It returns each section's fields, source, geographic scope, maximum useful age and caveats, and it is what this reference is generated from. Read it at runtime rather than pinning a field list.

Takes no parameters.

Responses and error codes

HTTPMeaningCodes in the body
200Section catalog (each section with its category, kind, sensitivity and time shape), the categories in display order, packages and the defaults an unqualified request gets.—
Example request
curl 'https://api.approach.no/api/v1/addresses/catalog'
GET

/models

no key required

List the models Datakilde computes itself. Every model is an ordinary section with a model block in its descriptor: the question it answers, the kind of method, its inputs, what it is validated against and its headline fields. Read one with ?include=<id>, or all of them for an address with ?package=models. Each record carries method, method_version, inputs and validation, and the first caveat says what the estimate is not.

Takes no parameters.

Responses and error codes

HTTPMeaningCodes in the body
200The model catalogue.—
Example request
curl 'https://api.approach.no/api/v1/addresses/models'
GET

/openapi.json

no key required

OpenAPI 3.1 document for the whole API. Every section has a generated record schema, so a client generated from this document knows the shape of each section's records rather than treating them as opaque objects.

Takes no parameters.

Responses and error codes

HTTPMeaningCodes in the body
200OpenAPI 3.1 document—
304Not modified—
Example request
curl 'https://api.approach.no/api/v1/addresses/openapi.json'
POST

/resolve

Resolve an address and return its sections. Takes either an address_id or an exact street, number, letter and postcode — never a free-text search. An address that matches more than one record returns 409 with the candidates rather than picking one.

Parameters

NameTypeBounds and defaultDescription
package
query
stringall | core | home_profile | prevention_context | area_context | hazard_screen | environment_nuisance | neighbourhood_life | outdoor_recreation | planning_restrictions | civil_protection | local_economy | modelsCurated include preset from /catalog; cannot be combined with include. Section grants still apply. With neither include nor package the default package (core, see /catalog defaults) is returned; package=all returns every section.
meta
query
stringfull | compact
default compact
compact (default) serializes source as {id, version, access, max_age_hours, max_age_days} and quality without present_by_field and value_fields: the descriptor is the /catalog entry for that id and version. full repeats each section's complete source descriptor and per-field quality.
limit
query
integer1–100
default 100
—
address_id
body
string^[0-9]{1,18}$—
house_number
body
integer1–99999—
include
body
array<string>——
letter
body
string——
postal_code
body
string^[0-9]{4}$—
street_name
body
string1–255 characters—

Responses and error codes

HTTPMeaningCodes in the body
200Resolved address; inspect partial, failed_sections and each section status. A request with neither include nor package returns every section and says so in X-Sections-Hint.—
400Invalid input, section, package, meta or cursor
401Authentication required
402Account request allowance exhausted; review quota before retrying
403Approved internal access or active organization grant required
404Address not found
409Ambiguous address: choose one of candidates
429Rate limit exceeded; see Retry-After and X-RateLimit-*
500—
503Address source unavailable
Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{"street_name":"Storgata","house_number":1,"postal_code":"0155","include":["address_details","hazard_zones"]}' \
  'https://api.approach.no/api/v1/addresses/resolve'
GET

/{address_id}

Get one address with all or selected sections. include selects sections; package selects a curated preset. The two cannot be combined. Sections are fetched in parallel and each carries its own status, so a partial response is normal and partial=true says so.

Parameters

NameTypeBounds and defaultDescription
address_id
path · required
string^[0-9]{1,18}$—
include
query
array<string>—Comma-separated section ids, each at most once.
package
query
stringall | core | home_profile | prevention_context | area_context | hazard_screen | environment_nuisance | neighbourhood_life | outdoor_recreation | planning_restrictions | civil_protection | local_economy | modelsCurated include preset from /catalog; cannot be combined with include. Section grants still apply. With neither include nor package the default package (core, see /catalog defaults) is returned; package=all returns every section.
meta
query
stringfull | compact
default compact
compact (default) serializes source as {id, version, access, max_age_hours, max_age_days} and quality without present_by_field and value_fields: the descriptor is the /catalog entry for that id and version. full repeats each section's complete source descriptor and per-field quality.
limit
query
integer1–100
default 100
—

Responses and error codes

HTTPMeaningCodes in the body
200Resolved address; inspect partial, failed_sections and each section status. A request with neither include nor package returns every section and says so in X-Sections-Hint.—
400Invalid input, section, package, meta or cursor
401Authentication required
402Account request allowance exhausted; review quota before retrying
403Approved internal access or active organization grant required
404Address not found
409Ambiguous address: choose one of candidates—
429Rate limit exceeded; see Retry-After and X-RateLimit-*
500—
503Address source unavailable
Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/285717643?include=address_details%2Chazard_zones%2Cground_conditions'
GET

/{address_id}/sections/{section}

Get one section, with pagination. Pass the next_cursor from the previous response; a cursor is bound to its address and section and is rejected anywhere else.

Parameters

NameTypeBounds and defaultDescription
address_id
path · required
string^[0-9]{1,18}$—
section
path · required
stringaccessibility | acute_pollution_committee | address_details | address_units | air_quality_forecast | airport_noise_zones | anchorage_areas | aquaculture_sites | bankruptcies_in_postal_code | bike_parking | broadband | building_activity_municipality | building_applications | building_cases_nearby | building_height | building_source_status | building_status | buildings | business_neighbourhood | case_journal | change_signals | churches | civil_defence_districts | climate | climate_projection | community_organisations | commute_time | commuting | companies_in_postal_code | companies_near_address | construction_cost_index | contaminated_sites | crime | cultural_environments | cycle_routes | cycling_trails | dams | debris_flow_awareness_areas | defibrillators | district_heating_area | dwelling_units | dwelling_valuation | education_institutions | election_results | electricity_consumption | emergency_dispatch_centres | emergency_dispatch_districts | emergency_harbours | emergency_health_services | employment | employment_municipality | energy_certificate | energy_label_estimate | environment | ev_charging | fairway_areas | ferry_connections | fire_and_burglary_indicators | fire_and_rescue | fire_hydrants | fire_missions_postal_code | fire_response_time | fire_risk | fire_service_coverage | fire_statistics | flood_awareness_areas | flood_protection_works | food_inspections | geotechnical_boreholes | grid_company | grid_concession_area | grid_statistics | grid_tariffs | ground_conditions | ground_integrity | ground_motion | ground_subsidence | grunnbok | hazard_exposure | hazard_warnings | hazard_zones | hazards | health_services | heat_pump_feasibility | heritage_monuments | heritage_protection_zones | heritage_sites | hiking_trails | household_energy_baseline | household_profile | housing_cooperative_accounts | housing_statistics | income | insurance_claims | invasive_species | investment_density | kindergarten_details | kindergartens | land_cover | landslide_events | landslide_hazard_zones_detailed | leisure_facilities | lightning_activity | listing_data | local_amenities | local_businesses | local_solar_adoption | marine_clay_possibility | marine_limit | marka_boundary | micromobility_stations | migration | military_airfield_noise_zones | military_range_noise_zones | military_training_areas | mobile_coverage | municipal_fees | municipal_water_network | municipality_services | natural_hazard_warnings | nature_access | nature_types | nearby_building_permits | nearby_fire_stations | nearby_police_stations | nearby_water_level | nearby_zoning_plans | nearest_traffic_sensors | neighbourhood_buildings | neighbourhood_population | noise_levels | noise_model | nuisance_index | oil_spill_response_depots | oslo_waste_calendar | places_of_worship | plan_regulations | planned_grid_investments | planned_power_lines | plot | police_incidents | population | power_line_field | power_line_no_build_zone | power_lines | power_price_zone | predator_activity | project_data | protected_nature_areas | proximity | public_health | public_projects | public_services | public_shelters | public_transport | quick_clay_awareness_areas | radon | rail_lines | rail_noise_zones | rail_stations | recreation_areas | registered_electricians | reindeer_husbandry_districts | rivers | road_accidents | road_building_limits | road_infrastructure | road_noise_zones | road_projects_nearby | roads | rock_weakness_zones | rockfall_awareness_areas | rockslide_tsunami_zones | safety_and_regulations | school_results | school_wellbeing | schools | sea_level_projection | sea_speed_limits | sefrak_buildings | ship_exposure | shipping_lanes | shooting_ranges | shore_zone | ski_trails | snow_avalanche_susceptibility | snow_load | snowmobile_trails | soil_quality | solar_potential | source_lookup | species_observations | state_secured_recreation_areas | storm_surge_freeboard | storm_surge_municipal_exposure | storm_surge_zones_2100 | storm_surge_zones_current | sun_hours | terrain | toll_stations_nearby | traffic | traffic_accidents | traffic_exposure | traffic_hourly_history | traffic_sensor_links | traffic_volume | transformer_stations | transit_stops | vegetation | vessel_traffic | viewshed | vinmonopolet_stores | walk_score | water_body_status | water_risk | water_supply | weather | weather_forecast | wells | wildfire_exposure | wildlife_collisions | zoning_plan | zoning_plan_features—
cursor
query
string——
meta
query
stringfull | compact
default compact
compact (default) serializes source as {id, version, access, max_age_hours, max_age_days} and quality without present_by_field and value_fields: the descriptor is the /catalog entry for that id and version. full repeats each section's complete source descriptor and per-field quality.
limit
query
integer1–100
default 100
—

Responses and error codes

HTTPMeaningCodes in the body
200Resolved address; inspect partial, failed_sections and each section status. A request with neither include nor package returns every section and says so in X-Sections-Hint.—
400Invalid input, section, package, meta or cursor
401Authentication required
402Account request allowance exhausted; review quota before retrying
403Approved internal access or active organization grant required
404Address not found
409Ambiguous address: choose one of candidates—
429Rate limit exceeded; see Retry-After and X-RateLimit-*
500—
503Address source unavailable
Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/285717643/sections/address_details?limit=25'
GET

/{address_id}/history

Export permitted area time series. Requires the history endpoint permission and grants for the corresponding profile sections. Returns only permitted series as JSON or CSV. from/to accept YYYY or YYYY-MM; absent periods are not zero and current periods may be provisional. One successful history request uses one lookup allowance, regardless of returned rows.

Parameters

NameTypeBounds and defaultDescription
address_id
path · required
string^[0-9]+$—
from
query
string^\d{4}(-(0[1-9]|1[0-2]))?$—
to
query
string^\d{4}(-(0[1-9]|1[0-2]))?$—
format
query
stringjson | csv
default json
—

Responses and error codes

Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/285717643/history?from=2024&to=2025&format=json'
GET

/{address_id}/properties

Cadastral property context for an address. Registered property units connected to the address. Paginate address candidates with limit and cursor. A property cursor is bound to its property; source-checked cursors also require matrikkelenhet_id.

Parameters

NameTypeBounds and defaultDescription
address_id
path · required
string^[0-9]{1,18}$—
limit
query
integer1–100
default 10
Address candidates per property per page
cursor
query
string—Opaque next_cursor bound to the property. Source-checked pagination also requires matrikkelenhet_id; fallback cursors bind kommune/gnr/bnr.
fnr
query
string^[0-9]{1,8}$Optional exact feste number from a checked Matrikkel snapshot. Omitted means all choices, 0 means explicit zero; unknown never matches zero. Returns 422 if no authorized checked identity is available.
snr
query
string^[0-9]{1,8}$Optional exact section number from a checked snapshot. Omitted means all choices, 0 means explicit zero. Returns 422 if no authorized checked identity is available.
matrikkelenhet_id
query
string^[0-9]{1,18}$Select one official property ID; required with a source-checked next_cursor

Responses and error codes

HTTPMeaningCodes in the body
200Explicit candidates only. Empty candidates are a valid no-match result; never automatically choose the first record.—
400Invalid, repeated, conflicting or unknown query parameter
401Authentication required
402—
403Active address access required; cadastral discovery needs address_details, source identities additionally buildings, and dwelling choices additionally dwelling_units. Full property filters without buildings grant are rejected.
404Address not found
422full_property_identity_unavailable: full identity filter requested but no checked source snapshot is cached
429Organization rate limit exceeded
500—
503Source unavailable or query deadline exceeded
Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/285717643/properties?limit=10'
GET

/properties

Find addresses by cadastral property. Use municipality_code, gnr and bnr. Optional fnr, snr and matrikkelenhet_id require checked source identity. Paginate with limit and the property-bound cursor; unknown identifiers are never inferred.

Parameters

NameTypeBounds and defaultDescription
municipality_code
query · required
string^[0-9]{4}$Municipality code or positive registered gnr/bnr. Leading zeroes on gnr/bnr are normalized.
gnr
query · required
string^[0-9]{1,8}$Municipality code or positive registered gnr/bnr. Leading zeroes on gnr/bnr are normalized.
bnr
query · required
string^[0-9]{1,8}$Municipality code or positive registered gnr/bnr. Leading zeroes on gnr/bnr are normalized.
limit
query
integer1–100
default 10
Address candidates per property per page
cursor
query
string—Opaque next_cursor bound to the property. Source-checked pagination also requires matrikkelenhet_id; fallback cursors bind kommune/gnr/bnr.
fnr
query
string^[0-9]{1,8}$Optional exact feste number from a checked Matrikkel snapshot. Omitted means all choices, 0 means explicit zero; unknown never matches zero. Returns 422 if no authorized checked identity is available.
snr
query
string^[0-9]{1,8}$Optional exact section number from a checked snapshot. Omitted means all choices, 0 means explicit zero. Returns 422 if no authorized checked identity is available.
matrikkelenhet_id
query
string^[0-9]{1,18}$Select one official property ID; required with a source-checked next_cursor

Responses and error codes

HTTPMeaningCodes in the body
200Explicit candidates only. Empty candidates are a valid no-match result; never automatically choose the first record.—
400Invalid, repeated, conflicting or unknown query parameter
401Authentication required
402—
403Active address access required; cadastral discovery needs address_details, source identities additionally buildings, and dwelling choices additionally dwelling_units. Full property filters without buildings grant are rejected.
422full_property_identity_unavailable: full identity filter requested but no matching checked source identity is cached
429Organization rate limit exceeded
500—
503Source unavailable or query deadline exceeded
Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/properties?municipality_code=0301&gnr=1&bnr=2&limit=10'
GET

/access

Inspect your own permissions and grant expiry. Answers for the calling credential only. There is no caller-supplied customer or key identifier, so one customer cannot ask about another.

Takes no parameters.

Responses and error codes

Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/access'
GET

/usage

Inspect your own recorded usage over 30 days. Same scoping as /access.

Takes no parameters.

Responses and error codes

Example request
curl --fail-with-body --silent --show-error \
  -H "X-API-Key: $APPROACH_API_KEY" \
  'https://api.approach.no/api/v1/addresses/usage'
GET

/health

no key required

Liveness and deployed version. Reports the running release so a client can tell which contract version answered.

Takes no parameters.

Responses and error codes

HTTPMeaningCodes in the body
200Healthy—
503A database is unreachable. Body is a Problem and also carries status=unavailable.
Example request
curl 'https://api.approach.no/api/v1/addresses/health'

Public demo

No key and no account, with a lower fixed cap and only the fields in the reviewed publication policy. https://api.approach.no/api/v1/address-demo

GET

/{address_id}

no key required

Read the demo projection for one address. Returns only the fields listed in the reviewed publication policy, for the sections that carry them. Restricted licensed and personal data is excluded. An absent section may reflect publication policy, access restrictions or missing source coverage; the catalogue does not guarantee populated records for a particular address. Inspect section status and caveats.

Responses and error codes

Example request
curl 'https://api.approach.no/api/v1/address-demo/285717643'
GET

/catalog

no key required

List what the demo publishes. The demo's own catalogue, marking which sections an anonymous caller can read values from and which are listed but restricted.

Responses and error codes

HTTPMeaningCodes in the body
429—
500—
503—
Example request
curl 'https://api.approach.no/api/v1/address-demo/catalog'

Response headers

These headers can be read by the client, including from a browser on an allowed origin. The list is the one the API names in Access-Control-Expose-Headers.

HeaderCarries
X-RateLimit-LimitRequest cap for the window named by X-RateLimit-Window. A customer can have additional hour, day, week or month caps.
X-RateLimit-RemainingRequests left in the window named by X-RateLimit-Window; zero when that window refused the call.
X-RateLimit-ResetWhen the named request window resets, as Unix seconds.
X-RateLimit-WindowThe binding request window: minute, hour, day, week or month. Calendar windows use Europe/Oslo; the repeated autumn hour has separate buckets.
Retry-AfterOn a 429 or a temporary 503: seconds to wait before retrying.
X-Request-BillingHow this request is billed, e.g. allowance_trial, allowance_prepaid, subscription_postpaid, not_billed_test for an exempt self-service test lookup, not_billed_free on a search, resolve, properties, /access or /usage call (never counted), or not_billed_partial_failure when the lookup is not counted. Set on metered responses and on free routes.
X-Request-BudgetThe cap in force: production bundle for trial and prepaid accounts, the monthly safety cap for agreed plans. Absent when the account has no cap or a self-service test key does not spend the production bundle.
X-Request-Budget-UsedLookups counted this calendar month (Oslo) on agreed plans.
X-Request-Budget-RemainingWhat is left under X-Request-Budget. Negative while a paid account uses its grace requests.
X-Request-Balance-OreThe prepaid balance, in øre, that pays for requests beyond a bundle.
X-Request-IDThe id of this request, always assigned by us. It is the id the usage log on the account page shows. Quote it when reporting a problem.
X-Client-Request-IDYour own X-Request-ID, echoed back when it is printable ASCII without spaces and at most 128 characters, so the call can be matched in your logs.
ETagOn a catalogue, contract (openapi.json), coverage or dataset-catalogue response: a validator. Send it back as If-None-Match and the API answers 304 Not Modified while nothing has changed.
X-Sections-HintOn a profile that chose no sections, or asked for package=all: which package applied (the default is core) and how to narrow or widen it with include or package. Absent when include or a package other than all was given.
Content-DispositionOn a download (a data-product result, a job result, a series CSV or an address history CSV): the suggested file name.
X-Data-ProductOn a data-product result: the product and version that produced it, as id@version.
X-Data-LicenceOn a data-product result: the licence the data is served under.
X-Series-LicenceOn a series response: the id of the licence the series is published under. Link points at its text.
X-Data-PointsOn a series response: how many observations it holds.
X-Billable-UnitsOn a series response: the units charged for it, one per started thousand observations and at least one.
LinkOn a series response: the licence text, as rel="license". On a deprecated section or dataset: the changelog entry as rel="deprecation" (and rel="sunset" once a date is set), and the replacement as rel="successor-version" where there is one.
DeprecationOn a deprecated section or dataset (RFC 9745): when it was deprecated, as @ followed by Unix seconds. It still answers; plan the move to the successor.
SunsetOn a deprecated section or dataset with a retirement date (RFC 8594): the HTTP date after which it stops answering. Absent while no date is set.
X-Dataset-Schema-VersionOn a dataset snapshot download: the schema version of the file, so a warehouse can detect a change before it loads it.
X-Dataset-Refresh-IdOn a dataset snapshot download: the refresh the file was written after. Compare it with the refresh a /records or /changes call reports.
X-Content-SHA256On a dataset snapshot download: the SHA-256 of the file, to verify the transfer.
X-Test-Customertrue when the key or session belongs to a test customer: one Approach made to try a customer's access without touching it. A test customer's calls are never billed or counted. Absent otherwise.

Packages

A package is a curated preset of sections for the package parameter, not an entitlement. Per-section grants still apply after the preset is expanded.

core6 sections

Core. The small default-sized profile: identity, buildings and dwelling units with their source status, mapped hazard zones and the zoning plan. Fast and cheap to read; pick further packages or include ids for more. A package does not establish source completeness or grant rights.

home_profile4 sections

Home profile. Address identity and cached housing facts. Building coverage and recipient permission must be checked; a package does not establish source completeness or grant rights.

prevention_context10 sections

Prevention context. Observations, forecasts, active hazard warnings, fire-service callout statistics, known emergency-service premises and municipal crime context. Car travel is not response time; area statistics are not a household risk score.

area_context8 sections

Area context. Optional municipal statistics and nearby traffic sensors. This is area context, not household characteristics or a live congestion service.

hazard_screen19 sections

Hazard screen. Mapped natural-hazard zones, events and screening scores around the address. Mapped means prioritised areas only; an empty section is unmapped, not safe, and nothing here replaces a site assessment.

environment_nuisance13 sections

Environment and nuisance. Noise, grid and pollution context from strategic mapping and registers; zone membership and proximity, not measurements at the façade.

neighbourhood_life15 sections

Neighbourhood life. Everyday destinations by straight-line distance from open registers and OpenStreetMap; presence and position are as published, and OSM content is ODbL.

outdoor_recreation12 sections

Outdoor recreation. Trails, recreation areas, nature protection and modelled sun and view around the address.

planning_restrictions16 sections

Planning restrictions. Plans, heritage protection, servitude-like constraints and change signals around the address. Constraints are indications to verify with the authority, never a legal opinion.

civil_protection11 sections

Civil protection. Emergency-service premises, shelters and dispatch geography. Straight-line proximity is not response time.

local_economy9 sections

Local economy. Registered companies at the address, on the same property and within 500 metres, plus aggregate business, insolvency and civic context for the wider area; nothing about an occupant. Sole traders are counted, never named.

models26 sections

Datakilde models. Every estimate Datakilde computes itself, such as noise by source (road, rail, air), settlement under the building, storm-surge freeboard, snow load, solar potential and fire-service response time. Each record carries method, method_version, inputs and validation; an estimate is never the official figure it approximates. Same grants and lookup count as any section.