Skip to main content
POST
Finds public road cameras run by transport authorities, nearest first, and fetches the nearest available frame. Some cameras refresh only every few minutes. Source fields are observed; distance, converted coordinates, frame_age_s and offline are derived. Coverage reports how many cameras the catalogue could find, even when no frame was fetched.

Authentication

Requires x402 payment in the payment-signature header.

Request Body

number
required
Latitude in decimal degrees. From -90 to 90.
number
required
Longitude in decimal degrees. From -180 to 180.
number
Search radius in kilometres. From 0 to 50. Defaults to 5.
integer
Most cameras returned. From 1 to 10. Defaults to 3.

Response (200 OK)

Top-level envelope: success (boolean) and data (object). All fields below are nested under data.
string
Durable job ID for audit and lookup
string
Job status: completed
string
Always place_camera_snapshot
object
The answer, described under Result below
object
Where the answer came from and when
string
The public body the data comes from. Always Public transport authorities.
string
public when the data comes from a public body, commercial otherwise
string
When the lookup was made, as an ISO 8601 UTC time
string | null
The nearest camera frame capture time when the image headers provide it.

Result

Nested under data.result.
object[]
Cameras.
object
Observed.
string
Id.
string
Name.
string | null
Direction. null when the source gives no value.
number | null
Latitude. null when the source gives no value.
number | null
Longitude. null when the source gives no value.
object | null
Source position. null when the source gives no value.
number
X.
number
Y.
string
Crs.
string
Frame url.
string | null
Frame captured at. null when the source gives no value.
string | null
Frame checked at. null when the source gives no value.
string
Frame fetch status.
string
Attribution.
object
Derived.
object
Latitude.
number
Value.
string
Rule.
string[]
From.
object
Longitude.
number
Value.
string
Rule.
string[]
From.
object
Distance km.
number
Value.
string
Rule.
string[]
From.
object
Frame age s.
number | null
Value. null when the source gives no value.
string
Rule.
string[]
From.
object
Offline.
boolean | null
Value. null when the source gives no value.
string
Rule.
string[]
From.
object
Coverage.
integer
Cameras in range.
boolean
Catalogue available.
string[]
Networks loaded.
integer
Total.
integer
Returned.
boolean
Truncated.
See Pricing for this tool’s price. A wallet (x402) call receives it in the 402 quote before anything is charged; a call paid from prepaid credits is charged when the API accepts the request and answers 200.

Notes

  • An empty list with catalogue_available true means the loaded catalogue was searched and no cameras were in range. With catalogue_available false it provides no evidence either way. Neither proves a physical scene is clear.
  • coverage.networks_loaded lists catalogues loaded within 48 hours; coverage is partial outside those networks. Stored cameras remain visible when catalogue refreshes fail.
  • Fetches at most three frames in nearest order, stopping after a usable frame. Failed or older-than-30-minute frames are offline and remain listed. Unchecked cameras have null offline and frame_age_s.
  • frame_captured_at comes from the image Last-Modified header; absent or future timestamps are null. HTTP Date and catalogue update times are not image capture times.
  • Coordinates converted from Web Mercator are under derived.latitude and derived.longitude, with the original position under observed.source_position. Other coordinates are under observed.
  • radius_km defaults to 5 (maximum 50); limit defaults to 3 (maximum 10). Return attribution alongside any displayed frame. TxDOT frame URLs return a JSON snippet containing a base64 JPEG.
  • Results return inline. The finished job stays available at /v1/requests/{request_id}