exception_class, a human-readable message, and a request_id.
Error response structure
Every error response has the same shape:| Field | Always present | Description |
|---|---|---|
exception_class | Yes | Machine-readable error type |
message | Yes | Human-readable description |
request_id | Yes | Unique ID for this request — include when contacting support |
info | No | Extra structured data for specific error types (quotas, invalid fields) |
invalid_fields | No | Field-level validation errors |
Common error types
ValidationError
The request body is missing required fields or contains invalid values.invalid_fields lists each problematic field and why it failed. Fix the request body and retry.
A ValidationError also appears when a reseller account requires specific name templates:
NotFoundError
The requested resource does not exist, or exists in a different project or region.project_id and region_id in the path match the region where the resource was created.
QuotaLimitExceed
The request would exceed a project or account quota.info shows the exact numbers: current usage, requested total, and the limit. To resolve:
- Reduce the requested resource size or count
- Submit a quota request via the Gcore Customer Portal
ForbiddenError
The request is structurally valid but cannot be fulfilled — typically because a flavor has reached regional capacity.ForbiddenError is not a permissions error — it means the physical resource is temporarily unavailable. Try a different region or a different flavor.
HTTPError — Method Not Allowed
The HTTP method used is not supported by this endpoint. Most often caused by sending aGET to an endpoint that only accepts POST, or vice versa.
Authentication errors
All authentication errors return HTTP401. The message text identifies the specific cause:
| Message | Cause |
|---|---|
Authentication credentials were not provided. | No Authorization header |
Bad permanent token: {partial_key} | Token truncated at $ — shell expansion issue |
Token is invalid or expired | Token deleted or past expiry date |
Given token not valid for any token type | Wrong auth scheme — use APIKey, not Bearer |
HTTP status codes
Every error response includes an HTTP status code that identifies the error category:| Status | Typical exception_class |
|---|---|
400 | ValidationError |
401 | not_authenticated, token_not_valid |
403 | ForbiddenError, permission denied |
404 | NotFoundError |
405 | HTTPError |
409 | ConflictError (resource already exists) |
429 | Rate limit exceeded |
500 | Internal server error — transient, retry with backoff |
Retry strategy
Not every error is worth retrying — the table below distinguishes fixable request problems from transient server conditions. Every response contains arequest_id; include it when contacting Gcore support to identify the request in the infrastructure logs.
| Error type | Safe to retry? | Action |
|---|---|---|
ValidationError | No | Fix the request first |
NotFoundError | No | Check IDs and region |
QuotaLimitExceed | No | Request quota increase |
ForbiddenError (capacity) | Yes, in different region/flavor | Choose different region |
HTTPError 405 | No | Fix the HTTP method |
500 | Yes, with exponential backoff | Wait 1–5s and retry up to 3 times |
429 | Yes, after waiting | Respect Retry-After header if present |