Troubleshooting guide

Site paused by your host with no code change: how to fix it

Your production site goes offline or deploys stop working, and nothing in your repo changed. The cause is the hosting account: its billing, quotas, abuse filters, sign-in, or an incident on the platform. We see this in 24 verified builder reports, across paid plans, free tiers and trials.

24 verified cases10 min read Updated 27 Sep 2026How we collect cases

What you'll see

  • The production domain returns 503 with DEPLOYMENT_PAUSED on Vercel, or a 'Site not available' page on Netlify, and nobody has deployed recently.
  • Production deploys are blocked by a billing, credits or account message, even though the usage page shows most of your allowance left.
  • A free backend service stops answering part-way through the month, or a free database becomes unreachable about 30 days after you created it.
  • Your frontend or mobile app gets an HTML challenge page from its own API where it expects JSON, so parsing fails.
  • You can't sign in to the host's dashboard to fix any of this, because the 2FA device is gone and the recovery email never arrives.
  • The host's status page shows a build, CDN or deploy incident, and your release is stuck behind it.

Why it happens

Cause 1

A usage limit or spend cap paused production

On Vercel Pro, Spend Management can pause the production deployment of every project on the team once the On-Demand Budget is reached. Visitors then get a 503 DEPLOYMENT_PAUSED error. On Vercel Hobby, going over a usage limit usually means waiting 30 days before you can use the feature again. On Netlify's credit-based plans, running out of credits pauses all web projects on the team.

Cause 2

The billing state changed: failed card, expired trial, expiring free resource

A failed payment, or a trial that ends with no card on file, leaves the account in bad standing. Vercel lists that as a cause of DEPLOYMENT_PAUSED. Free tiers have their own limits and expiry dates. Render suspends all Free web services once the 750 monthly instance hours are used up, and a free Render Postgres database expires 30 days after creation. None of these involve a commit, so your repo history won't explain the outage.

Cause 3

An account flag disagrees with your actual usage

In several of our reports, a credits or billing flag on the account blocked production deploys even though the usage page showed most credits unused. Changing plans while troubleshooting can make this worse. In one case the account moved to a credit-based plan, used up the credits and paused deploys. Only the host's support team can clear a flag like this, so your recovery time depends on their queue.

Cause 4

Bot and DDoS filters challenge your own API traffic

Crawlers can use up a small plan's quota and trigger a pause. The filters meant to stop them can also block your real clients. Cloudflare says Bot Fight Mode and Super Bot Fight Mode may challenge API or mobile app traffic. A fetch() call or a native client can't solve a challenge meant for a browser.

Cause 5

The owner is locked out, or the platform is down

If one person holds the only owner login and loses their second factor, nobody can pay the invoice, resume the project or repoint anything. Separately, incidents at the CDN or build service can block deploys and over-the-air updates. In neither case is your code the cause.

How to fix it

  1. Confirm what is failing, from outside the host

    Request the production domain and one API route from a machine that isn't on the host. A 503 with DEPLOYMENT_PAUSED points to a spend or billing pause, a 'Site not available' page to a Netlify pause, and an HTML challenge where you expect JSON to a bot filter. Then check the host's status page, its Activity log and the account owner's inbox for a pause or billing email.

    curl -sS -o /dev/null -w '%{http_code} %{content_type}\n' https://yourdomain.com/api/health
  2. Clear the cause, then resume each project

    Pay the failed invoice, raise the Vercel On-Demand Budget, or buy Netlify credits. On Vercel, raising the spend amount does not unpause anything. You must resume each project yourself, in the dashboard or through the REST API.

    curl -X POST "https://api.vercel.com/v1/projects/$PROJECT_ID/unpause?teamId=$TEAM_ID" \
      -H "Authorization: Bearer $VERCEL_TOKEN"
  3. Escalate a wrong flag with evidence, and don't change plans while you wait

    If the usage page contradicts the block, open a support ticket. Include the team or account ID, a screenshot of remaining usage, the exact error, the deploy ID and the time it started. Don't switch plans to test a theory. A new plan can move you to a different metering model with different limits.

  4. Add billing alerts and a backup payment method

    Add a second payment method and make sure billing emails go to an inbox someone reads. On Vercel Pro, set an On-Demand Budget: web and email notifications fire at 50%, 75% and 100%, and SMS at 100%. Then decide whether Pause Production Deployments should stay on. On Netlify Personal or Pro, turn on auto recharge if you would rather pay an extra charge than have your sites go offline.

  5. Rate-limit crawlers before they spend your quota

    robots.txt only asks crawlers to behave, and Google's documentation says it can't enforce crawler behavior. Add a WAF rate-limit rule on your expensive routes instead. On Vercel it's under Firewall, Configure, New Rule, Rate Limit, with a default of 100 requests per 60 seconds per IP and a 429 action. Hobby plans get one such rule per project.

  6. Stop browser challenges on your API paths

    Cloudflare Bot Fight Mode can't be skipped with WAF custom rules or Page Rules. If it challenges your API or mobile clients, turn it off for that zone. On Pro plans and above, you can instead use Super Bot Fight Mode with a WAF custom rule that applies the Skip action to your API path.

  7. Make the account recoverable and monitor it from outside

    Register both an authenticator app and a passkey, store the single-use recovery codes offline, and give a second person owner access. Run an external uptime check on the production domain that alerts a phone directly, not an inbox tied to the host. Keep DNS at a provider you can sign in to independently of the host, so you can repoint the domain if the host is unreachable.

Check it's fixed

  • From a network outside the host, the production page returns 200 and an API route returns 200 with application/json, not a challenge page.
  • The external uptime monitor sends a test alert to a phone or address that doesn't depend on the hosting account.
  • The billing page shows a working backup payment method, spend or credit notifications are on, and you have written down what the plan does at its limit (pause, suspend or charge).
  • A second owner has signed in successfully, and you know where the recovery codes are stored.

Fix it with Gemmein

Crossing a usage ceiling never stops a Gemmein app: sign-ins, writes and API requests keep working past it, you are told once for the month, and next month's bill follows the band your people land in. Owners can also hold at their current band from the dashboard, so the bill and capacity never go above the held band.

  1. Let traffic run past a ceiling

    There is nothing to configure. Sign-ins, writes and API requests keep working past a ceiling and you are told once for the month. In development, crossing a counter never stops the app and never turns into a bill.

  2. Hold your band in Usage & billing

    Hold at your current band from the dashboard. A hold is a ceiling, not a freeze: your bill and capacity never go above the held band, and both follow your people down if they fall.

  3. Watch storage, the one thing that can fill

    Files are accepted up to twice the storage ceiling. After that, uploads return usage_limit_exceeded with no resetAt, so branch on err.code and render err.message. To free storage, delete files. To raise the ceiling, add capacity in 100 GB units in Usage & billing, production.

Questions

I raised my Vercel spend amount. Why is the site still down?

Vercel doesn't unpause projects when you increase the spend amount. Resume each project in the dashboard or with POST /v1/projects/{projectId}/unpause.


Will robots.txt stop crawlers from using up my plan?

No. Reputable crawlers follow it, but it can't enforce anything. Use a WAF rate-limit or block rule on the routes that cost you usage.


Can I add a skip rule so Cloudflare Bot Fight Mode ignores /api?

No. Bot Fight Mode can't be skipped with WAF custom rules or Page Rules. Turn it off for that zone, or use Super Bot Fight Mode (Pro and above) with a Skip rule.


My free Render database disappeared after a month. Is the data gone?

Free Render Postgres databases expire 30 days after creation. You then have a 14-day grace period to upgrade before Render permanently deletes the database and its data.


Should I turn off pause-on-spend so production never goes down?

You are choosing between an outage and an unbounded bill. One middle ground is to keep alerts at 50% and 75%, set the cap above normal peak usage, and rate-limit the routes that crawlers hit.


Sources

← Back to the full report