Unofficial guide · Jev / TypeSafe
Jev model IDs by channel: endpoints, field names and schema quirks on TypeSafe, OpenRouter, Vercel and Cloudflare
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 / surface | Endpoint | Auth | Model ID(s) | Pinned version |
|---|---|---|---|---|
| TypeSafe direct | POST https://api.typesafe.ai/v1/systemone | Authorization: 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.0 | jev-1.13.0 |
| OpenRouter: Decisions API | POST https://openrouter.ai/api/alpha/decisions | Bearer OpenRouter key (OPENROUTER_API_KEY in examples) | typesafe/jev-1.13, ~typesafe/jev-latest | typesafe/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 key | Bare jev-1.13 maps to typesafe/jev-1.13; jev-latest maps to ~typesafe/jev-latest | jev-1.13 (maps to typesafe/jev-1.13) |
| Vercel AI Gateway: TypeSafe-compatible API | POST https://ai-gateway.vercel.sh/typesafe/v1/systemone, GET https://ai-gateway.vercel.sh/typesafe/v1/models | AI Gateway API key (AI_GATEWAY_API_KEY) or Vercel OIDC token | typesafe-ai/jev | Docs list only this unversioned ID |
| Vercel AI Gateway: HTTP evaluation | POST https://ai-gateway.vercel.sh/v1/evaluate | AI Gateway API key or OIDC token | typesafe-ai/jev | Docs list only this unversioned ID |
| Vercel: AI SDK | experimental_evaluate (AI SDK 7.0.105 or later, per Vercel's changelog) | AI_GATEWAY_API_KEY or OIDC token | typesafe-ai/jev | Docs list only this unversioned ID |
| Cloudflare Workers AI: Worker binding | env.AI.run('typesafe/jev', { state, questions }) | Worker AI binding | typesafe/jev | Docs list only this unversioned ID |
| Cloudflare Workers AI: REST | POST https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run, body {"model":"typesafe/jev","input":{state, questions}} | Bearer $CLOUDFLARE_API_TOKEN | typesafe/jev | Docs 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 slugtypesafe/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/evaluateHTTP API and the TypeSafe-compatible API. - What is Jev's model ID on Cloudflare Workers AI?
typesafe/jev, called withenv.AI.run('typesafe/jev', …)in a Worker or through Cloudflare's/ai/runREST 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-previewas of 25 Sep 2026. TypeSafe says "There is no preview build available right now", so the alias points to the samejev-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
stateandquestionssit insideinput, not at the top level as on TypeSafe. - Catalog gotcha, OpenRouter. The default
https://openrouter.ai/api/v1/modelslist 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)
| Surface | Yes/no type → answer field | Choice/Score confidence | Usage fields | Response model |
|---|---|---|---|---|
| TypeSafe direct | noul → answers.refund.noul | answers.team.confidence | usage.input_tokens | See our response example |
| OpenRouter (both surfaces) | noul → answers.refund.noul | answers.team.confidence | Adds usage.cost in USD, plus top-level id and provider | The dated OpenRouter slug, such as typesafe/jev-1.13-20260917 |
Vercel /typesafe | noul → answers.refund.noul | Not confirmed | TypeSafe names (usage.input_tokens) | typesafe-ai/jev (unversioned) in Vercel's response example |
Vercel /v1/evaluate | boolean → probability | Not confirmed | camelCase (inputTokens) | typesafe-ai/jev (unversioned) in Vercel's response example |
AI SDK experimental_evaluate | boolean → probability | result.providerMetadata.typesafe.confidence.team | camelCase (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.noul | answers.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.
| Rule | TypeSafe API reference | OpenRouter Decisions API spec | Cloudflare input schema |
|---|---|---|---|
Noul criteria | Optional; true or false can be given alone | If present, needs both true and false | Optional true / false (nullable) |
| Score levels | At least 2; the API accepts up to 10 | minItems: 1, no maximum shown | minItems: 2, no maximum in the schema |
| Choice options | Up to 255 | Not confirmed | 255 cap not encoded in the schema |
| Extra optional fields | None listed here | provider, session_id, trace, user | None 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/modelsreturns TypeSafe's model list. - OpenRouter:
typesafe/jev-1.13, or barejev-1.13through the System One API. Responses name the dated slug. - Vercel AI Gateway:
typesafe-ai/jevis the only ID in the docs we checked. Vercel lists two providers for it: TypeSafe AI and DigitalOcean. - Cloudflare Workers AI:
typesafe/jevis the only ID in the docs we checked. Cloudflare's output schema requires amodelstring in every response, and its examples showmodel: "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 passmodel: 'typesafe-ai/jev', though its migration snippet leavesmodelout; 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 readsTYPESAFE_AI_API_KEY(notTYPESAFE_API_KEY) and defaults to basehttps://api.typesafe.ai/v1. - SDK versions on 25 Sep 2026: Python
typesafe-sdk0.7.1 (Python 3.10 or newer); JavaScript@typesafe-ai/sdk0.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.
| Channel | What 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/runREST endpoint (Table A). - Response names: TypeSafe's own (
noul,choice,score,confidence), plususage.input_tokensandusage.output_tokens. Cloudflare's examples showmodel: "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.
- TypeSafe docs: API reference
- TypeSafe docs: Models (IDs, aliases, pinning, context, price)
- TypeSafe docs: Quick start (auth)
- TypeSafe docs: Python SDK constants (env vars)
- TypeSafe docs: JavaScript SDK env vars
- TypeSafe docs: Confidence
- PyPI: typesafe-sdk (JSON API)
- npm registry: @typesafe-ai/sdk
- OpenRouter docs: Jev guide (access, context window)
- OpenRouter docs: Jev tutorial
- OpenRouter docs: Using the TypeSafe SDK with OpenRouter
- OpenRouter API reference: Submit a Decisions request
- OpenRouter: TypeSafe Jev 1.13 model page
- OpenRouter API: models catalog with all output modalities
- Vercel docs: TypeSafe API on AI Gateway
- Vercel docs: AI Gateway evaluation
- Vercel docs: AI Gateway rate limits
- Vercel: Jev model page
- Vercel AI Gateway: models catalog
- Vercel changelog: TypeSafe AI's Jev now available on AI Gateway (16 Sep 2026)
- Vercel changelog: AI Gateway now supports TypeSafe clients and HTTP API for Jev (21 Sep 2026)
- AI SDK docs: TypeSafe AI provider
- Cloudflare docs: Jev model page
- Cloudflare docs: Jev input schema
- Cloudflare docs: Jev output schema
Checked 25 September 2026