Skip to content

Evaluation and modelsGuide

OpenAI's Decisions API is GA: 400 questions, JSON input, caching

OpenAI's Decisions API left beta on 22 October 2026. It still runs only on gpt-6-luna and still bills input tokens only, but a request now takes 400 questions, structured JSON, conversation history and cached prefixes. Here is what changed, what it costs, and when typed decisions beat a chat call with structured outputs.

By INFRO Editorial

Published

6 min read

A layered decision tree glowing on a dark ground, one root branching through three levels of nodes with a single path lit amber from root to leaf

In short

OpenAI made its Decisions API generally available on 22 October 2026, sixteen days after the beta opened. POST /v1/decisions on gpt-6-luna answers predicate, choice and score questions with probabilities; GA raised the limit to 400 questions per request (from 200), added input_json, images inside question instructions, conversation history with tool calls, hosted image URLs and prompt caching. Uncached input costs $0.10 per million tokens and output is not charged; cache reads and writes now bill at GPT-6 Luna's standard caching rates. Use it for classification, routing and scoring where you need a probability; use structured outputs when you need generated fields or an explanation.

Key takeaways

  • The Decisions API went GA on 22 October 2026, sixteen days after its 6 October beta, and gpt-6-luna is still the only supported model.
  • A request now takes 1 to 400 questions (200 in beta), structured data through input_json parts, per-question images, conversation history with tool calls, and hosted image URLs.
  • Uncached input is $0.10 per million tokens and output is free; GA adds prompt caching, so cache writes are now charged and cache hits bill at the lower cached-input rate, both at GPT-6 Luna's standard caching rates.
  • Usage is reported per request, not per question, at GET /v1/organization/usage/decisions.
  • Pick Decisions when the answer is a probability over a fixed set; pick structured outputs when the model has to write fields or an explanation.

OpenAI's Decisions API is generally available as of 22 October 2026, on gpt-6-luna, the only model it supports12. It answers typed questions about text, images or JSON with probabilities rather than generated text: whether a condition holds, which of your options applies, or where an input sits on your rubric. The beta opened on 6 October with OpenAI's claim that it turns inputs into typed answers "10x faster than the Responses API"1. GA keeps the price shape, input only, and widens what a single request can carry.

What changed at GA

Public beta (6 October)GA (22 October)
Questions per requestUp to 2001 to 400
Structured dataAs textinput_json content parts in user messages
ImagesInline base64Inline base64 or public HTTP(S) URLs; also inside a question's own instructions
InputUser text and imagesConversation history: messages plus function and custom tool calls and outputs
CachingNot offeredPrompt caching with an implicit breakpoint; explicit breakpoints and prompt_cache_key
Usage reportingNot listedGET /v1/organization/usage/decisions
OtherNative GPT-Live integration; Private Link
Decisions API changes at general availability, from OpenAI's Decisions guide and changelog, read 2026-10-27.

Some details from the guide matter in code2:

  • Three question types. predicate returns a probability between 0 and 1; choice returns one of your values with a probabilities array and a confidence; score returns the probability-weighted average of your level indices, which can fall between levels. Give each question a unique name; the answer echoes it. A question the model declines comes back as refusal.
  • JSON is data, not structure. Keys such as role or image_url inside an input_json part "are ordinary data: they don't create messages or fetch images", and input_json is accepted only in user messages.
  • What is not accepted. Files, audio and item references; file_id image inputs; developer and system messages carry text only.
  • Caching rules. The reusable prefix is the shared input, needs at least 1,024 tokens, and excludes the questions, so keep a reference document or image first and vary the questions. usage.input_tokens_details.cached_tokens and cache_write_tokens are both already inside usage.input_tokens; do not add them.
  • Usage counts requests. num_model_requests counts a request with several questions once, so cost per question is yours to derive.

The 15 October changelog also added Decisions inside GPT-Live: a voice session can call Decisions directly or trigger a decision as transcript deltas arrive1.

What it costs

With gpt-6-luna, uncached input on /v1/decisions costs $0.10 per million tokens and "output tokens are not charged"2. Cache reads and writes follow GPT-6 Luna's standard caching rates, which its model page lists as $0.01 per million cached input tokens and $0.125 per million cache-write tokens; prompts over 272K input tokens bill input and cache at twice the rate, and regional processing adds 10 percent where available3. The beta charged nothing for cache reads or writes, so a cache-heavy workload's bill shape changed at GA. The same model on Chat Completions or Responses bills $0.10 input and $0.50 output per million4, plus reasoning tokens as output.

When Decisions beats a chat call, and when it loses

OpenAI's guide draws the line itself: use Decisions when your application needs a probability, a choice from a fixed set or a rubric score; use structured outputs "when you need to generate an object that follows your own JSON schema, such as extracted fields or a written explanation", and function calling when the model must request a tool call with arguments2.

Decisions wins when you threshold on confidence: routing tickets, flagging content for review, gating a tool call, scoring answers against a rubric. You set thresholds from labelled examples by the cost of false positives and false negatives, as the guide advises, instead of parsing a model's self-reported certainty.

It loses in four cases. It runs on one model, so there is no larger model to escalate a hard case to on the same endpoint. It writes no explanation, which some review and audit workflows require. It takes no audio or files, so speech must be transcribed first. And dependent questions cost a round trip each, since the guide says a decision that depends on an earlier answer needs a separate request2.

Moving a beta integration to GA

Nothing in the GA notes says beta requests stop working, and the request shape is the same, so a beta integration keeps running. The changes worth making are about cost and accuracy, not compatibility.

  1. Reorder the input for caching. Put the evidence that repeats across requests, such as a policy document, a product catalog excerpt or a reference image, first in input, and keep it byte-identical. It has to reach 1,024 tokens to be cached, and question content never counts toward that2.
  2. Watch the new cache-write line. Cache writes are charged at GA. A prefix that is written often and read rarely now costs more than it did in beta; check cache_write_tokens against cached_tokens for a day of traffic.
  3. Stop flattening JSON. If your code serialised records into a string to fit them into input_text, send them as input_json instead and drop the formatting instructions you wrote to explain the string.
  4. Merge request batches that the 200-question limit split. A workload that sent 300 questions about one input in two requests can now send one, which reads the shared input once.
  5. Re-derive cost per question. The new usage endpoint counts requests, not questions; divide by the questions you sent, from your own logs, to keep a per-question figure for finance2.
  6. Recheck thresholds after any input change. Moving from flattened text to JSON, or adding conversation history, changes what the model sees. Re-run your labelled examples and confirm that the probabilities you threshold on still separate the classes you care about.

Calling it through INFRO

INFRO's POST /v1/decisions takes OpenAI's request shape, so OpenAI's SDK (client.decisions.create) works with the base URL and key changed, on your own OpenAI connection, which OpenAI bills directly. The same body can be answered by another decision model you connect, such as TypeSafe's Jev or Cloudflare's Clef, with the answers returned in OpenAI's shape; INFRO's decision policies, rerank, classifier guardrails and route classifier can name GPT-6 Luna's decisions as their engine too. Each call is checked against your key scopes and budgets before the provider is called and recorded with an estimated provider cost.

Stated plainly, INFRO's endpoint was built to the beta request shape and has not caught up with every GA addition. It accepts a string or user messages of input_text and input_image parts, and string instructions. It refuses input_json parts, images inside a question's instructions, and assistant or tool items in input with a 400, and it does not forward prompt_cache_key or explicit cache breakpoints; OpenAI's implicit cache breakpoint still applies on OpenAI's side. Its cost estimate for this endpoint uses the beta rate card (input only, no cache rates), so for cache-heavy traffic it will differ from OpenAI's bill. The 400-question ceiling is enforced by OpenAI, in its own words. Until those gaps close, call OpenAI directly for requests that need the GA-only inputs.

Questions readers ask

How much does the OpenAI Decisions API cost?
As of 27 October 2026, uncached input on gpt-6-luna costs $0.10 per million tokens on /v1/decisions and output tokens are not charged. Cache reads and writes bill at GPT-6 Luna's standard prompt caching rates ($0.01 per million cached input tokens and $0.125 per million cache-write tokens on its model page), and regional processing premiums and long-context multipliers apply.
How many questions can one Decisions request ask?
Between 1 and 400 since general availability on 22 October 2026, up from 200 in the public beta. Put independent questions about the same input in one request; a question that depends on an earlier answer needs a separate request.
Should I use the Decisions API or structured outputs for classification?
Use the Decisions API when the answer is a probability that a condition holds, one option from a fixed set, or a level on a rubric, and you want to act on a threshold. Use structured outputs with the Responses API when the model has to generate fields that follow your own schema or write an explanation. OpenAI's Decisions guide draws the same line.
Which models and inputs does the Decisions API support?
Only gpt-6-luna, as of 27 October 2026. Inputs are text, images (inline base64 or public HTTP or HTTPS URLs) and JSON through input_json parts in user messages, plus conversation history with function and custom tool calls. Files, audio, item references and file_id images are not supported.
Can I call OpenAI's Decisions API through INFRO?
Yes, with OpenAI's SDK pointed at INFRO's base URL and an INFRO gateway key, on your own OpenAI connection. INFRO's endpoint accepts the beta request shape: text and image parts in user messages and string instructions. GA additions such as input_json, images inside question instructions, conversation items and explicit cache controls are not supported through INFRO yet; send those requests to OpenAI directly.

From the team that builds it

Where this shows up in INFRO

INFRO is a control plane in front of the provider accounts you already hold. The capabilities below are the parts of it this article touches, each with the documentation that defines its behaviour.

  • Decision models from every provider

    Available with a plan

    Decision policies, rerank, classifier guardrails, the route classifier and evals on the decision model of your choice, on your own account with its provider: OpenAI's GPT-6 Luna, Cloudflare's Clef, Perplexity, Inception, Liquid AI, Upstage, Microsoft-Decision-1 on Azure, or any of them through OpenRouter. OpenAI's SDK and TypeSafe's SDK both work against INFRO.

    Read the documentation for Decision models from every provider
  • Decisions with Jev

    Available with a plan

    Saved questions your code calls as POST /v1/decisions/{slug}, answered by Jev on your own TypeSafe connection or by any other decision model you connect: an outcome, a confidence band from your thresholds, pins decided before any model call, a deadline with a fallback, and batches of up to 500 items. Tool-call gating, triage, evals, labeling and control loops are templates of it.

    Read the documentation for Decisions with Jev
  • Prompt classifier on routes

    Available with a plan

    A route can have Jev, or any other decision model you connect, pick a class for each prompt; route rules send each class to its own targets, and an unsure or unreachable classifier falls back to a class you choose.

    Read the documentation for Prompt classifier on routes
  • Classifier guardrail checks

    Available with a plan

    Yes/no checks for prompt injection, jailbreaks, harmful, self-harm and off-topic requests, answered by Jev on your own TypeSafe connection or by any other decision model you connect, with a block and a flag threshold each. Prompts only; the text is never stored. Included with guardrails, on every plan.

    Read the documentation for Classifier guardrail checks
  • Usage and cost per request

    Available with a plan

    Every request records its model, latency, token or unit counts, and estimated provider cost, queryable by project and key.

    Read the documentation for Usage and cost per request

INFRO accounts are self-serve. Provider usage is billed to you by your providers; INFRO charges a software subscription and takes 0% of model spend. See plans.

Sources

Numbered in order of first citation. Each was opened and checked against the claim on the date shown.

  1. 1.Changelog (opens in a new tab) — OpenAI. Accessed Oct 27, 2026.
  2. 2.Decisions (opens in a new tab) — OpenAI. Accessed Oct 27, 2026.
  3. 3.GPT-6 Luna model page (opens in a new tab) — OpenAI. Accessed Oct 27, 2026.
  4. 4.Pricing (opens in a new tab) — OpenAI. Accessed Oct 27, 2026.

About this article

Every capability, limit, price and date was read on 2026-10-27 from OpenAI's Decisions guide, its changelog and pricing page, and the GPT-6 Luna model page. The cost comparison is illustrative arithmetic at list rates with assumed token counts, not a measurement. INFRO behaviour was checked against its decision-model documentation and the gateway source for POST /v1/decisions on 2026-10-27.

Last checked against its sources on . The next review is due by . No separate named reviewer is recorded for this article.

How articles are written, sourced and corrected is set out in the editorial standards.