API REFERENCE / V1

Создавайте с SERTAL.

Один endpoint для текстовых диалогов с подключёнными моделями.

Chat Completions в MVP — текст без streaming. Для CLI добавлены отдельные маршруты Responses и Messages с потоковыми ответами и клиентскими инструментами. Реальная генерация требует подключения провайдера. Примеры ниже — иллюстрации формата.
  1. Получите ключ SERTAL от продавца после покупки на FunPay.
  2. Войдите с этим ключом. Регистрация, email и пароль не требуются.
  3. В Models скопируйте ID настроенной модели.
  4. Отправьте запрос или проверьте модель в Playground.

Локальный base URL: http://127.0.0.1:3000. В облаке используйте фактический HTTPS-адрес вашей установки.

Codex CLI и Claude Code

Одна команда для Windows: проверка купленного ключа SERTAL, установка недостающих CLI и отдельные профили подключения. Запустите её в PowerShell и вставьте свой ключ в скрытое поле.

Загрузка команды подключения…

После настройки: sertal-codex или sertal-claude. Если команда не найдена, откройте новый терминал. Ключ хранится с шифрованием Windows; прежние профили CLI сохраняются.

Нужна подключённая модель с подходящим протоколом. Без неё настройка остановится. Живой запрос через CLI пока не проверен. Установка не вызывает платную генерацию; работа CLI расходует пакет. Для Anthropic-формата отдельные модели имеют ограничения совместимости.

Авторизация

Передавайте ключ SERTAL в заголовке Authorization: Bearer sk-sertal-…. Этот же приобретённый ключ используется для входа в кабинет. Cookie не заменяет ключ для публичного API. Ключи провайдеров хранятся только на сервере.

HTTP
Authorization: Bearer <SERTAL_API_KEY>
Content-Type: application/json

Создать chat completion

POST /v1/chat/completions
ПолеТипОписание
modelstringОбязательный ID из GET /v1/models
messagesarray1–50 сообщений; role: system, user или assistant; content: текст до 16 000 символов. Нужно хотя бы одно user-сообщение.
max_tokensinteger1–4096, по умолчанию 512
temperaturenumber0–1, необязательно
streambooleanТолько false; true возвращает 400

Неизвестные поля отклоняются. GET /v1/models требует Bearer-ключ; перед вызовом проверяйте поле status. Запланированные модели не принимают запросы.

Лимит купленного пакета и расход видны в API Keys. Попытка списывается перед обращением к провайдеру, включая его ошибки и таймауты. Некорректный JSON и неподключённая модель пакет не расходуют. У Kimi рассуждения также входят в выходные токены.

Единый ответ

JSON · пример формата
{
  "id": "chatcmpl-<request-id>",
  "object": "chat.completion",
  "created": 0,
  "model": "<ID из каталога>",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "<Ответ провайдера>"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 8,
    "total_tokens": 20
  }
}

Токены берутся из ответа провайдера; неизвестные значения — null. Содержимое сообщений не сохраняется в истории SERTAL. Заголовок X-Request-Id помогает найти запрос.

Ошибки

JSON
{
  "error": {
    "message": "API-ключ отсутствует или недействителен",
    "type": "authentication_error",
    "code": "invalid_api_key",
    "request_id": "<id>"
  }
}
HTTPПричинаДействие
400invalid_requestПроверьте JSON и параметры
401invalid_api_keyПроверьте ключ и отзыв
404model_not_foundСкопируйте ID из каталога
413request_too_largeТело запроса не более 64 KiB
429rate_limit_exceeded / access_quota_exhaustedПодождите Retry-After; при исчерпанном пакете обратитесь к продавцу
502provider_error / invalid_provider_response / output_budget_exhaustedПроверьте доступ и max_tokens; запрос мог быть оплачен провайдеру
503model_unavailableПодключите провайдера
504provider_timeoutОтвет не получен за 30 секунд

Детали ошибок провайдеров и секреты не передаются клиенту. Автоматических повторов нет: повтор может привести к повторному расходу у провайдера.

Примеры

JavaScript · сервер
const response = await fetch(
  "http://127.0.0.1:3000/v1/chat/completions",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer " + process.env.SERTAL_API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "<ID из каталога>",
      messages: [{role: "user", content: "Привет!"}],
      max_tokens: 256
    })
  }
);
const data = await response.json();
if (!response.ok) throw new Error(data.error.message);
console.log(data.choices[0].message.content);
Python · requests
import os, requests

response = requests.post(
    "http://127.0.0.1:3000/v1/chat/completions",
    headers={"Authorization": "Bearer " + os.environ["SERTAL_API_KEY"]},
    json={
        "model": "<ID из каталога>",
        "messages": [{"role": "user", "content": "Привет!"}],
        "max_tokens": 256
    },
    timeout=40,
)
response.raise_for_status()
print(response.json()["choices"][0]["message"]["content"])

Границы тестовой версии

По умолчанию 20 запросов в минуту и 100 в сутки на пользователя, суммарно по всем ключам и Playground. Лимиты хранятся в базе. Фактические значения показаны в Dashboard. Каждый принятый авторизованный запрос, включая ошибочный, расходует лимит.

Только текст; без tools, изображений, streaming и встроенных платежей. Ключ выдаётся продавцом вручную после проверки заказа на FunPay; сайт не проверяет оплату автоматически. Доступность моделей зависит от серверной конфигурации SERTAL.