Decisions API — новый endpoint OpenAI, который получает контекст (текст или изображения) и вопросы с заранее заданными вариантами ответа, а возвращает один вариант из вашего списка. OpenAI описывает три задачи: классифицировать входные данные, маршрутизировать запросы и выбирать следующее действие агента. Работает он на модели GPT-6 Luna (анонс DevDay 2026 на форуме OpenAI).
По состоянию на 6 октября 2026 года пользоваться им могут только клиенты, которых OpenAI включила в ограниченное превью. Документации, схемы запроса, цены и лимитов нет. С обычным ключом ждать не обязательно: то же ограниченное решение собирается на общедоступной GPT-6 Luna. Строгая JSON-схема с перечислением (enum) разрешает модели вернуть только значение из вашего списка, а при 400 входных и 15 выходных токенах миллион таких решений стоит около $47,50. Спрячьте вызов за своей функцией, и переход на Decisions API после открытия затронет один файл. Из России OpenAI API напрямую не работает — что делать в этом случае, разобрано ниже.
Что такое OpenAI Decisions API и для каких задач он нужен
Формулировка OpenAI: Decisions API «enables real-time decision-making by focusing Luna's intelligence on a specific set of user-defined questions with finite pre-defined answers». Иначе говоря, модель не пишет текст, а выбирает: вы задаёте вопрос и полный список допустимых ответов, присылаете контекст и получаете выбранный вариант, по которому ветвится ваш код.
Типичные задачи для такого вызова:
- маршрутизация запросов — в какую очередь отправить обращение: оплата, доставка, техподдержка, другое;
- классификация и модерация контента — спам или нет, нарушает ли сообщение правило, к какому продукту относится отзыв;
- следующее действие агента — найти заказ, задать уточняющий вопрос, ответить или передать человеку.
Контекстом может быть изображение, поэтому в те же задачи попадают скриншоты ошибок и фотографии повреждённого товара. Зачем отдельный endpoint, если выбирать из списка умеет и обычная модель? OpenAI делает ставку на скорость: сотрудник компании Тибо Соттьо (Thibault Sottiaux) написал, что API «tuned to be able to make decisions in less than a few hundreds of milliseconds end to end» (цитата приведена в разборе eesel). Это заявление, а не опубликованный замер.
Не путайте Decisions API с платформой Decisions (decisions.com) и сайтом decisionapi.net — к OpenAI они отношения не имеют. Та же ли это Luna, что доступна в API, или специально настроенный вариант, OpenAI в документации не уточняет.
Что OpenAI опубликовала на 6 октября 2026 года, а чего нет
Анонс 29 сентября обещал широкий запуск «in the coming days», а доступ к превью, по словам аккаунта OpenAI Developers, получили «selected API customers for testing». Через неделю ни широкого запуска, ни документации нет: в индексе документации OpenAI для разработчиков, в журнале изменений API и на странице цен Decisions API не упоминается.
| Что нужно разработчику | Состояние на 6 октября 2026 года |
|---|---|
| Доступ | Ограниченное превью, только выбранные клиенты; дата широкого запуска не названа |
| Схема запроса и ответа, метод в SDK | Не опубликованы |
| ID модели | Не опубликован; известно только, что внутри Luna |
| Цена и единица тарификации (токены, вызов или вопрос) | Не опубликованы |
| Лимиты, число вопросов и вариантов в одном вызове, размер изображений | Не опубликованы |
| Скорость | Заявление сотрудника OpenAI: менее нескольких сотен миллисекунд от запроса до ответа. Цифры «150 мс» и «в 10 раз быстрее Luna» встречаются в прессе и на слайде презентации, но не в документации |
| Оценка уверенности в ответе | Сведения расходятся: The New Stack пишет, что она есть, а в материалах OpenAI такое поле не упоминается. Пока его не описали, проектируйте так, будто его нет |
| Хранение данных и регионы | Не опубликованы |
Отсюда практический вывод: любой пример «тела запроса Decisions API» сейчас — догадка, потому что OpenAI контракт не публиковала. Не стройте под него код и не закладывайте пороги на поле уверенности, которое никто не описал.
Ошибка 403 «Decision API is not enabled for this user»
Если вы попробовали вызвать endpoint наугад и получили 403, это ожидаемо. Автор блога eesel 1 и 2 октября отправлял POST https://api.openai.com/v1/decisions с обычным ключом и оба раза получал HTTP 403:
{
"error": {
"message": "Decision API is not enabled for this user.",
"type": "invalid_request_error",
"param": null,
"code": null
}
}Соседние пути вроде /v1/decisions/create и /v1/beta/decisions в том же тесте возвращали 404. Автор разбора eesel делает вывод, что маршрут существует, но закрыт флагом доступа, а 403 приходит даже на пустое тело запроса, так что о формате запроса ошибка ничего не говорит.
Что с этим делать:
- 403 с этим текстом значит, что превью для вашего аккаунта не включено. Публичного способа включить его OpenAI не описала, а повтор запроса на следующий день в тесте eesel дал тот же ответ.
- 404 значит, что путь неверный.
- В коде не повторяйте такой вызов в цикле: обрабатывайте 403 как «функции нет» и уходите в рабочую реализацию на Luna.
Путь и текст ошибки могут измениться при широком запуске: это наблюдение одного аккаунта за два дня, а не документированное поведение.
Ждать Decisions API или запускать на Luna: правило выбора
Для большинства задач ответ — запускать сейчас на Luna, а Decisions API подключить позже как вторую реализацию той же функции. Ждать имеет смысл только тогда, когда без заявленной скорости продукт не работает.
| Ваша ситуация | Что делать | Что изменит решение |
|---|---|---|
| Фоновая разметка: обращения, модерация очереди, теги | Запускать на Luna. Задержка в секунду-полторы здесь не видна | Цена Decisions API, если она окажется заметно ниже |
| Переразметка архива, ответ не нужен сразу | Luna через Batch: асинхронно и за полцены | — |
| Живой чат: решение до первого ответа бота | Запускать на Luna и мерить задержку на своём трафике | Если пауза мешает, ждать Decisions API с его заявленной скоростью |
| Агент делает десятки мелких выборов на задачу | Начать на Luna; при 20 выборах по 1,46 с ожидание — около 29 с на задачу | Скорость Decisions API на вашем трафике после открытия |
| Нужны вероятности, чтобы автоматизировать по порогу | Luna со схемой их не даёт, у Decisions API такое поле не описано: закладывайте вариант «не уверен» и проверку человеком | Документированное поле уверенности |
| Вы уже в превью | Гонять Decisions API параллельно с Luna на теневом трафике, не переводя всё сразу | Изменения контракта до широкого запуска |
Цифра 1,46 с — медиана из теста eesel (Luna без рассуждений, замер с ноутбука, включая сеть); на вашем трафике она будет другой.
Как сделать то же на GPT-6 Luna: строгая JSON-схема с enum
На странице GPT-6 Luna указано всё, что нужно для такого вызова: вход текстом и изображениями, Structured Outputs, reasoning.effort от none до max, поддержка Responses API, Chat Completions и Batch. Structured Outputs с strict: true заставляет ответ соответствовать JSON-схеме; если единственное поле схемы — enum, модель может вернуть только значение из вашего списка. Требования руководства: все поля перечислены в required, в каждом объекте additionalProperties: false, во всей схеме не больше 1 000 значений enum.

Функция decide() на Responses API
Полный скрипт для Python 3.10+ и пакета openai; ключ читается из переменной окружения OPENAI_API_KEY. Вариант unsure добавляется к каждому списку автоматически.
import json
import logging
import openai
from openai import OpenAI
client = OpenAI()
UNSURE = "unsure"
def decide(question: str, options: list[str], text: str,
image_url: str | None = None) -> str:
"""Возвращает один вариант из options или UNSURE."""
allowed = options + [UNSURE]
schema = {
"type": "object",
"properties": {"answer": {"type": "string", "enum": allowed}},
"required": ["answer"],
"additionalProperties": False,
}
content = [{"type": "input_text", "text": text}]
if image_url:
content.append({"type": "input_image", "image_url": image_url})
try:
resp = client.responses.create(
model="gpt-6-luna",
reasoning={"effort": "none"},
input=[
{"role": "developer",
"content": f"{question} Если данных не хватает или ни один "
f"вариант не подходит, ответь {UNSURE}."},
{"role": "user", "content": content},
],
text={"format": {"type": "json_schema", "name": "decision",
"strict": True, "schema": schema}},
)
except openai.APIError as err:
logging.warning("decide: ошибка API: %s", err)
return UNSURE
if resp.status != "completed": # например, incomplete
return UNSURE
try:
answer = json.loads(resp.output_text)["answer"]
except (ValueError, KeyError, TypeError):
return UNSURE # отказ модели или пустой ответ
return answer if answer in allowed else UNSURE
if __name__ == "__main__":
print(decide(
"В какую очередь отправить обращение?",
["billing", "shipping", "technical", "other"],
"С меня дважды списали деньги за заказ №4471",
))Что здесь важно:
reasoning={"effort": "none"}отключает рассуждения: так ответ приходит быстрее и не тратит токены на рассуждения. Если точность на ваших примерах не устраивает, попробуйтеlowи сравните задержку и цену.- Инструкция про
unsureнужна не для красоты. Руководство Structured Outputs предупреждает: на входе, который не подходит под схему, модель всё равно старается ей соответствовать и может выдумать ответ. Без отдельного варианта ей некуда деться. - Отказ модели, обрезанный ответ и ошибку API функция тоже превращает в
unsure, так что вызывающему коду достаточно обработать один запасной исход. - Проверка
answer in allowedдублирует схему. Она почти ничего не стоит и спасёт, если вызов однажды пойдёт через сервис, который схему не соблюдает.
Похожую форму запроса (Luna, effort: none, схема с одним полем enum) eesel опубликовала вместе со своим тестом: на обращение о двойном списании модель трижды вернула очередь billing.
Скриншоты и фото в том же вызове
Изображение передаётся вторым элементом content с типом input_image: в image_url подойдёт ссылка https://… или data URL вида data:image/png;base64,…. Так тот же decide() решает, к какой очереди относится скриншот ошибки или можно ли принять возврат по фото. Картинка добавляет входные токены, и их число зависит от размера изображения, поэтому стоимость таких решений считайте по фактическому расходу в первых вызовах.
Один интерфейс, чтобы потом подключить Decisions API
Сигнатура decide(question, options, text, image_url) и есть ваш контракт: остальной код знает только её. Когда Decisions API откроется и OpenAI опубликует схему, вы напишете вторую реализацию с той же сигнатурой и переключите их флагом. Чтобы потом было с чем сравнивать, уже сейчас пишите в лог вопрос, версию инструкции, список вариантов, ответ, задержку и итоговое решение человека, если оно было.
Строгая схема гарантирует формат, а не правильный ответ
Строгая схема отвечает за одно: в ответе будет значение из списка. Правильность она не гарантирует — руководство OpenAI прямо пишет, что Structured Outputs «can still contain mistakes».
Насколько велика разница между задачами, показывает тот же тест eesel: 20 обращений, по два прогона на каждую настройку, 160 вызовов. Очередь Luna выбрала верно в 40 случаях из 40, а на вопросе «можно ли ответить автоматически» без рассуждений — в 33 из 40. Выборка маленькая, и тест проводил поставщик, который продаёт собственный продукт для поддержки, но направление понятно: выбрать отдел легко, понять, когда не действовать, — трудно.
Поэтому разделяйте решения по цене ошибки:
- ошибка дешёвая (не та очередь, не тот тег): действуйте по ответу сразу, ошибки найдутся при разборе;
- ошибка дорогая — отправка сообщения клиенту, списание или возврат денег, изменение или удаление данных: автоматически действуйте только когда ответ не
unsureи проходит ваше правило (белый список разрешённых действий), всё остальное отправляйте человеку.
Прежде чем включать автоматизацию дорогих действий, прогоните модель в теневом режиме: она принимает решения, но действуют люди, а вы сравниваете ответы с их решениями, пока не увидите, где она ошибается.
Сколько стоят 1 000 и 1 000 000 решений на GPT-6 Luna
Цена Decisions API неизвестна, поэтому ориентиром служат ставки самой Luna в режиме Standard: $0,10 за 1 млн входных токенов и $0,50 за 1 млн выходных (страница модели). Batch и Flex стоят 50 % от Standard. При effort: none токенов рассуждений нет, и стоимость одного решения считается так:
цена вызова = входные токены × $0,10 / 1 000 000 + выходные токены × $0,50 / 1 000 000
| Допущение на один вызов | Один вызов | 1 000 решений | 1 000 000 решений |
|---|---|---|---|
| 400 входных + 15 выходных, Standard | $0,0000475 | $0,0475 | $47,50 |
| 400 входных + 15 выходных, Batch | $0,00002375 | $0,02375 | $23,75 |
| 800 входных + 15 выходных, Standard | $0,0000875 | $0,0875 | $87,50 |
Проверка первой строки: 400 × 0,10 / 1 000 000 = $0,00004 плюс 15 × 0,50 / 1 000 000 = $0,0000075, итого $0,0000475. Числа токенов здесь — допущения для примера, а не замер: подставьте свои из поля usage в ответе. Короткая инструкция и короткое обращение дают меньше: в тесте eesel запрос на 60 входных и 12 выходных токенов обошёлся в $0,000012. Главное, что раздувает счёт, — длинная инструкция с примерами, история переписки и изображения. Для повторяющейся длинной инструкции работает кэш: кэшированный вход у Luna стоит $0,01 за 1 млн токенов (запись в кэш — $0,125).
Batch подходит только для разметки, которую можно ждать: он асинхронный. Для живых решений остаётся Standard.
Пропускную способность ограничивает уровень аккаунта: на Tier 1 у Luna 500 запросов в минуту, то есть не больше 500 × 60 × 24 = 720 000 решений в сутки при равномерной нагрузке. На старших уровнях лимит выше.
Как Luna соотносится по цене со старшей моделью Sol, если простой классификации окажется мало, разобрано в статье «GPT-6 Luna или Sol: сколько стоят и когда Sol окупается».
Из России: OpenAI API напрямую недоступен
В списке стран, где работает OpenAI API, России нет, а OpenAI предупреждает: «Accessing or offering access to our services outside of the countries and territories listed below may result in your account being blocked or suspended». Значит, вопрос, попадёт ли ваш аккаунт в превью Decisions API, для российской компании не главный: сначала нужен законный способ работать с моделями OpenAI. Обходить это ограничение чужими аккаунтами или подменой страны не стоит: OpenAI прямо пишет о блокировке.
Сам Decisions API через сторонние шлюзы получить нельзя: это закрытый endpoint OpenAI, и шлюзы его не маршрутизируют. Решение на Luna при этом переносится. Например, laozhang.ai даёт доступ к gpt-6-luna через OpenAI-совместимый API по тем же ставкам: на 6 октября 2026 года это $0,10 за вход и $0,50 за выход на 1 млн токенов (таблица моделей laozhang.ai). Decisions API там нет. Документация сервиса описывает запросы в формате Chat Completions, поэтому там удобнее вариант со схемой в response_format:
from openai import OpenAI
client = OpenAI(base_url="https://api.laozhang.ai/v1", api_key="ВАШ_КЛЮЧ")
schema = {
"type": "object",
"properties": {"answer": {"type": "string",
"enum": ["billing", "shipping", "technical",
"other", "unsure"]}},
"required": ["answer"],
"additionalProperties": False,
}
resp = client.chat.completions.create(
model="gpt-6-luna",
reasoning_effort="none",
messages=[
{"role": "system",
"content": "В какую очередь отправить обращение? "
"Если ни одна не подходит, ответь unsure."},
{"role": "user", "content": "С меня дважды списали деньги за заказ №4471"},
],
response_format={"type": "json_schema",
"json_schema": {"name": "decision", "strict": True,
"schema": schema}},
)
print(resp.choices[0].message.content)Передаёт ли шлюз строгую схему и reasoning_effort до модели без изменений, нужно проверить одним тестовым вызовом до запуска: ответ должен быть JSON с одним полем answer и значением из списка, а на постороннее сообщение («какая погода завтра?») — unsure. Проверку answer in allowed в своём коде оставьте в любом случае. Другие варианты доступа, включая российские модели GigaChat и YandexGPT, собраны в руководстве «Как использовать OpenAI API в России: прокси, GigaChat, YandexGPT и шлюзы».
Когда переходить с Luna на Decisions API: пять сигналов

- На developers.openai.com появилась страница Decisions API со схемой запроса и ответа. Без неё вторую реализацию
decide()писать не по чему. - Ваш ключ перестал получать 403 на тестовый вызов. До этого все остальные сигналы не имеют значения.
- Опубликована цена и единица тарификации. Пересчитайте стоимость одного решения и сравните с вашей цифрой на Luna из таблицы выше.
- Описано поле уверенности. Только тогда можно строить автоматизацию по порогу; до этого остаётся вариант
unsure. - На теневом трафике выигрыш виден. Пустите одни и те же входы через обе реализации: точность не ниже, а выигрыш в задержке приходится туда, где он вам нужен, — живой чат или агент.
Переключайтесь, когда выполнены первый, второй и пятый пункты; третий и четвёртый меняют экономику и устройство порогов, но не саму возможность перехода.
Частые вопросы о Decisions API
Сколько стоит OpenAI Decisions API?
На 6 октября 2026 года цена не опубликована, неизвестна и единица тарификации — токены, вызов или вопрос. Ближайший ориентир — ставки GPT-6 Luna: $0,10 за 1 млн входных и $0,50 за 1 млн выходных токенов. Это цена Luna, а не Decisions API: OpenAI может назначить endpoint другую.
Когда Decisions API откроют для всех?
Дату OpenAI не назвала. 29 сентября было сказано «in the coming days», но на 6 октября доступ всё ещё только у выбранных клиентов, а в документации endpoint не появился.
Чем Decisions API отличается от Jev?
Jev — отдельная модель для решений от компании TypeSafe, вышла 15 сентября 2026 года. Она открыта всем, принимает только текст и возвращает вероятность для каждого варианта (сравнение Firecrawl). Decisions API принимает и изображения, но цены, документации и описанного поля уверенности у него пока нет.
Есть ли Decisions API в ChatGPT?
Это endpoint OpenAI API для разработчиков: в анонсе DevDay он стоит в разделе моделей и API, а о функции в интерфейсе ChatGPT OpenAI не сообщала. Пользоваться им можно только из кода, и то при доступе к превью.



