Answers that can’t go off-menu
You declare the allowed answers in the request. The Decisions API can only return one of them. You never parse free text or retry on a malformed reply.
Early access · Decisions API keys issued in batches
Decisions, not text
Send any context and a fixed set of answers. The Decisions API returns one typed choice, with a probability for every option. Classify, route and pick an agent’s next step in a single call.
curl https://api.decisionsapi.cc/v1/decisions \
-H "Authorization: Bearer $DECISIONS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"context": "Charged twice for my March invoice, please refund one.",
"questions": {
"team": {
"type": "choice",
"options": {
"billing": "Payments, invoices, refunds",
"technical": "Bugs, errors, integrations",
"sales": "Plans, pricing, upgrades"
}
},
"urgent": {
"type": "yes_no",
"question": "Does the customer need action today?"
}
}
}'
import os, requests
res = requests.post(
"https://api.decisionsapi.cc/v1/decisions",
headers={"Authorization": f"Bearer {os.environ['DECISIONS_API_KEY']}"},
json={
"context": ticket.body,
"questions": {
"team": {
"type": "choice",
"options": {
"billing": "Payments, invoices, refunds",
"technical": "Bugs, errors, integrations",
"sales": "Plans, pricing, upgrades",
},
},
"urgent": {"type": "yes_no", "question": "Does the customer need action today?"},
},
},
)
answers = res.json()["answers"]
route_to(answers["team"]["choice"])
const res = await fetch("https://api.decisionsapi.cc/v1/decisions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DECISIONS_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
context: ticket.body,
questions: {
team: {
type: "choice",
options: {
billing: "Payments, invoices, refunds",
technical: "Bugs, errors, integrations",
sales: "Plans, pricing, upgrades",
},
},
urgent: { type: "yes_no", question: "Does the customer need action today?" },
},
}),
});
const { answers } = await res.json();
routeTo(answers.team.choice);
{
"id": "dec_01J9X4M2Q8",
"answers": {
"team": {
"choice": "billing",
"confidence": 0.97,
"probabilities": {
"billing": 0.97,
"technical": 0.02,
"sales": 0.01
}
},
"urgent": { "answer": true, "probability": 0.81 }
},
"usage": { "input_tokens": 64 }
}A Decisions API request with two questions, and the typed response.
Overview
The Decisions API is an AI API for constrained decisions. You describe the questions and every allowed answer; the Decisions API reads your context and returns one of those answers per question, with a probability for each option. There is no free text to parse and no malformed output to retry.
Most of the code around an LLM call exists to force prose back into a shape your program can use. The Decisions API makes the output space part of the request, so the answer arrives already typed.
Capabilities
You declare the allowed answers in the request. The Decisions API can only return one of them. You never parse free text or retry on a malformed reply.
Each answer comes with a confidence and a full probability distribution. Set your own threshold and send the unsure cases to a person.
Ask about team, urgency, language and sentiment in the same request, all against the same context. Every question is answered in one pass.
Send a support ticket, a chat transcript, a JSON event, a product listing or an agent’s full state. It is read as-is, with no feature engineering.
A Decisions API call returns one short, fixed-shape answer, so it fits inside a request handler, a moderation queue or an agent loop without slowing it down.
Describe each option the way you would brief a colleague. Changing a rule is a one-line edit to the prompt, with nothing to retrain.
Question types
Choice, score and yes/no cover most decisions software makes. Mix them freely in one request.
choice
Pick exactly one option from a set you describe in plain words. The Decisions API returns the choice plus a probability for each option.
"billing" | "technical" | "sales"
score
Place the context on an ordered scale you define, such as risk, priority or lead quality.
"low" < "medium" < "high"
yes_no
Ask one yes-or-no question. The answer is a boolean and a calibrated probability.
true · 0.81
Reference
One endpoint: POST https://api.decisionsapi.cc/v1/decisions, authenticated
with Authorization: Bearer $DECISIONS_API_KEY.
context |
string | object | string[]What the decision is about: text, JSON or a list of strings. |
|---|---|
questions |
objectOne entry per question, keyed by a name you choose. |
questions.*.type |
"choice" | "score" | "yes_no"The shape of the answer. |
questions.*.options |
object | string[]For choice: option → description. For score: an ordered list. |
questions.*.question |
stringFor yes_no: the question to answer. |
answers.*.choice |
stringThe selected option (choice and score). |
|---|---|
answers.*.answer |
booleanThe answer to a yes_no question. |
answers.*.confidence |
numberProbability of the selected option, 0–1. |
answers.*.probabilities |
objectProbability for every option you defined. |
usage.input_tokens |
numberBillable input tokens for the call. |
Use cases
Anywhere your software makes the same kind of call thousands of times a day.
Send each ticket to the team that owns it, with urgency attached.
Allow, review or block, with the probability you need for an audit trail.
Let an agent pick its next tool from a closed list instead of writing free text.
Score inbound leads against your own criteria, not a black-box number.
Check a model’s draft against your policy before it reaches a user.
Tag documents, emails and events at whatever volume your pipeline produces.
Landscape · updated September 30, 2026
TypeSafe shipped Jev, a “System One” decision model, in September. On September 29, OpenAI announced its own Decisions API at DevDay 2026. Here is what each company has said publicly so far.
| OpenAI Decisions API | TypeSafe Jev | |
|---|---|---|
| Status | Limited preview; broad release “in the coming days” | Early access |
| Underlying model | A version of GPT-6 Luna | Jev, a non-autoregressive “System One” model |
| Input | Text and images | Text, JSON, string arrays |
| Stated latency | “Less than a few hundred milliseconds end to end” | 70–500 ms end to end |
| Pricing | Not announced | $0.042 / 1M input tokens, output free |
| Public docs | Not yet | Yes |
Sources: OpenAI DevDay 2026 recap, @OpenAIDevs, The Decoder, TypeSafe blog. Early hands-on tests, such as Every’s vibe check, found the two close on accuracy, with pricing as the open question.
Full Decisions API vs Jev comparison →Across launch threads the same questions keep coming up: what a call will cost at volume, whether image input matters for their use case, and how exposed they are to one vendor changing terms.
An independent Decisions API with a small, stable contract: choice, score and yes/no questions, one endpoint, per-option probabilities. Not affiliated with either company above.
Pricing
Usage-based, billed on input tokens. Every early Decisions API key starts with a free allowance, and exact rates go to the waitlist before the first keys are issued.
Enough calls to wire up a real workflow and measure accuracy on your own data.
Billed per input token. The answer is a few fixed-shape fields, so output adds little to a call.
Running millions of decisions a month? Say so on the waitlist and we will talk rates.
Access
Leave your email and tell us what you want the Decisions API to decide.
Keys go out in batches, in waitlist order, with a free starting allowance.
POST your context and questions to /v1/decisions. A first integration takes minutes.
FAQ
The Decisions API is an AI API for constrained decisions. You send context plus a set of questions with fixed possible answers, and it returns one typed answer per question with a probability for every option. It is built for classification, routing, moderation and agent tool selection.
Join the waitlist on this page. We issue Decisions API keys in batches, in waitlist order, and email you once when yours is ready.
Decisions API pricing is usage-based and billed on input tokens, with a free allowance for early keys. Exact rates go to the waitlist before the first keys are issued.
The job is similar, the contract is different. A general LLM returns text that you have to parse and hope stays on-menu. The Decisions API takes the allowed answers as part of the request, can only return one of them, and gives a probability for each.
At launch the Decisions API accepts text, JSON and lists of strings. Image input is on the roadmap. Tell us on the waitlist if you need it.
The Decisions API is a single JSON endpoint, so any HTTP client works, as the examples above show. Typed Python and TypeScript helpers will ship with the first keys.
Requests are used to answer the request. We will publish full data processing terms before the first key is issued. Until then, please don’t plan on sending regulated data such as health records.
Tell us what you want to decide. We let use cases in, batch by batch.