ClassifierHub
Pricing

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.

request.sh
bash
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.

response.json
json
{
  "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.

Reserve your Early Access.

Join the waitlist today and get 2× credits during your first paid month when we open your spot.

API + MCP Built for AI agents Free plan included