Back to blog

OpenAI Decisions API on LLM Gateway: GPT-6 Luna, Microsoft-Decision-1 and Jev

LLM Gateway now serves the OpenAI Decisions API at /v1/decisions. GPT-6 Luna Decisions answers typed questions about text and images at $0.10 per million input tokens, Microsoft-Decision-1 on Azure and Jev run on the same request shape, and the OpenAI SDKs work with a base URL change.

By LLM Gateway

A glowing branching switch on a central chip with weighted light paths, a photo frame and probability dials around it, representing the OpenAI Decisions API on LLM Gateway

Three weeks ago we shipped an LLM decision API for calls that exist only to produce a value: route this ticket, score this passage, flag this record. It spoke TypeSafe's request format, because Jev was the only decision model around. Since then OpenAI released its own Decisions API with GPT-6 Luna behind it — and a different wire format.

Two providers with two shapes for the same job is exactly what a gateway is supposed to hide. LLM Gateway now serves the OpenAI Decisions API at /v1/decisions, with GPT-6 Luna Decisions, Microsoft-Decision-1 and Jev behind the same request shape. Switching models is a one-field change, and the OpenAI SDKs work by changing the base URL.

What the OpenAI Decisions API does

A request has three parts: a model, an input — a string, or user messages with text and image parts — and a list of questions. Each question has a type:

Type Ask Answer
predicate Whether a condition is true probability, 0 to 1
choice One option from the choices you set choice, a probability per option, confidence
score A rating across ordered levels score (can land between levels), probabilities, confidence

Answers come back in the order you asked, each echoing the question's name. If the model declines one question it returns refusal for that one and still answers the rest, so a single bad question does not fail the batch.

1curl -X POST "https://api.llmgateway.io/v1/decisions" \2  -H "Authorization: Bearer $LLM_GATEWAY_API_KEY" \3  -H "Content-Type: application/json" \4  -d '{5    "model": "gpt-6-luna-decisions",6    "input": "Export fails in Safari but works in Chrome.",7    "questions": [8      {9        "type": "score",10        "name": "severity",11        "instructions": "How severe is this issue?",12        "levels": [13          { "label": "Cosmetic", "description": "Appearance only." },14          { "label": "Workaround available", "description": "Another way works." },15          { "label": "Fully blocked", "description": "No workaround." }16        ]17      }18    ]19  }'
1{2  "model": "openai/gpt-6-luna-decisions",3  "answers": [4    {5      "type": "score",6      "name": "severity",7      "score": 1.1,8      "probabilities": [9        { "value": 0, "label": "Cosmetic", "probability": 0.1 },10        { "value": 1, "label": "Workaround available", "probability": 0.7 },11        { "value": 2, "label": "Fully blocked", "probability": 0.2 }12      ],13      "confidence": 0.5514    }15  ],16  "usage": { "input_tokens": 96, "output_tokens": 0, "total_tokens": 96 }17}

GPT-6 Luna Decisions: images and a 1M context

gpt-6-luna-decisions is GPT-6 Luna served through OpenAI's Decisions API. Two things set it apart from Jev:

  • Image input. Put input_text and input_image parts in a user message to check a product photo for damage, classify a screenshot, or verify that an uploaded document is the one you asked for.
  • A 1.05M-token context. Long records, full support threads and large documents fit in one request.

It is billed on input only: $0.10 per million input tokens, or $0.20 per million when a request has more than 272K input tokens. Output, cache reads and cache writes are free. The model is in beta on LLM Gateway, matching OpenAI's public beta.

Use the OpenAI SDK unchanged

Because /v1/decisions follows OpenAI's shape, the official SDKs work as they are — decisions.create needs OpenAI's JavaScript SDK 7.30.0 or later (Python 3.26.0 or later). Point the client at LLM Gateway:

1import OpenAI from "openai";2
3const client = new OpenAI({4  baseURL: "https://api.llmgateway.io/v1",5  apiKey: process.env.LLM_GATEWAY_API_KEY,6});7
8const decision = await client.decisions.create({9  model: "gpt-6-luna-decisions",10  input: ticket,11  questions: [12    {13      type: "choice",14      name: "department",15      instructions: "Which department should handle this?",16      choices: [17        { value: "billing" },18        { value: "technical" },19        { value: "other" },20      ],21    },22  ],23});

You get the same request logging, per-model cost breakdown, IAM rules, compliance policies and provider key rotation as on every other gateway endpoint, and you can bring your own OpenAI key or pay with gateway credits.

Microsoft-Decision-1 and Jev on the same request shape

jev-1.13.0 from TypeSafe AI is available on /v1/decisions too, still at $0.042 per million input tokens. The gateway translates the request into TypeSafe's format and the answers back into OpenAI's, so the code above runs against Jev by changing model. Jev is text-only, so image parts are rejected with a 400 instead of being silently dropped.

microsoft-decision-1 is Microsoft's small decision model for classification, routing, ranking and grading, also at $0.042 per million input tokens with a 32K-token context. It is served by Azure: call microsoft-decision-1 with LLM Gateway credits, or bring your own Azure key by deploying it in Microsoft Foundry under the deployment name Decision-1 and adding the key and resource to LLM Gateway. Like Jev, it takes text only and is translated from the same request shape.

That makes the choice a cost, capability and hosting question rather than an integration project: Jev or Microsoft-Decision-1 for high-volume text classification at the lowest price — Microsoft-Decision-1 when you already run your models on Azure — and GPT-6 Luna Decisions when you need images or very long input.

/v1/systemone will be deprecated soon

/v1/systemone keeps working, so nothing breaks today. It now serves TypeSafe models only, new decision models ship on /v1/decisions only, and we will deprecate it once there has been time to migrate. The migration guide maps each field:

  • state becomes input; structured state is serialized to a string.
  • The questions map becomes an array, and each key moves to name.
  • noul becomes predicate, choice criteria become choices, and score criteria become levels.
  • Answers become an array in question order, and probabilities become arrays of { value, probability }.

Frequently asked questions

What is the OpenAI Decisions API?
An OpenAI endpoint, POST /v1/decisions, that evaluates text or images against typed questions and returns values instead of generated text: a probability for a predicate, a chosen option with a probability per option, or a score across ordered levels. gpt-6-luna is the model behind it, and it is in public beta.
How do I use the OpenAI Decisions API through LLM Gateway?
Send the same request body to https://api.llmgateway.io/v1/decisions with your LLM Gateway API key and model gpt-6-luna-decisions, or point the OpenAI SDK's baseURL at https://api.llmgateway.io/v1 and call decisions.create.
What does GPT-6 Luna Decisions cost?
$0.10 per million input tokens, or $0.20 per million when a request has more than 272K input tokens. There are no output, cache-read or cache-write charges.
Which decision models can I use on /v1/decisions?
gpt-6-luna-decisions from OpenAI ($0.10 per million input tokens, text and images), microsoft-decision-1 served by Azure ($0.042 per million input tokens, text) and jev-1.13.0 from TypeSafe ($0.042 per million input tokens, text). All three use the same request and response shape.
What happens to /v1/systemone?
It keeps working for existing integrations but serves TypeSafe models only and will be deprecated soon. Jev is available on /v1/decisions at the same price, and new decision models ship on /v1/decisions only.