Documentation
1. Get a key
Sign in, wait for approval if your account needs it, open the dashboard and create a key. It is shown once; keep it in your secrets manager.
2. Call the API
One endpoint. Send the key as Authorization: Bearer <key> (what the TypeSafe SDKs do) or as X-API-Key.
curl -s https://systemone.dev.suite.qualesgroup.com/v1/systemone \
-H "Authorization: Bearer $SYSTEMONE_KEY" \
-H "content-type: application/json" \
-d '{
"state": "I was charged twice and never got my money back.",
"model": "systemone-latest",
"questions": {
"team": {"type": "choice", "instructions": "Which team handles it?",
"criteria": {"billing": "payments and refunds", "shipping": "deliveries", "technical": "errors"}},
"urgent": {"type": "noul", "instructions": "Is it urgent?"},
"anger": {"type": "score", "criteria": ["calm", "annoyed", "furious"]}
}
}'{
"model": "systemone-1.0",
"answers": {
"team": {"type": "choice", "choice": "billing", "confidence": 1.0,
"probabilities": {"billing": 1.0, "shipping": 0.0, "technical": 0.0}},
"urgent": {"type": "noul", "noul": 1.0},
"anger": {"type": "score", "score": 1.0, "confidence": 1.0,
"legend": {"0": "calm", "1": "annoyed", "2": "furious"},
"probabilities": {"0": 0.0, "1": 1.0, "2": 0.0}}
},
"usage": {"input_tokens": 183, "output_tokens": 3}
}3. The three primitives
- ·
choice: One option from a map of criteria; the answer carries choice, probabilities and confidence. - ·
score: A level on a list of criteria, 0 being the first; the answer carries score, legend, probabilities and confidence. - ·
noul: Yes or no to an instruction; the answer is noul, 1.0 for yes and 0.0 for no.
The engine picks one option per question and does not measure its own doubt: probabilities are one-hot (1.0 on the choice, 0.0 elsewhere) and confidence is always 1.0.
4. With the official SDK
Point the TypeSafe SDK at this portal's URL with base_url; everything else is unchanged.
# pip install typesafe-sdk
from typesafe_sdk import Choice, TypeSafeClient
with TypeSafeClient(api_key=KEY, base_url="https://systemone.dev.suite.qualesgroup.com") as client:
r = client.system_one("I was charged twice.", {
"team": Choice(criteria={"billing": "payments and refunds", "shipping": "deliveries"}),
})
print(r.choices["team"].choice)5. Models
GET /v1/models lists them. The aliases resolve to the current engine.
- ·
systemone-1.0: the engine: classification by meaning, any language, a few hundred milliseconds. - ·
systemone-careful-1.0: the same engine checking each rule before it answers: for arithmetic or chained rules; slower and dearer. - ·
systemone-latest: alias of the current engine. - ·
jev-latest: alias of the current engine, the default of the TypeSafe SDKs.
6. Limits and errors
- · 10,000 requests per UTC day across all your keys.
- · X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset on every response.
- · 401 missing, invalid or revoked key · 422 malformed request (body with detail) · 429 daily limit reached · 503 engine unavailable.
- · x-typesafe-request-id on every response, for support.
7. For agents: MCP
The same decisions as an MCP tool, over streamable HTTP at /mcp with the same key in the same headers. Point any MCP client at it.
https://systemone.dev.suite.qualesgroup.com/mcp