← PERCEPTA
For industry

What the roadside sees, ready to build on.

Putting AI on a city's camera network requires an agreement with that city, and that process can run for years. We hold one, so you do not need your own — an API key is the whole of it. What comes back is what the cameras see and what residents report, from the same roads, in one feed.

Doing it yourself

Find the department that owns the cameras
Data-protection assessment, legal review
Procurement, often a public tender
Install your own hardware on their network
Calibrate every camera from scratch
Repeat, city by city
12–24 monthsbefore the first row of data

Through PERCEPTA

Request a key. Read the data.
Daysthe approval already exists
Where this is heading

Vehicles perceive the world from inside the vehicle. The step after that is reading the infrastructure as well — a junction able to say what it is seeing before any single car's sensors can. That roadside layer has to exist before anything can read it, and this is it: a live, anonymised, machine-readable account of what is happening on specific metres of specific roads, in a form a city has already agreed to publish.

And not only the cameras

Residents report what no camera can resolve — a bike lane blocked by scaffolding, a crossing that does not give elderly people enough time, a surface starting to break up. Those reports arrive in the same feed, categorised, geolocated, and carrying the status the city has given them.

It is the half of the road instrumentation does not reach: obstruction, intent, and conditions that have not caused an incident yet but are about to.

What a row actually looks like

GET /v1/events200 · application/json
{
  "event_id": "0a9c3f18-5b2e-5c41-9d07-3ea6b1c4d820",
  "event_type": "near_miss",
  "occurred_at_ms": 1762166820000,
  "monitoring_point_id": "example-junction-03",
  "latitude": 18.78841, "longitude": 98.98523,
  "source": "camera",
  "provisional": true,
  "video_reviewed": false,
  "attributes": {
    "pet_seconds": 1.4, "pet_error_seconds": 0.3,
    "crossing_degrees": 72,
    "first_class": "motorcycle",
    "second_class": "car",
    "range_meters": 31.2
  },
  "provenance": {
    "source_kind": "cctv",
    "anonymisation": "pre-encode-blur",
    "no_persistent_identifier": true
  }
}

That row is a collision that did not happen. A motorcycle and a car crossed at 72°, missing each other by 1.4 seconds, at a precise point on a city's road network. There was no crash, so there is no insurance claim, no police report, and no trace of it in any other dataset on earth. Accident statistics can only count the ones that went wrong; this counts the ones that nearly did — which is the population you actually want if you are scoring risk, choosing validation routes, or arguing for a junction redesign.

And the highlighted fields mean you can tell how far to trust it: whether a human has checked the video, and the error bar on the measurement. You will not discover the uncertainty in production.

19 event types, live today

near_missqueue floodingroadworks accidentharsh_braking harsh_accelerationharsh_cornering parked_vehiclewrong_way pedestrian_intrusion citizen_potholecitizen_flood citizen_trafficcitizen_accident citizen_signalcitizen_obstacle citizen_improvementcitizen_other

Blue from cameras, purple reported by residents — two independent records of the same road.

How often it updates: hazard detections reach the API about a minute after they are detected; road-condition detections — flooding, roadworks, accidents — come from frame sampling on an hourly cycle. Resident reports appear as they are submitted. There is no real-time push, and we would rather say so than let you design around one.

How you can read it back: individual events, or per-camera aggregates, time series bucketed by hour, day or week, density at roughly 150-metre cells, and distributions of speed, vehicle class, braking force and queue length. Those buckets are a query option, not the refresh rate.

What teams build with it

ADAS & autonomy Where near-misses actually happen, to choose validation routes and score real-world scenario coverage
Insurance Near-miss density as a leading indicator of claim risk, per junction rather than per postcode
Mapping & navigation Lane closures, roadworks and flooding as they appear — the freshness problem at the centre of the map business
Logistics & fleet Queue duration and clearance by hour and junction, to plan around congestion instead of reacting to it
Research Reproducible road-safety datasets from a live Southeast Asian city, with uncertainty published alongside
Camera & sensor makers A proving ground for new hardware on a live municipal network, without negotiating for one yourself

Where it stands

Working today

  • Authenticated REST API, keys scoped per city, every request metered
  • 19 event types plus aggregates, time series, density and distributions
  • Freshness about one minute for hazards, hourly for road-condition vision
  • JSON or NDJSON, gzip, cursor paging, 31-day query windows
  • Public API documentation — open it now, no account needed

On the roadmap

  • Bulk export in Parquet, for research-scale history
  • Sandbox keys against synthetic data
  • Published quotas and a usage API
  • Per-vehicle passage records — anonymous, under individual contract only
  • Price. Cost is not proportional to rows returned, so we are measuring for three months before setting one

The time to evaluate is before the volume arrives, not after. Phuket is signed for citywide deployment, and that is where the volume comes from. The API, the schema and the documentation are live and complete today — so you can run them against your own pipeline now, and be reading production data on day one rather than starting integration then.

Look before you ask

API reference · open
Read the full specification →
Every endpoint, every field, every caveat — generated from the same OpenAPI document our own clients are built from. No sign-in.
Barcelona · demonstration
See the data on a map →
The same events this API returns, drawn on the city. The platform is real; the Barcelona rows are a demonstration.

Start a conversation

Request access to the data →
Which events you need and where — that is enough for us to tell you honestly whether it works today, whether it works once Phuket scales, or whether it doesn't. We would rather say no early than sell you a roadmap.