A launch can fail in two different ways, and the fix depends on which one happened. A bad request is rejected immediately, before anything is created or charged. A request that looked fine can still fail afterward, once a real provider tried and failed to build the machine, and that shows up as fields on the deployment itself rather than as an HTTP error. This page covers both, whether you launch from the dashboard or the API.

Errors returned immediately

These come back on the POST /api/v1/deployments call itself, in this shape:
On the dashboard, these show up as a message on the deploy page rather than as raw JSON, but the cause and the fix are the same.

The refund rule

Whatever the code, a launch that fails is refunded in full and automatically. The reserved first hour goes straight back to your credit balance, and nothing further is charged for that attempt. The same is true if you stop a deployment yourself before it reaches Running.

Offer cooling down, in more detail

offer_cooling_down is not personal to your account. The suppression is keyed to the exact offer, provider and location, so anyone requesting that same combination gets the same 503 until it clears, typically in about a minute. Read the Retry-After header (in seconds) rather than guessing, and either wait it out or move to a different offer with GET /api/v1/offers.

Every failure_code on a deployment

Once a request is accepted, a failure shows up on the deployment record instead of as an HTTP error: status becomes failed, and three fields explain it.
retryable describes whether trying again later, unchanged, could plausibly succeed. It is not a promise that DeployGPU retries anything automatically, and it is not a guarantee that a retry will work.
If you launch through the API, do not repeat a POST /api/v1/deployments call just because it timed out or your connection dropped. There is no idempotency key on that endpoint, so a repeated call after a network failure can create and bill a second GPU instead of finding the first one. List your deployments and look for a recent match before you send it again. See the deployments reference for the full request and response shapes.

My deployment disappeared from the list

This is expected, not a bug. The Deployments page only lists deployments in an active state (initializing, provisioning, connecting, running, stopping). Once a deployment reaches Failed or Interrupted, it drops out of that list. If you are looking at the page right when a launch fails, you will see the failure reason and suggested action once, in a banner. Navigate away, or reload later, and that deployment will not be listed again on the dashboard. An interruption, where a provider loses a machine that was already running, behaves the same way: a health check runs every 5 minutes, and if a provider confirms a machine is gone, the deployment is stopped and the unused time is refunded automatically, but no email is sent and the deployment disappears from the dashboard list the same way a failed one does. While a provider is in maintenance its answers are not trusted for this, so the health check does not stop deployments on that provider until the maintenance has ended. If you need to see a deployment after that point, the API returns every deployment regardless of status:
GET /api/v1/deployments and GET /api/v1/deployments/{id} never filter by status, so a failed or interrupted deployment is still there, with its failure_code or stop_reason intact.

When to contact support

Contact support with the deployment ID when failure_code is UNKNOWN or DUPLICATE_REQUEST, when a retryable failure keeps recurring on retry, or when PLATFORM_PROVIDER_ISSUE does not clear after a short wait. See Support for how to reach them.