API для разработчиков

OpenAI-совместимый API: подключите модели Ketner к Cursor, Continue или своему коду. Подойдёт любая библиотека, которая умеет менять базовый адрес OpenAI.

API-ключи

Ключ действует от имени вашего аккаунта и тратит ваши кредиты.

Войдите, чтобы создавать ключи и управлять ими.

Войти
Не публикуйте ключ в репозитории и не вставляйте его в код фронтенда — храните в переменной окружения, например KETNER_API_KEY.

Адрес API

https://ketner.org/v1

Укажите его как base URL в клиенте OpenAI. Авторизация: заголовок Authorization: Bearer и ваш ключ.

Модели

  • auto
  • ketner-mini
  • ketner-pro
  • claude-haiku-5.5
  • deepseek-v4.1-flash
  • minimax-m3.1-flash
  • glm-5.3-flash
  • qwen3.8-flash
  • gpt-5.6-luna-pro
  • qwen3.8-27b
  • gemini-3.7-flash
  • gpt-6.1-terra
  • glm-5.3
  • qwen3.8-max
  • kimi-k3.1
  • gpt-6.1-sol
  • claude-opus-5.5
  • claude-sonnet-5.5
  • gpt-6-astra
  • grok-4.7
  • gemini-4-argon
  • gpt-5.6-sol
  • gpt-5.6-terra

Передайте id в поле model. auto выбирает модель сам.

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

Один запрос к чату на cURL, Python или JavaScript.

curl https://ketner.org/v1/chat/completions \
  -H "Authorization: Bearer ketner_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto",
    "messages": [{"role": "user", "content": "Напиши функцию на Python, которая проверяет, что строка — палиндром"}]
  }'

Подключение к редактору

Cursor и Continue работают с любым OpenAI-совместимым адресом.

Cursor

  1. Откройте Settings → Models.
  2. В разделе OpenAI API Key вставьте ваш ключ и включите Override OpenAI Base URL.
  3. В поле адреса укажите https://ketner.org/v1.
  4. Добавьте модель по id, например ketner-pro или claude-sonnet-5.5, и нажмите Verify.

Continue (VS Code, JetBrains)

Добавьте модели в ~/.continue/config.yaml:

config.yaml
models:
  - name: Ketner Pro
    provider: openai
    model: ketner-pro
    apiBase: https://ketner.org/v1
    apiKey: ketner_sk_...
  - name: Claude Sonnet 5.5 (Ketner)
    provider: openai
    model: claude-sonnet-5.5
    apiBase: https://ketner.org/v1
    apiKey: ketner_sk_...
POST

/v1/chat/completions

Чат и инструменты

Формат OpenAI Chat Completions: обычные ответы, поток (SSE) и вызов функций (tools). Цикл «модель → инструмент → результат» выполняет ваш клиент.

Параметры тела

ПараметрТипОписание
modelобязательный
string

id модели из списка или auto

messagesобязательный
array

Сообщения с ролями system, user, assistant и tool

tools
array

Функции, которые модель может вызвать

tool_choice
string | object

auto, none, required или конкретная функция

По умолчанию: auto

stream
boolean

Ответ потоком (SSE), в конце data: [DONE]

По умолчанию: false

max_tokens
integer

Предельная длина ответа

temperature
number

Температура, от 0 до 2

top_p
number

Nucleus sampling, от 0 до 1

stop
string | array

До 4 строк, на которых модель остановится

seed
integer

Зерно для повторяемых ответов (если модель умеет)

frequency_penalty, presence_penalty
number

Штрафы за повторы, от −2 до 2

По умолчанию: 0

response_format
object

json_object или json_schema: ответ строго в JSON

stream_options
object

{"include_usage": true} — отдельный кусок с расходом перед [DONE]

Пример с вызовом функции

curl https://ketner.org/v1/chat/completions \
  -H "Authorization: Bearer ketner_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ketner-pro",
    "messages": [{"role": "user", "content": "Прочитай src/app.ts и найди ошибку"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "read_file",
        "description": "Прочитать файл проекта",
        "parameters": {
          "type": "object",
          "properties": {"path": {"type": "string"}},
          "required": ["path"]
        }
      }
    }]
  }'

Ответ в JSON

response_format с json_schema заставляет модель отвечать по вашей схеме, json_object — любым корректным JSON. Удобно для извлечения данных и интеграций.

import json, os
from openai import OpenAI

client = OpenAI(base_url="https://ketner.org/v1", api_key=os.environ["KETNER_API_KEY"])

reply = client.chat.completions.create(
    model="ketner-pro",
    messages=[{"role": "user", "content": "Отзыв: «Доставили быстро, но коробка мятая»"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "review",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "sentiment": {"type": "string", "enum": ["positive", "neutral", "negative"]},
                    "issues": {"type": "array", "items": {"type": "string"}},
                },
                "required": ["sentiment", "issues"],
                "additionalProperties": False,
            },
        },
    },
)
print(json.loads(reply.choices[0].message.content))

Ошибки

Ошибки приходят в формате OpenAI: {"error": {"message", "type", "code"}}. 401 — неверный или отозванный ключ, 403 — API закрыт: нужны купленные кредиты, 429 — слишком много запросов, повторите через Retry-After секунд. У каждого ответа есть заголовок X-Request-Id — назовите его поддержке, если что-то пошло не так.
GET

/v1/models

Список моделей

Возвращает модели в формате OpenAI. Поле available показывает, открыт ли вашему аккаунту API: без купленных кредитов он закрыт.

cURL
curl https://ketner.org/v1/models \
  -H "Authorization: Bearer ketner_sk_..."