📰 AI NewsProduct ManagementIntermediate✨ AI-assisted

OpenAI Decisions API Has GPT-6 Luna Pick Answers

WittyTech Daily··4 min read
#openai#decisions-api#gpt-6-luna#routing

OpenAI put the OpenAI Decisions API into public beta on October 6, 2026. It is one endpoint, POST /v1/decisions, with one model, gpt-6-luna, and it returns a typed answer with probabilities instead of a paragraph. If your product has a step where a model reads something and picks a bucket, this is the first OpenAI endpoint built for that job.

What the OpenAI Decisions API returns

You send text, images or both, plus a questions array. Each question has a unique name and one of three types, per the official guide:

  • predicate: a yes/no check. Returns a probability between 0 and 1.
  • choice: pick one option from an unordered list. Returns the choice, a probability per option, and a confidence.
  • score: rate against ordered levels. Returns a number that can land between levels, plus probabilities and a confidence.

Independent questions about the same input can share one request. Decisions that depend on each other need separate requests.

Route a support ticket with the department example

This is the routing request from the docs, as a plain HTTP call:

curl https://api.openai.com/v1/decisions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "I was charged twice for my order.",
    "questions": [
      {
        "type": "choice",
        "name": "department",
        "instructions": "Which department should handle this complaint?",
        "choices": [
          {"value": "billing", "description": "Payments, invoices, and refunds."},
          {"value": "technical", "description": "Problems using the product."},
          {"value": "shipping", "description": "Delivery and tracking."},
          {"value": "other", "description": "Requests outside these categories."}
        ]
      }
    ]
  }'

The guide's illustrative response puts billing at 0.95 and the overall confidence at 0.93. Keep the other choice: the guide recommends a fallback for inputs your categories don't cover.

The Python SDK (3.26.0 or later) exposes the same call. The confidence field is what makes it useful, because you can send low-confidence tickets to a person:

from openai import OpenAI

client = OpenAI()

decision = client.decisions.create(
    model="gpt-6-luna",
    input="I was charged twice for my order.",
    questions=[
        {
            "type": "choice",
            "name": "department",
            "instructions": "Which department should handle this complaint?",
            "choices": [
                {"value": "billing", "description": "Payments, invoices, and refunds."},
                {"value": "technical", "description": "Problems using the product."},
                {"value": "shipping", "description": "Delivery and tracking."},
                {"value": "other", "description": "Requests outside these categories."},
            ],
        }
    ],
)

answer = decision.answers[0]
THRESHOLD = 0.85  # placeholder: set it from your own labeled tickets

if answer.type == "refusal":
    queue = "human_review"
elif answer.type == "choice" and answer.choice != "other" and answer.confidence >= THRESHOLD:
    queue = answer.choice
else:
    queue = "human_review"

The guide doesn't explain when a refusal happens, so handle that branch rather than assuming it never fires.

Decisions API pricing and cost

The guide lists $0.10 per 1M input tokens. Output tokens, cache reads and cache writes are not charged. Regional processing premiums and long-context input multipliers still apply.

For comparison, the September 22 changelog entry prices standard GPT-6 Luna at $0.10 input, $0.01 cached input and $0.50 output. Same input rate, free output.

My arithmetic, assuming a 500-token request bills entirely as input: $0.00005 per decision, or about $50 per million decisions. The guide doesn't say how question definitions are counted, so check your first invoice.

The 10x faster claim is unverified

The changelog says typed answers arrive "10x faster than the Responses API." The guide repeats it and publishes no benchmark. Treat it as a vendor claim. Time it yourself on your own inputs, p50 and p95, before it goes into a roadmap or an SLA.

Access status and image limits

The guide says public beta, subject to change before GA, with GA expected in the coming weeks. Some early third-party write-ups called it a limited preview with no published price. The official guide says otherwise, so the quick test is whether your own key gets a response from the endpoint.

Images must be inline base64 data URLs. Hosted HTTP or HTTPS URLs and file_id inputs are not supported. The guide doesn't state size or count limits, and it doesn't mention rate limits.

The guide says Zero Data Retention and HIPAA use are supported for eligible customers. Processing is available in the United States and Europe (EEA plus Switzerland).

Where a product manager should use it

Use it for routing, triage and moderation: anywhere the output is a label your system acts on. The confidence number gives you a dial. The guide advises setting thresholds from labeled examples, weighing the cost of false positives against false negatives.

Don't use it to write anything. For custom JSON schemas or tool calls, the guide points you to Structured Outputs or function calling.

What to do on Monday morning

  1. Pick one step that people or a prompt currently route by hand, such as ticket assignment or a severity check.
  2. Pull a couple hundred labeled examples. That count is my suggestion, not OpenAI's.
  3. Run them through /v1/decisions, compare confidence against accuracy, and pick the threshold below which a human takes over.
  4. Measure latency on your own traffic.
  5. Keep the integration behind a thin wrapper, because a beta endpoint can change shape before GA.

A confidence score you can threshold turns a model call into a step you can route, audit and attach an SLO to, which is what production needs.

← More in Product Management