Справочник API/Эндпоинты и примеры/Chat Completions

Chat Completions

Эндпоинт, совместимый с OpenAI Chat Completions. OpenAI SDK, большинство чат-клиентов и агентных фреймворков подключаются напрямую; в этом формате можно вызывать и модели не от OpenAI — Claude, Gemini, DeepSeek.

POSThttps://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-IdstringНеобязательно. ID вашего конечного пользователя, 1–128 видимых символов ASCII. С ним ограничения за повторные нарушения действуют только на этого пользователя, а не на весь аккаунт.

Параметры запросаlink

Ниже — параметры, которые шлюз читает или которые меняют его поведение. Остальные параметры OpenAI передаются в той мере, в какой их поддерживает апстрим выбранной модели.

ПараметрТипОписание
modelОбязательноstringID модели, в точности совпадающий с ID из списка моделей. Неверный ID возвращает 404 model_not_found, а в сообщении указан ближайший правильный ID.
messagesОбязательноarrayСообщения диалога, минимум одно. role — system, developer, user, assistant или tool; content — строка или массив блоков text и image_url.
max_tokensintegerЛимит выходных токенов, положительное целое; принимается и max_completion_tokens. Для Claude без него используется 4096; модели GPT его игнорируют, лимит задаёт апстрим.
streambooleanПри true ответ приходит потоком SSE, см. «Потоковая передача» ниже.
toolsarrayОписания функций-инструментов. Формат один для всех моделей, шлюз преобразует его для апстрима. Поддерживаются и tool_choice, parallel_tool_calls.
reasoning_effortstringУровень рассуждений для GPT и других моделей с рассуждениями: low, medium, high; у GPT по умолчанию medium. На Claude через этот эндпоинт не влияет — модель рассуждает с уровнем по умолчанию; чтобы управлять рассуждениями Claude, используйте Messages.
response_formatobjectСтруктурированный вывод. Работает только для моделей, которые пересылаются в формате Chat без изменений, например DeepSeek, GLM, Kimi. GPT и Claude его игнорируют; для структурированного вывода используйте text.format в Responses или эндпоинт Messages.
stopstring | arrayСтоп-последовательности. Для Claude передаются как stop_sequences; модели GPT их не поддерживают и игнорируют.
temperaturenumberСовременные модели с рассуждениями сами задают параметры сэмплирования, поэтому шлюз не пересылает temperature. Её принимают только Claude Opus 4.6, Sonnet 4.6, Sonnet 4.5, Haiku 4.5 (диапазон 0–1) и Grok. То же касается top_p.
prompt_cache_keystringКлюч кэша для моделей GPT, до 64 символов. Если его нет, шлюз выводит ключ из начала диалога, чтобы следующие ходы попадали в кэш.
cache_controlobjectТолько для Claude, на верхнем уровне тела запроса. По умолчанию шлюз включает для Claude 5-минутное кэширование промптов; передайте {"type": "ephemeral", "ttl": "1h"}, чтобы кэш жил 1 час — запись в такой кэш стоит дороже.
providerobjectРасширение 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

JSON
{
  "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].

SSE
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

JSON
{
  "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. Что означает каждый статус и что делать, см. Коды ошибок и устранение неполадок →