# Streaming on the OpenAI-compatible API

> Server-Sent Events for /v1/responses and /v1/chat/completions, and the server-side settle guarantee.

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

## Event sequences

**`/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]
```

## Example

```python
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.

## Text-only deltas

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.

## Server-side settle guarantee

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](/openai-api/usage/).