Errors
Failures answer JSON with an error string meant to be shown to a person, and a request_id matching the X-Request-ID header. Where the platform can classify a refusal it adds reason, one word to switch on, and some routes add code for a route-specific detail; match on those, never on the sentence. An endpoint that adds to this table lists what it adds under Failures in its entry in the reference.
400 | The request was malformed — a bad resolution string, a missing |
401 | Platform authentication required or refused: reason is missing, invalid, or revoked, with WWW-Authenticate: Bearer (invalid_token for invalid/revoked). |
402 | Your plan refused this: a quota, or a payment that has not gone through. On an agent run it can instead be |
403 | The credential is recognized but its holder lacks the required role or membership, or the holder/account is suspended, or the holder has not verified their email address. An ordinary denial for too low a role may carry no |
404 | No such resource in your scope — a computer, snapshot, secret, webhook, SSH key, API key, workspace, operation and so on — or no such endpoint; a confirmed missing guest file is no such file in the guest. |
405 | This public path exists but does not accept that method. Allow lists only its public methods, with HEAD for GET and metadata OPTIONS. |
409 | Refused for the state something is in — resizing a computer that is running, running a command on one that is stopped, taking a snapshot while another capture of it is running. WHETHER RETRYING HELPS IS IN THE BODY, NOT THE STATUS, and this is the one thing to take from this entry. Some of these describe a state that is passing: a guest agent still inside its boot window, a guest agent busy with another call, a move already running on the account. Those clear on their own and the same request works a moment later. The rest describe a DECISION about the request you sent — the size does not fit, the computer is the wrong one for this, the saved session cannot travel — and no amount of retrying turns one of those into a yes. A client that treats 409 as uniformly transient loops forever on half of them. Where the platform can say which it is, it sends Every 409 that clears on its own carries The ones worth knowing by name, because each has a next step that is not "wait": A resize past what the computer’s host can run carries The move itself then refuses for the things it re-decides at the moment it runs, and only one of those is worth waiting on: a computer that is running or suspended has to be stopped or resumed-and-stopped by you, a size that fits where it already is wants an ordinary resize instead, and a region with nowhere to put it wants a smaller size. And the terminal socket refuses twice over: |
413 | What you sent, or asked for, is past a size limit. A JSON request body is capped at 1 MiB unless the route states its own limit: |
416 | Your |
422 | The |
429 | You are asking faster than your plan allows. |
500 | The application could not finish this: an unexpected exception, a build that broke, or a storage fault. Application refusals carry the request correlation ID; unexpected internal details are not returned. |
501 | This feature is not available: no hypervisor in the fleet can build a template, or the platform or the host holding this computer does not offer it. Unlike a |
502 | The agent inside the guest is not answering, or it rejected or malformed the private command protocol for this feature. The computer is up; the upstream agent interaction failed. This is not malformed caller input and carries no retry classification. |
503 | Something this depends on — a hypervisor, a store, or a host’s capacity — could not answer or take this right now. A read can be retried shortly. A change answered |
504 | The operation did not finish before its deadline — a window action the guest accepted but did not report on, or an artifact read or delete. It may already have happened, so this is an uncertain outcome rather than permission to repeat it: check before sending it again. |