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.

1

Authenticate with your bearer token

Every request needs a bearer token, issued to authorised customers under your service agreement.
Authorization: Bearer <your_token>
2

Call the Speed endpoint

Pass a single latitude/longitude pair to get the speed limit at that point. Base URL: https://api.iw-slu.com
curl 'https://api.iw-slu.com/Speed?latitude=51.5074&longitude=-0.1278' 
  -H 'Authorization: Bearer <your_token>'
3

Read the response

Every response comes back in the same envelope: a message, an error, and a data payload.
{
  "message": "Success",
  "error": null,
  "data": {
    "id": 184522, "latitude": 51.5074, "longitude": -0.1278,
    "roadName": "Whitehall", "speedLimit": 30,
    "distance": 4.2, "errorMessage": null
  }
}
4

Move to bulk when you need scale

Looking up more than one point? Use POST /Speed/bulk instead of looping single calls — see below.

Authentication

Both endpoints are protected and return nothing without a valid credential.

Authorization: Bearer <your_token>
Confirmed
Tokens are issued, rotated, and administered manually by Insight Warehouse — there's no self-serve portal. Expiry and access level are set according to the subscription tier purchased. For a new token, a rotation, or any token issue, contact info@insight-warehouse.co.uk.

GET /Speed

Returns the speed limit for a single coordinate.

ParameterTypeRequiredNotes
latitudenumberYesBetween -90 and 90.
longitudenumberYesBetween -180 and 180.
FieldTypeDescription
idnumberIdentifier of the nearest road segment.
roadNamestringName of the nearest road.
speedLimitnumberPosted speed limit, in mph. This is the match. 0 when outside the match buffer.
distancenumberDistance from the queried point to the nearest road, in metres.
errorMessagestringHuman-readable explanation when outside the 20m match buffer; null on a normal match.
Confirmed — matching criteria
A coordinate is matched to the nearest road within a 20 metre buffer. Outside that, speedLimit returns 0 (not a real 0 mph limit) and errorMessage explains why.

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.

FieldTypeDescription
coordinatesarrayList of { latitude, longitude } pairs. Required.
page / pageSizenumberPagination controls for the response.
searchstringOptional 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 } ] }'
Confirmed
500 coordinate pairs is the maximum accepted per request — a confirmed hard limit.
1

Send coordinates as objects, not tuples

Each entry needs explicit latitude/longitude keys — not [lat, lon] pairs.
2

Chunk large jobs into batches of 500

For anything bigger than 500 pairs, split into multiple requests.
3

Always check hasNextPage

The bulk endpoint paginates independently of batch size — loop until hasNextPage is false.
4

Match results by coordinate, not array position

Order isn't guaranteed — match returned latitude/longitude rather than assuming array index.

Errors & Rate Limits

You are not charged for requests that return no match or a server error.

StatusMeaning
200Lookup successful.
400Bad request — missing or out-of-range coordinates.
401Missing or invalid bearer token.
429Rate limit exceeded. No fixed per-minute/per-day threshold is currently defined.
500Unexpected server error — not billed.
{
  "type": "https://api.iw-slu.com/problems/unauthorized",
  "title": "Unauthorized", "status": 401,
  "detail": "Missing or invalid credentials.", "instance": "/Speed"
}
To confirm
Full list of specific error codes/messages for the Problem Details envelope isn't documented yet.

Coverage

  • Great Britain (England, Scotland, Wales)
  • Northern Ireland
  • Republic of Ireland

Coordinates outside these territories will not return a match.

Frequently Asked Questions

FAQ

1Am I charged for a coordinate that has no matching speed limit?
No. No-match results and server errors are not billed.
2What's the largest batch I can send to /Speed/bulk?
500 coordinate pairs — confirmed as the maximum per request.
3What happens if I exceed the rate limit?
You'll get a 429 Too Many Requests response. No fixed per-minute/per-day threshold is currently defined.
4What does it mean if errorMessage isn't null?
The point is more than 20 metres from the nearest road with a speed limit — the confirmed match buffer.
5Does the API cover live or temporary speed restrictions (e.g. roadworks)?
Not confirmed. The reference describes posted/permanent speed limits by matched road segment.