OpenAI Decisions API · EU alternative
Typed decisions, processed in the EU
The OpenAI Decisions API (generally available since 22 October 2026) answers yes/no, choice and score questions with gpt-6-luna. Decision Models offers the same three question types on open-weight models, with an EU tier, a public DPA and rates from €0.018 ($0.021) per 1M input tokens. To be fair: OpenAI offers processing in Europe too. Facts checked 25 October 2026.
At a glance
OpenAI Decisions API and Decision Models compared
OpenAI facts from OpenAI’s Decisions guide, retrieved 25 October 2026. Decision Models rates exclude taxes.
| Feature | OpenAI Decisions API | Decision Models |
|---|---|---|
| Input price per 1M tokens | $0.10 uncached; cache hits are discounted, cache writes are charged; regional processing premiums and long-context multipliers apply | s1-fast from €0.018 ($0.021) in the EU tier, €0.017 ($0.019) Peer-to-Peer; s1-pro €0.074 ($0.084) EU. The EU rate is the list rate; no further regional premium. All rates |
| Output tokens | Not charged | Not charged |
| Models | gpt-6-luna only (proprietary) | Several open-weight models (Apache-2.0); every answer names the model version |
| Questions per request | 1–400 | s1-pro up to 3, s1-fast and s1-vision 1. More questions means more requests. |
| Input types | Text, images, JSON, conversations with tool calls | Text or JSON as state; one image with s1-vision |
| Prompt caching | Yes | No |
| Processing in Europe | Yes: regional processing in Europe (EEA + Switzerland) and data residency; eligibility per OpenAI’s data controls | EU tier: gateway and GPU inference only at contracted operators in the EU; EU requests never leave the EU. Where inference runs |
| Retention | A no-retention option for eligible customers (per OpenAI) | Request and response content is not stored on our gateway or inference servers |
| DPA | Per OpenAI’s data controls | Public DPA, accepted at signup |
| Provider | OpenAI | Decision Models, a company based in Passau, Germany (imprint) |
Migration
From /v1/decisions to /v1/systemone
The three question types map one to one. Field names differ; the table shows every mapping.
| Field | OpenAI Decisions API | Decision Models |
|---|---|---|
| Endpoint | POST https://api.openai.com/v1/decisions | POST https://api.decisionmodels.io/v1/systemone |
| Key | Authorization: Bearer $OPENAI_API_KEY | Authorization: Bearer $DECISIONMODELS_API_KEY (from the dashboard) |
| Model | "model": "gpt-6-luna" | "model": "s1-fast", "s1-pro" or another id from GET /v1/models |
| Shared input | input: a string or an array of messages (also tool calls, input_json) | state: a string or a JSON object/array. Flatten a conversation into one state first. |
| Questions | questions: an array, each question has a name | questions: an object keyed by the question name |
| Yes/no | "type": "predicate" → answer probability | "type": "noul" → answer noul (probability of “yes”) |
| Choice | "type": "choice" with choices: [{"value", "description"}] | "type": "choice" with criteria: {"value": "description"} (at least two options) |
| Score | "type": "score" with 2–10 levels: [{"label", "description"}] | "type": "score" with an ordered criteria array (at least two levels); score is also the probability-weighted average of the level indices, starting at 0 |
| Answers | answers: an array in question order | answers: an object keyed by question name, plus model_version and usage |
| Region | Data residency or regional processing per project (United States or Europe) | Header S1-Region: eu|global, or the key’s default tier |
| Images | input_image parts in input or in questions | s1-vision via /v1/multimodal, exactly one image per request |
Example
The same question, before and after
A complaint is routed to a department. The option descriptions move from choices to criteria.
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":"other","description":"Anything else."}]}]}'curl https://api.decisionmodels.io/v1/systemone \
-H "Authorization: Bearer $DECISIONMODELS_API_KEY" \
-H "Content-Type: application/json" \
-H "S1-Region: eu" \
-d '{"model":"s1-fast",
"state":"I was charged twice for my order.",
"questions":{"department":{"type":"choice",
"instructions":"Which department should handle this complaint?",
"criteria":{"billing":"Payments, invoices, and refunds.",
"technical":"Problems using the product.",
"other":"Anything else."}}}}'Honest fit
When OpenAI is the better fit
- You need many questions in one request (up to 400), prompt caching, conversations with tool calls, or images inside questions.
- You already have an OpenAI contract with European data residency.
Decision Models fits when you want open-weight models, low per-token rates, a public DPA and a provider based in Germany. Test the answers on your own labelled examples before you switch production traffic.
OpenAI and gpt-6-luna are trademarks of OpenAI. Decision Models is not affiliated with OpenAI and uses the names only for comparison.