Стриминг
Потоковый ответ включается полем `"stream": true`. Роутер отдаёт его как поток Server-Sent Events (SSE): токены приходят по мере генерации, а не одним блоком в конце. Формат потока соответствует эндпоинту.
## Chat Completions
`POST /v1/chat/completions` отдаёт OpenAI-совместимый поток. Каждое событие это строка `data:` с объектом `chat.completion.chunk`, где текст лежит в `choices[].delta.content`. Поток завершается строкой `data: [DONE]`.
```bash frame="terminal"
curl https://api.waibee.com/v1/chat/completions \
-H "Authorization: Bearer $WAIBEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "anthropic/claude-sonnet-4.6", "stream": true,
"messages": [{ "role": "user", "content": "Привет!" }] }'
```
```
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":"Привет"}}]}
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"}}]}
data: [DONE]
```
## Messages
`POST /v1/messages` отдаёт поток в формате событий Anthropic. Каждое событие это пара строк `event:` и `data:`. Порядок событий: `message_start`, затем `content_block_start`, серия `content_block_delta` с текстом, `content_block_stop`, `message_delta` и `message_stop`.
```bash frame="terminal"
curl https://api.waibee.com/v1/messages \
-H "x-api-key: $WAIBEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "anthropic/claude-sonnet-4.6", "stream": true, "max_tokens": 1024,
"messages": [{ "role": "user", "content": "Привет!" }] }'
```
```
event: message_start
data: {"type":"message_start","message":{"role":"assistant","content":[]}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Привет"}}
event: message_stop
data: {"type":"message_stop"}
```
## Что учесть
- В потоке могут встречаться строки-комментарии SSE (начинаются с `:`) как keep-alive. Их нужно игнорировать.
- Официальные SDK (`openai`, `anthropic`) разбирают поток сами: достаточно включить стриминг в вызове (`stream=True`), и текст приходит частями. См. [Интеграции](/router/integrations/openai-compatible/).
Потоковый ответ включается полем "stream": true. Роутер отдаёт его как поток Server-Sent Events (SSE): токены приходят по мере генерации, а не одним блоком в конце. Формат потока соответствует эндпоинту.
Chat Completions
Заголовок раздела «Chat Completions»POST /v1/chat/completions отдаёт OpenAI-совместимый поток. Каждое событие это строка data: с объектом chat.completion.chunk, где текст лежит в choices[].delta.content. Поток завершается строкой data: [DONE].
curl https://api.waibee.com/v1/chat/completions \ -H "Authorization: Bearer $WAIBEE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "stream": true, "messages": [{ "role": "user", "content": "Привет!" }] }'data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":"Привет"}}]}
data: {"object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"}}]}
data: [DONE]Messages
Заголовок раздела «Messages»POST /v1/messages отдаёт поток в формате событий Anthropic. Каждое событие это пара строк event: и data:. Порядок событий: message_start, затем content_block_start, серия content_block_delta с текстом, content_block_stop, message_delta и message_stop.
curl https://api.waibee.com/v1/messages \ -H "x-api-key: $WAIBEE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "stream": true, "max_tokens": 1024, "messages": [{ "role": "user", "content": "Привет!" }] }'event: message_startdata: {"type":"message_start","message":{"role":"assistant","content":[]}}
event: content_block_deltadata: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Привет"}}
event: message_stopdata: {"type":"message_stop"}Что учесть
Заголовок раздела «Что учесть»- В потоке могут встречаться строки-комментарии SSE (начинаются с
:) как keep-alive. Их нужно игнорировать. - Официальные SDK (
openai,anthropic) разбирают поток сами: достаточно включить стриминг в вызове (stream=True), и текст приходит частями. См. Интеграции.