# Events & errors
Webhooks & errors
Signed webhook events and the error codes every endpoint can return.
Webhooks
Subscribe to events in your dashboard. We POST a signed JSON payload to your endpoint. Verify the signature using your webhook secret.
order.provisionedServer is online and reachable.
order.terminatedServer was deleted by you or billing failure.
json
{
"event": "order.provisioned",
"data": {
"id": "ord_2vR9kP...",
"ipv4": "185.203.114.12",
"ready_at": "2026-06-12T09:52:00Z"
},
"signature": "sha256=abc123..."
}Errors
Errors return a consistent JSON shape with an HTTP status and a machine-readable code.
| Code | Status | Meaning |
|---|---|---|
| invalid_request | 400 | Missing or malformed parameters. |
| unauthenticated | 401 | Missing or invalid Bearer token. |
| insufficient_balance | 402 | Wallet balance too low for this operation. |
| monthly_spend_limit_reached | 402 | Your monthly spend cap is exhausted — raise it in your profile. |
| forbidden | 403 | Valid token, but not allowed for this resource. |
| ip_not_allowed | 403 | Token is restricted to an IP allowlist. |
| not_found | 404 | Order or resource does not exist. |
| insufficient_capacity | 409 | No free capacity in the selected location. |
| location_unavailable | 409 | The location, or this tier at the location, is currently not taking orders. |
| server_limit_reached | 409 | You hit your per-account server limit. |
| concurrent_request | 409 | Same idempotency key is already being processed — retry later. |
| terminated | 409 | The server is terminated; the operation is not allowed. |
| ticket_closed | 409 | The support ticket is closed. |
| rate_limited | 429 | Too many requests. Retry after the Retry-After header. |
| internal_error | 500 | Something went wrong on our side. Retry with idempotency key. |