SSE stream viewer
Paste or drop your data here, or open a file.
New to Bracely?
Everything stays in your browser.
Output appears here
Paste or open your data in the input box. It never leaves your browser.
SSE Stream Viewer
A streamed LLM response arrives as dozens of small events, each with a few characters of text or a piece of a tool call's JSON. Paste the capture, from curl -N, your browser's EventStream tab or a log, and see the final message the SDK would have built, or every event in order.
Example: a Claude answer with a tool call
Thirteen events from Claude: some text, then a tool call whose input arrives in three pieces. Merged, it's one message with the text, the tool's input as JSON, the stop reason and the token usage:
Event stream
event: message_start
data: {"type":"message_start","message":{"id":"msg_01XFDUDYJgAACzvnptvVoYEL","type":"message","role":"assistant","content":[],"model":"claude-opus-5-5","stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":472,"output_tokens":2}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: ping
data: {"type":"ping"}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check the "}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"order status."}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01T1x1fJ34qAmk2tNTrN7Up6","name":"get_order","input":{}}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"order_id\": \"ORD-"}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"20419\"}"}}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":89}}
event: message_stop
data: {"type":"message_stop"}
Output
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll check the order status."
},
{
"type": "tool_use",
"id": "toolu_01T1x1fJ34qAmk2tNTrN7Up6",
"name": "get_order",
"input": {
"order_id": "ORD-20419"
}
}
],
"model": "claude-opus-5-5",
"stop_reason": "tool_use",
"stop_sequence": null,
"usage": {
"input_tokens": 472,
"output_tokens": 89
}
}
How do I use the SSE stream viewer?
- Paste the stream: the data: lines as captured, or one JSON event per line.
- Read the final message, or choose Show: the text only, or every event.
- Copy the message as JSON, or open it in any other tool.
What does the SSE stream viewer do?
- OpenAI Chat Completions and Responses, Anthropic Messages, Gemini
- Tool calls rebuilt from their pieces
- Says when a stream was cut off
When to use the SSE stream viewer
Streaming APIs send text/event-stream: a series of events, each a data: line with a small JSON object, separated by blank lines. For a language model each event carries the next few characters of the answer, a piece of a tool call's arguments, or, at the end, the stop reason and token usage. The SDKs put those pieces back together for you; when you capture the raw stream with curl -N, a proxy or the browser's EventStream tab, you get the pieces.
Bracely merges them the way each API documents: Anthropic's content blocks with text, thinking, signatures, citations and tool inputs; OpenAI Chat Completions choices with content and tool-call arguments joined by their index, and the usage chunk; OpenAI Responses from its output items, or from response.completed when the capture has it; and Gemini's candidates, with text pieces joined and thoughts and function calls kept as their own parts.
A capture that stops early is still read: you see everything up to the cut, and the note says what's missing, such as a stream with no [DONE] or a tool input whose JSON never closed.
Frequently asked questions
- Which formats does it read?
- SSE as captured (event:, data:, id: and blank lines, LF or CRLF), or one JSON event per line with no data: prefix, as some loggers write them. Comments and multi-line data are handled.
- Can it connect to a live stream?
- This tool reads a capture. To watch a stream as it arrives, use WebSocket & SSE, which connects to an address and shows each event as it comes.
- Why rebuild a stream by hand?
- To debug what a model really sent: a tool call whose JSON broke off, text that stopped mid-sentence, or usage numbers to check. The capture shows every piece; this shows what they add up to.
- Is my data uploaded?
- No. Bracely runs entirely in your browser, so nothing you paste or open leaves your device.
More JSON tools
Bracely has 108 JSON tools in one page. Related ones:
- JSON token counter
- JSON log viewer
- JSON stats
- JSON field explorer
- Hex viewer
- API tester
- Word counter
- HAR to OpenAPI
- WebSocket & SSE
- HAR analyzer
- API test runner
- Postman collection runner
- OpenAPI response validator
- Swagger response validator
- JSON visualizer
- JSON to chart
- JMESPath tester
- Query JSON with SQL
- JSON Formatter
- JSON Validator
- JSON Viewer
- JSON Repair
- JSON Diff
- JSON to YAML
- JSON to CSV
- jq Playground
Runs entirely in your browser. Nothing you paste is uploaded. Made by Saurabh Pagrut · About · Privacy policy
Last updated · Version 6.2 · Changelog
Saurabh Pagrut on GitHub · LinkedIn · X · YouTube · Instagram