← Back to all posts
Road Weather Winter Operations Cross-Border

The Air Says +5 °C. The Road Says −1. Surface Temperature From 2,883 Stations in 9 Countries.

October 9, 2026 · 6 min read

A weather forecast gives you the temperature of the air, about two metres above the ground. A truck drives on the road. On a clear autumn night the two can be several degrees apart, and the road is the colder one: asphalt radiates its heat to the sky, a bridge deck loses it from both sides, and the first ice of the season forms on a surface that is below zero under air that is not.

Road authorities measure the road itself. Their roadside weather stations carry a sensor in the asphalt, and most of them publish what it reads. We carry 3,574 road-weather stations across 9 European countries, and 2,883 of them publish a road-surface temperature — now under one field name, surface_temperature_c, whichever country the station stands in.

What the Road Said on 9 October

At 07:00 UTC on 9 October 2026, 191 stations reported a road surface at or below 0 °C. At 31 of them the air was above freezing, and at 7 it was above +2 °C. Across all 2,721 stations that publish both readings, the road was colder than the air at 737 — more than one in four.

Two of them, from the same moment:

A route plan built on air temperature sees nothing at either place. That is the case this data exists for.

One Call Across a Border

The E6 crosses from Sweden into Norway at Svinesund. Ask for every road-weather station within 25 km of the bridge:

curl -H "X-API-Key: $KEY" \
  "https://api.napspan.com/api/v1/features?type=weather_stations&lat=59.09&lng=11.25&radius_km=25"

On the morning of 9 October that returned nine stations — four Swedish, five Norwegian — in one list. One from each side, trimmed:

{
  "id": "SWE-rwis-1439",
  "jurisdiction": "SWE",
  "name": "Svinesundsbron",
  "properties": {
    "observation_time": "2026-10-09T08:50:03.000+02:00",
    "air_temperature_c": 5.1,
    "surface_temperature_c": 1.9,
    "dewpoint_c": 0.6,
    "humidity_pct": 69.7,
    "wind_speed_ms": 1.5,
    "visibility_m": 20000
  }
}
{
  "id": "NOR-ws-0129014",
  "jurisdiction": "NOR",
  "name": "Solbergtårnet syd",
  "road_name": "E6",
  "properties": {
    "air_temperature_c": 5.3,
    "surface_temperature_c": 5.1,
    "road_surface_temperature_c": 5.1,
    "humidity_pct": 72.8,
    "wind_speed_ms": 1.4
  }
}

On the bridge itself the road was 3.2 degrees colder than the air. Thirteen kilometres north on the E6 it was 0.2 degrees colder. Same morning, same corridor — which is why one temperature per route is not enough.

Five Names for One Number

The Norwegian row above carries the surface temperature twice. That is deliberate, and it is the reason this post exists.

Until 8 October, road-surface temperature reached our API under five different keys, one per national convention: surface_temperature_c from Germany, Sweden and Poland, road_surface_temperature_c from Norway and Iceland, road_temperature_c from Lithuania, surface_temp_c from Scotland, and road_surface_temp_c from Slovenia and Latvia — Latvia’s one level down, inside a nested object. Air temperature, dew point, humidity and wind direction were split the same way. A client reading surface_temperature_c saw the road in three countries and nothing in six, and nothing errored.

Since 8 October every station also carries the common key. The original key stays, because someone may already be reading it; the common one is added next to it. Where a country already used the common name, nothing changed.

Where the Readings Are

Measured in one transaction against production on 9 October 2026, 07:00 UTC:

CountryStationsSurface temp.Air temp.Surface condition
Germany1,5101,1481,1931,109
Sweden837768748—
Norway502417427—
Iceland20694181—
Lithuania167162161166
Scotland165150155165
Slovenia110719671
Latvia72686969
Poland555—
Total3,5742,8833,0351,580

Some stations measure only air or wind and have no surface sensor at all. Scotland is the only part of the United Kingdom in the set, and Poland is five stations, not a national network.

We Found a Bug of Our Own on the Way

While pulling the figures for this post, fifteen Swedish stations reported a road surface of exactly 0.0 °C under air as warm as +10.7 °C. They were not icy. The national feed sends a sensor that has no reading as an empty record, and our parser turned “no reading” into zero — the same mistake gave 50 Swedish stations a visibility of 0 m. Fixed on 9 October: a sensor that sends no value now produces no field. Every Swedish figure on this page was measured after the fix.

Five Things to Know Before You Build on It

Surface condition is in the agency’s own words. 1,580 stations in five countries describe the road surface — dry, wet, glaze from Germany, Wet and Moist from Scotland, Šlapia (“wet”) from Lithuania. We carry the word as published under surface_condition and do not map it onto a shared scale: the scales do not line up, and a translated “wet” that the agency meant as “wet and treated” is worse than the original. Sweden publishes ice, water and snow flags for 56 of its 837 stations; we do not carry those yet.

Some sensors publish impossible numbers, and we pass them through. At the moment we measured, 26 stations published a pair of readings that cannot both be true — a road surface of −75 °C on the A45 in Germany under +5.8 °C air, or air of −40 °C on the E6 in northern Norway over a +1.3 °C road. The figures in this post leave those 26 out. The API does not: it returns what the road authority published, and a sanity check against the air temperature belongs in your code.

Not every country says when the reading was taken. Germany, Sweden and Latvia stamp each observation with observation_time, Poland with measure_time. Norway, Iceland, Lithuania, Scotland and Slovenia do not. Where the stamp exists, check it: on the same morning, the oldest Swedish observation still being published was five days old.

Units are in the field name. _c is Celsius, _ms metres per second, _pct percent, _m metres. Where a feed does not state its unit we do not guess one: Scotland’s wind speed is carried as published and has no wind_speed_ms.

It is a measurement, not a forecast. Each reading is what the sensor saw when it last reported. Nothing here predicts where ice will form in two hours.

The Same Call as Everything Else on the Route

Road-weather stations are one more feature type in the same /features schema as road cameras, live truck-parking occupancy and truck restrictions and VMS messages. A camera shows a person the road; a surface sensor gives your code a number. Filter by jurisdiction with ISO 3166-1 alpha-3 codes (NOR, SWE), by bbox, or by a point and radius_km as above.

What This Does Not Do

Figures measured against production on 9 October 2026, 07:00 UTC, in a single transaction; observation ages on the same morning. Readings change by the minute, and a winter morning will look nothing like this October one — the coverage and the field names are what will hold.

Try It

Read the road, not the air

Road-surface temperature from 2,883 stations in 9 European countries under one field name, in the same API call as cameras, restrictions and parking — with the gaps stated up front. Free 14-day trial. No card.

Get Free API Key Read the Docs