Skip to content

Errors

All errors use one envelope:

{ "status": "error", "error": { "code": "not_found", "message": "File not found" } }

Success is { "status": "ok", "data": { } } (data omitted when empty).

HTTP Code Means
400 bad_file Missing/invalid file field, empty file, invalid base64
400 bad_entry A log entry failed validation (whole batch rejected)
400 bad_query Bad query parameter, e.g. expiresAt in the past
400 protected Tried to delete the default log dataset
401 unauthorized Missing, invalid, expired or revoked token; bad presigned URL
403 forbidden Token lacks the scope; presigned URL already used
403 dataset_limit Plan dataset cap reached
403 quota_exceeded Storage cap reached on upload (also used for plan gates)
404 not_found File/log not found in your team — cross-team existence is never leaked
413 too_large Raw file over 100,000,000 bytes, buffered request over 8 MiB, or log batch over its size cap
429 quota_exceeded Log storage quota exceeded — batch rejected, nothing dropped silently
500 internal Our bug. The message is generic; report the time and path

Branch on error.code, show error.message to users.