Heroku / Render · HTTP 503

Heroku H12: Request Timeout

Diagnose Heroku H12 by tracing router request IDs through dyno logs, database calls, and external services. Return promptly and process long work asynchronously.

Origin / Application

Decode a CDN or gateway error

Paste a captured HTTP response or enter a status and headers. Only the status and response headers are sent; common credential headers are filtered first.

Supports raw headers, full HTTP responses, JSON with status/statusCode and headers, cURL -v/-i response output, and HAR exports. HAR selects a server error first. cURL commands are never executed; request headers, response bodies, and common credential headers are excluded.

Diagnostic report

Error code / name

HEROKU-H12

Fault domain

Origin / Application

Why it happened

Heroku's router stopped waiting because the web process did not return a response within the request window. A busy dyno, synchronous job, or slow dependency can keep the request occupied.

Actionable fixes

  1. Match x-request-id with router and dyno logs, then inspect request queue time and application duration.
  2. Optimize slow database or external calls and avoid serial work that can run concurrently.
  3. Queue long operations and return a job identifier before the router deadline.

Why this error happened

Heroku's router stopped waiting because the web process did not return a response within the request window. A busy dyno, synchronous job, or slow dependency can keep the request occupied.

Actionable fixes

  1. Match x-request-id with router and dyno logs, then inspect request queue time and application duration.
  2. Optimize slow database or external calls and avoid serial work that can run concurrently.
  3. Queue long operations and return a job identifier before the router deadline.

Network failure point

Client -> Heroku Router -> Web dyno handles request -> no response before router deadline -> X

Verify origin directly via CLI

curl -sS -I -w 'connect=%{time_connect} starttransfer=%{time_starttransfer} total=%{time_total}\n' --max-time 60 https://example.herokuapp.com/health

Configuration fix

Procfileprocfile
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq

Catch this failure before it becomes an outage

SteadyNode measures request latency and alerts on repeated gateway timeouts, giving teams time to inspect dyno queues before H12 errors become an outage.

No credit card required.

Start for free

Frequently asked questions

What is Heroku H12?

H12 is a router request-timeout event emitted when a web request does not complete within the router's waiting window.

Can a background worker prevent H12?

Yes, when the request queues durable work and returns promptly instead of waiting for the entire job to finish.

Cloudflare

Vercel and Netlify

AWS CloudFront and ALB

Fastly

Heroku and Render

Nginx and Envoy