Back to guides
Troubleshooting·September 15, 2026·6 min read

Why ChatGPT Says “Message Stream Error” and How to Fix It

“Message stream error” appears when the connection that streams ChatGPT’s response word by word is interrupted before the response ends. It is almost never caused by what you entered: common causes are high load on OpenAI’s side, an unstable connection, browser extensions, or a conversation that has become too long. Regenerating the response resolves most cases; if it does not, checking the status page once can determine whether the problem is on your side at all.

“Message stream error” appears when the connection that streams ChatGPT’s response word by word is interrupted before the response ends. It is almost never caused by what you entered: common causes are high load on OpenAI’s side, an unstable connection, browser extensions, or a conversation that has become too long. Regenerating the response resolves most cases; if it does not, checking the status page once can determine whether the problem is on your side at all.

The error

Message displayed in the ChatGPT conversation
訊息串流發生錯誤

(同一種故障的其他說法:「串流已中斷。正在等待完整訊息」、
 「Hmm...something seems to have gone wrong.」
 症狀都一樣 —— 回覆停在一半,永遠不會產生完。)

Causes and fixes at a glance

CauseFix
OpenAI is experiencing high load or an outage. It affects all plans at the same time, including Plus and Pro; if the error repeats every few minutes, this is the most likely cause.Check status.openai.com. During an outage, nothing you change on your side will alter the result; waiting is the only solution.
Unstable connection: switching between Wi-Fi and mobile data, a VPN or corporate proxy, or a weak mobile signal. Streaming keeps a single connection open for a long time, so it can disconnect even where ordinary web pages load normally.Turn off the VPN or proxy and retry over another connection (Wi-Fi ⇄ mobile data).
Browser environment: extensions that inject into pages, stale cache, or an expired login session.Retry in an incognito window. If it works there, the cause is an extension or cache — disable extensions, clear site data, and sign in again.
The conversation is too long or the attachment is too large. Each turn resends the entire conversation, increasing generation time and therefore the chance of an interruption.Carry the key points into a new conversation. Provide large files in parts instead of attaching the entire file.

Try these three steps in the first 90 seconds

Regenerate the response → reload the page (if using the app, fully close and reopen it) → sign out and sign back in. A one-time connection interruption is usually resolved by one of these three steps, and one-time interruptions are the norm. Conversely, if it always stops at the same point, that signals that one of the specific causes below is active rather than a transient issue.

First determine whether the problem is on your side

Other guides skip this step, but it saves the most time. Open status.openai.com. If it shows an incident in progress, no setting on your side will change anything; waiting is the only solution. If there is no incident, the cause is local, and the next steps narrow it down. Check this first before changing settings so you do not spend twenty minutes clearing cache during an official outage.

Narrow down local causes layer by layer from the outside in

Follow this order, because each layer rules out all the possibilities above it: ① Turn off the VPN and proxy ② Open an incognito window (removes extensions and cache at once) ③ Try another browser or device ④ Switch networks. The layer where it starts working again is the cause. If it fails only with long conversations, none of the four layers is the problem — moving the key points to a new conversation is the solution.

For developers: what the same interruption looks like in the API

When calling the API with stream: true, the same failure appears as a Server-Sent Events connection that ends without a finish_reason. The HTTP status is 200 — everything was normal when the headers were sent — so checking only the status code will not catch it; under high load, 429 and 529 overloaded_error may also appear. Three measures make it manageable: (1) treat a stream that ends without a finish_reason as retryable rather than a completed response; (2) retry 429, 500, and 529 with exponential backoff and jitter; (3) if a proxy is involved, check its idle timeout and disable response buffering — a buffering proxy can turn a normal stream into one that appears stuck for a long time. To isolate the issue, stream directly without a proxy first:

stream-test.sh
# 直接串流、路徑上不放 Proxy,觀察它停在哪裡。
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 is an AI API gateway, and stream interruptions are an expected operating condition here, not an exception. When a model has multiple upstream channels configured and the first attempt fails, the same request retries through another channel within the same call, turning a temporary upstream problem into “a slightly slower success” rather than an error. Failed requests are never billed. Because GPT and Claude share the same key, when one model is overloaded you change the model name rather than the entire integration. The full guide to retry and backoff patterns for streaming scenarios is in LLM API streaming errors.

Frequently asked questions

Is “Message stream error” my fault?

Almost certainly not. This message means that the connection carrying the response was cut off before the response finished. What you entered does not cause it. The causes are load on OpenAI’s side, an unstable network, browser extensions or an expired login session, or a conversation so long that the response times out.

What if regenerating still does not work?

First check status.openai.com — local changes will not help during an official outage. If there is no outage, open it in an incognito window over another network: this single test rules out extensions, cache, and your usual connection at once. If it works in incognito, add things back one at a time until it fails again. If it fails everywhere and only in one long conversation, move the key points to a new conversation.

Do other AI systems show the same error?

This wording belongs to ChatGPT, but any assistant that responds by streaming can be interrupted in the same way. Claude may display a message saying it could not fully generate the response; when calling the API directly, it appears as an SSE stream ending without finish_reason, or as 529 overloaded_error under high load.

Why does it happen more often in long conversations?

Each turn resends the entire conversation, so the longer the conversation, the longer generation continues over the same open connection. The longer the connection remains open, the more opportunities a proxy timeout, network switch, or upstream hiccup has to break it. Starting a new conversation with a summary is usually more effective than changing any browser setting.

Related guides

More error semantics live in the error reference; getting a key takes a minute via signing up and the authentication guide.