“Message stream error occurred” appears when the connection through which ChatGPT sends its answer incrementally ends before the answer is complete. It is effectively never caused by what you entered. Most often, the cause is OpenAI-side overload, an unstable connection, browser extensions, or a conversation that has grown too long. Regenerating the answer usually fixes it; if not, checking the status page once determines whether the problem is on your side.
The error
메시지 스트림에 오류가 발생했습니다
(같은 장애의 다른 표현: “스트리밍이 중단되었습니다. 전체 메시지를
기다리는 중”, “Hmm...something seems to have gone wrong.”
증상은 동일합니다 — 답변이 도중에 멈추고 끝까지 생성되지 않습니다.)Causes and fixes at a glance
| Cause | Fix |
|---|---|
| OpenAI-side overload or outage. It appears across all plans simultaneously, and Plus and Pro are not exceptions. If it repeats every few minutes, this is the most likely cause. | Check for an ongoing outage at status.openai.com. During an outage, changing settings on your side will not change the result, and waiting is the only solution. |
| Unstable connection: switching between Wi-Fi and LTE, a VPN or corporate proxy, or a weak mobile signal. Streaming keeps one connection open for a long time, so it can disconnect even where ordinary page loading works. | Turn off the VPN or proxy and try again over another connection (Wi-Fi ⇄ mobile data). |
| Browser environment: extensions that interfere with the page, an old cache, or an expired session. | Try again in a private window. If it works there, the cause is an extension or the cache — disable extensions, delete site data, and sign in again. |
| The conversation is too long or the attachment is too heavy. Because the entire conversation is sent again on every turn, generation takes longer and is more likely to disconnect. | Summarize the essentials and move them to a new conversation. Do not upload a large file whole; send it in parts. |
Three things to try in the first 90 seconds
Regenerate the answer → refresh the page (or, in the app, fully quit and relaunch) → sign out and sign back in. A one-off disconnect is usually resolved by one of these three, and one-off failures are common. Conversely, if it stops at the same point every time, that signals one of the specific causes below is involved.
First determine whether the problem is on my side
This is the step other troubleshooting articles skip and the one that saves the most time. Open status.openai.com. If an ongoing outage is shown, nothing in your settings will change and you can only wait. If nothing is shown, the cause is in your environment, and the next steps narrow it down. Checking this before changing settings prevents spending 20 minutes clearing the cache during an outage.
Narrow the cause one layer at a time, starting from the outside
Proceed in this order. Each step eliminates every possibility above it: ① turn off the VPN/proxy ② open in a private window (removes extensions and cache at once) ③ use another browser or device ④ change connections. The step at which normal operation returns is the cause. If the error occurs only in a long conversation, none of the four is the cause; moving the essentials to a new conversation is the most reliable fix.
For developers: the same disconnection can occur in the API
When you call the API with stream: true, the same failure appears as a Server-Sent Events connection that ends without finish_reason. The HTTP status is 200 — it was normal when the headers were sent — so checking only the status code will not catch it, and under load you may also see 429 and 529 overloaded_error. Three things make it resilient: (1) treat a stream that ends without finish_reason as incomplete and eligible for retry (2) retry 429, 500, and 529 with exponential backoff and jitter (3) if using a proxy, check its idle timeout and disable response buffering — a buffering proxy turns a normal stream into a long pause. To isolate the cause, stream without the proxy first:
# 프록시를 거치지 않고 직접 스트리밍해 어디서 끊기는지 확인한다.
curl -N https://api.kunavo.com/v1/chat/completions \
-H "Authorization: Bearer $KUNAVO_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","stream":true,
"max_tokens":300,
"messages":[{"role":"user","content":"1부터 20까지 천천히 세어줘"}]}'If you’re calling through Kunavo
Kunavo (the AI API gateway) is designed on the assumption that these transient streaming failures occur. When multiple upstream channels are configured for one model, it automatically retries on another channel within the same request if the first attempt fails, so transient upstream instability becomes not an error but a “slightly slower success.” Failed requests are not charged. You can call GPT and Claude with one API key, so when a particular model is overloaded, switching only the model name provides a workaround. The retry and backoff pattern for streaming scenarios is covered in the following article: LLM API streaming errors.
Frequently asked questions
Is “Message stream error occurred” my fault?
Almost certainly not. This message means the connection carrying the answer ended before it was complete. What you entered does not cause this error. The cause is OpenAI-side load, an unstable network, browser extensions or an expired session, or a conversation that has become long enough for the response to time out.
What if it still fails after regenerating?
First check status.openai.com — during an outage, there is nothing you can do on your side. If there is no outage, open it in a private window over another connection. This one test simultaneously rules out extensions, cache, and your usual connection. If it works there, restore things one at a time until you find what causes it to fail again. If it fails everywhere and only in a particular long conversation, move the essentials to a new conversation.
Does the same error occur with other AIs?
The wording belongs to ChatGPT, but Claude and Gemini use the same structure for streaming answers, so a disconnected connection produces the same kind of error. In Claude, it appears as a message that the response could not be generated to completion; in a direct API call, as an SSE stream ending without finish_reason or, under load, as 529 (overloaded_error).
Why does it happen more often in long conversations?
Because the entire conversation is sent again on every turn, the longer the conversation, the longer generation runs over one open connection. The longer the connection remains open, the more opportunities there are for a proxy timeout, a network change, or a transient upstream problem. Starting a new conversation with a summary of the essentials is generally more effective than changing browser settings.
Related guides
- LLM streaming errors — SSE cutoffs, hanging streams and missing usage
- Claude API 529 overloaded_error — what it means and how to handle it
- Claude API Pricing and Payment 2026 — Complete Guide to Claude API Costs
More error semantics live in the error reference; getting a key takes a minute via signing up and the authentication guide.