Один ключ для всех AI-моделейСоздать аккаунтОплата в рублях, без VPN

ДокументацияСтриминг

Стриминг

Для потоковой генерации передайте "stream": true в POST /v1/chat/completions. Текст ответа приходит по мере генерации — удобно для чатов и длинных ответов.

Тот же параметр работает в POST /v1/messages для Claude Messages API — формат событий Anthropic SSE. Подробнее: Claude Messages API.

Пример запроса

~/zenvy · zsh
curl -N https://api.zenvy.su/v1/chat/completions \
  -H "Authorization: Bearer sk-zenvy-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4.6",
    "messages": [
      { "role": "user", "content": "Ответь в 3 коротких пунктах" }
    ],
    "stream": true
  }'

Флаг -N в curl отключает буферизацию — чанки приходят сразу.

Формат ответа

Zenvy возвращает SSE-поток (Server-Sent Events):

~/zenvy · http
Content-Type: text/event-stream; charset=utf-8
Cache-Control: no-cache, no-transform
Pragma: no-cache
X-Accel-Buffering: no
Content-Encoding: identity
Connection: keep-alive

Чанки приходят в формате OpenAI:

~/zenvy · plain
data: {"choices":[{"delta":{"content":"Привет"}}]}

data: [DONE]

У моделей с reasoning в delta может приходить поле reasoning или reasoning_content. У моделей с генерацией изображений — массив images с data URL в delta (формат зависит от upstream-провайдера).

OpenAI SDK

~/zenvy · python
from openai import OpenAI

client = OpenAI(api_key="sk-zenvy-...", base_url="https://api.zenvy.su/v1")

stream = client.chat.completions.create(
    model="claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Расскажи коротко о Zenvy"}],
    stream=True
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Списание средств

При streaming списание выполняется после завершения потока. Usage берётся из ответа upstream-провайдера; если провайдер не вернул usage, Zenvy использует оценку по токенам.

Подробнее: Токены и биллинг.