Skip to guide

Dev Tunnels and ngrok errors: quick fixes

Short answers for Dev Tunnels and ngrok bandwidth limits, 429 errors, webhook 401s, login failures, WebSocket problems and offline endpoints, each with a step-by-step guide.

Out of bandwidth or requests

Ran out of Dev Tunnels bandwidth, or getting 429 errors?

Dev Tunnels gives each user 5 GB of data a month, with no paid option for more. It also limits each user to 10 tunnels and each port to 1,500 requests a minute, and a 429 error doesn’t say which limit you hit. Old tunnels and fast requests have fixes you can apply now; used-up data waits for the monthly reset unless you move to another service.

Seeing ERR_NGROK_725 or ERR_NGROK_727?

ERR_NGROK_725 means your ngrok account has used its monthly bandwidth; ERR_NGROK_727 means it has used its monthly HTTP request allowance. Restarting doesn’t reset either. Wait for the monthly reset, upgrade your plan, or move the app to another service.

Webhooks, OAuth callbacks and sign-in

Webhook or OAuth callback getting 401 from Dev Tunnels?

Dev Tunnels are private by default, so a webhook sender that can’t sign in can get a 401 from the tunnel before the request reaches your app. Send a tunnel access token in the X-Tunnel-Authorization header, or allow anonymous access to that port and keep validating webhook signatures in your app.

Dev Tunnels login not working?

If the CLI can’t open a browser or sign-in never finishes, use device-code login: devtunnel user login -d, or devtunnel user login -g -d for GitHub. Then run devtunnel user show to confirm which account is signed in.

The connection doesn’t reach your app

Dev Tunnels or ngrok WebSocket not connecting?

Test the WebSocket locally first, then connect to the public wss:// address with your app’s real WebSocket path. In the browser’s Network tab, a 101 response means the handshake worked; a 401, 403 or sign-in redirect means the tunnel or your app refused it.

Seeing ERR_NGROK_8012 or ERR_NGROK_3200?

ERR_NGROK_8012 means the request reached your ngrok agent, but the agent couldn’t reach your local app: check the app is running and the port and scheme are right. ERR_NGROK_3200 means the endpoint is offline: the agent isn’t running or the address is wrong.

Choosing a tunnel service

Looking for a Dev Tunnels alternative?

If Dev Tunnels’ 5 GB monthly cap or changing addresses get in your way, Groundhog gives your local app a free public HTTPS address that you name yourself, with no monthly data cap and no warning page for visitors. Per-minute and concurrent-request limits apply. ngrok’s free plan is another option, with 1 GB of data and 20,000 requests a month.

Addresses and warning pages

Did your Dev Tunnels URL change?

Dev Tunnels generates each address; you can’t choose it. So the address changes whenever the tunnel is replaced: a temporary tunnel gets a new one each run, an unused tunnel is deleted after 30 days, and a recreated tunnel can land in a different Microsoft region. Reuse one persistent tunnel to keep the same address, or use a service where you name the address yourself.

Can I keep the same webhook address?

Yes. ngrok currently assigns a dev domain, and a Groundhog tunnel keeps the name you choose until you delete it. Either address only answers while your agent and app are running, and moving to a new one means registering it again with each webhook or OAuth provider.

Create a named Groundhog tunnel

Why do visitors see an ngrok warning page?

ngrok’s free plan shows a warning page to browser visitors before your app. ngrok lists a paid plan or a request header as ways to skip it, but a visitor’s browser can’t send that header for you. The page is aimed at browser traffic, so it doesn’t appear on every API or webhook request.

ngrok’s browser-warning options

Try Groundhog for your local HTTP app

Use a named public HTTPS address with the CLI or Aspire. There’s no monthly data cap; per-minute and concurrent-request limits apply.