Errors
All errors return JSON:
{ "error": "Human-readable message" }
Common codes
| HTTP | Typical cause |
|---|---|
| 400 | Malformed JSON |
| 401 | Expired token - refresh or re-login |
| 403 | Missing workspace permission or not admin |
| 404 | Resource not found |
| 409 | Note conflict - refetch and retry with new If-Match |
| 422 | Validation failed |
| 429 | Rate limited |
Webhook delivery
Failed webhook deliveries are stored with lastError for debugging in the admin dashboard.