code=H12 desc="Request timeout"
A Heroku request took longer than 30 seconds
Seen in Heroku router logs
The Heroku router waited 30 seconds for the app to start a response, then gave up and returned 503.
Common causes
- Slow database queries or external API calls.
- Long-running work such as reports, imports or image processing done inside the web request.
- All web workers are busy, so requests queue until they time out.
How to fix it
- Move work that can exceed 30 seconds to a worker dyno and background job queue.
- Find the slow endpoints in your logs or APM and optimise them.
- Add more web processes or dynos if requests are queueing.
Got a different message? Paste it into the error explainer.
Related errors
- 408 Request Timeout · The client took too long to send its request
- 413 Request Entity Too Large · The request body is bigger than the server allows
- 431 Request Header Fields Too Large · The request headers are too big
- 400 Bad Request: Request Header Or Cookie Too Large · nginx rejected oversized headers or cookies
- 499 Client Closed Request · The client gave up before nginx answered
- Error 524: A timeout occurred · Your origin took longer than 100 seconds to respond
- Error 530 · Cloudflare could not reach the origin; see the 1xxx error on the page
- Error 1003: Direct IP access not allowed · A Cloudflare IP was requested without a hostname
- Error 1010: The owner of this website has banned your access based on your browser's signature · Your browser looks like a bot to the site's security settings
- Error 1015: You are being rate limited · You sent too many requests to a Cloudflare site
- Error 1020: Access denied · A Cloudflare firewall rule blocked your request
- Error 1033: Argo Tunnel error · The Cloudflare Tunnel for this hostname is not connected