Skip to content

Streaming

Set stream: true on either endpoint to receive Server-Sent Events (SSE) instead of a single JSON body.

/v1/responses:

response.created
response.output_text.delta (one or more)
response.completed (data is the full response object)

/v1/chat/completions:

chat.completion.chunk (one or more, with choices[0].delta.content)
chat.completion.chunk (final chunk, finish_reason: "stop")
data: [DONE]
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "hi"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")

The same pattern works with client.responses.create(..., stream=True), consuming response.output_text.delta events instead of chat chunks.

Octo streams text deltas only — it runs tools server-side, so there are no client-side tool-call deltas to consume. If a turn invokes tools, you’ll see the resulting text once the tool call resolves, not intermediate tool-call events.

Both endpoints inherit the same guarantee regardless of streaming: the turn always persists and meters even if the client disconnects mid-stream. A dropped connection does not leave the workspace’s conversation state or usage accounting in a partial state — see Usage & billing.