Errors

The API returns standard HTTP status codes and a consistent JSON error body. On failure, the response body is a single object:

error body
{ "detail": "Short, human-readable explanation of what went wrong." }
error body
{ "detail": "Short, human-readable explanation of what went wrong." }

Your client should check the response status code (or use response.raise_for_status() in Python's requests) and read detail to understand the failure.

Status codes

StatusMeaningWhat to do
200Request succeeded.Parse the response body.
400The request was malformed.Fix the request — usually a missing path segment or bad query parameter.
403Authentication or authorization failed.Confirm your API key is set, correctly formatted, and has access to the resource.
404The requested resource does not exist.Double-check the slug or data_uuid.
5xxServer-side error.Retry with exponential backoff. If the error persists, contact support.

Common error bodies

400 — missing path segment on the data endpoint

The sensor data endpoint requires a data_uuid in the URL. Requesting /public/deployment/data/ (without a UUID) returns a 400 rather than a 404.

{ "detail": "Detail not found. You likely forgot to include a /data_uuid in your URI." }
{ "detail": "Detail not found. You likely forgot to include a /data_uuid in your URI." }

Fix: append the deployment's data_uuid to the URL — see Fetching sensor data.

403 — missing or invalid API key

Returned when the Authorization header is missing, malformed, or references a deleted key.

{ "detail": "There was a problem authenticating your request. It is possible that you have a badly formatted or missing API key." }
{ "detail": "There was a problem authenticating your request. It is possible that you have a badly formatted or missing API key." }

Fix:

  • Confirm the header exists and uses the Bearer scheme: Authorization: Bearer YOUR_API_KEY.
  • Confirm the key hasn't been deleted from your user settings.
  • Check for trailing whitespace or accidental quoting around the key.

404 — deployment not found

Returned when a slug or data_uuid doesn't match any deployment you have access to. Private deployments you don't own or collaborate on behave the same as deployments that don't exist — both return 404.

{ "detail": "Not found." }
{ "detail": "Not found." }

Retries

For 5xx responses, retry with exponential backoff (e.g. 1s, 2s, 4s) and a maximum of 3–5 attempts. For 4xx responses, do not retry — the request is broken and will keep failing until you change it.

Requests are idempotent: retrying a GET is always safe.