Launch offerup to +40% credits on every packends inClaim →
jagent.
Get a free key

Checked 2026-10-09

Jev OpenRouter guide: calling TypeSafe's model through OpenRouter

Jev is on OpenRouter as typesafe/jev-1.13, but not where an OpenAI-style client looks for it: it answers on the Decisions API, not chat completions. This Jev OpenRouter guide covers the ids, the request, the error you get on the wrong endpoint, the cost, and when TypeSafe's own API is the better route.

Quick answer · verified 2026-10-09

How do you use Jev on OpenRouter?

Send a state and typed questions to POST https://openrouter.ai/api/alpha/decisions with "model": "typesafe/jev-1.13" and your OpenRouter key. Chat completions refuse the model, and catalogue searches built for chat models can miss it, so address it by its exact id.

Model idtypesafe/jev-1.13
Endpoint/api/alpha/decisions
Price$0.042 / 1M — input; output free
WaitlistNone — an OpenRouter key

Which Jev model ids does OpenRouter accept?

typesafe/jev-1.13 pins the current version and ~typesafe/jev-latest follows new ones. The response names the exact build, typesafe/jev-1.13-20260917, which is worth logging next to every decision you act on. TypeSafe's own API uses different names for the same model: jev-latest, jev-preview and jev-1.13.0 (and it rejects jev-1.13 without the patch number), so give each route its own id.

How do you call Jev on OpenRouter?

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": "I was charged twice for September and I am cancelling on Friday unless it is refunded.",
       "questions": {
         "team":  {"type": "choice", "instructions": "Which team should handle this ticket?",
                   "criteria": {"billing": "Payments and refunds", "technical": "Bugs and outages"}},
         "churn": {"type": "noul", "instructions": "The customer threatens to cancel.",
                   "criteria": {"true": "Yes", "false": "No"}}}}'

The answer comes back keyed by your question ids: team as a choice with a probability per option, churn as a single probability with no confidence field. A three-question version of this ticket, recorded on 2026-10-09, read 421 input tokens and cost $0.0000177, which OpenRouter reports in usage.cost.

The same call from Python

python
import os, requests

r = requests.post(
    "https://openrouter.ai/api/alpha/decisions",
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
    json={
        "model": "typesafe/jev-1.13",
        "state": ticket_text,
        "questions": {
            "team": {"type": "choice", "instructions": "Which team should handle this ticket?",
                     "criteria": {"billing": "Payments and refunds", "technical": "Bugs and outages"}},
        },
    },
    timeout=10,
)
r.raise_for_status()
answer = r.json()["answers"]["team"]
print(answer["choice"], answer["confidence"])

Log three fields with every decision you act on: model for the exact build that answered, usage.cost for what it cost, and the response id for tracing a single call later. If a confidence threshold decides what happens next, log the confidence too, so the threshold can be checked against outcomes once you have a few hundred of them.

Why does Jev fail on OpenRouter's chat completions endpoint?

Because it writes no text. Sent to chat completions, the request is refused with this, verbatim:

json
{"error":{"message":"typesafe/jev-1.13 is a decisions model and cannot be used with the chat/completions endpoint. Use the /api/alpha/decisions endpoint instead.","code":400}}

The same property hides it in catalogues. Its modality is text->decisions and it lists no supported parameters, so pickers built for chat models filter it out. To see Jev with every other decision model, list GET https://openrouter.ai/api/v1/models?output_modalities=decisions, and send no temperature or max_tokens: none apply.

Can you keep using TypeSafe's SDK through OpenRouter?

Yes. OpenRouter also exposes the System One request shape at POST https://openrouter.ai/api/v1/systemone, and its documentation describes switching the TypeSafe JavaScript or Python SDK by changing the base URL and the key. Use OpenRouter's model id there too. The OpenRouter Jev docs list both endpoints and the SDK pages.

What does Jev cost on OpenRouter?

$0.042 per million input tokens, the same as TypeSafe's list price, and nothing for output, paid from your OpenRouter credits. A request with 400 input tokens costs $0.0000168, so a million of them is about $16.80. Every question in a request shares the one state, so asking three questions in one call costs about the same as one, and three separate calls pay for the state three times.

Should you use OpenRouter or TypeSafe's own API?

Choose TypeSafe's API for speed on a hot path

Calling api.typesafe.ai skips a hop. In our interleaved test on 2026-09-20 the direct route had a 313 ms median against 734 ms through OpenRouter, and the gap was wider at the tail; the full table and method are on getting Jev access. From a server in Washington, D.C., Jev through OpenRouter answered in 184 ms at the median in our 2026-10-08 run.

Choose OpenRouter for one key across decision models

The same endpoint and request shape serve 12 other decision models, from OpenAI's GPT-6 Luna Decisions to Cloudflare's Clef, so switching or comparing is a change of model id. OpenRouter also reports the cost of every call, which the first-party API does not. How the thirteen models compare is on Decisions API vs Jev.

Or use both

This site calls TypeSafe first and falls back to OpenRouter only when TypeSafe answers with a rate limit or a server error, which keeps the faster route on the hot path and the gateway as a spare. Keep the two model ids apart in configuration, one per route.

Jev on OpenRouter: common questions

Is there a waitlist for Jev on OpenRouter?

No. OpenRouter's own Jev documentation says there is no waitlist and no separate TypeSafe account: an OpenRouter API key with credits is enough, and calls are billed to that account.

Is Jev free on OpenRouter?

No. It is billed from your OpenRouter credits at $0.042 per million input tokens, the same rate as TypeSafe's own API, with output not billed. Each response carries usage.cost, so you can see the charge per call.

Which provider serves Jev on OpenRouter?

TypeSafe, and only TypeSafe: the decisions response names it in its provider field. OpenRouter is the billing and routing layer in front of the same model, which is why the answers have the same shape on both routes.