Attribution is mandatory, on every plan
Trial, Personal, Professional or Enterprise: any app, site or product that uses this API shows “Data: Live Roads” with a visible link to liveroads.co.uk, next to the data. Ready to copy:
Data: <a href="https://liveroads.co.uk">Live Roads</a>
Keep the original sources' credits too, where the response includes them: each record names its source, and the response carries the credit lines the sources ask for.
Getting started
Create a trial key with the form below and add it to the request. Open this in a browser, with your key at the end, and you have data:
https://liveroads.co.uk/api/v1/incidents?road=M25&key=lr_…
It returns JSON. For GeoJSON, ready to drop on a map, add &format=geojson. From code, send the key in the X-API-Key header (or Authorization: Bearer lr_…) rather than in the URL:
curl -H "X-API-Key: lr_…" "https://liveroads.co.uk/api/v1/incidents?nation=wales&type=roadworks&status=active"
Your key
From 14 October 2026 every request needs a key. The key you create here is a trial key: it works for 5 days from its first request, with 120 requests an hour, so you can find out whether the API does what you are building. To carry on after that, choose a paid plan.
We ask for a name, an email and what it is for, for three plain reasons: to tell you when an official source goes quiet or changes; to learn what the API is missing for the people who use it in earnest; and because a key that can be revoked protects everyone from a runaway loop.
GET /api/v1/incidents
Everything the site shows on its map and road pages, from the same live snapshot, refreshed every minute. Every parameter is optional and they combine; lists are comma-separated.
| Parameter | Values | What it does |
|---|---|---|
road | M25, A1(M), a1m, A55 | One or more road numbers. The same roads as the /road pages. |
nation | england, wales | Where the event is. region works as an alias. Scotland is not covered yet. |
source | national-highways, traffic-wales, meteoalarm | The authority that published it. authority works as an alias. |
type | accident, incident, roadworks, weather | What kind of event. Without it, all of them. |
status | active, scheduled | Happening now, or planned works that have not started. |
closure | any, full, lanes, slip, link, layby, partial | Only events that shut something. full is the carriageway itself. |
bbox | -0.6,51.3,0.3,51.7 | An area: west, south, east, north, in WGS84 degrees. |
limit | 1 to 2000 (default 500) | Newest first. meta.total says how many matched. |
format | json (default), geojson | A list for code, or a FeatureCollection for maps. |
Example
A real request and its answer, one record (with limit=1), fetched from the live API on 8 October 2026 at 22:42 UK time:
https://liveroads.co.uk/api/v1/incidents?road=M25&status=active&limit=1&key=lr_…
{
"attribution": {
"text": "Data: Live Roads",
"url": "https://liveroads.co.uk"
},
"meta": {
"count": 1,
"total": 12,
"limit": 1,
"generatedAt": "2026-10-08T21:42:32.577Z",
"coverage": "Motorways and trunk roads in England and Wales. Local roads and Scotland are not covered.",
"licence": "Data: Live Roads (liveroads.co.uk). England: contains National Highways information, Powered by National Highways' Transport Data Feeds (licence based on the Open Government Licence). Wales: Traffic Wales. Weather warnings: Met Office via MeteoAlarm (CC BY 4.0). Keep the source credit of each record.",
"sources": [
{
"name": "traffic-wales",
"label": "Traffic Wales",
"ok": true,
"count": 20,
"newestAt": "2026-10-08T20:43:00.000Z",
"stale": false
},
{
"name": "meteoalarm",
"label": "Met Office via MeteoAlarm",
"ok": true,
"count": 0,
"newestAt": null,
"stale": false
},
{
"name": "national-highways",
"label": "National Highways: road and lane closures",
"ok": true,
"count": 366,
"newestAt": "2026-10-08T21:18:39.390Z",
"stale": false
},
{
"name": "nh-signs",
"label": "National Highways: motorway signs",
"ok": true,
"count": 53,
"newestAt": "2026-10-08T21:37:24.240Z",
"stale": false
}
]
},
"incidents": [
{
"id": "nhs-ad7bbe8185b42c8f9de1",
"type": "accident",
"severity": "high",
"status": "active",
"lat": 51.711088,
"lon": -0.291336,
"title": "M25 near J22 to J21A, anticlockwise: Collision slow down",
"description": "Shown on National Highways signs (M25 anti-clockwise between J22 and J21A): \"COLLISION SLOW DOWN\".",
"source": "national-highways",
"sourceUrl": "https://nationalhighways.co.uk/travel-updates/",
"road": "M25",
"direction": "anticlockwise",
"location": "M25 anti-clockwise between J22 and J21A",
"nation": "england",
"startedAt": "2026-10-08T21:22:10.100Z",
"updatedAt": "2026-10-08T21:26:49.490Z",
"sourceName": "National Highways"
}
]
}Response fields
| Field | What it is |
|---|---|
attribution | The credit to show, { text, url }. Also in the X-Attribution header. |
meta.count / total | Records in this answer, and how many matched before the limit. |
meta.generatedAt | When the snapshot was taken from the sources. |
meta.licence | The credit lines the sources ask for. Keep them. |
meta.sources | Each feed: whether it answered, how many records, its newest update, and stale when it has gone quiet. |
id | Stable while the source keeps the event. |
type, status, severity | accident, incident, roadworks or weather; active or scheduled; info, low, medium, high or critical. |
title, description | A short title, and the source's own wording. |
road, direction, location | Road number, direction in words, and the junctions where the source gives them. |
closure | What is shut, when something is: full, lanes, slip, link, layby or partial. |
overnight, hours | Works that run overnight only, and their nightly window. |
lat, lon | WGS84. In GeoJSON, the point geometry instead. |
nation | england or wales. |
startedAt, endsAt, updatedAt | ISO 8601, UTC. |
source, sourceName, sourceUrl | Who published it. Keep this credit wherever the record is shown. |
Errors
| Status | When |
|---|---|
400 | A parameter with a value the API does not know. The body says which and what it accepts. |
401 | No key (from 14 October 2026). Until then a keyless request still answers, with a notice in X-API-Notice and in the body. |
402 | The trial ended (5 days after the first request). Choose a paid plan to carry on. |
403 | The key was revoked. The body says why. |
429 | Too many requests. Wait for the seconds in Retry-After. |
Trial keys get X-API-Trial-Ends with the end of the trial. Every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
Limits
Counted per key, not per IP address, so an app with many users is not held back by one of them: 120 an hour on the trial, and a daily allowance on the paid plans (below). Until 14 October, requests without a key are held to 20 an hour per address.
The data changes about once a minute, so asking more often than that brings nothing new. CORS is open: you can call the API straight from a browser.
Plans
The plans pay for access to the service: the API itself, its limits and support. They do not sell or license the underlying data, which belongs to the authorities that publish it and keeps their credits.
Trial
Anyone, to find out whether it fits
Free
- 5 days from the first request
- Every live event in England and Wales
- Attribution required
Personal
Personal or small projects with no meaningful revenue
£13a month, inc. VAT
- About 10,000 requests a day
- England and Wales
- Attribution required
Professional
Commercial apps, ad-supported sites, use inside a company
£69a month, inc. VAT
- About 100,000 requests a day
- An email when a source goes quiet
- Attribution required
Enterprise
Fleets, insurers, media, several countries, an SLA
Talk to us
- Agreed limits and an SLA
- Several countries, through Roadscore
- A contract
To move to a paid plan, write to [email protected] with your project's name, your key and what you use the data for. We reply with the plan and an invoice; your key keeps working, without the trial's end date. Enterprise, for fleets, insurers, media or several countries, goes through Roadscore, the same team's data platform.
Terms and attribution
Using the API means agreeing to show where the data comes from. Building a product on it without a key, or without attribution, is not an authorised use.
Attribution is mandatory, on every plan
Trial, Personal, Professional or Enterprise: any app, site or product that uses this API shows “Data: Live Roads” with a visible link to liveroads.co.uk, next to the data. Ready to copy:
Data: <a href="https://liveroads.co.uk">Live Roads</a>
Keep the original sources' credits too, where the response includes them: each record names its source, and the response carries the credit lines the sources ask for.
This is not a formality. The data comes from National Highways, Traffic Wales and the Met Office (through MeteoAlarm), and a reader has a right to know that a closure was published by a highways authority, not guessed by an algorithm. The credit lines they ask for are in meta.licence.
Honest about coverage
This API returns what the official sources published, not what is happening on every road. A road with nothing in the response is not a clear road: it is a road nobody has published anything about. Local roads are not covered, nor is Scotland yet, and England's accidents and queues come from what the motorway signs say.
If you build alerts on this, tell the people who receive them. Do not use it for emergency decisions: in an emergency, call 999. Whether each source is answering right now is in meta.sources.
Publishing data, rather than reading it
This page is for reading the data. If you are a council, an operator or another authority and want your closures on the map and in this API, with your name as the source, see the partners programme. It is free for public bodies.
Contact
Questions, a lost key, higher limits or a plan: [email protected].