Error Handling
Keito API v2 returns Harvest-compatible error bodies:
{
"error": "bad request",
"error_description": "Missing Keito-Account-Id header"
}
HTTP Status Codes
| Code | Meaning | Common Cause |
|---|---|---|
| 400 | Bad Request | Missing Keito-Account-Id, missing required field, invalid value |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | User lacks permission for the company or resource |
| 404 | Not Found | Resource does not exist or is outside the company |
| 409 | Conflict | Conflict such as deleting an approved time entry |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server-side error |
Retry Strategy
Do not retry validation or authorization errors. For 429 responses, wait before retrying. For 5xx responses, use exponential backoff starting at 1 second.
The Keito CLI retries transient network and server errors automatically. Client errors are returned immediately with a deterministic exit code.