Решения через API

Один POST тем же ключом, что и чат: состояние и вопросы на вход, вероятности на выход. Здесь собраны типы вопросов, формат ответа, примеры на трёх языках и правила списания.

Эндпоинт и авторизация

Модель решений не пишет текст: вы передаёте состояние и вопросы, она возвращает откалиброванные вероятности по каждому вопросу. Работает тем же ключом, что и чат.

МетодПутьНазначение
POSThttps://api.tokenator.top/v1/decisionsОтветы на вопросы о переданном состоянии.
GEThttps://api.tokenator.top/v1/decisions/modelsМодели решений, доступные ключу.

Ключ передаётся заголовком Authorization: Bearer sk-your-tokenator-key. Для клиентов, настроенных под OpenRouter, тот же обработчик отвечает на /v1/alpha/decisions и /v1/api/alpha/decisions.

Первый запрос

Три вопроса о тикете поддержки
curl https://api.tokenator.top/v1/decisions \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "После нажатия «Оплатить» страница оформления заказа становится пустой. Пробовал в двух браузерах.",
    "questions": {
      "is_bug": {
        "type": "noul",
        "instructions": "Сообщает ли клиент о дефекте в продукте?",
        "criteria": {
          "true": "Клиент описывает сломанное или неожиданное поведение продукта.",
          "false": "Клиент задаёт вопрос или просит новую функцию."
        }
      },
      "team": {
        "type": "choice",
        "instructions": "Какая команда должна взять тикет?",
        "criteria": {
          "account": "Вход, права доступа, профиль.",
          "frontend": "Отрисовка, вёрстка, совместимость с браузерами.",
          "payments": "Оформление заказа, биллинг, приём платежей."
        }
      },
      "urgency": {
        "type": "score",
        "instructions": "Насколько срочен тикет?",
        "criteria": [
          "Подождёт до следующего релиза",
          "Исправить на этой неделе",
          "Блокирует выручку прямо сейчас"
        ]
      }
    }
  }'
Ответ
{
  "id": "dec-6f1c9a2e4b7d0c3a5e8f91b2",
  "model": "jev-latest",
  "answers": {
    "is_bug": { "type": "noul", "noul": 0.96 },
    "team": {
      "type": "choice",
      "choice": "payments",
      "confidence": 0.75,
      "probabilities": { "account": 0, "frontend": 0.16, "payments": 0.84 }
    },
    "urgency": {
      "type": "score",
      "score": 1.99,
      "confidence": 0.99,
      "legend": {
        "0": "Подождёт до следующего релиза",
        "1": "Исправить на этой неделе",
        "2": "Блокирует выручку прямо сейчас"
      },
      "probabilities": { "0": 0, "1": 0.01, "2": 0.99 }
    }
  },
  "usage": { "input_tokens": 476, "output_tokens": 70 }
}

Ответ всегда этой формы: свой id, имя модели Tokenator, answers по ключам ваших вопросов и usage. Имя провайдера, его идентификатор запроса и стоимость до клиента не доходят.

Три типа вопросов

ТипЧто передать в criteriaЧто придёт в ответе
noulДа или нет: объект с описаниями true и false, оба обязательны.noul — вероятность того, что верно true, от 0 до 1.
choiceОдин вариант из нескольких: объект «ключ варианта → описание», хотя бы один вариант.choice — самый вероятный вариант, confidence — уверенность в нём, probabilities — вероятность каждого варианта.
scoreУровень на упорядоченной шкале: массив уровней от низшего к высшему, пустых уровней быть не может.score — ожидаемый уровень как дробный индекс от 0, confidence, legend — индекс → текст уровня, probabilities — вероятность каждого уровня.

Какие модели отвечают на вопросы

МодельAPI IDКонтекстМножитель
Jev Latestjev-latest32K токенов1.1×
Span-01span-0132K токенов1×
Solar Decidesolar-decide524.3K токенов1.1×
D1d165.5K токенов1×
GPT-6 Luna Decisionsgpt-6-luna-decisions1.05M токенов1.1×

Параметры запроса

ПолеТипЧто делает
modelstring, обязательноеAPI ID модели из каталога. Модель, которая не отмечена как модель решений, отклоняется с кодом 400 — запрос до провайдера не доходит.
statestring, объект или массив, обязательноеТо, о чём задаются вопросы: текст обращения, запись из базы, история диалога.
questionsобъект, обязательноеВопросы по ключам, от 1 до 256. У каждого — type, instructions (сам вопрос) и criteria. Ключ вопроса вернётся ключом ответа.
provider, user, session_id, traceнеобязательныеПринимаются для совместимости с клиентами OpenRouter, но дальше Tokenator не уходят: провайдера выбирает маршрутизация Tokenator.

Из кода

В OpenAI SDK отдельного метода для решений нет, поэтому это обычный POST с JSON.

Python — requests
import requests

result = requests.post(
    "https://api.tokenator.top/v1/decisions",
    headers={"Authorization": "Bearer sk-your-tokenator-key"},
    json={
        "model": "jev-latest",
        "state": "После нажатия «Оплатить» страница оформления заказа становится пустой. Пробовал в двух браузерах.",
        "questions": {
            "is_bug": {
                "type": "noul",
                "instructions": "Сообщает ли клиент о дефекте в продукте?",
                "criteria": {"true": "Клиент описывает сломанное или неожиданное поведение продукта.", "false": "Клиент задаёт вопрос или просит новую функцию."},
            },
        },
    },
).json()

print(result["answers"]["is_bug"]["noul"])
Node.js — fetch
const res = await fetch("https://api.tokenator.top/v1/decisions", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-your-tokenator-key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "jev-latest",
    state: "После нажатия «Оплатить» страница оформления заказа становится пустой. Пробовал в двух браузерах.",
    questions: {
      team: {
        type: "choice",
        instructions: "Какая команда должна взять тикет?",
        criteria: {
          account: "Вход, права доступа, профиль.",
          frontend: "Отрисовка, вёрстка, совместимость с браузерами.",
          payments: "Оформление заказа, биллинг, приём платежей.",
        },
      },
    },
  }),
})

const { answers } = await res.json()
console.log(answers.team.choice, answers.team.probabilities)

Как списываются решения

Платный только вход, как и у самих провайдеров этих моделей. Считается input_tokens из ответа провайдера, умножается на множитель модели и списывается с лимита ключа. output_tokens показывается в ответе, но не списывается. Если провайдер не прислал счётчик, списывается оценка по размеру запроса.

Расход виден в дашборде ключа вместе с чатом, а остаток — в /v1/tokens.

Коды ошибок

КодКогда приходитЧто делать
400 model is requiredВ теле нет поля model или тело не JSON.Проверьте Content-Type: application/json и непустой model.
404 model_not_foundМодели с таким именем нет в каталоге — чаще всего это опечатка.Сверьте ID с таблицей выше или со списком /v1/decisions/models.
400 is not a decision modelМодель есть в каталоге, но это не модель решений.Возьмите модель из таблицы выше. Обычные чат-модели работают на /v1/chat/completions.
400 needs instructions, has an unknown typeЗапрос не прошёл проверку: нет состояния или вопросов, у вопроса нет инструкции или критериев, неизвестный тип. Текст ошибки называет ключ вопроса.Исправьте названный вопрос. Такой запрос до провайдера не доходит и ничего не стоит.
401Ключ не передан, просрочен или отозван.Проверьте заголовок Authorization: Bearer и срок ключа в личном кабинете.
502 Request errorОшибка на стороне провайдера. Её текст клиенту не пересылается.Повторите запрос — Tokenator сам переключается на следующего провайдера. Если ошибка стабильна, напишите в поддержку.
503 Model temporarily unavailableНи один провайдер модели не ответил.Повторите позже или возьмите другую модель из таблицы.

Частые вопросы

Чем модель решений отличается от чат-модели?

Она не пишет текст, а оценивает: на вход — состояние и вопросы, на выход — вероятность по каждому. Ответ всегда одной формы, его не нужно разбирать из текста, и он заметно дешевле, чем просить чат-модель ответить JSON: платный только вход.

Почему модель отвечает 400 на /v1/decisions?

Эндпоинт обслуживает только модели, отмеченные как модели решений. Список — в таблице выше и в каталоге под фильтром «Решения». Запрос с обычной чат-моделью отклоняется до обращения к провайдеру, поэтому такая ошибка ничего не стоит.

Можно ли обратиться к модели решений из чата?

Нет. На /v1/chat/completions, /v1/responses и /v1/messages такая модель отвечает 400 с указанием нужного пути. В общем списке /v1/models её тоже нет, как и у OpenRouter: она видна по /v1/models?output_modalities=decisions и /v1/decisions/models.

Сколько вопросов можно задать за раз?

До 256 в одном запросе. Вместе с состоянием они должны поместиться в контекст модели — он написан в таблице выше и на странице модели.

Хранит ли Tokenator то, что я отправил?

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