Getting started
Error responses
The LifeLoop API uses standard HTTP status codes. All error responses share a consistent JSON shape so you can handle them uniformly.
Response shape
example error
{
"status": 400,
"message": "Bad Request",
"details": "startDate must be a valid ISO 8601 date-time"
}Status codes
| Code | Name | Meaning |
|---|---|---|
| 200 | OK | Request succeeded. |
| 201 | Created | Resource was created. |
| 204 | No Content | Request succeeded with no body (typical for DELETE). |
| 400 | Bad Request | Malformed request — missing or invalid parameter. |
| 401 | Unauthorized | Missing or invalid Bearer token. |
| 403 | Forbidden | Token lacks the scope or tenant access for the resource. |
| 404 | Not Found | Resource does not exist or is not visible to this token. |
| 409 | Conflict | Request conflicts with current state (e.g. duplicate). |
| 422 | Unprocessable Entity | Body failed validation. See `errors` array. |
| 429 | Too Many Requests | Rate limit exceeded. See Rate limiting. |
| 500 | Internal Server Error | Unexpected server error. Safe to retry. |
| 503 | Service Unavailable | API temporarily unavailable. Retry with backoff. |
Validation errors (422)
When request body validation fails, the response includes a per-field errors array:
HTTP 422
{
"status": 422,
"message": "Validation failed",
"errors": [
{ "field": "startTime", "message": "must match HH:mm" },
{ "field": "durationInMinutes", "message": "must be a positive integer" }
]
}Retry guidance
5xxand429responses are safe to retry with exponential backoff.4xxresponses (except 429) indicate a client error — do not retry without changing the request.