Методы и форматы API
Шлюз предоставляет OpenAI-совместимые Chat Completions и Responses, а также Anthropic-совместимые Messages. Ниже описано поведение именно WioRoute и основные поля, которые принимают его маршруты.
provider/example-model — только образец формата ID. Перед отправкой запроса скопируйте действующий ID из каталога моделей или ответа GET /api/v1/models. Условия доступа проверяйте в кабинете.
Базовый URL и методы
Для OpenAI SDK и большинства OpenAI-совместимых приложений укажите https://api.ai.wiky.su/v1. Для Anthropic SDK и Claude Code укажите https://api.ai.wiky.su: они добавляют /v1/messages сами. Основной адрес методов — https://api.ai.wiky.su/v1. Совместимый путь /api/v1 работает на всех поддоменах сайта.
| Метод | Путь | Назначение |
|---|---|---|
| GET | /v1/models | Список ID маршрутов; нужен API-ключ. |
| POST | /v1/chat/completions | Диалог OpenAI-формата, обычный или потоковый ответ. |
| POST | /v1/responses | Ответ в формате Responses, обычный или SSE. |
| POST | /v1/messages | Диалог Anthropic-формата, обычный или потоковый ответ. |
| POST | /v1/messages/count_tokens | Оценка входящих токенов, не точный счётчик провайдера. |
| GET | /health | Проверка доступности шлюза без ключа. |
Методы личного кабинета находятся отдельно под /connect/api-v1/user/* и используют браузерную сессию, а не ключ для LLM.
Как передавать ключ
Создайте ключ в личном кабинете. Шлюз принимает его как Bearer-токен или в заголовке x-api-key. Все методы /api/v1/* из таблицы, кроме /health, проверяют ключ.
Authorization: Bearer wio-live-ВАШ_КЛЮЧ
Content-Type: application/jsonx-api-key: wio-live-ВАШ_КЛЮЧ
anthropic-version: 2023-06-01
Content-Type: application/jsonВызовите GET /api/v1/models. Ответ 200 означает, что ключ принят. Ответ 401 означает отсутствие, ошибку или отзыв ключа.
POST /api/v1/chat/completions
Минимальное тело содержит действующий ID маршрута в model и историю в messages. Неизвестный ID получает 400; шлюз не подменяет его другой моделью. Без stream метод возвращает один JSON-объект. Поля temperature, top_p, max_tokens, tools и tool_choice проходят через шлюз, но фактическая поддержка зависит от маршрута.
{
"model": "provider/example-model",
"messages": [
{ "role": "system", "content": "Отвечай кратко" },
{ "role": "user", "content": "Что такое SSE?" }
],
"max_tokens": 300,
"stream": false
}В обычном ответе текст доступен в choices[0].message.content. Некоторые провайдеры добавляют usage.prompt_tokens и usage.completion_tokens. Передаваемый шлюзом ответ может содержать дополнительные поля провайдера.
{
"choices": [{ "message": { "role": "assistant", "content": "SSE — поток событий от сервера." } }],
"usage": { "prompt_tokens": 23, "completion_tokens": 12, "total_tokens": 35 }
}Числа и текст здесь иллюстративные; реальный ответ зависит от маршрута.
POST /api/v1/responses
Передайте input строкой или массивом сообщений; дополнительно можно указать instructions и max_output_tokens. Этот адаптер преобразует запрос в диалоговый формат, поэтому полный набор возможностей оригинального Responses API не гарантирован каждым маршрутом.
curl https://api.ai.wiky.su/v1/responses \
-H "Authorization: Bearer $WIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"provider/example-model","input":"Назови три преимущества тестов","stream":false}'Обычный ответ содержит output[].content[].text и удобное поле output_text. Для потока укажите "stream":true; шлюз отдаёт события семейства response.*.
POST /api/v1/messages
Обязательные поля для типичного запроса: model, max_tokens и messages. Заголовок anthropic-version: 2023-06-01 нужен Anthropic-совместимым клиентам. Пример вымышленного ID маршрута: provider/example-model.
curl https://api.ai.wiky.su/v1/messages \
-H "x-api-key: $WIO_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model":"provider/example-model","max_tokens":512,"messages":[{"role":"user","content":"Привет!"}]}'Обычный ответ содержит content[0].text, stop_reason и usage. Метод /v1/messages/count_tokens возвращает приблизительную оценку input_tokens по размеру JSON, поэтому не используйте её как точный подсчёт токенизатора модели.
Шлюз преобразует Anthropic-формат в диалоговый запрос и может представлять сложные блоки содержимого как текст. Нативные блоки вызова инструментов, мультимодальные данные и новые возможности Claude Code нужно проверять на выбранном маршруте отдельно.
Как читать SSE
Передайте "stream":true. Для Chat Completions события идут строками data: {…}, а завершение помечается data: [DONE]. Для Anthropic Messages шлюз отправляет message_start, content_block_delta и message_stop. После начала потока ошибка, включая превышение зарезервированного бюджета, приходит как событие SSE даже при HTTP 200. Успех подтверждается только завершающим событием; если соединение прервалось, повторный запрос может сгенерировать другой ответ.
curl -N https://api.ai.wiky.su/v1/chat/completions \
-H "Authorization: Bearer $WIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"provider/example-model","stream":true,"messages":[{"role":"user","content":"Привет"}]}'Флаг -N важен для просмотра частей ответа в терминале. Клиентам следует собирать текст из последовательных delta, а не ожидать готовое сообщение в каждом событии.
Коды состояния
| Код | Что проверить |
|---|---|
400 | JSON, параметры запроса, полный ID маршрута и формат сообщений. |
413 | Тело запроса слишком велико. |
401 | Наличие ключа, его формат и статус в кабинете. |
402 | Недостаточно доступного баланса или достигнут суточный предел платных расходов ключа. |
403 | Маршрут выключен в настройках этого API-ключа. |
429 | Процент бесплатного лимита и время до сброса в кабинете. |
502/503/504 | Временная недоступность шлюза или маршрута; повторите запрос позже. |
OpenAI-формат возвращает объект error; Anthropic-формат может вернуть {"type":"error","error":{…}}. Текст ошибки показывайте пользователю, но не публикуйте ключ и приватный запрос в логах.
Подключение терминальных инструментов
