Introduction
The Jev AI decision API. Send a piece of state and a set of questions, get back calibrated answers with probabilities in about a quarter of a second.
Jev is a decision model, not a chat model. You send it a state — a ticket, a review, a document, a JSON payload — and a set of questions, and it answers each one with a value and a probability distribution. There is no prompt to tune, no JSON to parse out of prose, and no temperature to worry about.
Your First Decision
Create an API Key
Keys live in Settings → API keys. A key is shown once,
starts with sk-glm5-, and is stored as a hash — we cannot recover it for
you. Creating a key does not run the model and is not charged.
Send a State and Some Questions
curl https://jev-ai.org/api/v1/systemone/ \
-H "Authorization: Bearer $JEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-1.13",
"state": "We were billed $49 twice on September 3. I opened ticket #4417 four days ago and have had no reply, and our books close on Friday.",
"questions": {
"needs_human": {
"type": "noul",
"instructions": "Does this ticket need a human reply rather than an automated one?"
},
"queue": {
"type": "choice",
"instructions": "Route this ticket to the team that should own the first reply.",
"criteria": {
"billing": "Invoices, refunds, duplicate charges, plan changes, tax.",
"technical": "API errors, integrations, outages, SDKs.",
"sales": "Pre-purchase questions about plans, limits or trials."
}
},
"anger": {
"type": "score",
"instructions": "Rate the customer'"'"'s frustration.",
"criteria": ["Calm", "Mildly annoyed", "Frustrated", "Angry"]
}
}
}'
Read the Answers
{
"id": "dec_24088aa50f8c6c46361f8a2a",
"model": "jev-1.13",
"model_version": "jev-1.13-20260917",
"provider": "jev-ai.org",
"answers": {
"needs_human": { "type": "noul", "noul": 0.89 },
"queue": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 1, "technical": 0, "sales": 0 },
"confidence": 1
},
"anger": {
"type": "score",
"score": 1.89,
"legend": { "0": "Calm", "1": "Mildly annoyed", "2": "Frustrated", "3": "Angry" },
"probabilities": { "0": 0, "1": 0.11, "2": 0.89, "3": 0 },
"confidence": 0.89
}
},
"usage": {
"input_tokens": 503,
"output_tokens": 70,
"charged_tokens": 503,
"charged_credits": 0,
"wallet": "tokens"
},
"latency_ms": 1056
}
Three Things That Trip People Up
These are the ones worth reading before you write any code. Each has its own section, but here they are in one place.
`criteria` is a different container for each type
A choice question takes criteria as an object (label → description).
A score question takes criteria as an array (tier labels, low to
high). Swapping them is a 400. We validate this before the request leaves
our server and tell you which shape was expected — see Question
types.
A `score` answer is a decimal, not an integer
On a four-tier scale you can get back 1.89. The number is the expected
value of the probability distribution, which is what makes it useful for
ranking and thresholds. Do not type it as an integer, and do not round it
before you threshold on it.
Use the trailing slash
This site canonicalises every URL with a trailing slash, so
POST /api/v1/systemone is answered with a 308 to
/api/v1/systemone/. Most HTTP clients follow that and preserve the method;
curl only does so with -L. Sending the trailing-slash form avoids the
question entirely.
Where to Go Next
- Authentication — keys, headers, and what a
401means. - Models —
jev-1.13versusjev-latest, and their limits. - Decisions — the full request and response contract.
- Question types —
noul,choiceandscorein detail. - Billing — the token wallet, the credit fallback, and what is never charged.
- Errors — every status this endpoint returns and what to do about it.