xtekky/gpt4free · error · ResponseStatusError
Response {response.status_code}: Bad Gateway
Error message
Response {response.status_code}: Bad Gateway What it means
Sync variant: upstream HTTP 502 Bad Gateway becomes ResponseStatusError. The provider's gateway could not reach its backend; unrelated to your request payload.
Source
Thrown at g4f/requests/raise_for_status.py:114
is_html = False
if message is None:
is_html = response.headers.get("content-type", "").startswith(
"text/html"
) or response.text.startswith("<!DOCTYPE")
message = response.text
if message is None or is_html:
if response.status_code == 520:
message = "Unknown error (Cloudflare)"
if response.status_code in (429, 402):
raise RateLimitError(f"Response {response.status_code}: {message}")
if response.status_code == 401:
raise MissingAuthError(f"Response {response.status_code}: {message}")
if response.status_code == 403 and is_cloudflare(response.text):
raise CloudflareError(f"Response {response.status_code}: Cloudflare detected")
elif response.status_code == 403 and is_openai(response.text):
raise MissingAuthError(f"Response {response.status_code}: OpenAI Bot detected")
elif response.status_code == 502:
raise ResponseStatusError(f"Response {response.status_code}: Bad Gateway")
elif response.status_code == 504:
raise RateLimitError(f"Response {response.status_code}: Gateway Timeout ")
elif response.status_code == 400 and "API key not valid" in message:
raise MissingAuthError(f"Response {response.status_code}: Invalid API key")
else:
raise ResponseStatusError(
f"Response {response.status_code}: {'HTML content' if is_html else message}"
)
View on GitHub (pinned to 973504e177)
Solutions
- Retry after a short delay.
- Fail over to another provider.
- Check provider status pages for incidents.
- Wrap calls with a bounded retry loop for 5xx.
Defensive patterns
Strategy: retry
Type guard
from g4f.errors import ResponseStatusError, CloudflareError, RateLimitError
def is_bad_gateway(err: BaseException) -> bool:
return isinstance(err, ResponseStatusError) and not isinstance(err, (CloudflareError, RateLimitError)) and 'Bad Gateway' in str(err) Try / catch
from g4f.errors import ResponseStatusError
import time
for attempt in range(3):
try:
resp = g4f.ChatCompletion.create(model, messages)
break
except ResponseStatusError as e:
if 'Bad Gateway' not in str(e):
raise
time.sleep(2 ** attempt) Prevention
- Bounded retries for 5xx
- Configure a failover provider
- Track per-provider error rates
- Abort retries after 2-3 attempts and surface the outage
When it happens
Trigger: Synchronous g4f provider calls during backend outages or proxy failures that return 502.
Common situations: Provider maintenance windows; overloaded free providers; transient proxy errors.
Understand the failure class
- HTTP status errors: handling 4xx and 5xx responses — how to handle 4xx and 5xx responses properly.
Related errors
- Response {response.status}: Bad Gateway
- LMArena Beta encountered an error: hasArenaError
- Install "websocket-client" package: pip install websocket-cl
- Response {response.status_code}: {message}
- Response {response.status_code}: Cloudflare detected
AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14).
Data as JSON: /api/errors/a4f70a1773ac83f6.
Report an issue: GitHub.