Open System One
An open specification for System One model APIs: what Open Responses is for LLMs, for System One models.
Status: early draft. The 2026-11-07 release is a first snapshot, implemented by one gateway against three models. Expect breaking changes in the next releases. A dated release never changes, so pin one if you depend on it.
System One models answer typed questions about an input: the probability that something is true, a choice, a score, or a value read from a document. They return structured answers with probabilities instead of generated text, and software reads those answers directly.
Why
LLM APIs began with chat completions: text in, text out. Each provider shipped its own variant, structured output was added later, and applications collected an adapter per provider until Open Responses gave them a shared contract.
System One APIs are at that same starting point. Three providers already ship three formats for the same idea:
| Provider | Questions | Yes/no question | Images |
|---|---|---|---|
| TypeSafe | an object keyed by name | noul |
assets placeholders |
| Cloudflare | questions, or fields for extraction |
noul |
an images list |
| OpenAI | an array with a name each |
predicate |
input_image parts |
This matters more than it did for chat, because code reads every answer. A company can call a System One model from hundreds of places across its apps. If each call depends on one provider’s format, changing models becomes a migration project instead of a configuration change.
What it defines
- One contract, at any URL. A request
{model, state, questions}and a response{model, answers, usage}. Switching implementers changes the endpoint URL and the model, nothing else. - TypeSafe’s format as the base. Any valid TypeSafe request is a valid Open System One request.
- Decision and extraction questions.
noul,choice,score, andboxjudge the input.text,number,date,time,datetime,duration,list,estimate, andforecastread values from it. - Answer guarantees that code can rely on, such as when a value is null, what a span points at, and that estimates stay within bounds.
- Standard errors for a question type or parameter a model does not support.
- Dated releases that never change, and
owner:typeextensions that can become core.
Example
POST https://api.example.com/v1/systemone
{
"model": "your-model",
"state": "Invoice INV-2291 from Northwind Supply. Total due: $1,080.00 by 2026-10-02.",
"questions": {
"is_invoice": { "type": "noul", "instructions": "Is this an invoice?" },
"total": { "type": "number", "decimals": 2, "unit": "USD" }
}
}
{
"model": "your-model",
"answers": {
"is_invoice": { "type": "noul", "noul": 0.99 },
"total": {
"type": "number",
"value": 1080,
"p_null": 0.001,
"confidence": 0.99,
"guess": 1080,
"span": [52, 60]
}
},
"usage": { "input_tokens": 64, "output_tokens": 8 }
}
Get involved
Open System One is developed in the open on GitHub. Providers, gateways, and client authors are welcome: open an issue or a pull request with what your API needs, or tell us when you implement it.