{"record":{"id":"9a1079248af53d7f","repo":"xtekky/gpt4free","slug":"response-response-status-bad-gateway","errorCode":null,"errorMessage":"Response {response.status}: Bad Gateway","messagePattern":"Response (.+?): Bad Gateway","errorType":"exception","errorClass":"ResponseStatusError","httpStatus":502,"severity":"error","filePath":"g4f/requests/raise_for_status.py","lineNumber":77,"sourceCode":"                message = await response.text()\n        else:\n            message = (await response.text()).strip()\n            is_html = content_type.startswith(\n                \"text/html\"\n            ) or message.lower().startswith(\"<!DOCTYPE\".lower())\n    if message is None or is_html:\n        if response.status == 520:\n            message = \"Unknown error (Cloudflare)\"\n    if response.status in (429, 402):\n        raise RateLimitError(f\"Response {response.status}: {message}\")\n    if response.status == 401:\n        raise MissingAuthError(f\"Response {response.status}: {message}\")\n    if response.status == 403 and is_cloudflare(message):\n        raise CloudflareError(f\"Response {response.status}: Cloudflare detected\")\n    elif response.status == 403 and (is_openai(message) or is_lmarena(message)):\n        raise MissingAuthError(f\"Response {response.status}: OpenAI Bot detected\")\n    elif response.status == 502:\n        raise ResponseStatusError(f\"Response {response.status}: Bad Gateway\")\n    elif response.status == 504:\n        raise RateLimitError(f\"Response {response.status}: Gateway Timeout \")\n    elif response.status == 400 and \"API key not valid\" in message:\n        raise MissingAuthError(f\"Response {response.status}: Invalid API key\")\n    else:\n        raise ResponseStatusError(\n            f\"Response {response.status}: {'HTML content' if is_html else message}\"\n        )\n\n\ndef raise_for_status(\n    response: Union[Response, StreamResponse, ClientResponse, RequestsResponse],\n    message: str = None,\n):\n    if hasattr(response, \"status\"):\n        return raise_for_status_async(response, message)\n    if response.ok:\n        return","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/xtekky/gpt4free/blob/973504e1770928ed5fb82f43da528f441ad9ddc3/g4f/requests/raise_for_status.py#L59-L95","documentation":"Raised when the upstream provider returns HTTP 502 Bad Gateway during g4f's async check. The provider's gateway/proxy failed to get a valid response from its backend; g4f maps it to a generic ResponseStatusError, distinct from rate-limit or auth failures.","triggerScenarios":"Any async g4f call where the provider's reverse proxy (nginx, Cloudflare, etc.) answers 502 — backend down, crashing worker, or bad upstream routing.","commonSituations":"Provider outage or maintenance; overloaded free-tier backends; transient proxy hiccup that clears in seconds.","solutions":["Retry after a short delay — 502 is usually transient.","Retry via a different provider in g4f.","Check the provider's status page for outages.","If persistent for one provider only, that provider's backend is down; wait or switch."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":"from g4f.errors import ResponseStatusError, CloudflareError, RateLimitError\ndef is_bad_gateway(err: BaseException) -> bool:\n    return isinstance(err, ResponseStatusError) and not isinstance(err, (CloudflareError, RateLimitError)) and 'Bad Gateway' in str(err)","tryCatchPattern":"from g4f.errors import ResponseStatusError\nfor attempt in range(3):\n    try:\n        return await call_provider()\n    except ResponseStatusError as e:\n        if 'Bad Gateway' not in str(e):\n            raise\n        await asyncio.sleep(2 ** attempt)","preventionTips":["Wrap provider calls in bounded retry for 5xx","Keep a second provider configured for failover","Log status codes per provider to spot chronic outages","Do not resend identical failing payloads more than a couple of times"],"tags":["http-502","bad-gateway","transient","async"],"backgroundTag":null,"analyzedSha":"973504e1770928ed5fb82f43da528f441ad9ddc3","analyzedAt":"2026-08-14T23:45:32.408Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}