Developer API
Подключите модели и web-данные через один API
OpenAI-совместимые методы для LLM, отдельные методы поиска и асинхронного обхода сайтов. Оплата и цены в рублях.Начало работы
Первый запрос за три шага
Создайте ключ
Откройте кабинет, создайте ключ и выберите минимально необходимые scopes.
Выберите модель
Получите актуальные публичные ID через GET /v1/models.
Отправьте запрос
Передайте ключ в Bearer-заголовке. Ответ модели совместим с выбранным методом.
curl https://api.llmtokenapi.ru/v1/responses \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_ID",
"input": "Объясни квантование модели в двух предложениях"
}'Доступ
Авторизация и scopes
API-ключ начинается с llmt_. Полное значение показывается только один раз. Передавайте ключ только в заголовке Authorization и не помещайте его в браузерный код, URL или публичный репозиторий.
llm:readТекстовые модели и изображенияsearch:readПоискweb:readFetch и scrapejobs:writeСоздание и отмена заданийjobs:readСтатусы и результатыbilling:readПрайс организацииAPI Reference
Все публичные методы
Ниже перечислены все методы текущей версии gateway. Публичный каталог и стандартный прайс работают без ключа, остальные методы проверяют scope.
Каталог
GET/v1/modelsВсе активные модели и их типыGET/v1/pricesПубличный прайс стандартного тарифаGET/v1/account/pricesЭффективный прайс организацииМодели
POST/v1/responsesResponses API, tools и streamingPOST/v1/chat/completionsOpenAI-совместимые chat completionsPOST/v1/images/generationsГенерация изображенийКаталог
GET/v1/models
Возвращает активные публичные ID моделей. Поле type разделяет текстовые модели и генерацию изображений.
Без авторизации
Пример запроса
curl https://api.llmtokenapi.ru/v1/modelsПример ответа
{
"object": "list",
"data": [
{"id": "YOUR_MODEL_ID", "object": "model", "owned_by": "llmtokenapi", "name": "Model name", "type": "llm"}
]
}Каталог
GET/v1/prices
Возвращает опубликованный стандартный прайс в рублях. Web-операции тарифицируются за 1000 запросов. Текущая цена search, fetch, scrape, map и crawl составляет 50 ₽ за 1000 запросов.
Без авторизации
Пример запроса
curl https://api.llmtokenapi.ru/v1/pricesКаталог
GET/v1/account/prices
Возвращает эффективный прайс организации с учётом её тарифа. Используйте этот метод в кабинете и перед расчётом расходов.
Scope: billing:read
Пример запроса
curl https://api.llmtokenapi.ru/v1/account/prices \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY"Модели
POST/v1/responses
Основной метод для новых LLM-интеграций. Поддерживает строковый или составной input, function tools, структурированный текст и streaming.
Scope: llm:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
modelобязательный | string | Публичный ID из GET /v1/models. |
stream | boolean | Включает потоковый ответ. По умолчанию false. |
inputобязательный | string | array | Текст или массив входных элементов. |
max_output_tokens | integer | Максимум выходных токенов, до 1 000 000. |
tools | array | Описание доступных модели инструментов. |
text | object | Настройки текстового и структурированного ответа. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/responses \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_ID",
"input": "Назови три риска при запуске API-сервиса",
"max_output_tokens": 300
}'Модели
POST/v1/chat/completions
Совместимый метод для существующих OpenAI SDK и приложений, работающих с массивом messages.
Scope: llm:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
modelобязательный | string | Публичный ID из GET /v1/models. |
stream | boolean | Включает потоковый ответ. По умолчанию false. |
messagesобязательный | array | Сообщения с ролями system, developer, user, assistant или tool. |
temperature | number | Температура от 0 до 2. |
max_tokens | integer | Максимум выходных токенов, до 1 000 000. |
tools | array | Function tools в OpenAI-совместимом формате. |
response_format | object | Настройки JSON или JSON Schema ответа. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/chat/completions \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_ID",
"messages": [
{"role": "system", "content": "Отвечай кратко"},
{"role": "user", "content": "Что такое идемпотентность?"}
]
}'Изображения
POST/v1/images/generations
Генерирует до 4 изображений за запрос. Ответ провайдера возвращается в совместимом формате, включая b64_json, если модель поддерживает такой результат.
Scope: llm:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
modelобязательный | string | ID image-модели из GET /v1/models. |
promptобязательный | string | Промпт длиной до 8000 символов. |
n | integer | Количество изображений от 1 до 4. По умолчанию 1. |
quality | low | medium | high | Качество. По умолчанию medium. |
size | 1024x1024 | 1024x1536 | 1536x1024 | Размер результата. |
output_format | png | webp | jpeg | Формат файла. |
output_compression | integer | Сжатие от 0 до 100, если формат его поддерживает. |
background | auto | opaque | transparent | Режим фона. |
moderation | auto | low | Режим проверки безопасности. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/images/generations \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Минималистичный светящийся routing core на чёрном фоне",
"quality": "medium",
"size": "1024x1024",
"output_format": "webp"
}'Web API
POST/v1/search
Возвращает нормализованный список результатов с заголовком, URL и сниппетом. Один успешный вызов считается одной web-операцией.
Scope: search:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
queryобязательный | string | Поисковый запрос до 2000 символов. |
limit | integer | От 1 до 100 результатов. По умолчанию 10. |
language | string | Код или название языка. |
country | string | Двухбуквенный код страны. |
timeRange | day | week | month | year | Ограничение по времени. |
includeDomains | string[] | Разрешённые домены, до 50. |
excludeDomains | string[] | Исключённые домены, до 50. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/search \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "новости российского рынка LLM API",
"limit": 10,
"language": "ru"
}'Пример ответа
{
"object": "search.results",
"data": [{"title": "...", "url": "https://...", "snippet": "...", "score": 0.82}],
"usage": {"requests": 1, "results": 1}
}Web API
POST/v1/fetch
Загружает URL после проверки DNS, редиректов и конечного IP. Private, loopback, link-local и metadata-адреса блокируются.
Scope: web:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
urlобязательный | URL | Публичный HTTP или HTTPS URL. |
timeoutMs | integer | Таймаут от 1000 до 60000 мс. По умолчанию 20000. |
maxBytes | integer | Лимит ответа от 1024 до 10 000 000 байт. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/fetch \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article",
"timeoutMs": 20000,
"maxBytes": 2000000
}'Web API
POST/v1/scrape
Получает и очищает страницу, затем возвращает выбранные форматы. Для страниц с JavaScript можно включить browser.
Scope: web:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
urlобязательный | URL | Публичный HTTP или HTTPS URL. |
formats | array | markdown, html, links и metadata. По умолчанию markdown. |
waitForMs | integer | Ожидание рендера от 0 до 15000 мс. |
browser | boolean | Разрешает браузерный маршрут. По умолчанию false. |
timeoutMs | integer | Таймаут получения страницы. |
maxBytes | integer | Максимальный размер ответа. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/scrape \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article",
"formats": ["markdown", "links", "metadata"],
"browser": false
}'Фоновое задание
POST/v1/map
Собирает URL сайта асинхронно. Gateway резервирует стоимость одной операции и сразу возвращает 202 с Location на статус задания.
Scope: jobs:write
Параметры
| Параметр | Тип | Описание |
|---|---|---|
urlобязательный | URL | Стартовый URL. |
limit | integer | До 10 000 URL. По умолчанию 500. |
search | string | Дополнительный фильтр до 500 символов. |
includeSubdomains | boolean | Включать поддомены. По умолчанию false. |
webhookUrl | URL | HTTPS URL для уведомления о завершении. |
Заголовок Idempotency-Key обязателен. Повторите запрос с тем же ключом, чтобы безопасно восстановить уже созданное задание.
Пример запроса
curl https://api.llmtokenapi.ru/v1/map \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: map-example-com-001" \
-d '{
"url": "https://example.com",
"limit": 500,
"includeSubdomains": false
}'Пример ответа
{
"id": "2f35e4dd-3d29-4e9d-a979-59581918fd8e",
"type": "crawl",
"status": "queued",
"createdAt": "2026-08-27T10:00:00.000Z",
"expiresAt": "2026-08-28T10:00:00.000Z",
"progress": { "completed": 0, "total": null },
"error": null
}Фоновое задание
POST/v1/crawl
Обходит страницы сайта, сохраняет очищенные результаты и отдаёт их через endpoint результатов. Результаты удаляются через 24 часа.
Scope: jobs:write
Параметры
| Параметр | Тип | Описание |
|---|---|---|
urlобязательный | URL | Стартовый URL. |
limit | integer | До 10 000 страниц. По умолчанию 100. |
maxDepth | integer | Глубина от 0 до 20. По умолчанию 5. |
includePaths | string[] | Разрешённые пути, до 100 правил. |
excludePaths | string[] | Исключённые пути, до 100 правил. |
webhookUrl | URL | HTTPS URL для уведомления о завершении. |
Для каждого логического запуска используйте отдельный Idempotency-Key. Частично выполненный crawl может вернуть доступные результаты вместе со статусом failed.
Пример запроса
curl https://api.llmtokenapi.ru/v1/crawl \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: crawl-example-com-001" \
-d '{
"url": "https://example.com",
"limit": 100,
"maxDepth": 5,
"includePaths": ["/docs/**"]
}'Пример ответа
{
"id": "2f35e4dd-3d29-4e9d-a979-59581918fd8e",
"type": "crawl",
"status": "queued",
"createdAt": "2026-08-27T10:00:00.000Z",
"expiresAt": "2026-08-28T10:00:00.000Z",
"progress": { "completed": 0, "total": null },
"error": null
}Задания
GET/v1/jobs/{id}
Возвращает состояние, прогресс, сроки хранения и ошибку map или crawl задания.
Scope: jobs:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
idобязательный | UUID | ID из ответа POST /v1/map или POST /v1/crawl. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/jobs/JOB_ID \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY"Пример ответа
{
"id": "2f35e4dd-3d29-4e9d-a979-59581918fd8e",
"type": "crawl",
"status": "queued",
"createdAt": "2026-08-27T10:00:00.000Z",
"expiresAt": "2026-08-28T10:00:00.000Z",
"progress": { "completed": 0, "total": null },
"error": null
}Задания
GET/v1/jobs/{id}/results
Возвращает готовый результат. До завершения отвечает 409 job_not_ready. Для частично завершившегося задания данные могут быть доступны со статусом failed.
Scope: jobs:read
Параметры
| Параметр | Тип | Описание |
|---|---|---|
idобязательный | UUID | ID задания. |
Пример запроса
curl https://api.llmtokenapi.ru/v1/jobs/JOB_ID/results \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY"Задания
DELETE/v1/jobs/{id}
Отменяет задание, если оно ещё не перешло в конечное состояние. Неиспользованный резерв освобождается.
Scope: jobs:write
Параметры
| Параметр | Тип | Описание |
|---|---|---|
idобязательный | UUID | ID задания. |
Пример запроса
curl -X DELETE https://api.llmtokenapi.ru/v1/jobs/JOB_ID \
-H "Authorization: Bearer $LLMTOKENAPI_API_KEY"Справочник
Streaming
Передайте stream: true в Responses или Chat Completions. Gateway начинает проксирование после первого полученного фрагмента. Если маршрут отказал до первого байта, запрос может быть направлен по другому доступному маршруту той же публичной модели.
{
"model": "YOUR_MODEL_ID",
"input": "Напиши короткий план запуска",
"stream": true
}Справочник
Webhooks
Для map и crawl можно передать webhookUrl. Подпись HMAC SHA-256 строится по строке timestamp.eventId.body. Проверяйте подпись, допустимое время события и повторный event ID.
x-llmtokenapi-event-idx-llmtokenapi-timestampx-llmtokenapi-signature: v1=...Справочник
Ошибки
Каждая ошибка содержит стабильный code, сообщение и requestId. Тот же ID возвращается в заголовке x-request-id. Передавайте его поддержке при разборе запроса.
| HTTP | Код | Значение |
|---|---|---|
| 400 | idempotency_key_required | Нет ключа для map или crawl |
| 400 | unsafe_url | URL заблокирован SSRF-защитой |
| 400 | moderation_blocked | Генерация остановлена проверкой безопасности |
| 400 | image_generation_failed | Запрос изображения отклонён или не выполнен |
| 401 | invalid_api_key | Ключ отсутствует, неверен или отозван |
| 402 | insufficient_balance | Недостаточно доступного баланса |
| 403 | insufficient_scope | Ключу не хватает scope |
| 403 | account_blocked | Организация заблокирована |
| 403 | outstanding_debt | На балансе есть задолженность |
| 403 | terms_not_accepted | Не приняты действующие условия |
| 404 | job_not_found | Задание не найдено |
| 404 | not_found | Маршрут API не найден |
| 409 | job_not_ready | Результат ещё не готов |
| 429 | rate_limit_exceeded | Временный лимит upstream |
| 500 | internal_error | Внутренняя ошибка сервиса |
| 502 | upstream_error | Провайдер не выполнил запрос |
| 503 | model_unavailable | Нет рабочего маршрута модели |
| 503 | pricing_unavailable | Прайс не опубликован |
| 503 | upstream_unavailable | Web или LLM маршрут временно недоступен |
{
"error": {
"code": "insufficient_balance",
"message": "Недостаточно средств для резервирования запроса",
"requestId": "7fe2b1cc-6a3a-4bb4-8729-850854df9186"
}
}