nixfredFLY.IOFIELD GUIDE · BY NIX UNOFFICIAL
EXECUTE / SUPPORT PLAYBOOK

Support playbook

How to help a Fly.io customer who is stuck: what to ask first, a table of the twelve failures that account for most tickets (with the command to diagnose and the docs page that fixes it), what each support plan includes, where to escalate, and a reply template that cites the docs. Everything here is advice built on cited facts; where the sources do not settle something it is flagged [verify].

This page is drawn from https://fly.io/docs/getting-started/troubleshooting/, https://fly.io/docs/monitoring/error-codes/, https://fly.io/docs/about/support/, https://fly.io/support, https://fly.io/docs/apps/trouble-host-unavailable/, https://fly.io/docs/reference/health-checks/ and live community.fly.io threads fetched 2026-11-04.

Triage order

Work from the widest scope to the narrowest. Most “my app is broken” reports are one of: the platform, a host, a deploy, or the app itself.

flowchart TD
  A[Customer reports a problem] --> B{Status page or dashboard<br/>shows an incident?}
  B -- yes --> C[Confirm region and host, share the link, advise redundancy]
  B -- no --> D{Did it start after a deploy?}
  D -- yes --> E[Deploy path: logs, fly.toml, health checks, listen address]
  D -- no --> F{Machines started?}
  F -- no --> G[Machine state: restart, OOM, host unavailable]
  F -- yes --> H[Routing and app: error code, checks, DNS, certs]
Whiteboard diagram (rendered from the source mermaid)
  1. Check platform health first: the status page (https://status.flyio.net) is the place for platform-wide issues, and the dashboard shows host-level issues that might affect an app (https://fly.io/docs/about/support/).
  2. Host issues are not posted on the main status page: “We don’t post individual host issues to our main status page because a host issue usually affects a small number of users in a single region” is the docs’ reasoning, and affected customers get a notice on the Status page in their dashboard (https://fly.io/docs/apps/trouble-host-unavailable/). So a green public status page does not rule out a host problem.
  3. The docs’ own “try this first” list is: update flyctl (fly version update), run fly doctor, validate fly.toml with fly config validate, watch fly logs, and fly ssh console in (https://fly.io/docs/getting-started/troubleshooting/).

The first five questions

Ask for these in one message so the customer answers once. They match what Fly’s own support page asks customers to include in a ticket (https://fly.io/docs/about/support/).

  1. App name and organization.
  2. Region(s) and, if they know it, the Machine ID (fly machine list).
  3. Output of fly status, fly logs (with UTC timestamps) and fly doctor. Ask for plain text, not screenshots (https://fly.io/docs/about/support/).
  4. What changed: a recent fly deploy, a fly.toml edit, a secret change, a scale command.
  5. What they expected versus what happened, with the exact error text or proxy error code (for example PR01, PC05, PM03; the full list is at https://fly.io/docs/monitoring/error-codes/).

Tip from the support page: prefixing any flyctl command with LOG_LEVEL=debug shows the lower-level API calls (https://fly.io/docs/about/support/).

Common failures

FailureLikely causeDiagnoseFix page
Deploy failsBuild hangs on the Depot builder; release command error; image over the 8GB limit; registry 401LOG_LEVEL=debug fly deploy, then fly deploy --depot=false or fly deploy --local-only to isolate the builderhttps://fly.io/docs/getting-started/troubleshooting/
Health checks failingGrace period too short, non-200 on the check path, app not accepting connections, OOMfly checks list, fly status, fly logshttps://fly.io/docs/reference/health-checks/
502, 503, “no route”, PR01App listening on 127.0.0.1 instead of 0.0.0.0, wrong internal_port, all Machines stopped or unhealthy, concurrency limitsfly status, fly checks list, fly logs; match the code to https://fly.io/docs/monitoring/error-codes/https://fly.io/docs/getting-started/troubleshooting/
Machine will not start or keeps restartingProcess exits immediately (no CMD), crash loop, Machine stuck in starting or replacingfly machine status <id>, then fly machine restart <id>; last resort fly machine destroy --force <id>https://fly.io/docs/getting-started/troubleshooting/
Out of memoryMachine too small; OOM looks like a crash to the proxyfly machine status <id> (look for OOM kill events), then fly scale memory 512 as the docs examplehttps://fly.io/docs/getting-started/troubleshooting/
Volume will not mount, or “I have one volume”A volume attaches to one Machine and lives on one host; host down means volume unreachablefly volumes list, fly volumes snapshots list <vol>https://fly.io/docs/volumes/overview/ and https://fly.io/docs/apps/trouble-host-unavailable/
DNS or certificate stuckMixed CNAME with A/AAAA records, Cloudflare proxy in front, Let’s Encrypt limitsfly certs show <host>https://fly.io/docs/networking/custom-domain/ and https://fly.io/docs/networking/understanding-cloudflare/
Region or capacity error on createRegion out of capacity; a multi-region scale fails as a whole; volume’s host fullfly platform regions, retry with a fallback list such as fly machine clone -r "iad,dfw"https://fly.io/docs/machines/guides-examples/machine-placement/
Rate limitedMachines API: 1 request per second per action, burst up to 3; Let’s Encrypt: 5 failed validations per hostname per hour; image pulls from non-Docker-Hub registriesCheck the HTTP 429 or “too many requests” texthttps://fly.io/docs/machines/api/working-with-machines-api/
Billing surpriseVolumes bill even when unattached; stopped Machines bill rootfs at $0.15 per GB per monthfly volumes list, fly machine list, dashboard Billing sectionhttps://fly.io/docs/about/billing/
Postgres connection problemsManaged Postgres (.flympg.net) is private-network only; unmanaged Postgres is out of support scope; Redis clients need IPv6fly mpg connect, fly mpg proxy, fly mpg statushttps://fly.io/docs/getting-started/troubleshooting/
WireGuard or 6PN issuesPeer not created, local WireGuard tunnel down, service not bound to fly-local-6pnfly doctor, fly wireguard listhttps://fly.io/docs/blueprints/connect-private-network-wireguard/ and https://fly.io/docs/networking/private-networking/

Facts behind the rows, each from the docs:

Plans and what each includes

Support has four doors. Verified on https://fly.io/support on 2026-11-04.

DoorCostWhat you get
Community forumFreeOpen to everyone; “Questions / Help” topics are seen by Fly.io staff, who respond more often than before (https://community.fly.io/t/fly-io-support-community-vs-email-2026-edition-read-this-first/27768)
Standard$29/mo36-hour first response, technical architecture support (https://fly.io/support)
Premium$199/mo24-hour first response, 1-hour for urgent issues, dedicated Slack channel, quarterly Solutions Architecture sessions (https://fly.io/support)
Enterprise$2,500+/mo4-hour 24x7 first response, 15-minute emergency response, dedicated Slack channel, quarterly Solutions Architecture sessions, 99.9% uptime SLA (https://fly.io/support)
  • Paid plans give an organization-specific address, typically <org-name>@support.fly.io, plus the Support Portal in the dashboard; Managed Postgres customers also get Portal access for MPG issues (https://fly.io/docs/about/support/).
  • Billing and account questions go to billing@fly.io (https://fly.io/docs/about/support/).
  • Published results, 30-day email metrics: “100%” of response-time promises kept, median ticket answered in “1h 12m”, “97.0%” of surveyed customers positive (https://fly.io/support). These move; re-read the page before quoting them.
  • Scope: supported products include Networking, Machines, Managed Postgres, Apps, Launch/Deploy, Volumes, Security, Accounts and Billing, Extensions and Monitoring. Not supported: LiteFS and Unmanaged Postgres. Support also cannot debug the customer’s own code or framework (https://fly.io/docs/about/support/).

Escalation path

  1. Self-serve: troubleshooting page and error-codes page (links above).
  2. Community forum post, with the five answers above. Staff reply there too (example: a host-down thread answered “It was purely a host problem in this case”, https://community.fly.io/t/machine-stuck-in-stopping-on-sin-host-start-restart-kill-return-408-vm-cpu-starved-no-incident-posted/28962).
  3. Paid email or Support Portal ticket for anything account-specific, sensitive or urgent; Fly staff say support plan tickets “are given priority over other channels” (https://community.fly.io/t/fly-io-support-community-vs-email-2026-edition-read-this-first/27768).
  4. Premium urgent (1 hour) or Enterprise emergency (15 minutes, 24x7) when production is down (https://fly.io/support).
  5. Inside Fly, how a ticket reaches engineering is not documented publicly [verify].

Customer reply template

Use plain text, name the evidence, cite the page, give one next step.

Hi NAME,

Thanks for the detail. From the fly status output, Machine MACHINE_ID in REGION shows STATE, and your logs at TIMESTAMP_UTC show ERROR_OR_CODE.

That error means CAUSE (https://fly.io/docs/monitoring/error-codes/). The usual fix is FIX, described at DOCS_URL.

Please try: COMMAND. If it does not clear, reply with the output of fly status, fly logs around the failure (UTC) and fly checks list, and we will look at the host side.

One more thing: this app runs on a single Machine, so a host problem takes it down. The docs recommend at least two (https://fly.io/docs/blueprints/resilient-apps-multiple-machines/).

Say: “I can see X in your output” before “you should do Y”. Do not promise a root cause until the host has been checked; host issues are not on the public status page (https://fly.io/docs/apps/trouble-host-unavailable/).

← Objection handling · Reliability, honestly →