Platelytics Documentation
Platelytics is a real-time license plate recognition (LPR) monitoring platform. It ingests plate events from your cameras or edge devices, detects anomalies, and provides a centralized dashboard for operational oversight.
Your cameras or ALPR software (such as OpenALPR, Rekor, or a custom model) push plate sightings to the Platelytics API. Each sighting includes the plate text and a context image. From there, the platform normalizes the data, tracks history, and runs automated anomaly detection — all visible in real-time on your dashboard.
Quick Start
Get your first plate into Platelytics in under two minutes.
Create your account
Sign up from the homepage. An API token is automatically generated for you on signup.
Copy your API token
On the dashboard, click the Copy API Token button in the header. Your token is copied to your clipboard — keep it secure, as it authenticates all API requests.
Send your first plate
POST a plate text and image to the API:
curl -X POST https://platelytics.app/api/plate \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -F "plate=ABC-123" \ -F "photo=@/path/to/image.jpg"
A successful response returns 201 with the plate text and image key. Open your dashboard to see the event appear in real-time.
Dashboard
The dashboard is a real-time single-page view powered by live database subscriptions. All data updates automatically — no refresh needed. The dashboard pauses subscriptions during inactivity to conserve bandwidth and resumes when you return.
Overview Metrics
Plate Lookup
Capture Timeline
Anomaly Feed
Recent Detections
Watchlist
Usage History
Plate text correction
If your camera misreads a plate, click the pencil icon next to any detection in the Recent Detections table to correct it. The event is re-assigned to the correct plate record and all aggregate counts (capture count, first/last seen) are recomputed automatically.
Search
The Plate Lookup panel on the dashboard provides instant search across your plate database. Searches use a full-text index on normalized plate text (non-alphanumeric characters stripped, uppercased).
AB12 matches AB123, AB1234, etc.Last 6 months (default) and All time.On the plate detail page (/PLATE_TEXT), you can see every sighting, manage tags, add notes, and flag or ignore the plate.
Anomaly Detection
Platelytics runs automated anomaly detection on cron schedules and inline during ingestion. Anomalies are deduplicated within a 30-minute window per category. Each category can be individually toggled on or off from the gear icon in the Anomaly Feed.
Categories
| Category | Severity | Trigger |
|---|---|---|
| Camera offline | critical | No data from a camera for more than 2 hours |
| Capture rate drop | warning | A camera goes silent for more than 30 minutes |
| Traffic spike | warning | Hourly captures exceed mean + 2 standard deviations over the last 24h |
| Traffic drop | warning | Hourly captures fall below mean − 2 standard deviations over the last 24h |
| Off-hours activity | info | A capture occurs between 1:00–4:59 AM in your local timezone |
| Frequent sighting | warning | Same plate appears 5 or more times within the last hour |
| New plate | info | A plate is seen for the first time (suppressed until you have 100+ plates) |
| Day-over-day change | info | Today's total captures differ from yesterday's by more than 30% |
| Week-over-week change | warning | 7-day capture total differs from the prior 7-day window by more than 30% |
| Gradual decline | warning | Daily totals have decreased for 5 or more consecutive days |
Camera health tracking
When plate events include a cameraId in the capture context, Platelytics tracks camera health automatically. Status transitions: online → degraded (silent for 30 min) → offline (silent for 2 hours). Camera health is polled every 15 minutes.
API Reference
Authentication
All API requests require a bearer token in the Authorization header. Your token is automatically generated when you create your account. Copy it from the dashboard header — one token per account.
Authorization: Bearer YOUR_API_TOKEN
/api/plateReturns a simple status response. Useful for verifying connectivity.
Response
{ "status": "ready" }/api/plateSubmit a plate sighting. Each request represents a single detection. The plate text is normalized (non-alphanumeric characters stripped, uppercased) for storage and search.
Headers
Content-Type: multipart/form-data
Body (FormData)
| Field | Type | Description |
|---|---|---|
plate | string | License plate text as read by the camera (e.g. ABC-123) |
photo | File | Context image (JPEG or PNG, max 1 MB) |
Example Request
curl -X POST https://platelytics.app/api/plate \ -H "Authorization: Bearer YOUR_API_TOKEN" \ -F "plate=ABC-123" \ -F "photo=@/path/to/image.jpg"
Success Response 201
{
"status": "ok",
"plate": "ABC-123",
"imageKey": "usr_abc123/1708099200000-a1b2c3d4.jpg"
}Error Responses
| Status | Reason |
|---|---|
400 | Wrong content type, missing plate field, missing or invalid photo, or file exceeds 1 MB |
401 | Missing or invalid API token |
500 | Server error or plan limit reached |
Idempotency: Each submission is stamped with a unique source ID. Duplicate submissions return the existing event identifiers with "duplicated": true instead of creating a duplicate record.
Plans & Limits
| Plan | Plates / month | Price |
|---|---|---|
| Free | 1,000 | $0 |
| Starter | 5,000 | Coming soon |
| Pro | 25,000 | Coming soon |
| Enterprise | 100,000+ | Coming soon |
Requests that exceed your monthly plate limit will receive a 500 response. Upgrade to a higher tier to increase your limit.