A API OpenAI Decisions é um endpoint POST /v1/decisions, rodando no GPT-6 Luna, que recebe texto ou imagens mais uma lista de perguntas e retorna respostas tipadas em vez de prosa: uma probabilidade predicate, uma choice com probabilidades por opção, ou um score sobre níveis ordenados. A entrada custa $0.10 por 1M de tokens, sem cobranças de saída, leitura ou escrita de cache, e o endpoint está em beta público desde 06/10/2026, com a OpenAI afirmando que a GA (disponibilidade geral) é esperada “nas próximas semanas”.
Este post aborda o que o endpoint retorna, quanto custa, onde se encaixa ao lado de Structured Outputs e function calling, e como testá-lo. Para o passo a passo com curl, Python e JavaScript, leia como usar a API OpenAI Decisions a seguir; se você já usa a API Responses, a comparação entre Decisions e Responses mostra a mesma tarefa realizada de ambas as formas. Ao longo do texto, usaremos o Apidog para armazenar a chave, salvar requisições e fazer asserções no array answers, para que uma mudança no comportamento do modelo falhe em um teste em vez de direcionar incorretamente um ticket.
Anatomia de uma requisição e resposta Decisions
Três campos de requisição, três campos de resposta. Sem id, sem texto gerado, nada para fazer parse.
| Parte | Campo | O que ele contém |
|---|---|---|
| Requisição | model |
gpt-6-luna, o único modelo disponível hoje |
| Requisição | input |
Uma string, ou um array de mensagens de usuário cujo conteúdo mistura partes de input_text e input_image |
| Requisição | questions |
Um array de perguntas, cada uma com um type, instructions obrigatórias e um name opcional |
| Requisição | safety_identifier |
ID opcional do usuário final, até 128 caracteres |
| Resposta | model |
Retorna gpt-6-luna |
| Resposta | answers |
Uma entrada por pergunta, na ordem em que você perguntou, com type e name |
| Resposta | usage |
input_tokens, input_tokens_details, output_tokens, output_tokens_details, total_tokens |
Observe o que está faltando: sem temperature, reasoning, stream, store, tools ou text.format. Para isso, você precisa da API Responses. E output_tokens é 0 no próprio exemplo de referência da OpenAI, razão pela qual o preço abaixo não possui linha de saída.
Os três tipos de pergunta
Cada pergunta possui seu próprio type, e você pode misturar tipos em uma única entrada. Coloque perguntas independentes na mesma requisição; para decisões que dependem de uma resposta anterior, o guia da OpenAI sugere enviar requisições separadas.
predicate: uma probabilidade sim/não
Um predicate pergunta se uma condição é verdadeira e retorna uma probabilidade de 0 a 1 de que ela seja verdadeira.
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "The box arrived crushed and the screen is cracked.",
"questions": [
{"type": "predicate", "name": "damaged",
"instructions": "Is the product described as damaged?"}
]
}'
O exemplo de referência da OpenAI para este formato retorna:
{
"model": "gpt-6-luna",
"answers": [
{"type": "predicate", "name": "damaged", "probability": 0.95}
],
"usage": {
"input_tokens": 42,
"input_tokens_details": {"cached_tokens":0,"cache_write_tokens":0},
"output_tokens": 0,
"output_tokens_details": {"reasoning_tokens":0},
"total_tokens": 42
}
}
choice: um rótulo de um conjunto não ordenado
Um choice adiciona um array choices de objetos {value, description}: de 2 a 255 escolhas únicas, onde value é uma string ou um booleano (true e "true" são distintos). A OpenAI recomenda um fallback como other quando suas categorias não cobrem todas as entradas.
{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{"type": "choice", "name": "department",
"instructions": "Which team should handle this ticket?",
"choices": [
{"value":"billing"}, {"value":"technical"},
{"value":"shipping"}, {"value":"other"}
]}
]
}
A resposta ilustrativa do guia para esta entrada:
{"type": "choice", "name": "department", "choice": "billing",
"probabilities": [
{"value":"billing","probability":0.95},
{"value":"technical","probability":0.02},
{"value":"shipping","probability":0.01},
{"value":"other","probability":0.02}
],
"confidence": 0.93}
score: uma posição em uma escala ordenada
Um score adiciona levels, um array de {label, description} ordenado do mais baixo ao mais alto. Os índices começam em 0, e o score retornado é a média ponderada pela probabilidade desses índices, de modo que pode cair entre os níveis.
{
"model": "gpt-6-luna",
"input": "Export fails in Safari but works in Chrome.",
"questions": [
{"type": "score", "name": "severity",
"instructions": "How badly does this bug block the user?",
"levels": [
{"label":"Cosmetic"},
{"label":"Workaround available"},
{"label":"Fully blocked"}
]}
]
}
No exemplo do guia, as probabilidades são 0.1, 0.7 e 0.2 entre os três níveis, resultando em um score de 1.1 e um confidence de 0.55. Leia 1.1 como “entre o nível 1 e o nível 2, próximo de 1”. A regra do guia: choice para categorias não ordenadas como departamentos; score para níveis ordenados como severidade.
Um quarto tipo de resposta, refusal, pode aparecer para qualquer pergunta como {"type":"refusal","name":...}. Outras perguntas na mesma requisição ainda podem obter respostas, então faça um branch no type antes de ler um campo.
Velocidade, conforme descrito pela OpenAI
A OpenAI afirma que a API Decisions é cerca de 10x mais rápida que a API Responses; o anúncio a descreve como até 10x mais rápida que o GPT-6 Luna via Responses. A OpenAI não publica nenhum número de latência absoluta. Um desenvolvedor no fórum da OpenAI relatou que decisões com entrada de imagem retornaram em cerca de 0.8 segundos em uma conexão lenta: uma anedota, não um benchmark. Meça seu próprio p95 antes de prometer qualquer coisa.
Preços: $0.10 por milhão de tokens de entrada, nada mais
Com gpt-6-luna, a entrada custa $0.10 por 1M de tokens. Você paga apenas pelos tokens de entrada: não há cobranças de leitura de cache, escrita de cache ou tokens de saída. O objeto usage contém os campos cached_tokens e cache_write_tokens, mas, de acordo com uma resposta no fórum de desenvolvedores da OpenAI, ainda não há cache na API Decisions, então espere 0.
Dois multiplicadores se aplicam. Entradas acima de 272K tokens são cobradas em 2x, o que equivale a $0.20 por 1M (derivado do multiplicador de contexto longo da página de preços). O processamento regional através dos endpoints de residência de dados dos EUA ou da UE adiciona 10%. Nenhuma camada Batch, Flex ou Fast está documentada para /v1/decisions, então não planeje com base em um desconto que existe apenas na API Responses.
Aqui está a aritmética para uma carga de trabalho de roteamento de suporte. Um ticket de 500 tokens com três perguntas em uma requisição custa 500 / 1.000.000 x $0.10 = $0.00005. Um milhão desses tickets custa $50. O mesmo ticket através da API Responses com um rótulo JSON de 40 tokens a $0.50 por 1M de saída adiciona 40 / 1.000.000 x $0.50 = $0.00002 por requisição além da entrada, antes dos tokens de raciocínio, que Luna cobra como saída na API Responses e a API Decisions não cobra de forma alguma. A abordagem honesta é “Decisions não cobra tokens de saída”, e não uma porcentagem. Para a tabela de preços completa do Luna e o que o caching de prompts faz na API Responses, veja o que é GPT-6 Luna.
Quando usar Decisions, Structured Outputs ou function calling
A própria OpenAI traça a linha: use Structured Outputs com a API Responses quando precisar de um objeto que siga seu próprio esquema JSON, como campos extraídos ou uma explicação escrita, ou function calling quando precisar que o modelo solicite uma chamada de ferramenta com argumentos. Decisions é para classificar conteúdo, rotear requisições e priorizar trabalho.
| Você precisa de | Use |
|---|---|
| Um rótulo, uma probabilidade ou uma severidade com confiança | API Decisions |
| Um objeto no seu próprio esquema JSON (campos extraídos, uma explicação) | Structured Outputs na API Responses |
| O modelo para escolher uma ferramenta e preencher seus argumentos | Function calling na API Responses |
| Streaming, estado da conversa, ferramentas, cache ou Batch | API Responses |
Um enum de Structured Outputs pode retornar um rótulo. Ele não pode retornar uma distribuição de probabilidade ou um campo confidence a menos que você peça ao modelo para escrever um, e então é texto gerado, não uma probabilidade medida. Decisions fornece números que você pode usar como limiar. A OpenAI instrui a definir esses limiares a partir de exemplos rotulados em sua própria aplicação, ponderando o custo de falsos positivos contra falsos negativos, porque não há números de precisão ou calibração publicados. Pesando um segundo fornecedor de decisões tipadas? A comparação entre Decisions e Jev aborda lado a lado preço, entradas e formatos de saída.
Imagens e a ressalva do base64
input aceita mensagens de usuário cujo conteúdo mistura partes de input_text e input_image, com um detail opcional de low, high, auto (o padrão) ou original. O guia diz que as imagens devem ser URLs de dados base64 inline; URLs hospedadas e file_id não são suportados. A referência da API também lista URLs HTTP(S) publicamente acessíveis, até 128 imagens por requisição. Trate base64 como o caminho documentado e teste uma URL hospedada antes de confiar nela.
Controles de dados
A API Decisions suporta Zero Retenção de Dados e uso compatível com HIPAA para clientes elegíveis. A residência de dados e o processamento regional são suportados nos Estados Unidos e na Europa (EEA mais Suíça) via us.api.openai.com e eu.api.openai.com. O endpoint é acessível de todas as regiões de API suportadas, embora a disponibilidade em uma região não implique que a inferência seja executada lá. Os logs de monitoramento de abuso são retidos por até 30 dias por padrão. Se você está roteando mensagens de pacientes, leia primeiro nosso guia de conformidade com a API HIPAA.
Disponibilidade: beta agora, GA em breve
O endpoint entrou em beta público para todos os desenvolvedores em 06/10/2026 e está listado em “Beta APIs” na referência. O guia da OpenAI afirma que a GA (disponibilidade geral) é esperada “nas próximas semanas”; nenhuma data é fornecida. Os exemplos de SDK exigem Python 3.26.0, JavaScript 7.30.0, Go 3.73.0, Ruby 0.101.0 ou Java 4.78.0 ou posterior; a chamada é client.decisions.create(...) em Python e JavaScript. Um Playground em platform.openai.com/decisions permite que você experimente perguntas antes de escrever código. Não há limites de taxa específicos para Decisions publicados; verifique a página de limites da sua organização. Não há uma camada gratuita de Decisions; para acesso gratuito ao Luna, veja nosso post sobre rotas gratuitas do Luna.
Testando chamadas Decisions no Apidog
As respostas tipadas são fáceis de asserir, o que é o objetivo. Três passos cobrem a maioria das equipes.
Armazene a chave uma vez. Coloque OPENAI_API_KEY em uma variável de ambiente Apidog e referencie {{OPENAI_API_KEY}} no cabeçalho Authorization: Bearer, para que a chave literal nunca apareça em uma requisição compartilhada.
Salve uma requisição por tipo de pergunta, com asserções JSONPath: status 200, $.answers[0].type igual a choice, $.answers[0].choice igual a billing, $.answers[0].confidence maior que 0.8, $.answers[?(@.name=='damaged')].probability maior que 0.9, e $.usage.output_tokens igual a 0, o que evita uma surpresa na fatura antes que ela chegue.
Escolha os limiares a partir de um conjunto rotulado. Crie um cenário de teste no Apidog que execute a mesma requisição sobre um CSV de texto de ticket e departamento esperado, então defina o limiar de roteamento automático onde o custo do falso positivo cruza o custo da fila de revisão. Execute-o em CI com a CLI do Apidog para que uma mudança de modelo ou alias falhe em um teste em vez de afetar um cliente. O guia prático abrange cada etapa, incluindo a simulação do array answers para que o frontend possa ser construído antes que o roteador seja finalizado.
FAQ
A API Decisions é um novo modelo? Não. É um endpoint, POST /v1/decisions, que roda no GPT-6 Luna. O Luna foi lançado em 22/09/2026; o endpoint entrou em beta público em 06/10/2026.
Quanto custa a API Decisions? $0.10 por 1M de tokens de entrada sem cobranças de saída, leitura ou escrita de cache. Entradas acima de 272K tokens são 2x, e o processamento regional adiciona 10%.
Ela retorna meu próprio esquema JSON? Não. Ela retorna answers com os campos probability, choice ou score. Para seu próprio esquema, use Structured Outputs na API Responses.
Qual a precisão? A OpenAI não publica dados de precisão ou calibração. Defina os limiares a partir de seus próprios dados rotulados; um cenário de teste de LLM orientado a dados é a maneira prática.
Por onde começar
Escolha uma decisão de roteamento que seu aplicativo faz hoje com uma regex ou um loop de prompt e parse, escreva-a como uma única pergunta choice com um fallback other, e execute-a sobre 50 exemplos rotulados. Se a distribuição de confiança se separar claramente, você terá um limiar e um teste. Se não, a pergunta precisa de critérios mais precisos. Para executar esse experimento com requisições salvas e asserções, baixe o Apidog e importe o curl acima.
