Создавайте с SERTAL.
Один endpoint для текстовых диалогов с подключёнными моделями.
- Получите ключ SERTAL от продавца после покупки на FunPay.
- Войдите с этим ключом. Регистрация, email и пароль не требуются.
- В Models скопируйте ID настроенной модели.
- Отправьте запрос или проверьте модель в Playground.
Локальный base URL: http://127.0.0.1:3000. В облаке используйте фактический HTTPS-адрес вашей установки.
Codex CLI и Claude Code
Одна команда для Windows: проверка купленного ключа SERTAL, установка недостающих CLI и отдельные профили подключения. Запустите её в PowerShell и вставьте свой ключ в скрытое поле.
Загрузка команды подключения…
После настройки: sertal-codex или sertal-claude. Если команда не найдена, откройте новый терминал. Ключ хранится с шифрованием Windows; прежние профили CLI сохраняются.
Авторизация
Передавайте ключ SERTAL в заголовке Authorization: Bearer sk-sertal-…. Этот же приобретённый ключ используется для входа в кабинет. Cookie не заменяет ключ для публичного API. Ключи провайдеров хранятся только на сервере.
Authorization: Bearer <SERTAL_API_KEY>
Content-Type: application/jsonСоздать chat completion
| Поле | Тип | Описание |
|---|---|---|
| model | string | Обязательный ID из GET /v1/models |
| messages | array | 1–50 сообщений; role: system, user или assistant; content: текст до 16 000 символов. Нужно хотя бы одно user-сообщение. |
| max_tokens | integer | 1–4096, по умолчанию 512 |
| temperature | number | 0–1, необязательно |
| stream | boolean | Только false; true возвращает 400 |
Неизвестные поля отклоняются. GET /v1/models требует Bearer-ключ; перед вызовом проверяйте поле status. Запланированные модели не принимают запросы.
Лимит купленного пакета и расход видны в API Keys. Попытка списывается перед обращением к провайдеру, включая его ошибки и таймауты. Некорректный JSON и неподключённая модель пакет не расходуют. У Kimi рассуждения также входят в выходные токены.
Единый ответ
{
"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 помогает найти запрос.
Ошибки
{
"error": {
"message": "API-ключ отсутствует или недействителен",
"type": "authentication_error",
"code": "invalid_api_key",
"request_id": "<id>"
}
}| HTTP | Причина | Действие |
|---|---|---|
| 400 | invalid_request | Проверьте JSON и параметры |
| 401 | invalid_api_key | Проверьте ключ и отзыв |
| 404 | model_not_found | Скопируйте ID из каталога |
| 413 | request_too_large | Тело запроса не более 64 KiB |
| 429 | rate_limit_exceeded / access_quota_exhausted | Подождите Retry-After; при исчерпанном пакете обратитесь к продавцу |
| 502 | provider_error / invalid_provider_response / output_budget_exhausted | Проверьте доступ и max_tokens; запрос мог быть оплачен провайдеру |
| 503 | model_unavailable | Подключите провайдера |
| 504 | provider_timeout | Ответ не получен за 30 секунд |
Детали ошибок провайдеров и секреты не передаются клиенту. Автоматических повторов нет: повтор может привести к повторному расходу у провайдера.
Примеры
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);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.