Документация

API совместим с OpenAI. Если у вас уже есть код, работающий с OpenAI, поменяйте адрес и ключ — остальное менять не придётся.

Быстрый старт

Адрес API — https://api.sillis.tech/v1. Ключ выпускается в разделе Ключи и показывается один раз. Готовые конфиги под OpenCode, Pi, Cline, Continue, Aider, Cursor, Zed, Open WebUI, LangChain, LlamaIndex и n8n — на странице Быстрое подключение.

curl https://api.sillis.tech/v1/chat/completions \
  -H "Authorization: Bearer $SILLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sillis-1.0",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

Python

from openai import OpenAI

client = OpenAI(
    api_key="sk-sillis-…",
    base_url="https://api.sillis.tech/v1",
)

response = client.chat.completions.create(
    model="sillis-1.0",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)

Node.js

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.SILLIS_API_KEY,
  baseURL: "https://api.sillis.tech/v1",
});

const response = await client.chat.completions.create({
  model: "sillis-1.0",
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(response.choices[0].message.content);

Ключи

Ключ передаётся заголовком Authorization: Bearer sk-sillis-…. У ключа можно задать месячный лимит расхода, список разрешённых моделей, срок действия и список IP-адресов.

Ключ работает только на сервере. Мы намеренно не открываем CORS: ключ, попавший в браузерный код, виден любому посетителю и тратит ваш баланс. Если нужен доступ из фронтенда — проксируйте запросы через свой бэкенд.

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

Чат — POST /chat/completions

Поддерживаются поля model, messages, temperature, top_p, max_tokens, stop, seed, n, response_format, tools, tool_choice, presence_penalty, frequency_penalty, stream, stream_options. Неизвестные поля отбрасываются.

Стриминг

Обычный SSE, как у OpenAI: передайте stream: true. Токены считаются автоматически, ничего дополнительно указывать не нужно.

stream = client.chat.completions.create(
    model="sillis-1.0",
    messages=[{"role": "user", "content": "Расскажи о Байкале"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Хотите видеть расход прямо в потоке — попросите его явно через stream_options={"include_usage": true}, и последний чанк придёт с полем usage.

Если соединение оборвётся, запрос всё равно будет оплачен по объёму того, что мы успели вам отдать. Такое списание помечается в журнале как «оценка».

Эмбеддинги — POST /embeddings

curl https://api.sillis.tech/v1/embeddings \
  -H "Authorization: Bearer $SILLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sillis-embed-1.0",
    "input": ["первый текст", "второй текст"]
  }'

Размерность вектора — 1024. Тарифицируется по входным токенам.

Реранк — POST /rerank

curl https://api.sillis.tech/v1/rerank \
  -H "Authorization: Bearer $SILLIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sillis-rerank-1.0",
    "query": "как настроить nginx",
    "documents": ["конфиг nginx", "рецепт борща"],
    "top_n": 2
  }'

Формат совместим с Cohere: в ответе results с полями index и relevance_score.

Распознавание речи — POST /audio/transcriptions

curl https://api.sillis.tech/v1/audio/transcriptions \
  -H "Authorization: Bearer $SILLIS_API_KEY" \
  -F model=sillis-voice-1.0 \
  -F file=@запись.mp3 \
  -F language=ru

Тарифицируется по длительности аудио, а не по токенам. Максимальный размер файла — 30 МБ.

Список моделей — GET /models

Отдаёт модели, доступные вашему ключу, в формате OpenAI. В поле sillis у каждой модели лежат класс и рублёвые цены — удобно, чтобы считать бюджет прямо в коде.

curl https://api.sillis.tech/v1/models -H "Authorization: Bearer $SILLIS_API_KEY"

Стоимость

Деньги списываются с общего баланса аккаунта SilliS — того же, с которого будут оплачиваться остальные продукты. Баланс и история операций — в личном кабинете, цены — на странице Модели и цены.

Каждый нестримовый ответ приходит с заголовками:

X-SilliS-Cost: 0.035000      # стоимость этого запроса в рублях
X-SilliS-Balance: 987.34     # остаток на балансе
X-SilliS-Request-Id: 6f1c…   # назовите его в поддержке

У стримов цена известна только после последнего чанка, поэтому в заголовках её нет — смотрите раздел Расход.

Запрос принимается, пока баланс положительный, а списывается по факту. Поэтому последний запрос может увести баланс в небольшой минус — он погасится при первом пополнении.

Ошибки

Формат совпадает с OpenAI, поэтому обработка ошибок в чужих SDK работает как есть.

{
  "error": {
    "message": "Недостаточно средств на балансе SilliS.",
    "type": "insufficient_quota",
    "code": "insufficient_balance"
  }
}
КодcodeЧто случилось
401invalid_api_keyКлюч неверен, отозван или истёк
402insufficient_balanceБаланс исчерпан
402key_limit_exceededИсчерпан месячный лимит ключа
403model_not_allowedКлючу не разрешена эта модель
403ip_not_allowedЗапрос пришёл с адреса вне списка
400context_length_exceededЗапрос не помещается в окно контекста — сократите историю
404model_not_foundТакой модели в каталоге нет
404model_retiredМодель снята с продажи; в тексте ошибки названа замена
404model_unavailableМодель есть в каталоге, но шлюз её сейчас не отдаёт
429rate_limit_exceededСлишком часто
429upstream_busyМодель остывает; срок ожидания — в заголовке Retry-After
502upstream_errorШлюз моделей вернул ошибку
504upstream_timeoutМодель не ответила вовремя

Лимиты

  • 120 запросов в минуту на аккаунт (не на ключ — лимит общий). Пока на балансе меньше 100 ₽, действует ужатый предел — 6 запросов в минуту; он снимается пополнением. Про это же говорит поле rpm_note в GET /account.
  • Тело запроса — до 30 МБ.
  • Ответ обрывается, если модель молчит дольше минуты подряд. Долгие рассуждения и большие ответы это не задевает: отсчёт сбрасывается на каждом полученном фрагменте.

Нужны другие пределы или отдельная модель — напишите на alex@sillis.tech.