Guides
Errors
Errors always have this shape; `request_id` helps us investigate if you contact support.
Errors always have this shape; request_id helps us investigate if you contact support.
{"error": {"code": "insufficient_balance", "message": "Wallet balance is lower than the order total.",
"request_id": "req-123", "details": {"required": "12.00", "available": "0.00", "currency": "USD"}}}| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_request | The request is malformed or a value is invalid. The message says which |
| 401 | unauthorized | Missing, invalid, expired or revoked token |
| 401 | invalid_credentials | Wrong email or password (the two are indistinguishable on purpose) |
| 402 | insufficient_balance | Your wallet cannot cover the price. details has required and available |
| 403 | forbidden | Authenticated but not allowed: missing scope, role too low, or session-only endpoint |
| 404 | not_found | No such resource in your organization |
| 405 | method_not_allowed | Wrong HTTP method for this path |
| 409 | invalid_state | The server is in the wrong state for this action (for example start while running) |
| 409 | out_of_stock | The plan is out of stock in that region right now |
| 409 | quota_exceeded | A capacity or account limit was reached (provider capacity, 20 API keys, 100 firewall rules) |
| 409 | quote_expired | The quote is older than 10 minutes: request a new one |
| 409 | idempotency_conflict | The Idempotency-Key was already used with a different request |
| 409 | conflict | The change conflicts with existing data (duplicate email, SSH key, member or firewall rule; last owner) |
| 429 | rate_limited | Too many requests: wait Retry-After seconds |
| 500 | internal | Something went wrong on our side. Retry; contact support with the request_id if it persists |
| 503 | funding_unavailable | Funding verification or hosted checkout is temporarily unavailable |
| 503 | purchases_paused | New VPS purchases are temporarily disabled; no credit is reserved |
| 503 | provider_unavailable | Our infrastructure provider is temporarily unavailable. Retry shortly |
Rate limits
Every authenticated response carries `X-RateLimit-Limit` (requests per minute), `X-RateLimit-Remaining` and `X-RateLimit-Reset` (unix seconds). When you exceed a limit you get `429 rate_limited` with
Audit trail
Admins and owners can read `GET /v1/audit-log`: sign-ins, API key and member changes, purchases, deletions, console access and firewall changes, with who did it and from which IP address.