Nearby services and distance methods
Available with: trial key (open fields) · bought bundle or agreed plan (all fields) · Pricing
What this does not say
Quoted verbatim from the section’s warnings field, exactly as the API returns it. They are not translated: a translation would show something other than what your response actually contains.
- Deprecated: kept for existing integrations and not maintained as a product. Most of its rows come from one national run in March-April 2026; the nightly refresh rewrites about 10 000 of 2.6 million addresses a night, so most figures are months old and enriched_at must be read per address. Use the sections that are answered live from current registers instead: nearby_fire_stations, nearby_police_stations, emergency_health_services (hospitals and emergency care), schools, kindergartens and local_amenities. Each carries the straight-line distance and, where a route can be measured, the driving distance and time from the routing service (driving_route), with the method named. Its other columns are read by roads, environment and the insurance indicators, which are not deprecated.
- Absent method metadata means unverified, and it is absent for almost all of this table: 2 599 001 of 2 599 002 rows carry an empty distance_provenance, so for practically every address the method, routing status and calculation time behind these figures are unrecorded. Treat a duration without provenance as an estimate of unknown origin.
- Driving time is not emergency response time — no dispatch, turnout or crew availability is modelled, and the routing graph is a periodic OpenStreetMap extract rather than live road status. Routing compares five straight-line candidates and takes the shortest, so a nearer station reached by a longer road may be missed.
- A zero-second or zero-metre result is a failed map match, not an address next door to a fire station, and is returned as null rather than as a measurement. That removed 260 fire, 440 police and 187 hospital durations and 857 distances at the time of writing; the underlying rows are unchanged and still say zero.
Fields
33 of 50 fields are value fields — the ones that decide whether a record actually says anything. The rest are context: identifiers, codes and timestamps. Fields marked “open” return values to anonymous callers; the rest require a key.
| Field | Type | Role | Demo |
|---|---|---|---|
| nearest_fire_station_id | integer | null | context | open |
| nearest_fire_station_name | string | null | value | open |
| fire_station_distance_m | number | null (m) | value | open |
| fire_station_duration_s | number | null (s) | value | open |
| nearest_fire_station_km | number | null (km) | value | open |
| nearest_fire_station_min | number | null (min) | value | open |
| fire_station_distance_method | string | null | context | open |
| fire_station_straight_line_m | number | null (m) | value | open |
| nearest_police_station_id | integer | null | context | open |
| nearest_police_station_name | string | null | value | open |
| police_station_distance_m | number | null (m) | value | open |
| police_station_duration_s | number | null (s) | value | open |
| nearest_police_station_km | number | null (km) | value | open |
| nearest_police_station_min | number | null (min) | value | open |
| police_station_distance_method | string | null | context | open |
| police_station_straight_line_m | number | null (m) | value | open |
| nearest_hospital_id | integer | null | context | open |
| nearest_hospital_name | string | null | value | open |
| hospital_distance_m | number | null (m) | value | open |
| hospital_duration_s | number | null (s) | value | open |
| nearest_hospital_km | number | null (km) | value | open |
| nearest_hospital_min | number | null (min) | value | open |
| hospital_distance_method | string | null | context | open |
| hospital_straight_line_m | number | null (m) | value | open |
| nearest_shopping_mall_id | integer | null | context | open |
| nearest_shopping_mall_name | string | null | value | open |
| shopping_mall_distance_m | number | null (m) | value | open |
| shopping_mall_duration_s | number | null (s) | value | open |
| shopping_mall_distance_method | string | null | context | open |
| shopping_mall_straight_line_m | number | null (m) | value | open |
| nearest_barnehage_id | string | null | context | open |
| nearest_barnehage_name | string | null | value | open |
| barnehage_distance_m | number | null (m) | value | open |
| barnehage_duration_s | number | null (s) | value | open |
| barnehage_distance_method | string | null | context | open |
| barnehage_straight_line_m | number | null (m) | value | open |
| nearest_lekeplass_id | string | null | context | open |
| nearest_lekeplass_name | string | null | value | open |
| lekeplass_distance_m | number | null (m) | value | open |
| lekeplass_duration_s | number | null (s) | value | open |
| lekeplass_distance_method | string | null | context | open |
| nearest_udir_school_id | string | null | context | open |
| nearest_udir_school_name | string | null | value | open |
| udir_school_distance_m | number | null (m) | value | open |
| udir_school_duration_s | number | null (s) | value | open |
| udir_school_distance_method | string | null | context | open |
| udir_school_straight_line_m | number | null (m) | value | open |
| distance_provenance | object | null | context | open |
| enriched_at | string | null | context | open |
| computed_at | string | null | context | open |
Fetch this section
Send the key in the X-API-Key header. The section can be fetched with the rest of the address, or on its own with pagination.
curl --fail-with-body --silent --show-error \ -H "X-API-Key: $APPROACH_API_KEY" \ 'https://api.approach.no/api/v1/addresses/285717643?include=proximity' # paginated, one section at a time curl --fail-with-body --silent --show-error \ -H "X-API-Key: $APPROACH_API_KEY" \ 'https://api.approach.no/api/v1/addresses/285717643/sections/proximity?limit=25'
Try it now
This is a real call against the public demo, from here. What appears below is what the API returned — not a sample.