Base URL

https://api.vancam.ai/cameras/cameras

Authentication

The spatial search API requires an x-api-key header on every request.

curl "https://api.vancam.ai/cameras/cameras?lat=49.2827&lon=-123.1207&radius=1" \
  -H "x-api-key: <your key>"

No setup required to try it — every client defaults to this shared, public key if VANCAM_API_KEY (or x-api-key) isn't set: abwSAo91eI8wENsNrZFUE7tC6qGkh9Tw66x4cfcQ.

This is one key shared by every anonymous caller — Python or Node, CLI, MCP, or raw REST. Its 1 req/s / 500 requests/month limit is a single collective pool across all of them combined, not 500 each — if it's busy, you'll get rate-limited by other people's traffic, not just your own.

For a limit that's yours alone (5 req/s, 500 requests/month, not shared with anyone), get a free personal key from your account dashboard. Need more than that? See Pro and Enterprise plans.

Requests without a valid key are rejected with 403.

GET /cameras/cameras

One endpoint, four search modes selected by which params you pass.

A. Radius search

GET /cameras/cameras?lat=49.2827&lon=-123.1207&radius=1

Cameras within radius km of a point. Optional: limit (default 50). radius must be between 0 and 50 km.

B. Route search

GET /cameras/cameras?origin_lat=49.2827&origin_lon=-123.1207&dest_lat=49.2965&dest_lon=-123.0884&buffer=100

Cameras within buffer meters of a straight line between origin and destination. Optional: limit (default 50).

C. Bounds search

GET /cameras/cameras?min_lat=49.2&min_lon=-123.2&max_lat=49.3&max_lon=-123.0

Cameras inside a bounding box. Optional: limit (default 100).

D. Nearest search

GET /cameras/cameras?lat=49.2827&lon=-123.1207&nearest=true&limit=5

N nearest cameras to a point. limit must be between 1 and 50 (default 5).

E. Camera by ID

GET /cameras/cameras?asset_id=30145

Full details for a single camera.

Sample response (radius search)

{
  "type": "radius_search",
  "count": 1,
  "radius_km": 1.0,
  "cameras": [
    {
      "asset_id": 30145,
      "level0": "North America",
      "level1": "CA",
      "level2": "British Columbia",
      "level3": "Vancouver",
      "longitude": -123.120444,
      "latitude": 49.279674,
      "direction": "North",
      "street_address": "Seymour St and Smithe St",
      "camera_class": "open",
      "distance_meters": 48.56
    }
  ]
}

GET /api?asset_id={id}

Fetch the latest live frame for a camera (binary JPEG).

GET https://api.vancam.ai/api?asset_id=30145

Data schema

  • asset_id: unique camera identifier
  • level0level3: geographic hierarchy (continent → country → province/state → city)
  • latitude, longitude: WGS84
  • direction: cardinal camera facing
  • camera_class: open or private
  • distance_meters / route_fraction: present on radius/nearest/route searches

MCP equivalent

Prefer MCP for Cursor and Claude? See the MCP page — same backend, agent-native interface.