Справочник API/Эндпоинты и примеры/Chat Completions
Chat Completions
Эндпоинт, совместимый с OpenAI Chat Completions. OpenAI SDK, большинство чат-клиентов и агентных фреймворков подключаются напрямую; в этом формате можно вызывать и модели не от OpenAI — Claude, Gemini, DeepSeek.
https://api.wokey.ai/v1/chat/completions· Совместим с OpenAI Chat CompletionsНа этой страницеexpand_more
Примерlink
Укажите base URL https://api.wokey.ai/v1 — больше ничего в OpenAI SDK менять не нужно. Путь /chat/completions без /v1 тоже работает.
curl https://api.wokey.ai/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-sol",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Hello" }
],
"max_tokens": 1024
}'Заголовкиlink
| Заголовок | Значение | Описание |
|---|---|---|
AuthorizationОбязательно | Bearer YOUR_API_KEY | Ваш API-ключ Wokey. Подходит и x-api-key: YOUR_API_KEY. |
Content-TypeОбязательно | application/json | Тело запроса — JSON. |
X-End-User-Id | string | Необязательно. ID вашего конечного пользователя, 1–128 видимых символов ASCII. С ним ограничения за повторные нарушения действуют только на этого пользователя, а не на весь аккаунт. |
Параметры запросаlink
Ниже — параметры, которые шлюз читает или которые меняют его поведение. Остальные параметры OpenAI передаются в той мере, в какой их поддерживает апстрим выбранной модели.
| Параметр | Тип | Описание |
|---|---|---|
modelОбязательно | string | ID модели, в точности совпадающий с ID из списка моделей. Неверный ID возвращает 404 model_not_found, а в сообщении указан ближайший правильный ID. |
messagesОбязательно | array | Сообщения диалога, минимум одно. role — system, developer, user, assistant или tool; content — строка или массив блоков text и image_url. |
max_tokens | integer | Лимит выходных токенов, положительное целое; принимается и max_completion_tokens. Для Claude без него используется 4096; модели GPT его игнорируют, лимит задаёт апстрим. |
stream | boolean | При true ответ приходит потоком SSE, см. «Потоковая передача» ниже. |
tools | array | Описания функций-инструментов. Формат один для всех моделей, шлюз преобразует его для апстрима. Поддерживаются и tool_choice, parallel_tool_calls. |
reasoning_effort | string | Уровень рассуждений для GPT и других моделей с рассуждениями: low, medium, high; у GPT по умолчанию medium. На Claude через этот эндпоинт не влияет — модель рассуждает с уровнем по умолчанию; чтобы управлять рассуждениями Claude, используйте Messages. |
response_format | object | Структурированный вывод. Работает только для моделей, которые пересылаются в формате Chat без изменений, например DeepSeek, GLM, Kimi. GPT и Claude его игнорируют; для структурированного вывода используйте text.format в Responses или эндпоинт Messages. |
stop | string | array | Стоп-последовательности. Для Claude передаются как stop_sequences; модели GPT их не поддерживают и игнорируют. |
temperature | number | Современные модели с рассуждениями сами задают параметры сэмплирования, поэтому шлюз не пересылает temperature. Её принимают только Claude Opus 4.6, Sonnet 4.6, Sonnet 4.5, Haiku 4.5 (диапазон 0–1) и Grok. То же касается top_p. |
prompt_cache_key | string | Ключ кэша для моделей GPT, до 64 символов. Если его нет, шлюз выводит ключ из начала диалога, чтобы следующие ходы попадали в кэш. |
cache_control | object | Только для Claude, на верхнем уровне тела запроса. По умолчанию шлюз включает для Claude 5-минутное кэширование промптов; передайте {"type": "ephemeral", "ttl": "1h"}, чтобы кэш жил 1 час — запись в такой кэш стоит дороже. |
provider | object | Расширение Wokey для выбора или исключения поставщиков. Используется только для маршрутизации и не пересылается апстриму. |
Как Wokey обрабатывает запросlink
Что шлюз делает до и после пересылки и чем это отличается от прямого вызова официального API.
- В этом формате можно вызывать любую текстовую модель. Шлюз выбирает протокол апстрима по модели и преобразует запрос и ответ, поэтому для Claude или Gemini не нужен другой SDK.
- Модели изображений и видео здесь вызвать нельзя: они возвращают 404 с сообщением, указывающим на /v1/images/generations или /v1/videos.
- Изображения передаются блоками image_url — ссылками https или base64 data URL. Модель без поддержки изображений возвращает 400 model_does_not_support_images.
- PDF и другие файлы работают только у моделей, которые пересылаются в формате Chat без изменений. Чтобы передать PDF в Claude, используйте блок document в эндпоинте Messages.
- metadata и provider не пересылаются апстриму.
Если у модели несколько поставщиков, добавьте в тело запроса объект provider, чтобы выбрать или исключить поставщиков. Выбор поставщиков и их порядка →
Ответlink
{
"id": "chatcmpl-...",
"object": "chat.completion",
"created": 1793952000,
"model": "gpt-6-sol",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Hello! How can I help you today?" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 21,
"completion_tokens": 10,
"total_tokens": 31
}
}- Заголовок ответа x-wokey-request-id — ID запроса в Wokey. Указывайте его, когда сообщаете о проблеме.
- Claude: prompt_tokens не включает кэш; чтение и запись кэша указаны отдельно в cache_read_input_tokens и cache_creation_input_tokens.
- GPT: prompt_tokens включает кэшированные токены, их число — в input_tokens_details.cached_tokens.
- Другие модели: объект usage апстрима как есть; кэшированные токены обычно в prompt_tokens_details.cached_tokens.
- Если запрос без потока выполняется дольше примерно 2 минут, шлюз отправляет статус 200 и поддерживает соединение пробельными символами. Ошибка после этого придёт в теле этого ответа 200. Для долгих задач используйте stream: true.
Потоковая передачаlink
Каждое событие — строка data: с одним JSON-чанком; поток завершается data: [DONE].
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","model":"gpt-6-sol","choices":[{"index":0,"delta":{"content":"Hello!"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","model":"gpt-6-sol","choices":[{"index":0,"delta":{"content":" How can I help you today?"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","model":"gpt-6-sol","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":21,"completion_tokens":10,"total_tokens":31}}
data: [DONE]- Последний чанк содержит и finish_reason, и usage. stream_options.include_usage задавать не нужно — шлюз всегда возвращает usage.
- Вызовы инструментов не передаются по частям: полный tool_calls приходит в конце потока.
- Claude и модели с рассуждениями, пересылаемые в формате Chat без изменений, передают рассуждения в delta.reasoning_content. GPT не возвращает текст рассуждений.
- Пока апстрим не прислал первый байт, шлюз периодически отправляет строки-комментарии : keepalive, которые SSE-клиенты игнорируют.
- Если ошибка возникла после начала потока, шлюз отправляет событие data: {"error": …}, а затем data: [DONE].
Формат ошибокlink
{
"error": {
"code": "model_not_found",
"message": "Model ID \"gpt-6-sun\" was not recognized. The correct model ID is \"gpt-6-sol\"; use it and try again. See https://wokey.ai/models for the full list.",
"type": "invalid_request_error"
}
}Ошибки в формате OpenAI: error.code — код для обработки, error.type обычно invalid_request_error. Что означает каждый статус и что делать, см. Коды ошибок и устранение неполадок →