POST /v1/agents/{agent_id}/chat/stream принимает ровно тот же запрос, что и синхронный эндпоинт чата: то же тело, те же заголовки Authorization и Idempotency-Key, тот же доступ full, те же правила диалогов, биллинг и коды ошибок. Отличается только транспорт: ответ приходит как text/event-stream.
События
У каждого события есть имя и одна строкаdata с JSON.
Текст рассуждений и активность инструментов никогда не попадают в стрим.
response.completed всегда несёт полный итоговый текст, поэтому клиент, пропустивший часть дельт, может восстановить ответ из него, а не из склеенных дельт.Ошибки в стриме
Сбои до установления стрима (неверный ключ, валидация,idempotency_conflict, conversation_busy, отключённый агент, лимит запросов) — это обычные JSON-конверты ошибок со своим HTTP-статусом; проверяйте response.ok, прежде чем читать события.
После отправки заголовков статус уже 200. Сбой после этого момента (например, insufficient_balance или internal_error) приходит как событие error с теми же полями, что и в конверте, и закрывает стрим.
Обрывы соединения и повторы
Клиент, разорвавший соединение, не останавливает ответ: он всё равно генерируется и сохраняется, а запись идемпотентности завершается. Повтор с тем жеIdempotency-Key стримит response.created, а сразу за ним response.completed с сохранённым результатом; дельты не воспроизводятся. См. Идемпотентность.