Unofficial guide · Jev / TypeSafe

Jev model IDs by channel: endpoints, field names and schema quirks on TypeSafe, OpenRouter, Vercel and Cloudflare

By Ben (BenX) · Published · Last checked against official sources

Jev from TypeSafe AI is documented on four channels: TypeSafe directly, OpenRouter, Vercel AI Gateway and Cloudflare Workers AI. The request idea is the same everywhere (a state plus typed questions). What changes is the model ID, the endpoint, the name of the yes/no type (noul or boolean), where Choice and Score confidence lives, and whether you can pin a version.

Independent guide. aiedu.guide is not affiliated with TypeSafe AI, Jev, OpenRouter, Vercel or Cloudflare, and is not endorsed or sponsored by any of them. Product names belong to their owners, and the public docs we checked are listed at the end.

We compiled this from each platform's documentation on 25 Sep 2026. We have not made live calls on every channel.

This page is the field-level reference. For access, sign-up and billing on each route, see four ways to get a Jev API key.

What is the Jev model ID on each channel?

Short answer: It differs: jev-latest or pinned jev-1.13.0 on TypeSafe, typesafe/jev-1.13 or ~typesafe/jev-latest on OpenRouter, typesafe-ai/jev on Vercel AI Gateway, and typesafe/jev on Cloudflare Workers AI. Set the model per channel, because the ID strings don't carry over.

Table A: IDs, endpoints and auth (last checked 25 Sep 2026)

Channel / surfaceEndpointAuthModel ID(s)Pinned version
TypeSafe directPOST https://api.typesafe.ai/v1/systemoneAuthorization: Bearer <API_KEY> (SDKs read TYPESAFE_API_KEY)jev-latest, jev-preview (both point to jev-1.13.0 as of 25 Sep 2026), jev-1.13.0jev-1.13.0
OpenRouter: Decisions APIPOST https://openrouter.ai/api/alpha/decisionsBearer OpenRouter key (OPENROUTER_API_KEY in examples)typesafe/jev-1.13, ~typesafe/jev-latesttypesafe/jev-1.13
OpenRouter: System One API (TypeSafe SDK path)POST https://openrouter.ai/api/v1/systemone (SDK base URL https://openrouter.ai/api)OpenRouter keyBare jev-1.13 maps to typesafe/jev-1.13; jev-latest maps to ~typesafe/jev-latestjev-1.13 (maps to typesafe/jev-1.13)
Vercel AI Gateway: TypeSafe-compatible APIPOST https://ai-gateway.vercel.sh/typesafe/v1/systemone, GET https://ai-gateway.vercel.sh/typesafe/v1/modelsAI Gateway API key (AI_GATEWAY_API_KEY) or Vercel OIDC tokentypesafe-ai/jevDocs list only this unversioned ID
Vercel AI Gateway: HTTP evaluationPOST https://ai-gateway.vercel.sh/v1/evaluateAI Gateway API key or OIDC tokentypesafe-ai/jevDocs list only this unversioned ID
Vercel: AI SDKexperimental_evaluate (AI SDK 7.0.105 or later, per Vercel's changelog)AI_GATEWAY_API_KEY or OIDC tokentypesafe-ai/jevDocs list only this unversioned ID
Cloudflare Workers AI: Worker bindingenv.AI.run('typesafe/jev', { state, questions })Worker AI bindingtypesafe/jevDocs list only this unversioned ID
Cloudflare Workers AI: RESTPOST https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run, body {"model":"typesafe/jev","input":{state, questions}}Bearer $CLOUDFLARE_API_TOKENtypesafe/jevDocs list only this unversioned ID

Quick answers:

  • What is Jev's model ID on OpenRouter? typesafe/jev-1.13, or the alias ~typesafe/jev-latest. Responses report the dated slug typesafe/jev-1.13-20260917.
  • What is Jev's model ID on Vercel AI Gateway? typesafe-ai/jev, the same ID for the AI SDK, the /v1/evaluate HTTP API and the TypeSafe-compatible API.
  • What is Jev's model ID on Cloudflare Workers AI? typesafe/jev, called with env.AI.run('typesafe/jev', …) in a Worker or through Cloudflare's /ai/run REST endpoint.

Details that trip people up:

  • TypeSafe vs OpenRouter version strings. TypeSafe's versioned ID has a patch number (jev-1.13.0). OpenRouter's does not (jev-1.13). OpenRouter's canonical slug is dated: typesafe/jev-1.13-20260917.
  • jev-preview as of 25 Sep 2026. TypeSafe says "There is no preview build available right now", so the alias points to the same jev-1.13.0.
  • OpenRouter Decisions API is alpha. It sits under /alpha/, and OpenRouter tags it as an alpha feature endpoint.
  • Cloudflare wraps the request. Over REST, the model goes in the body and state and questions sit inside input, not at the top level as on TypeSafe.
  • Catalog gotcha, OpenRouter. The default https://openrouter.ai/api/v1/models list does not show Jev, because its modality is "text->decisions". It appears with ?output_modalities=all.
  • Catalog gotcha, Cloudflare. Jev is in Cloudflare's newer AI model catalog (/ai/models/), not on the older Workers AI models page, and /workers-ai/models/jev/ returns 404.

Where do the answer fields live on each channel?

Short answer: TypeSafe's own answer format (answers.<id>.noul, .choice, .confidence) is used on TypeSafe, OpenRouter and Cloudflare, and Vercel's /typesafe path keeps TypeSafe names. Vercel's /v1/evaluate and the AI SDK rename the yes/no type, use camelCase usage fields, and the AI SDK moves confidence into provider metadata.

Table B: field paths for a Noul named refund and a Choice named team (last checked 25 Sep 2026)

SurfaceYes/no type → answer fieldChoice/Score confidenceUsage fieldsResponse model
TypeSafe directnoul → answers.refund.noulanswers.team.confidenceusage.input_tokensSee our response example
OpenRouter (both surfaces)noul → answers.refund.noulanswers.team.confidenceAdds usage.cost in USD, plus top-level id and providerThe dated OpenRouter slug, such as typesafe/jev-1.13-20260917
Vercel /typesafenoul → answers.refund.noulNot confirmedTypeSafe names (usage.input_tokens)typesafe-ai/jev (unversioned) in Vercel's response example
Vercel /v1/evaluateboolean → probabilityNot confirmedcamelCase (inputTokens)typesafe-ai/jev (unversioned) in Vercel's response example
AI SDK experimental_evaluateboolean → probabilityresult.providerMetadata.typesafe.confidence.teamcamelCase (inputTokens)With the direct TypeSafe provider, "the actual model ID, such as the resolved version behind the alias" (AI SDK docs). The docs we checked don't show it for calls through AI Gateway.
Cloudflare (binding or REST)noul → answers.refund.noulanswers.team.confidence (required in Cloudflare's output schema)usage.input_tokens and usage.output_tokens (both required in Cloudflare's output schema)jev-1.13.0 in Cloudflare's examples (the schema only requires a string)

"Not confirmed" means the docs we checked don't show it. It does not mean the field is missing.

OpenRouter's two examples of usage.cost don't agree. In its Jev tutorial, 476 input tokens cost 0.000019992 USD, which is the $0.042 per million input tokens list price. In its guide to using the TypeSafe SDK, 275 input tokens cost 0.00003 USD, about $0.109 per million. Check usage.cost on your own responses.

Is it noul or boolean?

Short answer: noul wherever TypeSafe's own request format is used. boolean, with the answer in probability, on Vercel's /v1/evaluate endpoint and in the AI SDK: same concept, different key.

TypeSafe, OpenRouter, Vercel /typesafe and Cloudflare:

"questions": {
  "refund": { "type": "noul", "instructions": "Is the customer asking for money back?" }
}

Vercel /v1/evaluate and the AI SDK:

questions: {
  refund: { type: 'boolean', instructions: 'Is the customer asking for money back?' },
}

On Vercel, is it noul or boolean? On Vercel's /v1/evaluate endpoint and in the AI SDK, the yes/no type is named boolean and the answer field is probability. Vercel's TypeSafe-compatible path keeps noul.

Don't mix the two names in one codebase without a clear boundary. For what each question type is for, see Noul vs Choice vs Score: which question type to use.

Why is Choice confidence missing in my AI SDK result?

Short answer: The AI SDK doesn't put TypeSafe's confidence on the answer. It sits in result.providerMetadata.typesafe.confidence, keyed by question ID, for Choice and Score questions.

Where is Choice confidence in the AI SDK? In result.providerMetadata.typesafe.confidence, keyed by question ID. It is not on the answer object.

const teamConfidence = result.providerMetadata?.typesafe?.confidence?.team;

if (teamConfidence === undefined) {
  // No confidence: send to your fallback path, don't guess a value
}

Don't use the selected option's probability in its place when you port a rule from TypeSafe. TypeSafe notes that confidence and the winning option's probability measure different things. To set Jev confidence thresholds that survive a channel switch, gate on the same field everywhere.

Do the request rules differ by channel?

Short answer: Slightly. The field names match, but OpenRouter's Decisions API and Cloudflare's schema encode some rules differently from TypeSafe's API reference.

RuleTypeSafe API referenceOpenRouter Decisions API specCloudflare input schema
Noul criteriaOptional; true or false can be given aloneIf present, needs both true and falseOptional true / false (nullable)
Score levelsAt least 2; the API accepts up to 10minItems: 1, no maximum shownminItems: 2, no maximum in the schema
Choice optionsUp to 255Not confirmed255 cap not encoded in the schema
Extra optional fieldsNone listed hereprovider, session_id, trace, userNone listed here

The safest request is one that meets all of them: give Noul criteria both true and false if you give either, and keep Score levels between 2 and 10.

How do I pin a Jev version on each channel?

Short answer: On TypeSafe, send jev-1.13.0; on OpenRouter, send typesafe/jev-1.13. Vercel and Cloudflare docs list only an unversioned ID, so log the response's model field where you get one and re-test when it changes.

Why it matters: an alias such as jev-latest moves when a new release ships. TypeSafe's Models page says to pin a versioned ID if you have tuned thresholds.

  • TypeSafe: jev-1.13.0. GET https://api.typesafe.ai/v1/models returns TypeSafe's model list.
  • OpenRouter: typesafe/jev-1.13, or bare jev-1.13 through the System One API. Responses name the dated slug.
  • Vercel AI Gateway: typesafe-ai/jev is the only ID in the docs we checked. Vercel lists two providers for it: TypeSafe AI and DigitalOcean.
  • Cloudflare Workers AI: typesafe/jev is the only ID in the docs we checked. Cloudflare's output schema requires a model string in every response, and its examples show model: "jev-1.13.0", so log it.

Can I keep the TypeSafe SDK and switch channels?

Short answer: Yes for OpenRouter and Vercel: change the base URL and the key, and set the model ID for that channel. Cloudflare's model page shows only the Worker binding and the /ai/run REST endpoint, so call those directly.

Can I use TypeSafe's SDK with OpenRouter or Vercel? Yes. Change the base URL (https://openrouter.ai/api or https://ai-gateway.vercel.sh/typesafe) and use that platform's key.

OpenRouter, with environment variables only:

export TYPESAFE_API_KEY="<your OpenRouter key>"
export TYPESAFE_BASE_URL="https://openrouter.ai/api"

Vercel AI Gateway, TypeScript:

import { TypeSafeClient } from '@typesafe-ai/sdk';

const client = new TypeSafeClient({
  apiKey: process.env.AI_GATEWAY_API_KEY,
  baseURL: 'https://ai-gateway.vercel.sh/typesafe',
});

Quirks to know:

  • Default model. The SDKs default to jev-latest (TYPESAFE_DEFAULT_MODEL). On OpenRouter that maps to ~typesafe/jev-latest. Vercel's request examples pass model: 'typesafe-ai/jev', though its migration snippet leaves model out; we suggest passing it explicitly on Vercel.
  • client.models.list() fails on OpenRouter. OpenRouter's guide says the SDK rejects the shape of OpenRouter's models response.
  • Different env var for the AI SDK's direct provider. Calling TypeSafe through the AI SDK without the Gateway uses the package @ai-sdk/typesafe-ai, which reads TYPESAFE_AI_API_KEY (not TYPESAFE_API_KEY) and defaults to base https://api.typesafe.ai/v1.
  • SDK versions on 25 Sep 2026: Python typesafe-sdk 0.7.1 (Python 3.10 or newer); JavaScript @typesafe-ai/sdk 0.6.0 (Node 20 or newer).

Can I call Jev through an OpenAI-compatible endpoint?

Short answer: Not as documented. Vercel says evaluation is not supported through its OpenAI-compatible endpoints, and TypeSafe, OpenRouter and Cloudflare document no OpenAI-compatible endpoint for Jev.

TypeSafe's API uses its own state / questions / answers shape. OpenRouter documents only its Decisions and System One surfaces for Jev, and its catalog lists no supported chat parameters. Cloudflare shows only the binding and /ai/run.

What context window does Jev have on each channel?

Short answer: Sources disagree. TypeSafe documents 64k tokens per request in total, with 32k for the state plus the longest question; OpenRouter and Cloudflare each list 32,000 tokens, and Vercel's catalog shows both figures.

ChannelWhat the source says
TypeSafe (Models page)64k tokens per request in total; 32k tokens for state plus the longest question
OpenRouter (Jev guide and model page)32,000 tokens (32K on the model page): "That's the state you send plus the questions."
Vercel AI Gateway (catalog)context_window 32000, while the catalog description says "64,000 tokens total per request; 32,000 tokens for the state plus the longest question"
Cloudflare Workers AI (model page)32,000 tokens

We don't pick between these. If a request is near the limit, test it on the channel you use. For TypeSafe's rate limits and price, see Jev limits and price.

How do Jev errors and rate limits differ by channel?

Short answer: TypeSafe documents four error codes (401, 422, 429 and 529), and its SDKs retry 429 and 529 with backoff. On Vercel AI Gateway, a 429 can also come from the upstream provider; Cloudflare's public pages give no Jev-specific rate limit.

  • TypeSafe: what each code means is in Jev API errors (401, 422, 429, 529).
  • Vercel AI Gateway: Vercel says "AI Gateway does not rate limit paid-tier requests", the free tier has lower per-model limits, and a 429 can come from the upstream provider. Vercel gives no Jev-specific number. Jev isn't on Vercel's free tier (its model page showed Free Tier "No" on 28 Sep 2026), and Vercel says models outside the free tier need purchased AI Gateway Credits.
  • Cloudflare Workers AI: Cloudflare's public pages give no Jev-specific rate limit.

What does Cloudflare list for Jev?

Short answer: Cloudflare lists Jev in its AI model catalog as typesafe/jev, a third-party model with zero data retention and a 32,000-token context window (TypeSafe's own docs say 64k tokens per request in total). $0.042 per 1M input tokens on Vercel and Cloudflare, checked 28 Sep 2026. Cloudflare's public pages give no Jev-specific rate limit.

  • Tags: "Third-party", "Zero data retention".
  • Task label: "Text Generation", even though Jev returns decisions rather than text.
  • Calls: the Worker binding or the /ai/run REST endpoint (Table A).
  • Response names: TypeSafe's own (noul, choice, score, confidence), plus usage.input_tokens and usage.output_tokens. Cloudflare's examples show model: "jev-1.13.0".
  • Price and limits: $0.042 per 1M input tokens on Vercel and Cloudflare, checked 28 Sep 2026. Cloudflare's public pages give no Jev-specific rate limit.

Which channel should I use?

Short answer: Pick the platform you already have an account and billing with. We compare access, sign-up and billing in four ways to get a Jev API key.

Two things from that guide, in one line each. Jev launched in early access, so new direct TypeSafe accounts may have to wait; we could not confirm the sign-up status as of 25 Sep 2026 (see Is there still a Jev waitlist?).

Do I need a TypeSafe account to use Jev on OpenRouter? No, according to OpenRouter's docs. An OpenRouter API key is enough.

On price, TypeSafe lists Jev at $0.042 per million input tokens, with output tokens free. $0.042 per 1M input tokens on Vercel and Cloudflare, checked 28 Sep 2026. Prices can change, so check each platform's own page before you budget.

FAQ

What is Jev's model ID on OpenRouter?

typesafe/jev-1.13, or the alias ~typesafe/jev-latest. Responses report the dated slug typesafe/jev-1.13-20260917.

What is Jev's model ID on Vercel AI Gateway?

typesafe-ai/jev, the same ID for the AI SDK, the /v1/evaluate HTTP API and the TypeSafe-compatible API.

What is Jev's model ID on Cloudflare Workers AI?

typesafe/jev, called with env.AI.run('typesafe/jev', …) in a Worker or through Cloudflare's /ai/run REST endpoint.

On Vercel, is it noul or boolean?

On Vercel's /v1/evaluate endpoint and in the AI SDK, the yes/no type is named boolean and the answer field is probability. Vercel's TypeSafe-compatible path keeps noul.

Where is Choice confidence in the AI SDK?

In result.providerMetadata.typesafe.confidence, keyed by question ID. It is not on the answer object.

Can I use TypeSafe's SDK with OpenRouter or Vercel?

Yes. Change the base URL (https://openrouter.ai/api or https://ai-gateway.vercel.sh/typesafe) and use that platform's key.

Do I need a TypeSafe account to use Jev on OpenRouter?

No, according to OpenRouter's docs. An OpenRouter API key is enough.

Next steps

Official sources

Facts on this page come from these pages. Jev launched in September 2026 and details change quickly, so check the official page before you rely on a number.

Checked 25 September 2026