SpeedMap API — Developer Guide
SpeedMap is a lookup API that returns the speed limit for any coordinate across the UK, Northern Ireland and the Republic of Ireland. Two endpoints. One clean JSON response.
Getting Started
Four steps to your first response. No SDKs to install — SpeedMap is a plain HTTPS/JSON API.
Authenticate with your bearer token
Authorization: Bearer <your_token>Call the Speed endpoint
curl 'https://api.iw-slu.com/Speed?latitude=51.5074&longitude=-0.1278'
-H 'Authorization: Bearer <your_token>'Read the response
{
"message": "Success",
"error": null,
"data": {
"id": 184522, "latitude": 51.5074, "longitude": -0.1278,
"roadName": "Whitehall", "speedLimit": 30,
"distance": 4.2, "errorMessage": null
}
}Move to bulk when you need scale
Authentication
Both endpoints are protected and return nothing without a valid credential.
Authorization: Bearer <your_token>GET /Speed
Returns the speed limit for a single coordinate.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| latitude | number | Yes | Between -90 and 90. |
| longitude | number | Yes | Between -180 and 180. |
| Field | Type | Description |
|---|---|---|
| id | number | Identifier of the nearest road segment. |
| roadName | string | Name of the nearest road. |
| speedLimit | number | Posted speed limit, in mph. This is the match. 0 when outside the match buffer. |
| distance | number | Distance from the queried point to the nearest road, in metres. |
| errorMessage | string | Human-readable explanation when outside the 20m match buffer; null on a normal match. |
Example — normal match
// Response — 200 OK
{
"message": "Success", "error": null,
"data": {
"roadName": "Whitehall", "speedLimit": 30,
"distance": 4.2, "errorMessage": null
}
}Example — outside the 20m buffer
// Response — 200 OK, no valid match
{
"message": "Success", "error": null,
"data": {
"roadName": "Brigstock Road", "fClass": "secondary",
"speedLimit": 0, "distance": 21.01,
"errorMessage": "The point requested is more than 20m away from any road in our network."
}
}POST /Speed/bulk
Returns speed limits for a list of coordinate pairs. Results come back paginated.
| Field | Type | Description |
|---|---|---|
| coordinates | array | List of { latitude, longitude } pairs. Required. |
| page / pageSize | number | Pagination controls for the response. |
| search | string | Optional filter applied to results. |
curl -X POST 'https://api.iw-slu.com/Speed/bulk'
-H 'Authorization: Bearer <your_token>'
-H 'Content-Type: application/json'
-d '{ "page": 1, "pageSize": 100, "coordinates": [
{ "latitude": 51.5074, "longitude": -0.1278 },
{ "latitude": 53.4808, "longitude": -2.2426 } ] }'Send coordinates as objects, not tuples
Chunk large jobs into batches of 500
Always check hasNextPage
Match results by coordinate, not array position
Errors & Rate Limits
You are not charged for requests that return no match or a server error.
| Status | Meaning |
|---|---|
| 200 | Lookup successful. |
| 400 | Bad request — missing or out-of-range coordinates. |
| 401 | Missing or invalid bearer token. |
| 429 | Rate limit exceeded. No fixed per-minute/per-day threshold is currently defined. |
| 500 | Unexpected server error — not billed. |
{
"type": "https://api.iw-slu.com/problems/unauthorized",
"title": "Unauthorized", "status": 401,
"detail": "Missing or invalid credentials.", "instance": "/Speed"
}Coverage
- Great Britain (England, Scotland, Wales)
- Northern Ireland
- Republic of Ireland
Coordinates outside these territories will not return a match.
