Jev API
The Jev API: request format, question types and responses
Jev is served by OpenRouter's Decisions API. It's a single POST endpoint that takes a model id, a state and a map of typed questions, and returns one typed answer per question.
The Decisions API is marked alpha by OpenRouter, so validate responses in your code and pin a model version for production.
Get Early Access to ClassifierHub: 2× credits in your first paid month.
Endpoint and authentication
Send a POST request to https://openrouter.ai/api/alpha/decisions with your OpenRouter API key as a Bearer token. The model id is typesafe/jev-1.13, or the ~typesafe/jev-latest alias if you always want the newest version.
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "Hi, I was charged twice for my subscription this month.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"billing": "Payments, invoices, refunds, charges",
"technical": "Bugs, errors, outages",
"other": "Anything else"
}
},
"refund": {
"type": "noul",
"instructions": "Is the customer asking for money back?",
"criteria": { "true": "Asks for a refund", "false": "No refund request" }
}
}
}'State and questions
The state is the thing being judged: a string, an object or an array. Use descriptive field names and include only what the questions need. You can reference fields in instructions with backticks, for example `ticket.body`.
Questions is a map from your own keys to question definitions. Choice criteria are a map of option to description, noul criteria describe both the true and false cases, and score criteria are an ordered list from lowest to highest.
Response format
Each answer mirrors its question type: choice answers include the chosen option, per-option probabilities and a confidence value; noul answers include the probability of yes; score answers include a probability-weighted score, per-level probabilities and a legend. Usage and cost are reported on every response.
{
"model": "typesafe/jev-1.13",
"answers": {
"team": { "type": "choice", "choice": "billing", "confidence": 0.9,
"probabilities": { "billing": 0.93, "technical": 0.04, "other": 0.03 } },
"refund": { "type": "noul", "noul": 0.91 }
},
"usage": { "input_tokens": 140, "output_tokens": 0, "cost": 0.0000059 }
}Errors and retries
Treat 429, 5xx and timeout responses as retryable with backoff. 400-level errors usually mean an invalid question definition, such as a score with fewer than two levels or a noul question that only describes one side. Put a timeout on every request and decide what your application does when no decision is available, for example routing to a human queue.
Frequently asked questions
Related guides
Last updated 2026-09-25. ClassifierHub is an independent product built on top of the Jev decision model, accessed through OpenRouter. It is not affiliated with or endorsed by TypeSafe or OpenRouter.