Skip to main content

VisionAlert API Reference

Welcome to the Plate Recognizer VisionAlert API! Use our API to create camera monitoring logs and detect issues such as camera blockage, movement, blurry images, or glare.

For detailed instructions on how to set up VisionAlert, go here.

VisionAlert Cloud API​

Authentication​

All API calls must include an Authorization header containing the API Token in below format:

Authorization: Token YOUR_API_TOKEN

danger

For the commands below, make sure to replace YOUR_API_TOKEN with your API Token. For example, Authorization: Token abcdef123456xxxxxxxxxxxxxxxxxxxxxxxxxxxx.

Get your token from here.

Create Camera Monitoring Log​

This VisionAlert API endpoint creates a camera monitoring log by analyzing an uploaded image for issues such as camera blockage, movement, blurry images, or glare.

HTTP Request​

POST https://api.platerecognizer.com/v1/vision-alert/create-log/

  • Content-Type: multipart/form-data
  • The CORS policy of this endpoint allows requests from all origins.

POST Parameters​

ParameterRequiredDescription
uploadYesThe image file to be analyzed for camera issues.
camera_idYesUnique identifier for the camera submitting the image for analysis.
tagNoTag to associate with the camera. If the tag does not exist, it will be created. If the camera is not already associated with the tag, it will be added. Existing tags are preserved.
# Upload an image for camera monitoring analysis
curl -X POST \
-H "Authorization: Token YOUR_API_TOKEN" \
-F "camera_id=camera1" \
-F "tag=TAG-XX" \
-F "upload=@/path/to/image.png" \
https://api.platerecognizer.com/v1/vision-alert/create-log/

Response​

The API will merely receive send images and return a success message. This is because VisionAlert analyzes all the footage asynchronously, making the results available through the VisionAlert dashboard or webhooks if configured, within an hour from the last image was uploaded.

If successful, the API will return:

{
"message": "Log created successfully."
}

Otherwise, the response is an error message, such as the following:

{
"message": "Camera already uploaded a log recently."
}

The above response indicates that the camera has already uploaded a log recently, and the API will not process the request.

Rate Limits​

  • 1 request per second, for any camera is applied, as per our general API rate limiting policy.
  • 1 request every 15 minutes for each camera, meaning that each camera can only upload one image every 15 minutes for analysis.

Errors​

Error CodeMeaning
400Bad Request: Missing required parameters or invalid image format
401Unauthorized: Invalid or missing API token
403Forbidden: VisionAlert is not enabled for your account
429Too Many Requests: Rate limit exceeded

The following endpoints let you retrieve licenses, cameras, logs, and alerts. You can only access resources belonging to your own licenses.

Base URL: https://app.platerecognizer.com/v1/vision-alert/

List Licenses​

Retrieve all VisionAlert licenses for the authenticated user, ordered by most recent first.

HTTP Request​

GET https://app.platerecognizer.com/v1/vision-alert/licenses/

curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/licenses/"

Response 200 OK​

Returns a JSON array of license objects.

[
{
"id": 5,
"code": "LIC-ABC123",
"size": 50,
"va_type": "meraki",
"expiration": "2027-01-15T00:00:00Z",
"created": "2026-01-15T10:30:00Z",
"modified": "2026-04-10T14:22:00Z"
}
]

Response Fields​

FieldTypeDescription
idintegerLicense ID (used as license_id in other endpoints)
codestringLicense code
sizeintegerMaximum number of cameras allowed
va_typestringLicense type (e.g. meraki, openeye, ftp, nx)
expirationdatetimeWhen the license expires
createddatetimeWhen the license was created
modifieddatetimeWhen the license was last updated

List Cameras​

Retrieve all cameras under a specific VisionAlert license.

HTTP Request​

GET https://app.platerecognizer.com/v1/vision-alert/{license_id}/cameras/

Path Parameters​

ParameterTypeDescription
license_idintegerID of the VisionAlert license

Query Parameters​

ParameterTypeRequiredDescription
statusstringNoFilter cameras by latest log status. Possible values: normal, anomaly, under_review, offline, config_issue, no_data, pending_retry
# List all cameras for license ID 5
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/cameras/"

# Filter by status
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/cameras/?status=anomaly"

Response 200 OK​

Returns a JSON array of camera objects.

[
{
"id": 42,
"serial": "Q2GV-ABCD-1234",
"name": "Front Entrance",
"license": "LIC-ABC123",
"tags": ["site-a", "floor-1"],
"notes": "Installed 2026-01-15",
"latest_status": "normal",
"created": "2026-01-15T10:30:00Z",
"modified": "2026-04-10T14:22:00Z"
}
]

Response Fields​

FieldTypeDescription
idintegerCamera ID
serialstringCamera serial number
namestringCamera display name
licensestringLicense code
tagsstring[]List of tag names assigned to the camera
notesstringOptional notes for this camera
latest_statusstring | nullStatus from the most recent log. null if no logs exist (equivalent to no_data)
createddatetimeWhen the camera was registered
modifieddatetimeWhen the camera was last updated

List Camera Logs​

Retrieve log entries for a specific camera under a license.

HTTP Request​

GET https://app.platerecognizer.com/v1/vision-alert/{license_id}/cameras/{serial}/logs/

Path Parameters​

ParameterTypeDescription
license_idintegerID of the VisionAlert license
serialstringCamera serial number

Query Parameters​

ParameterTypeRequiredDescription
startdate (YYYY-MM-DD)NoFilter logs created on or after this date
enddate (YYYY-MM-DD)NoFilter logs created before end of this date (inclusive)
statusstringNoFilter by log status. Possible values: normal, anomaly, under_review, offline, config_issue, no_data, pending_retry
# Logs for camera C1 within a date range
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/cameras/C1/logs/?start=2026-04-01&end=2026-04-10"

# Only anomaly logs
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/cameras/C1/logs/?status=anomaly"

Response 200 OK​

Returns a JSON array of camera log objects, ordered by most recent first.

[
{
"id": 1001,
"camera_serial": "Q2GV-ABCD-1234",
"camera_name": "Front Entrance",
"status": "anomaly",
"anomalies": {
"Blur": 0.87,
"Obstruction": 0.65
},
"snapshot": "https://app.platerecognizer.com/media/camera_snapshot/04/10/1430_aB3cD_front.jpg",
"created": "2026-04-10T14:30:00Z"
}
]

Response Fields​

FieldTypeDescription
idintegerLog entry ID
camera_serialstringSerial of the camera that generated this log
camera_namestringDisplay name of the camera
statusstringLog status (normal, anomaly, under_review, offline, config_issue, pending_retry)
anomaliesobject | {}Dictionary of detected anomalies and their scores. Only includes anomalies that exceed the camera's configured thresholds. Empty object if none.
snapshotstring | nullAbsolute URL to the snapshot image. null if no snapshot is available.
createddatetimeWhen the log was created

List Anomaly Alerts​

Retrieve anomaly alerts generated for a license.

HTTP Request​

GET https://app.platerecognizer.com/v1/vision-alert/{license_id}/alerts/

Path Parameters​

ParameterTypeDescription
license_idintegerID of the VisionAlert license

Query Parameters​

ParameterTypeRequiredDescription
startdate (YYYY-MM-DD)NoFilter alerts created on or after this date
enddate (YYYY-MM-DD)NoFilter alerts created before end of this date (inclusive)
licensestringNoFilter by license code
sentbooleanNoFilter by whether the alert notification was sent (true/false)
# All sent alerts for a license
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/alerts/?sent=true"

# Alerts within a date range
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://app.platerecognizer.com/v1/vision-alert/5/alerts/?start=2026-04-01&end=2026-04-14"

Response 200 OK​

Returns a JSON array of anomaly alert objects, ordered by most recent first.

[
{
"id": 500,
"license": "LIC-ABC123",
"review_status": "pending",
"sent": true,
"cameras": [
{
"serial": "Q2GV-ABCD-1234",
"name": "Front Entrance",
"status": "Anomaly",
"anomalies": {
"Blur": 0.87
}
},
{
"serial": "Q2GV-EFGH-5678",
"name": "Parking Lot B",
"status": "Offline",
"anomalies": {}
}
],
"created": "2026-04-10T15:00:00Z"
}
]

Response Fields​

FieldTypeDescription
idintegerAlert ID
licensestringLicense code
review_statusstringReview status of the alert: pending, has_anomaly, or no_anomaly
sentbooleanWhether notification (email/webhook) was sent for this alert
camerasobject[]List of cameras involved in this alert
cameras[].serialstringCamera serial number
cameras[].namestringCamera display name
cameras[].statusstringCamera status display label (e.g. "Anomaly", "Offline", "Normal")
cameras[].anomaliesobjectDetected anomalies with scores, above threshold. Empty object if none.
createddatetimeWhen the alert was created

Status Codes Summary​

CodeDescription
200Success — returns the requested data
401Unauthorized: Invalid or missing API token
403Forbidden: Resource does not belong to the authenticated user

Enum Reference​

Camera / Log Status​

ValueDescription
normalCamera is operating normally
anomalyAnomaly detected (blur, obstruction, glare, or position change)
under_reviewLog is awaiting manual review
offlineCamera is offline / unreachable
config_issueConfiguration error
no_dataNo logs received yet
pending_retryProcessing failed, scheduled for retry

Review Status (Alerts)​

ValueDescription
pendingAlert has not been reviewed
has_anomalyReviewed — confirmed anomaly
no_anomalyReviewed — false positive

Anomaly Types​

KeyDescription
BlurImage blur detected
ObstructionCamera view is obstructed
GlareGlare or overexposure detected
Position changeCamera has shifted position