Skip to content

Errors ​

Every JSON error has the same shape:

json
{
  "statusCode": 403,
  "message": "Invalid camera 'token' or 'fingerprint'",
  "errorCode": "FORBIDDEN",
  "requestId": "..."
}

A 422 adds a details array, with one entry per problem:

json
{
  "statusCode": 422,
  "message": "Validation failed",
  "errorCode": "VALIDATION_ERROR",
  "requestId": "...",
  "details": [{ "field": "config.trigger_scheme", "message": "Invalid option" }]
}

Quote requestId when contacting support.

Keep the fingerprint 16 to 64 characters. A fingerprint longer than 64 characters is currently rejected with a server error (500) on the first call, so do not retry: shorten it.

/v1/camera-info ​

StatusWhenerrorCode
400User-Agent header missing or emptyBAD_REQUEST
401Token or Fingerprint missingUNAUTHORIZED
403Unknown token, fingerprint mismatch, or registration window expiredFORBIDDEN
422Body fails validation (an unknown key, a missing field, an invalid trigger_scheme and so on), with detailsVALIDATION_ERROR
422Token not 20 characters, or fingerprint shorter than 16VALIDATION_ERROR
5xxServer error. Retry later with backoff. A fingerprint longer than 64 characters also gives a 500 on the first call: shorten itINTERNAL_SERVER_ERROR

/v1/snapshot ​

Snapshot uploads first pass the upload gateway, then reach the Camera Service. Both check the request. A gateway response has no JSON body; a Camera Service response uses the JSON shape above. Rely on the status code.

StatusWhenWhat to do
200Snapshot accepted. Body {"status":"OK"}Upload the next one at your cadence
400Empty body, an invalid Content-Length, or a missing User-AgentSend a non-empty JPEG with a correct Content-Length and a User-Agent
401Token or Fingerprint header missing or emptySend both headers
403Unknown token, fingerprint mismatch, or registration window expired. Message Camera access deniedSee troubleshooting
411No Content-Length header, for example chunked transferSend the Content-Length header
413Image too large. The maximum snapshot size is 1 MBShrink the image, do not retry the same one
415Content-Type is not image/jpeg or image/jpgSend Content-Type: image/jpeg
422Token not 20 characters, or fingerprint shorter than 16Check the lengths
429 or 503Rate limit exceeded (6 uploads per minute per camera). Gateway onlyWait, then keep to a 10, 30 or 60 second cadence
500Server error. Also a fingerprint longer than 64 characters on the first callRetry later with backoff. For the fingerprint case, shorten it

Troubleshooting ​

SymptomLikely causeFix
403 on a fresh tokenThe 15-minute registration window expired, or the fingerprint changedCreate a new camera, or restore the original fingerprint
403 after a device resetThe fingerprint changed and no longer matches the one bound to the tokenRestore the fingerprint, or delete the camera and create a new one
400 on every requestNo User-Agent headerSend a User-Agent such as MyCam/1.2.0
422 on camera infoThe body does not match camera info. details names the fieldFix the field. Remove keys that are not documented
422 on any endpointToken is not 20 characters, or fingerprint is shorter than 16Check the lengths
401Missing or empty Token or Fingerprint headerCheck the header names are exactly Token and Fingerprint
415 on snapshotContent-Type is not image/jpeg or image/jpgSend Content-Type: image/jpeg
411 or 400 on snapshotNo Content-Length (chunked transfer), or an empty bodySend a non-empty JPEG with a Content-Length header
413 on snapshotImage too largeKeep snapshots at most 1 MB. Shrink the image, do not retry the same one
429 or 503 on snapshotRate limit exceededWait before retrying and upload no more than every 10 seconds
500 on the first callFingerprint longer than 64 characters (currently rejected with a server error)Keep the fingerprint 16 to 64 characters. Shorten it, do not retry

See authentication and snapshots.