Подключение к API
Endpoint в формате OpenAI Chat Completions с оплатой с рублёвого баланса. Здесь — всё, что нужно для интеграции: адрес, авторизация, примеры, потоковые ответы, ошибки и ограничения.
Основное
| Базовый URL | https://llm.liho.dev/v1 |
|---|---|
| Авторизация | Заголовок Authorization: Bearer lh_… — ключ из кабинета |
| Формат | JSON, OpenAI Chat Completions |
| Модели | Идентификатор из каталога, например gpt-6-sol. Без префикса разработчика |
| Обязательные поля | model, messages и max_tokens (или max_completion_tokens) |
| Таймаут | Ответ может занимать до 15 минут — ставьте таймаут клиента не меньше 900 секунд |
| Идентификатор запроса | Заголовок X-Request-ID совпадает с id ответа |
Запрос
Минимальный запрос. Для OpenAI SDK достаточно указать base_url и ключ.
curl https://llm.liho.dev/v1/chat/completions \
-H "Authorization: Bearer $LIHO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-sol",
"max_tokens": 512,
"messages": [
{"role": "user", "content": "Объясни в двух предложениях, что такое API-шлюз."}
]
}'import os
from openai import OpenAI
client = OpenAI(
base_url="https://llm.liho.dev/v1",
api_key=os.environ["LIHO_API_KEY"],
timeout=900,
)
response = client.chat.completions.create(
model="gpt-6-sol",
max_tokens=512,
messages=[{"role": "user", "content": "Объясни в двух предложениях, что такое API-шлюз."}],
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://llm.liho.dev/v1",
apiKey: process.env.LIHO_API_KEY,
timeout: 900_000,
});
const response = await client.chat.completions.create({
model: "gpt-6-sol",
max_tokens: 512,
messages: [{ role: "user", content: "Объясни в двух предложениях, что такое API-шлюз." }],
});
console.log(response.choices[0].message.content);Потоковый ответ
С "stream": true ответ приходит как text/event-stream: события data: с фрагментами и завершающее data: [DONE]. Последний фрагмент перед [DONE] содержит usage — токены и стоимость в рублях. Если данных нет 15 секунд, сервер отправляет комментарий : keep-alive.
curl -N https://llm.liho.dev/v1/chat/completions \
-H "Authorization: Bearer $LIHO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.8-flash",
"max_tokens": 512,
"stream": true,
"messages": [
{"role": "user", "content": "Объясни в двух предложениях, что такое API-шлюз."}
]
}'stream = client.chat.completions.create(
model="gemini-3.8-flash",
max_tokens=512,
stream=True,
messages=[{"role": "user", "content": "Объясни в двух предложениях, что такое API-шлюз."}],
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage) # в последнем фрагменте — токены и cost в рубляхdata: {"id":"…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"…"}}]}
: keep-alive
data: {"id":"…","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":…,"completion_tokens":…,"cost":…}}
data: [DONE]Если списание ещё не окончательное, последний фрагмент придёт без поля cost — итоговая стоимость появится в истории и в /v1/generation.
Параметры
Набор параметров зависит от модели — список supported_parameters есть в карточке каждой модели в каталоге. Каталог моделей.
| Параметр | Описание |
|---|---|
max_tokens | Обязателен. Ограничивает ответ и задаёт резерв стоимости. Для моделей с рассуждением закладывайте запас: токены рассуждения входят в этот лимит. |
messages | От 1 до 2048 сообщений, до 256 частей в сообщении. Роли system, user, assistant, tool. |
tools, tool_choice, parallel_tool_calls | Вызов инструментов: до 128 инструментов. В потоке вызовы приходят в delta.tool_calls. |
reasoning_effort | Уровень рассуждения для моделей, которые его поддерживают. Также принимается reasoning: {effort}. |
temperature, top_p, presence_penalty, frequency_penalty, seed, user | Стандартные параметры выборки. |
stream | Потоковый ответ (SSE). |
HTTP-Referer, X-Title | Необязательные заголовки: название приложения отображается в истории запросов. |
Idempotency-Key | Необязательный заголовок до 100 байт. Повтор с тем же ключом вернёт 409 и не запустит генерацию повторно. |
Неизвестные поля не приводят к ошибке: они отбрасываются и перечисляются в заголовке ответа X-Liho-Ignored-Fields.
Ошибки и лимиты
Ошибки приходят в одном формате и разбираются OpenAI SDK.
{
"error": {
"code": 402,
"message": "…",
"type": "liho_error",
"metadata": { "request_id": "…" }
}
}| Код | Причина |
|---|---|
400 | Некорректный запрос или параметр, который модель не поддерживает |
401 | Ключ не указан, неверен, отозван или истёк |
402 | Недостаточно средств или исчерпан лимит ключа |
403 | Управляющим ключом нельзя отправлять запросы к моделям |
404 | Неизвестная модель |
409 | Повтор запроса с тем же Idempotency-Key |
413 | Тело запроса больше 32 МиБ |
429 | Превышен лимит запросов ключа в минуту, см. Retry-After |
502 | Ошибка на стороне провайдера модели |
503 | Временная нехватка мощности, см. Retry-After |
- Лимит запросов в минуту задаётся для каждого ключа: от 1 до 1000, по умолчанию 300.
- Ответы с проверкой лимита содержат заголовки X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset.
- До 100 активных ключей на аккаунт.
Учёт и ключи через API
Для агентов и инструментов, которым нужно знать остаток средств или стоимость конкретного запроса.
| Метод | Что возвращает |
|---|---|
GET /v1/models | Опубликованные модели с ценами и параметрами. Нужен ключ |
GET /v1/key | Сведения о текущем ключе: лимит и расход |
GET /v1/credits | Баланс аккаунта |
GET /v1/generation?id=… | Токены, стоимость и время выполнения отдельного запроса |
/v1/keys | Создание, изменение и отзыв ключей управляющим ключом |
Не поддерживается
- Responses API (/v1/responses), embeddings, legacy completions, генерация изображений, аудио, модерация.
- Протокол Anthropic Messages (/v1/messages). Claude Code подключается только через сторонний адаптер — см. документацию в кабинете.
- Части сообщений с аудио и файлами; параметры n > 1, logprobs, logit_bias.
- Модель auto: пока модель указывается явно.
- Структурированный вывод (response_format) и stop-последовательности сейчас не включены ни для одной модели каталога.
В следующем релизе: режим Auto с подбором модели под задачу за 10 мс, Responses API, embeddings, генерация изображений и аудио.
Документация
Портал разработчика
Статьи о подключении, параметрах, потоковых ответах, ошибках и настройке инструментов. Открывается после входа в кабинет.
Открыть порталOpenAPI
Спецификация эндпоинтов в формате OpenAPI 3.
openapi.yamlllms.txt
Документация одним текстовым файлом — удобно передать агенту или модели.
llms.txt