Access · Last updated

Jev on OpenRouter

Jev on OpenRouter is the marketplace door: you hold an OpenRouter key, they forward System One calls to TypeSafe, and the invoice is OR’s. Snapshot: 2026-09-21. This is a complete setup guide. It is not chat completions and not a TypeSafe console substitute.

Buying context: Jev channels. Invoice matrix: pricing by channel. First-party twin: Jev on TypeSafe.

1. OpenRouter account, key, credits

  1. Create an account at openrouter.ai and open API keys.
  2. Create a key. Store it as OPENROUTER_API_KEY (or overload TYPESAFE_API_KEY if you point the official SDK at OR — one name, one secret).
  3. Add prepaid credit. A 402 is OpenRouter’s wallet, not TypeSafe’s documented error set.
  4. Confirm the model card: openrouter.ai/typesafe/jev-1.13 and the collection openrouter.ai/typesafe.

This site does not sell OR credit.

2. What OR lists (vendor card, 2026-09-21)

Fetched from the Jev 1.13 card:

3. Critical: System One, not chat completions

OpenRouter’s TypeSafe SDK guide is the shape to copy:

Community write-ups still mention POST https://openrouter.ai/api/alpha/decisions. Prefer the documented System One URL above; if you already ship alpha, pin what you tested.

GET /api/v1/models on OpenRouter returns OR’s list shape. The TypeSafe SDK’s models.list() may reject it — browse the TypeSafe collection on OR instead.

4. Model ID mapping

The System One API accepts TypeSafe’s bare IDs and maps them onto OpenRouter’s typesafe/ namespace:

You send OR routes as
jev-1.13 typesafe/jev-1.13
jev-latest ~typesafe/jev-latest
typesafe/jev-1.13 used as-is

First-party pin jev-1.13.0 is a TypeSafe console id. Do not assume jev-1.13.0 is the OR catalog string. Log the response model (OR’s documented example: typesafe/jev-1.13-20260917).

5. First curl

From OpenRouter’s TypeSafe SDK guide:

export OPENROUTER_API_KEY=...
curl https://openrouter.ai/api/v1/systemone \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-1.13",
    "state": "I was charged twice for my subscription.",
    "questions": {
      "refund": {
        "type": "noul",
        "instructions": "Is the customer asking for money back?"
      }
    }
  }'

Documented example response (theirs):

{
  "id": "gen-dec-1789738314-X5e5eKGQdvR9rblyX250",
  "model": "typesafe/jev-1.13-20260917",
  "provider": "TypeSafe",
  "answers": {
    "refund": { "type": "noul", "noul": 0.98 }
  },
  "usage": { "input_tokens": 275, "output_tokens": 20, "cost": 0.00003 }
}

id, provider, and usage.cost are OpenRouter extras. SDKs pass them through. Treat usage.cost as OR’s figure — do not invent a second meter.

6. TypeScript — official SDK pointed at OR

npm install @typesafe-ai/sdk
import { TypeSafeClient } from "@typesafe-ai/sdk";

const client = new TypeSafeClient({
  apiKey: process.env.OPENROUTER_API_KEY,
  baseURL: "https://openrouter.ai/api",
});

const result = await client.systemOne({
  model: "jev-1.13",
  state: "I was charged twice for my subscription.",
  questions: {
    refund: { type: "noul", instructions: "Is the customer asking for money back?" },
    department: {
      type: "choice",
      instructions: "Which team should handle this?",
      criteria: { billing: "Charges and refunds", technical: "Bugs and outages" },
    },
  },
});

console.log(result.answers.refund); // { type: 'noul', noul: 0.98 }
console.log(result.model, result.provider, result.usage);

Both SDKs also read TYPESAFE_BASE_URL. You can leave the constructor empty and set TYPESAFE_BASE_URL=https://openrouter.ai/api plus TYPESAFE_API_KEY=<OpenRouter key>.

7. Python — official SDK pointed at OR

pip install typesafe-sdk
import os
from typesafe_sdk import TypeSafeClient

client = TypeSafeClient(
    api_key=os.environ["OPENROUTER_API_KEY"],
    base_url="https://openrouter.ai/api",
)

result = client.system_one(
    model="jev-1.13",
    state="I was charged twice for my subscription.",
    questions={
        "refund": {"type": "noul", "instructions": "Is the customer asking for money back?"},
        "department": {
            "type": "choice",
            "instructions": "Which team should handle this?",
            "criteria": {"billing": "Charges and refunds", "technical": "Bugs and outages"},
        },
    },
)

print(result.answers["refund"])
print(result.usage)

Yes/no stays noul. Do not send Vercel AI SDK boolean here.

8. Pitfalls

Run your own latency probe. OR’s 0.26 s P50 is theirs.

When this door wins

No TypeSafe waitlist, prepaid OR balance, one bill next to other OR models, official SDK with only baseURL + key changed. When it loses: you need first-party 64k + Playground + a TypeSafe MSA — Jev on TypeSafe.

FAQ

Is OpenRouter hosting a second Jev?

Not on the card we fetched. Provider = TypeSafe.

Why is the weighted average below $0.042?

OR says averages can sit under list because of caching and discounts. We did not reverse-engineer $0.04152.

Does jev.pro give you OpenRouter credit?

No.

What this page does not claim

Sources