License plate recognition with evidence in every read.
Inspect per-character alternatives, keep one response schema across REST, WebSocket, and MQTT, and choose cloud, on-prem, or edge deployment paths from the same product surface.
PraxisEdge control center (demo)
Live-feel dashboard · static demo data
Reads today
14,284
+8.4% vs 7d median
Exact match, 24h
92.9%
+0.4pp vs 7d median
GPU p50 latency
36 ms
stable
Active sites
4 / 4
no offline regions
Recent reads
top of the feed- 7XKL982USGate 1 · cam-0193.2%accept
- AR-543-YHEUGate 2 · cam-0292.1%accept
- 品川330ASIAGate 3 · cam-0391.0%accept
- 2PVL117USGate 4 · cam-0489.9%accept
- BX-771-LAEUGate 1 · cam-0588.8%accept
- 9QDM045USGate 2 · cam-0687.7%accept
Fleet health
4 sites · 24 camerasUS-East
Westbound gate
6/6 online
US-East
North harbor lot
6/6 online
US-West
Civic center east
5/6 online
EU-West
Parkway entrance
5/6 online
Read evidence
Show the plate string and the uncertainty behind it.
This card renders one frozen sample from the marketing demo dataset with per-character confidence and alternatives visible.
illustrative demo data — not live telemetry
- 021%
- O9%
- 821%
- B9%
- 121%
- I8%
- 520%
- S8%
- Z20%
- 78%
- Q21%
- O9%
- 021%
- O9%
Integration paths
Start with REST, then move streaming traffic without changing parsers.
The transport diagram keeps REST, WebSocket, and MQTT on the same response shape.
One schema, three transports
REST · WebSocket · MQTT → one inference ledger
platform/spec: shared response shape
Integrations start simplest on REST and can move streams without changing the response parser.
Model visibility
Track exact-match and label-coverage trends in context.
The chart uses a synthetic 30-day window and marks a preview deploy annotation from demo data.
Accuracy, 30 days
Exact match · label coverage
Synthetic 30-day window with a deploy annotation where v2.3 landed.
Developer workflow
A quick request should return a readable response.
The terminal pairs a curl shape with a sample ReadResponse drawn from the frozen demo dataset.
Request
curl --silent https://praxisedge.ai/v1/read \
-H "authorization: Bearer $PRAXISEDGE_API_KEY" \
-H "content-type: image/jpeg" \
--data-binary @plate.jpgReadResponse
{
"plate": "7XKL982",
"decision": "accept",
"confidence": 0.932,
"region": "US",
"captured_at": "2026-04-20T18:00:00.000Z",
"per_character": [
[
{
"char": "7",
"confidence": 0.96
},
{
"char": "0",
"confidence": 0.211
},
{
"char": "O",
"confidence": 0.086
}
],
[
{
"char": "X",
"confidence": 0.945
},
{
"char": "8",
"confidence": 0.208
},
{
"char": "B",
"confidence": 0.085
}
],
[
{
"char": "K",
"confidence": 0.93
},
{
"char": "1",
"confidence": 0.205
},
{
"char": "I",
"confidence": 0.084
}
],
[
{
"char": "L",
"confidence": 0.915
},
{
"char": "5",
"confidence": 0.201
},
{
"char": "S",
"confidence": 0.082
}
],
[
{
"char": "9",
"confidence": 0.9
},
{
"char": "Z",
"confidence": 0.198
},
{
"char": "7",
"confidence": 0.081
}
],
[
{
"char": "8",
"confidence": 0.96
},
{
"char": "Q",
"confidence": 0.211
},
{
"char": "O",
"confidence": 0.086
}
],
[
{
"char": "2",
"confidence": 0.945
},
{
"char": "0",
"confidence": 0.208
},
{
"char": "O",
"confidence": 0.085
}
]
]
}Deployment modes
Choose cloud, on-prem, or edge without changing the response schema.
Each mode keeps the same integration contract while matching different infrastructure boundaries.
Cloud API
Hosted at praxisedge.ai/v1
- REST, WebSocket, and MQTT share one response schema
- Metered reads, display-once API keys
- Managed detector, OCR, eventing, and ledger
On-prem stack
Docker Compose bundle, your network, your hardware
- Same API and dashboard as the hosted plane
- Postgres, Redis, ClickHouse, MinIO, NATS, Mosquitto
- Weights SHA-verified at load
Edge
Near-camera deployment, scoped per site
- Shared response schema with cloud and on-prem
- MQTT QoS 1 retry with deduplication
- Jetson appliance packaging remains roadmap
Evaluate the API shape before wiring cameras.
Start with docs and demo responses, then contact the team when you are ready to scope a site or deployment mode.