Last updated: September 2026
How to get a Jev API key
TypeSafe's direct API is in early access and gated behind a waitlist. Three gateways are not: Vercel AI Gateway, OpenRouter and Cloudflare AI Gateway all serve Jev today without one.
Whichever route you take, the pricing is the same: TypeSafe's published $0.042 per 1M input tokens, output free, and no free tier anywhere. Below: each route, the exact model string, the SDKs, and the one schema difference that silently breaks code copied between them.
The four routes in
Sources: typesafe.ai, Vercel's changelog, OpenRouter and LiteLLM, September 2026. Early access moves fast, so check the model page before you commit.
Route 1: the direct API, with the waitlist
Sign up at typesafe.ai. Keys are issued in batches. Once you are in, the console is at console.typesafe.ai and keys live under API Keys. The console also has a playground: paste a state on the left, add questions of the three types, run them against jev-latest.
The endpoint is POST https://api.typesafe.ai/v1/systemone. It is not OpenAI-compatible. There is no /chat/completions, no messages array and no temperature. Pointing an OpenAI client at it does not work.
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state": "Shipped the rewrite. 40% fewer lines, same features.",
"model": "jev-1.13.0",
"questions": {
"is_bait": {
"type": "noul",
"instructions": "This post asks the reader for likes, replies or follows."
}
}
}'The SDKs
Both read TYPESAFE_API_KEY from the environment, so neither quickstart passes a key explicitly.
pip install typesafe-sdk # Python 3.10 or newer
npm install @typesafe-ai/sdk # Node 20 or newerfrom typesafe_sdk import Choice, Noul, Score, TypeSafeClient
client = TypeSafeClient()
response = client.system_one(
state={"draft_post": text, "platform": "X (Twitter)"},
questions={
"intent": Choice(
instructions="What does this reply want from the account owner",
criteria={
"bug_report": "Describes something that is broken",
"question": "Asks for information or help",
"praise": "Positive feedback with nothing requested",
},
),
"is_bait": Noul(
instructions="This post asks the reader for likes, replies or follows.",
),
},
)
print(response.answers["intent"].choice) # "bug_report"
print(response.answers["intent"].confidence) # 0.744
print(response.answers["is_bait"].noul) # 0.04import { TypeSafeClient, choice, noul } from '@typesafe-ai/sdk';
const client = new TypeSafeClient();
const { answers } = await client.systemOne({
state: { draft_post: text, platform: 'X (Twitter)' },
questions: {
intent: choice('What does this reply want from the account owner', {
bug_report: 'Describes something that is broken',
question: 'Asks for information or help',
praise: 'Positive feedback with nothing requested',
}),
is_bait: noul('This post asks the reader for likes, replies or follows.'),
},
});
answers.intent.choice; // "bug_report"
answers.is_bait.noul; // 0.04Answer types are inferred from the questions you pass, so the TypeScript client knows that answers.intent has a choice and answers.is_bait does not. The field each type returns is in Choice vs Score vs Noul.
Route 2: Vercel AI Gateway, no waitlist
The gateway serves Jev as typesafe-ai/jev through the AI SDK's experimental_evaluate, which needs AI SDK 7.0.105 or newer. You authenticate with your Vercel AI Gateway credentials, not a TypeSafe key. This is the fastest way in if you are already on the AI SDK.
import { experimental_evaluate as evaluate } from 'ai';
const result = await evaluate({
model: 'typesafe-ai/jev',
state: 'The support agent issued a full refund to the customer.',
questions: {
refunded: {
type: 'boolean',
instructions: 'Was a refund issued?',
},
},
providerOptions: {
gateway: { zeroDataRetention: true },
},
});The AI SDK spells a Noul as boolean
This is the one difference that breaks copied code. On the native TypeSafe API the question type is"noul". Through the Vercel AI SDK it is 'boolean'. The two schemas look close enough to mix by accident and then fail validation on whichever half you did not test. Pick one route per codebase, or wrap it so the spelling lives in one file.Vercel also documents per-request Zero Data Retention and No Training for Jev on the gateway, set with providerOptions.gateway.zeroDataRetention. On the direct API, TypeSafe's privacy policy states it will not train or fine-tune on customer input and will not disclose input to third parties other than service providers. Retention tiering on the direct API is not documented publicly, so if retention is a requirement, ask before you build.
Routes 3 and 4: OpenRouter and Cloudflare
OpenRouter lists Jev in beta as typesafe/jev-1.13 alongside typesafe/jev-latest. If you already route models through OpenRouter, this is one string away. Because it is beta, read the model page for the current request shape rather than assuming it matches the native API.
Cloudflare AI Gateway serves it as typesafe/jev through the /ai/run evaluation schema. Note the word evaluation: this is not the chat-completions path, and a Jev call through Cloudflare does not look like any other model call you make there.
LiteLLM documents pass-through support, which is different from the three above. Pass-through proxies your own TypeSafe key, so it does not get you past the waitlist. It is worth knowing about if you want one client and one set of logs across providers.
None of these change the model. Same 64k request budget, same 255-option Choice ceiling, same 70ms to 500ms TypeSafe publishes. The gateway-specific parts are auth, the model string and the schema spelling. The limits themselves are on the limits page.
On cost, honestly
There is no free tier. TypeSafe has not published a free allowance, a trial credit or a hobby plan, and none of the gateways add one. What there is instead is a price low enough that the first thing you build is unlikely to cost you a dollar: $0.042 per 1M input tokens with output free, per TypeSafe's published pricing at typesafe.ai.
For a sense of scale on social content, a 220-character post across seven questions is about 430 input tokens, or about $0.000018. A thousand drafts is under two cents. A million posts is about eighteen dollars. The limits page works through the rest of the arithmetic, including the point where the request cap costs you more than the tokens do.
One more thing worth budgeting for that is not a token cost: the time to calibrate. Thresholds tuned on somebody else's examples do not transfer. Run Jev in shadow against your existing behaviour for a week, log the answers, and set your cutoffs from your own labels.
Keep exploring
The primitives, the limits, and what Jev does and does not guarantee.
Choice vs Score vs Noul
The three question types with exact request and response JSON, and the gotchas.
Jev rate limits and context window
64k per request, 1,200 requests a minute, and which cap binds first.
Is Jev an LLM?
No. Typed decisions in one parallel pass, and no text generation at all.
Can Jev hallucinate?
Schema conformance is guaranteed. Factual accuracy is not.
Jev vs GPT
Cost, latency and accuracy against the frontier models.
Will it go viral?
Jev running in production on a free X post scorer. No key needed, no signup.
No key yet? Try it anyway
Will it go viral? runs seven Jev questions over any X draft, hosted, so you do not need your own key. It is free, needs no signup and shows the confidence band the model returns, which is the fastest way to see what a System One answer actually looks like. When you want to publish what you scored, the OpenTweet API posts to X, Bluesky and LinkedIn in one call.