All integrationsIntegration · Gateway

Jev on OpenRouter

OpenRouter is a single gateway in front of many models, and Jev is listed on it — but with a twist: Jev is a typed decision model, not a chat model, so you reach it through OpenRouter's decisions endpoint, not the usual chat-completions path. Here's the exact setup, plus when calling our hosted gateway directly is simpler.

Every example needs a jv_live_ key. Grab one on the pricing page, export it as JEV_API_KEY, and you're ready. Get a key →

If you're searching "jev openrouter", you already route your models through OpenRouter and want Jev on the same key and bill. You can — Jev is listed as typesafe/jev — but it won't behave like the chat models next to it. Jev doesn't return prose; it returns a typed, calibrated decision (a choice, a score, or a yes/no probability) for a state and a set of questions. So OpenRouter exposes it through a dedicated decisions endpoint rather than /chat/completions, and the request body is Jev's decision shape, not a messages array.

The model id and endpoint

On OpenRouter, the model id is typesafe/jev-1.13 (with a typesafe/jev-latest alias). Unlike a chat model, you don't POST to /api/v1/chat/completions — you use the decisions endpoint, which OpenRouter still marks alpha, authenticated with your normal OpenRouter key. One gotcha: Jev won't appear in GET /api/v1/models, because that list is for models that produce text and Jev's output type is decisions — find it on its TypeSafe provider page instead. Check the live card and pricing at openrouter.ai/typesafe before you wire it up.

POST https://openrouter.ai/api/alpha/decisions
Authorization: Bearer $OPENROUTER_API_KEY
Content-Type: application/json

A working request

The body is the same state + questions shape as the Jev API — only the host and auth change. One call, two typed answers you branch on directly:

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": "Customer: I was charged twice and I am furious.",
    "questions": {
      "topic":  { "type": "choice", "instructions": "What is this about?",
                  "criteria": { "billing": "money problems", "bug": "broken product" } },
      "urgent": { "type": "noul", "instructions": "Escalate to a human now?" }
    }
  }'

You get back a typed answers map — answers.topic.choice is one of your keys, answers.urgent.noul is a probability between 0 and 1 — so your code branches on it with no parsing and no risk of a malformed response.

Route jev-mcp through OpenRouter

Already using the open jev-mcp server in Claude Code, Cursor or Codex? Point it at OpenRouter by setting the base URL and using your OpenRouter key, and every agent decision routes through OpenRouter's bill:

JEV_BASE_URL=https://openrouter.ai/api/alpha/decisions
TYPESAFE_API_KEY=$OPENROUTER_API_KEY   # your OpenRouter key
JEV_MODEL=typesafe/jev-latest

OpenRouter vs the instant hosted key

Use OpenRouter when you deliberately centralize every model on one provider, key and invoice — the convenience is having Jev on the same bill as your LLMs. If you just want Jev working in two minutes without touching OpenRouter, this site issues an instant hosted jv_live_ key that hits our metered gateway directly (POST /api/v1/decide) — same typed decisions, self-serve, billed per input token with output free. Many teams try Jev on the hosted key first, then move it onto their OpenRouter account once it's in production.

FAQ

Is Jev available on OpenRouter?

Yes — TypeSafe serves Jev on OpenRouter as typesafe/jev-1.13. But because Jev is a typed decision model, not a chat model, you reach it through OpenRouter's alpha decisions endpoint (POST /api/alpha/decisions), not the standard chat-completions path. It also won't show up in GET /api/v1/models — find it on the TypeSafe provider page.

What is the Jev model id on OpenRouter?

typesafe/jev-1.13, with a typesafe/jev-latest alias. Set it as model in the decisions request body, authenticated with your OpenRouter Bearer key.

Why can't I call Jev at OpenRouter's chat-completions endpoint?

Because Jev doesn't generate chat text. It takes a state plus typed questions and returns typed, calibrated answers, so it uses a dedicated decisions endpoint whose body is Jev's decision shape rather than a messages array.

Can I route jev-mcp through OpenRouter?

Yes. Set JEV_BASE_URL to the OpenRouter decisions endpoint and use your OpenRouter key as TYPESAFE_API_KEY, with JEV_MODEL=typesafe/jev. Every agent decision then routes through OpenRouter.

OpenRouter or the hosted jv_live_ key — which should I use?

OpenRouter if you want Jev on the same provider, key and bill as your other models. The hosted jv_live_ key if you just want Jev working instantly without touching OpenRouter — it hits our metered gateway directly at ~$0.001 per decision, output free.

See also: Jev MCP server (config) · All ways to get Jev · Get a Jev API key

Try Jev before you wire it in

Run a real, typed decision in the browser — free, no signup — then drop your key into the example above.

▶ Try Jev freeGet an API key →
Use Jev on OpenRouter — the decisions endpoint, model id & setup · Jev by TypeSafe AI