# instinct: 9routerの/v1/chat/completionsをJSONで受けるにはstream:falseを明示する(既定はSSE)
9router(localhost:20128 の OpenAI 互換エンドポイント)は **既定でSSEストリーミング**(`data: {...}\n\ndata: [DONE]`)を返す。`urllib`/`requests` で `resp.read()` を `json.loads()` するとパースエラー(`Expecting value: line 1 column 1`)になる。
**How to apply:** ペイロードに `"stream": false` を明示すると通常の JSON(`{"choices":[{"message":{"content":...}}]}`)が返る。curl で確認する時も `-d '{"stream":false,...}'` を付ける。疎通だけ見るなら `pm2 logs 9router | grep STREAM` で complete を見るのが確実([[opencode-9router]] の Gotcha と同根)。
**Why:** 2026/6/15 の claude -p 課金分離対策で、課金 claude のフォールバック先を 9router 無料枠(kr/claude-sonnet-4.5)に置換した際に踏んだ。stream:false 無しだと無料枠経路が常に失敗し、結局フォールバックが機能しない。
関連: [[opencode-9router]] / [[9router-setup]] / [[instinct-grok-composer25-oneshot]]
---
(migrated from local memory/instinct_9router_sse_stream_false.md)
instinct: 9routerの/v1/chat/completionsをJSONで受けるにはstream:falseを明示する(既定はSSE)