01 / TYPESAFE DIRECT HTTP API
Call the official System One endpoint
Send POST https://api.typesafe.ai/v1/systemone with a Bearer API key, jev-latest, one State, and one or more typed questions. Direct HTTP requires no SDK.
curl https://api.typesafe.ai/v1/systemone \
--request POST \
--header "Authorization: Bearer $TYPESAFE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "jev-latest",
"state": "The customer says their production service is down.",
"questions": {
"urgent": {
"type": "noul",
"instructions": "Is this request urgent?"
}
}
}'Where do I get a Jev API key?
Check key availability in the TypeSafe Console (opens in a new tab). Jev Playground cannot generate, record, or proxy your key. If your account has access, store the key server-side and revoke or rotate it in the Console when needed.
Do I need a TypeSafe account?
Yes. Direct TypeSafe API access uses a TypeSafe account and API key. Access and availability depend on your TypeSafe account.
Do I need to install Jev?
You do not install the hosted TypeSafe Jev model locally. Call HTTP directly with no SDK, install @typesafe-ai/sdk for JavaScript, or install typesafe-sdk for Python.
02 / OFFICIAL JAVASCRIPT SDK
Run Jev from JavaScript or TypeScript
npm install @typesafe-ai/sdkTYPESAFE_API_KEY=import { noul, TypeSafeClient } from '@typesafe-ai/sdk';
const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY
const response = await client.systemOne({
state: 'The customer says their production service is down.',
questions: {
urgent: noul('Is this request urgent?'),
},
});
console.log(response.answers.urgent.noul);The official SDK requires Node.js 20 or later. TypeSafeClient reads TYPESAFE_API_KEY, and systemOne() sends the typed evaluation.
Choice and Score in one request
import { choice, noul, score, TypeSafeClient } from '@typesafe-ai/sdk';
const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY
const response = await client.systemOne({
state: {
message: 'I was charged twice and cannot access my account.',
accountStatus: 'locked',
},
questions: {
refundReview: noul('Does this request require refund review?', {
true: 'A duplicate or incorrect charge needs review',
false: 'No billing correction is requested',
}),
team: choice('Which team should handle this first?', {
billing: 'Payment or refund problems',
technical: 'Account access or product problems',
}),
urgency: score('How urgently does this need attention?', [
'Routine',
'Time-sensitive',
'Blocked',
]),
},
});
console.log(response.answers.refundReview.noul);
console.log(response.answers.team.choice);
console.log(response.answers.urgency.score);03 / OFFICIAL PYTHON SDK
Run Jev from Python
pip install typesafe-sdkexport TYPESAFE_API_KEY="your-key"from typesafe_sdk import Noul, TypeSafeClient
with TypeSafeClient() as client: # reads TYPESAFE_API_KEY
response = client.system_one(
state="The customer says their production service is down.",
questions={
"urgent": Noul(instructions="Is this request urgent?")
},
)
print(response.nouls["urgent"].noul)The Python client reads TYPESAFE_API_KEY. It exposes typed result collections such as response.nouls, response.choices, and response.scores.
Choice and Score in one request
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
questions = {
"refund_review": Noul(
instructions="Does this request require refund review?",
criteria={
"true": "A duplicate or incorrect charge needs review",
"false": "No billing correction is requested",
},
),
"team": Choice(
instructions="Which team should handle this first?",
criteria={
"billing": "Payment or refund problems",
"technical": "Account access or product problems",
},
),
"urgency": Score(
instructions="How urgently does this need attention?",
criteria=["Routine", "Time-sensitive", "Blocked"],
),
}
with TypeSafeClient() as client: # reads TYPESAFE_API_KEY
response = client.system_one(
state={
"message": "I was charged twice and cannot access my account.",
"account_status": "locked",
},
questions=questions,
)
print(response.nouls["refund_review"].noul)
print(response.choices["team"].choice)
print(response.scores["urgency"].score)04 / QUESTION TYPES
Noul, Choice, and Score
Noul returns a probability for a yes/no judgment. Choice selects an allowed label. Score places the State on an ordered rubric and may be fractional.
TYPESAFE DIRECT / CLOUDFLARE
jev-latest / typesafe/jevquestion: { type: "noul", … }\nanswer: { type: "noul", noul: 0.99 }VERCEL AI SDK / GATEWAY
typesafe-ai/jevquestion: { type: "boolean", … }\nanswer: { type: "boolean", probability: 0.99 }Vercel AI SDK represents the yes/no surface as Boolean with probability. It is related to Noul, but the wire formats are not interchangeable.
New to the model? Read what Jev is and where it fits.
05 / MULTIPLE QUESTIONS
One shared State, several independent judgments
Jev evaluates several typed questions against one State in one request. Each question sees that shared State; one output is not automatically fed into another. Orchestrate dependent decisions in application code.
import { createGateway, experimental_evaluate as evaluate } from 'ai';
const gateway = createGateway({
apiKey: process.env.AI_GATEWAY_API_KEY,
});
const result = await evaluate({
model: gateway.evaluationModel('typesafe-ai/jev'),
state: {
message: 'I was charged twice and cannot access my account.',
accountStatus: 'locked',
},
questions: {
team: {
type: 'choice',
instructions: 'Which team should handle this first?',
criteria: {
billing: 'Payment or refund problems',
technical: 'Account access or product problems',
},
},
urgency: {
type: 'score',
instructions: 'How urgently does this need attention?',
criteria: ['Routine', 'Time-sensitive', 'Blocked'],
},
refundReview: {
type: 'boolean',
instructions: 'Does the customer request require refund review?',
},
},
maxRetries: 0,
abortSignal: AbortSignal.timeout(30_000),
providerOptions: { gateway: { zeroDataRetention: true } },
});
console.log(result.answers.team.choice);
console.log(result.answers.urgency.score);
console.log(result.answers.refundReview.probability);Try Multiple questions in the Playground, or inspect the working browser agent example.
This website accepts a State up to 8,000 characters, 1–5 questions per public interactive request, 2–10 Choice options, and a five-level Score rubric in its editor. These are this product’s limits, not universal Jev API limits.
06 / RESPONSES & CONFIDENCE
Read the contract you actually called
The TypeSafe HTTP API returns question IDs under answers, plus model and usage. Noul has noul; Choice documents choice, probabilities, and confidence; Score documents score, legend, probabilities, and confidence.
{
"model": "jev-1.13.0",
"answers": {
"refund_review": { "type": "noul", "noul": 0.98 },
"team": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.94, "technical": 0.06 },
"confidence": 0.91
},
"urgency": {
"type": "score",
"score": 1.8,
"legend": { "0": "Routine", "1": "Time-sensitive", "2": "Blocked" },
"probabilities": { "0": 0.02, "1": 0.16, "2": 0.82 },
"confidence": 0.88
}
},
"usage": { "input_tokens": 214, "output_tokens": 18 }
}These values illustrate the documented shape; they are not a recorded model call. A probability or provider confidence value does not guarantee correctness.
Gateway response examples
Gateway returns result.answers through the AI SDK. These are excerpts from real September 18 production calls.
{
"type": "boolean",
"probability": 0.99
}{
"type": "choice",
"choice": "Billing",
"probabilities": {
"Billing": 1,
"Technical": 0,
"Sales": 0,
"Other": 0
}
}{
"type": "score",
"score": 4,
"probabilities": { "0": 0, "1": 0, "2": 0, "3": 0, "4": 1 }
}Turn probability into application policy
// Example policy for the Gateway Choice result above.
const decision = result.answers.team;
const p = decision.probabilities?.[decision.choice];
const action =
p == null ? 'human-review' :
p >= 0.90 ? 'automate' :
p >= 0.60 ? 'verify' :
'human-review';
// Your application decides which action is permitted.
console.log(action);The thresholds are examples, not provider recommendations. Choose them with representative labeled data and the cost of a wrong action.
07 / ERRORS & RETRIES
Handle provider failures deliberately
- 401
- Authentication failed. Fix the key; do not retry unchanged credentials.
- 422
- The request failed validation. Fix its State, model, or question shape.
- 429
- Rate limited. Retry later with exponential backoff and a cap.
- 529
- Provider overloaded. Retry later with exponential backoff and a cap.
TypeSafe’s official SDKs retry 429 and 529 by default with exponential backoff. Another attempt is another request, so design each retry budget deliberately.
Gateway error boundary
// Gateway errors: keep retries and messages under application control.
async function verifyRefund(state: string) {
const timeout = AbortSignal.timeout(30_000);
try {
const result = await evaluate({
model: gateway.evaluationModel('typesafe-ai/jev'),
state,
questions: {
refunded: { type: 'boolean', instructions: 'Was a refund issued?' },
},
maxRetries: 0,
abortSignal: timeout,
providerOptions: { gateway: { zeroDataRetention: true } },
});
return { ok: true, answer: result.answers.refunded };
} catch {
return {
ok: false,
error: timeout.aborted
? 'Evaluation timed out.'
: 'Evaluation unavailable. Please try later.',
};
}
}08 / PRIVACY & ZDR
Jev ZDR & Data Handling
Data handling follows the path that actually serves a request. A provider's no-training commitment is narrower than a promise to retain no request data.
TypeSafe Direct
TypeSafe says customer Input is not used to train or fine-tune models. Its current Master Customer Agreement (opens in a new tab) permits processing Customer Data to provide the service, calculate fees, derive telemetry, monitor fraud and abuse, and comply with law. The Privacy Policy (opens in a new tab) describes retention of personal data where reasonably necessary. Model documentation (opens in a new tab) points enterprise customers to legal terms for ZDR details. These public sources do not establish default Zero Data Retention for every Direct API account.
No training is not the same as Zero Data Retention. Confirm any account-specific ZDR terms with TypeSafe before relying on them.
Vercel AI Gateway
For a Gateway request, providerOptions.gateway.zeroDataRetention: true asks Gateway to route only through providers covered by its ZDR agreements. Vercel documents per-request ZDR for eligible Pro and Enterprise accounts. If no compliant provider is available for the model, the request fails instead of silently relaxing ZDR. ZDR includes a no-training restriction, but no-training alone does not imply ZDR. The option in this site's Gateway evaluation code is:
providerOptions: {
gateway: { zeroDataRetention: true },
}See Vercel's ZDR policy and routing behavior (opens in a new tab) and its Jev Gateway example (opens in a new tab). Provider eligibility and account settings still govern the request.
Jev Playground
This site currently uses Vercel AI Gateway as its primary provider and requests ZDR on that path. This is a routing request subject to provider eligibility, not an independent audit of data retention. TypeSafe Direct access has separate terms. Visitors do not provide this site with their own API keys.
| Access path | What the current sources support |
|---|---|
| TypeSafe Direct | No training on customer Input; service, fee, telemetry and abuse processing are permitted by published terms. No general default ZDR claim. |
| Vercel AI Gateway with ZDR requested | Request-level provider filter, subject to plan and provider eligibility; fails if none qualifies. |
| Jev Playground | Vercel AI Gateway primary with ZDR requested. A routing request is not an independent retention guarantee. |
Cloudflare is another, separate access path. Do not project Vercel's setting onto Workers AI. For every path, minimize submitted State and avoid secrets unless your agreement permits them.
09 / ALTERNATIVE ACCESS
Vercel and Cloudflare integrations
Use TypeSafe Direct with jev-latest.
Use Vercel AI Gateway with typesafe-ai/jev.
Use Workers AI with typesafe/jev.
Keep each provider’s model ID, authentication, request fields, response fields, and data policy together.
Vercel AI Gateway
Install the AI SDK, create a Gateway key, and keep AI_GATEWAY_API_KEY server-side. Evaluation is currently an experimental AI SDK API.
npm install ai@7.0.105import { createGateway, experimental_evaluate as evaluate } from 'ai';
const gateway = createGateway({
apiKey: process.env.AI_GATEWAY_API_KEY,
});
const result = await evaluate({
model: gateway.evaluationModel('typesafe-ai/jev'),
state: 'The support agent issued a full refund.',
questions: {
refunded: {
type: 'boolean',
instructions: 'Was a refund issued?',
},
},
maxRetries: 0,
abortSignal: AbortSignal.timeout(30_000),
providerOptions: { gateway: { zeroDataRetention: true } },
});
console.log(result.answers.refunded.probability);import { createGateway, experimental_evaluate as evaluate } from 'ai';
const gateway = createGateway({
apiKey: process.env.AI_GATEWAY_API_KEY,
});
const result = await evaluate({
model: gateway.evaluationModel('typesafe-ai/jev'),
state: 'I was charged twice. Please refund the extra charge.',
questions: {
team: {
type: 'choice',
instructions: 'Which team should handle this customer request?',
criteria: {
billing: 'Charges, payments, and refunds',
technical: 'Bugs and technical problems',
sales: 'Questions before purchasing',
other: 'Requests outside the categories above',
},
},
},
maxRetries: 0,
abortSignal: AbortSignal.timeout(30_000),
providerOptions: { gateway: { zeroDataRetention: true } },
});
const answer = result.answers.team;
console.log(answer.choice);
console.log(answer.probabilities?.[answer.choice]);import { createGateway, experimental_evaluate as evaluate } from 'ai';
const gateway = createGateway({
apiKey: process.env.AI_GATEWAY_API_KEY,
});
const result = await evaluate({
model: gateway.evaluationModel('typesafe-ai/jev'),
state: 'Production is completely unavailable to all customers.',
questions: {
urgency: {
type: 'score',
instructions: 'How urgent is this incident?',
criteria: ['No urgency', 'Low', 'Moderate', 'High', 'Critical'],
},
},
maxRetries: 0,
abortSignal: AbortSignal.timeout(30_000),
providerOptions: { gateway: { zeroDataRetention: true } },
});
console.log(result.answers.urgency.score);
console.log(result.answers.urgency.probabilities);Cloudflare Workers AI
export default {
async fetch(_request, env) {
const result = await env.AI.run('typesafe/jev', {
state: 'A customer reports a duplicate card charge.',
questions: {
refund_review: {
type: 'noul',
instructions: 'Does this request require refund review?',
},
},
});
return Response.json(result);
},
};The Cloudflare-hosted site currently uses Vercel AI Gateway as its primary provider. Hosting on Workers does not mean that these demos use Workers AI. This private server architecture does not make /api/evaluate a third-party public API.
10 / PRICING
Compare Jev provider pricing
Output is currently published at $0.00.
As checked October 12, 2026, Vercel shows paid input pricing in its rounded listing. Its launch promotion ended September 25, 2026.
Prices, credits, and terms can change. The Jev pricing calculator uses the published $0.042 / 1M input-token base rate; the live Gateway directory also reports $0.042, while its model page rounds the display to $0.04. You can try Jev online for free on this site without signup or your own API key, subject to usage limits; this is separate from provider API Credits.
11 / QUICK ANSWERS
Jev API FAQ
Is there an official Jev API?
Yes. TypeSafe provides the System One HTTP endpoint.
Where do I get a Jev API key?
Use the TypeSafe Console. Jev Playground does not issue reusable API credentials.
Can I try Jev without my own API key?
Yes. Use Jev Playground for interactive testing.
Do I install Jev locally?
Not the hosted TypeSafe model. Use HTTP directly or install an official SDK.
What model ID should I use?
Use jev-latest for TypeSafe Direct.
What is the Jev API endpoint?
POST https://api.typesafe.ai/v1/systemone
Does Jev support JavaScript?
Yes. Install the official @typesafe-ai/sdk package.
Does Jev support Python?
Yes. Install the official typesafe-sdk package.
Does the Jev API support ZDR?
TypeSafe’s public no-training commitment is distinct from ZDR. Vercel Gateway can request ZDR subject to its policy, eligibility, and routing; review the policy for the path you use.
12 / SOURCES & VERIFICATION
Sources and verification dates
Pricing was rechecked October 12, 2026 against TypeSafe and Vercel official sources. Access and data terms were checked September 24, 2026. Request and response names remain grounded in the provider documentation; Gateway TypeScript was checked against installed AI SDK 7.0.105 docs, types, and source.
- TypeSafe Jev launch (opens in a new tab)
- TypeSafe Jev pricing confirmation · October 2026 (opens in a new tab)
- TypeSafe Console (opens in a new tab)
- TypeSafe HTTP API (opens in a new tab)
- TypeSafe JavaScript SDK (opens in a new tab)
- TypeSafe Python SDK (opens in a new tab)
- TypeSafe Agent Skill (opens in a new tab)
- TypeSafe models and data handling (opens in a new tab)
- TypeSafe Master Customer Agreement (opens in a new tab)
- TypeSafe Privacy Policy (opens in a new tab)
- Vercel Gateway ZDR (opens in a new tab)
- Vercel evaluation documentation (opens in a new tab)
- Vercel Jev model listing (opens in a new tab)
- Vercel Jev changelog (opens in a new tab)
- Cloudflare Jev integration (opens in a new tab)