Docs
One endpoint, three typed primitives, inference in the EU.
Quickstart
- Create an API key in the console.
- Set
TYPESAFE_BASE_URL=https://api.hostjev.comin your environment. - Send a request.
curl https://api.hostjev.com/v1/systemone \
-H "Authorization: Bearer hj_live_..." \
-H "Content-Type: application/json" \
-d @request.jsonPrimitives
| Primitive | What it asks | Returns |
|---|---|---|
| Choice | Pick one of up to 255 named options. | choice, probabilities, confidence |
| Score | Expected value over 2–10 ordered levels. | score, probabilities, confidence |
| Noul | Calibrated probability that a statement holds. | noul |
Request
{
"state": {
"ticket": {
"subject": "Duplicate charge",
"messages": ["I was billed twice for September. Please refund one."]
}
},
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this",
"criteria": {
"billing": "Charges, refunds, invoices",
"technical": "Bugs, outages, integrations",
"other": "Nothing fits"
}
},
"frustration": {
"type": "score",
"instructions": "How frustrated the customer appears",
"criteria": ["Calm", "Frustrated but civil", "Very angry"]
},
"refund_requested": {
"type": "noul",
"instructions": "The customer explicitly asks for a refund"
}
}
}state may be a string, a JSON object or an array of strings. questions is a map of question id to question.
Response
{
"model": "decision-35b-2026-09",
"mode": "packed",
"usage": { "input_tokens": 187 },
"answers": {
"department": {
"choice": "billing",
"probabilities": { "billing": 0.91, "technical": 0.03, "other": 0.06 },
"confidence": 0.91
},
"frustration": {
"score": 1.32,
"probabilities": [0.12, 0.44, 0.44],
"confidence": 0.68
},
"refund_requested": {
"noul": 0.97
}
}
}model is always the versioned id that answered, never an alias. usage.input_tokens is the billed token count for the request.
Packed vs separate
The default is mode=packed. Every question shares one prefilled state, so a request with ten questions prefills your state once. It is the fastest mode; both modes bill the same tokens.
With mode=separate each question is answered in isolation. Use it when an answer must not shift with its neighbours. Expect 6–9% of answers to differ between the two modes.
Endpoints
| Endpoint | Returns |
|---|---|
| POST /v1/systemone | Decisions. |
| GET /v1/models | Model ids and aliases. |
| GET /v1/limits | Service limits. |
Limits
| Limit | Value |
|---|---|
| Packed request | 64k tokens: state and all questions |
| Separate request | 32k tokens: state and the longest question |
| Choice options | 255 |
| Score levels | 2–10 |
| Input | text only |
Writing good questions
- Write explicit criteria for every option, not just a label.
- Always include an
otherornoneoption. - Keep counting, date arithmetic and comparisons in your own code.
- Filter state before sending: accuracy drops as irrelevant material grows.
- State is not treated as hostile. User-controlled text can steer answers, so decide what you put in it.
- Avoid Noul phrasings where
truemeans "no".
Compliance
Inference runs on GPUs in EU regions. Request logging is zero-retention by default: we keep counts, latency and token totals for billing, never your state. The DPA is available on request and names every sub-processor. RunPod Secure Cloud hosts the v1 GPU workers; the company is US-headquartered and the data centres we use are in the EU. A strict-EU provider is under evaluation.