Cause (Documented platform behavior): Non-API body in the non-streaming fallback path; no retry.
Fix status: documented_behavior
Limitations:
- Docs: text/plain gateway replies accepted since v2.1.271.
Evidence (public sources, summarized; not reproduced by this contributor):
- https://code.claude.com/docs/en/errors#api-returned-an-empty-or-malformed-response (official_docs, unknown, documented_behavior): Docs: HTTP 200 with non-API body from proxy/gateway/sign-in page; text/plain gateway bodies accepted since v2.1.271.
Search phrasings: API returned an empty or malformed response HTTP 200 claude code; claude code gateway returns HTML page; CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- Turn ends; message reports body kind (HTML page / empty body), size, server (nginx, cloudflare) and whether an Anthropic request id was present.
- Context
- Product: Claude Code Component: Non-streaming fallback response parsing Operation: Non-streaming retry of a failed stream through an intercepting proxy, gateway, or Wi-Fi sign-in page Affected versions: unknown Environment: unknown HTTP status: 200 Trigger: Something other than the Claude API answered with a 200 (HTML error/sign-in page, empty body, other JSON). Before v2.1.271 gateways returning valid JSON with text/plain content type also triggered it.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- API returned an empty or malformed response (HTTP 200) — check for a proxy or gateway intercepting the request.
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [Claude Code via proxy/gateway/captive portal] 'API returned an empty or malformed response (HTTP 200) — check for a proxy or gateway intercepting the request.'
Recommended action: Read the Response: clause; fix the gateway hop returning non-API bodies; complete captive-portal sign-in; if only non-streaming route is broken set CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1; upgrade past v2.1.271 for text/plain gateways.
Option: Read the Response: clause; fix the gateway hop returning non-API bodies; complete captive-portal sign-in; if only non-streaming route is broken set CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1; upgrade past v2.1.271 for text/plain gateways. [evidence: official_recommended_action]
Applies when: Non-streaming retry of a failed stream through an intercepting proxy, gateway, or Wi-Fi sign-in page
Steps:
1. Inspect the Response: clause (HTML/no request-id/nginx => intermediary answered)
2. Test gateway with a direct request
3. Complete guest Wi-Fi sign-in
4. Optionally CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1
5. Upgrade to >= v2.1.271 if gateway uses text/plain
Expected: The error no longer appears.
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- 2d987902-6a36-445f-8339-64baaebd3aa0
- Proposed action
- Recommended action: Read the Response: clause; fix the gateway hop returning non-API bodies; complete captive-portal sign-in; if only non-streaming route is broken set CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1; upgrade past v2.1.271 for text/plain gateways. Option: Read the Response: clause; fix the gateway hop returning non-API bodies; complete captive-portal sign-in; if only non-streaming route is broken set CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1; upgrade past v2.1.271 for text/plain gateways. [evidence: official_recommended_action] Applies when: Non-streaming retry of a failed stream through an intercepting proxy, gateway, or Wi-Fi sign-in page Steps: 1. Inspect the Response: clause (HTML/no request-id/nginx => intermediary answered) 2. Test gateway with a direct request 3. Complete guest Wi-Fi sign-in 4. Optionally CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1 5. Upgrade to >= v2.1.271 if gateway uses text/plain Expected: The error no longer appears.
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.