endpoint
POST /v1/systemone
Send one state and any number of typed questions about it. Decider 1 answers all of them in a single call, and every answer is a probability distribution rather than a bare label, so your code decides how sure it needs to be before acting.
Nothing is generated: each answer is read from the model’s scores for the options you offered, so it can only ever be one of them, and output is never billed. Input costs $0.03 / 1M tokens.
Request
curl https://meragpt.com/v1/systemone \
-H "Authorization: Bearer $MERAGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd-1",
"state": {
"channel": "email",
"messages": [
{ "from": "customer", "text": "I was charged twice for September. Refund the duplicate, today please." }
]
},
"questions": {
"refund_requested": {
"type": "noul",
"instructions": "Is the customer asking for money back?"
},
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Charges, invoices, payments and refunds.",
"technical": "The product is not working as expected.",
"account": "Login, plan changes and access."
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this?",
"criteria": ["Can wait a week", "Within a few days", "Today", "Immediately"]
}
}
}'| field | type | notes |
|---|---|---|
model | string | sd-1 or state-decider-1. Optional: omitted, or the typesafe-sdk’s default model name, means Decider 1. |
state | any JSON | Required. What the questions are about: a conversation, an alert, an invoice, an agent trace. |
questions | object | Required. A name for each question, mapped to the question. Up to 64 per request. |
Question types
| type | criteria | answer |
|---|---|---|
noul | Optional: {"true": "...", "false": "..."} describing each side. | The probability of yes. |
choice | Required: each label mapped to a description. 2 to 10 labels. | A probability per label, the most likely label, and its probability. |
score | Required: the levels as an ordered list, lowest first. 2 to 10 levels. | A probability per level, the expected level, and the top level’s probability. |
Every question needs instructions: the question itself, in plain words. Write labels and levels the way you would explain them to a new colleague; the descriptions are part of what the model reads.
Response
{
"id": "req_4f1c9a0b2e7d6c5a3b8e9f01",
"object": "systemone",
"model": "state-decider-1",
"answers": {
"refund_requested": { "type": "noul", "noul": 0.9034 },
"team": {
"type": "choice",
"choice": "billing",
"confidence": 0.9657,
"probabilities": { "billing": 0.9657, "technical": 0.007, "account": 0.0273 }
},
"urgency": {
"type": "score",
"score": 2.0973,
"confidence": 0.3847,
"legend": { "0": "Can wait a week", "1": "Within a few days", "2": "Today", "3": "Immediately" },
"probabilities": { "0": 0.018, "1": 0.2513, "2": 0.3459, "3": 0.3847 }
}
},
"usage": { "input_tokens": 295, "output_tokens": 0, "cost_usd": "$0.0000089" },
"balance_usd": "$9.99"
}A noul answer is the bare probability of yes, with no separate confidence. A score’s legend and probabilities are keyed by level index. The score is the expected level; the distribution tells you when that average hides a genuine split, as it does above between “today” and “immediately”.
Using the typesafe-sdk
The endpoint speaks the System One schema, so the typesafe-sdk works against it without code changes. Point it here and give it your meraGPT key:
export TYPESAFE_BASE_URL=https://meragpt.com
export TYPESAFE_API_KEY=$MERAGPT_API_KEYRequests the SDK sends with its default model name are answered by Decider 1. To be explicit, pass model="sd-1". Two differences from other System One providers to check before you switch: a request, state and questions together, can hold up to 4,096 tokens, and a choice offers at most 10 labels. For a larger label set, split it into groups with a “none of these” label and ask in two steps.
Speed
One call answers every question over the state together, so twenty questions cost little more than one. A request larger than the context returns 400 input_too_long, never a retryable error. When we are out of capacity for a moment you get 429 with a Retry-After header, which the typesafe-sdk honours on its own; see errors.
What it is not for
- Open-ended answers. It picks between the options you give it and cannot write anything else.
- Facts it would need to look up. It decides from the state you send and knows nothing beyond it.
- Questions with more than ten options. Split a large label set into groups with a "none of these" option.
Limitations
- The reference answers on this benchmark come from an ensemble of teacher models, so a score here measures agreement with that ensemble, not ground truth.
- Every number comes from a single evaluation run.
- Text state only — no images, audio or video — and at most ten options per choice question.
Benchmarks and the full comparison are on the model page.