Skip to content

Jev on OpenRouter: Model typesafe/jev-1.13

Last checked · Independent guide, not affiliated with TypeSafe AI

ANSWER

On OpenRouter, Jev is the model typesafe/jev-1.13 and is called through a separate alpha endpoint, POST https://openrouter.ai/api/alpha/decisions, not the chat completions API. It costs $0.042 per million input tokens with free output, has a 32,000-token context window and needs prepaid credits.

OpenRouter added Jev on September 18, 2026, three days after TypeSafe’s launch. Because Jev returns decisions rather than text, OpenRouter serves it through a dedicated Decisions endpoint that is still marked alpha.

Item Value
Model typesafe/jev-1.13 (provider: TypeSafe)
Endpoint POST https://openrouter.ai/api/alpha/decisions
Auth Authorization: Bearer <OpenRouter key>
Price $0.042 per 1M input tokens, $0 per 1M output tokens
Context window 32,000 tokens
Free tier None for Jev; you need credits on the account
Question types noul, choice, score (same names as TypeSafe)

Why Jev is “missing” from the models list

Section titled “Why Jev is “missing” from the models list”

If you query GET /api/v1/models, Jev does not appear. That list covers models that produce text; Jev’s output type is decisions. Find it on OpenRouter’s model page or its TypeSafe provider page instead, and do not send it to /api/v1/chat/completions.

The body is almost the same as on TypeSafe’s own API: model, state and a questions map. This example follows OpenRouter’s API reference:

Terminal window
curl -s https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": {
"message": "My invoice lists two seats, but only one of us can sign in, and the login page keeps timing out.",
"plan": "team"
},
"questions": {
"queue": {
"type": "choice",
"instructions": "Which team should handle this message?",
"criteria": {
"billing": "Charges, invoices, refunds, seats on the bill",
"technical": "Bugs, outages, login problems, integrations",
"other": "Anything else"
}
},
"angry": { "type": "noul", "instructions": "Is the customer angry?" }
}
}'

According to OpenRouter’s API reference, the response carries the same answers object you get from TypeSafe, plus a few OpenRouter fields:

Field What it holds
answers One typed answer per question: noul; choice with probabilities and confidence; score with legend, probabilities and confidence
id A generation ID starting with gen-dec-
model The dated version that answered, for example typesafe/jev-1.13-20260917
provider TypeSafe
usage input_tokens, output_tokens and cost in dollars

The usage.cost field is handy: in OpenRouter’s documented example, 476 input tokens cost $0.000019992, exactly 476 × $0.042 per million.

OpenRouter’s official TypeScript, Python and Go SDKs expose the same call under an Alpha.Decisions section.

  • Context: 32,000 tokens on OpenRouter versus 64k per request on TypeSafe. In practice TypeSafe also caps the state plus the longest question at 32k, so large states hit a limit either way.
  • Model naming: typesafe/jev-1.13 here; jev-1.13.0 or jev-latest on TypeSafe. The OpenRouter name will not work on TypeSafe, and TypeSafe rejects jev-1.13 without the patch number.
  • Errors: OpenRouter wraps errors as {"error": {"code": ..., "message": ...}} instead of TypeSafe’s {"detail": ...}.
  • SDKs: TypeSafe’s official SDKs point at TypeSafe’s API. To use OpenRouter from Python or JavaScript, use OpenRouter’s SDKs or plain HTTP.
HTTP Message What to do
401 “No cookie auth credentials found” (what we got with no header) or “Missing Authentication header” (documented) Send Authorization: Bearer <key>
402 “Insufficient credits. Add more using https://openrouter.ai/credits Top up the account. See 402 Insufficient credits
400 “Invalid request parameters” Check type, criteria and the model name
413 “Request payload too large” Shrink the state
429 “Rate limit exceeded” Back off and retry. See 429

We confirmed on September 19, 2026 that the endpoint exists (an unauthenticated POST returns 401 rather than 404). We have not yet run paid calls through OpenRouter, so the response details above come from OpenRouter’s reference rather than our own logs.

OpenRouter is the quickest way to try Jev if your TypeSafe account is still on the waitlist: add credits and send the request above. If you already use OpenRouter for your LLM calls, it also keeps billing in one place. For long-term production use, compare it with the other channels, especially if you want the official SDKs or version pinning.

Sources

  1. Jev 1.13: API pricing & providers (OpenRouter)
  2. Submit a Decisions (questions and answers) request (OpenRouter API reference)
  3. API reference (TypeSafe docs)