The FeatureOS API uses standard HTTP status codes, and returns a machine-readable
error code in the response body for application-level failures.
| Status Code |
Meaning |
Description |
| 200 |
Success |
Request served successfully. |
| 201 |
Created |
Resource created successfully. |
| 400 |
Bad Request |
The request body or parameters are invalid. |
| 401 |
Unauthorized |
The API key or JWT token is missing or invalid. |
| 403 |
Forbidden |
Your account lacks the required permissions. |
| 404 |
Not Found |
The requested resource does not exist. |
| 422 |
Unprocessable Entity |
The request was well-formed but contains semantic errors. |
| 429 |
Too Many Requests |
Rate limit exceeded — 100 requests per minute per API key. |
| 500 |
Internal Server Error |
Something went wrong on our end. We're on it. |
| 503 |
Service Unavailable |
The API is temporarily down for maintenance. |
These codes are returned in the response body alongside the HTTP status code.
| Error Code |
Solution |
| ERROR_CODE_ADMIN_LIMIT_REACHED |
Maximum admin seats reached. Purchase additional seats or upgrade your plan. |
| ERROR_CODE_CSM_LIMIT_REACHED |
Maximum CSM seats reached. Purchase additional seats or upgrade your plan. |
| ERROR_CODE_MANAGER_LIMIT_REACHED |
Maximum manager seats reached. Purchase additional seats or upgrade your plan. |
| Error Code |
Solution |
| ERROR_CODE_USER_ALREADY_PRESENT |
The user you are adding is already a member of this team. |
| ERROR_CODE_INVITE_ALREADY_SENT |
An invitation has already been sent to this email address. |
| Error Code |
Solution |
| ERROR_CODE_INVALID_PARAM |
A parameter value is invalid. Check the parameter name appended to the error code for details. |
| ERROR_CODE_MISSING_PARAM |
A required parameter is missing from your request. |
| ERROR_CODE_INVALID_FORMAT |
The provided data is in an unsupported format. |
| Error Code |
Solution |
| ERROR_CODE_NOT_FOUND |
The requested resource could not be found. Verify the ID or slug. |
| ERROR_CODE_ALREADY_EXISTS |
A resource with the same identifier already exists. |
| ERROR_CODE_CANNOT_DELETE |
The resource cannot be deleted because it has dependent records. |
| Error Code |
Solution |
| ERROR_CODE_RATE_LIMITED |
You have exceeded the rate limit. Wait and retry after a brief pause. The API allows 100 requests per minute per API key. |
All error responses follow this structure:
{
"error": "ERROR_CODE_INVALID_PARAM",
"message": "The parameter 'title' is not valid."
}
For validation errors with multiple fields:
{
"errors": {
"title": ["can't be blank"],
"bucket_id": ["is not a valid bucket"]
}
}