Error Codes
Every CMP API endpoint returns one of a small, consistent set of status codes. This page documents them and the JSON shape returned on failure so you can handle errors uniformly across all resources.
Status codes
| Code | Name | Meaning |
|---|---|---|
200 | Successful Operation | The request succeeded. The body contains the result. |
202 | Accepted | The request was accepted for asynchronous processing (some PUT updates). |
204 | No Content | The request succeeded with no response body (some deletes). |
401 | Invalid Authentication Credentials | The apikey / secretkey headers are missing, malformed, or invalid. |
550 | Permission Denied | The credentials are valid, but the account is not authorized to perform this operation on the target resource. |
note
200, 401, and 550 are returned by virtually every endpoint. Individual endpoints may add 202 (async PUT updates) or 204 (some deletes).
Error response shape
Failed requests return a JSON body with a nested error object:
{
"listErrorResponse": {
"errorCode": "string",
"errorMsg": "string"
}
}
| Field | Type | Description |
|---|---|---|
errorCode | string | Machine-readable error identifier. |
errorMsg | string | Human-readable explanation of the failure. |
Handling errors
401 — Invalid Authentication Credentials
The request could not be authenticated. Check that:
- both
apikeyandsecretkeyare present as HTTP headers, - the values are copied exactly (no stray whitespace or truncation),
- the key pair has not been regenerated or revoked in the console.
Example
{
"listErrorResponse": {
"errorCode": "401",
"errorMsg": "Invalid Authentication Credentials"
}
}
550 — Permission Denied
The credentials are valid but the account lacks permission for the requested action. Check that:
- the account has the required privilege/role for the operation,
- the target resource (by UUID) belongs to — or is shared with — the account,
- the resource exists in the specified zone.
Example
{
"listErrorResponse": {
"errorCode": "550",
"errorMsg": "Permission Denied"
}
}
Recommended client behavior
- Retry transient network failures with exponential backoff. Do not blindly retry
401or550— they will keep failing until the underlying cause is fixed. - Log
errorMsgfor diagnostics, but never log thesecretkey. - For asynchronous operations, poll the Resource API Status endpoint with the returned
jobIdrather than re-issuing the create request, to avoid creating duplicates.