Jev PlaygroundAPI guide

JEV API QUICKSTART

Jev API

The official Jev API is provided by TypeSafe AI. Check API-key access in the TypeSafe Console, then call the System One endpoint with a State and typed questions if a key is available to your account.

Jev Playground does not issue API keys. The playground uses server-side credentials only for its own interactive tools.

Checked against current provider documentation
Access and data terms rechecked

TypeSafe Direct · first requestShell · curl
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?"
      }
    }
  }'

That is a complete Jev API request.

GET JEV WORKING

From API key to first typed answer

No API key yet? Try Jev online in Jev Playground, then use your own TypeSafe credentials when you integrate.

API access status

The TypeSafe Console (opens in a new tab) is the official sign-in and Direct API-key entry point. TypeSafe's launch announcement (opens in a new tab) described early access and a waitlist, while current SDK documentation (opens in a new tab) links directly to key creation. Whether a Direct key is available depends on your TypeSafe account. Jev Playground neither issues keys nor asks visitors to enter one: try Jev here without your own key. The hosted model does not need to be downloaded.

01

Get an API key

Sign in to the TypeSafe Console and check API Keys. If key creation is available to your account, create one and store it as TYPESAFE_API_KEY.

Open TypeSafe Console (opens in a new tab)
02

Set the environment variable

Keep the key on your server. Never expose it in browser JavaScript or a public repository.

ShellEnvironment
export TYPESAFE_API_KEY="your-key"
.env.localEnvironment
TYPESAFE_API_KEY=
03

Send your first request

Copy the cURL request above. A successful Noul response follows this shape.

Expected response shapeJSON · documented illustrative values
{
  "model": "jev-1.13.0",
  "answers": {
    "urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": {
    "input_tokens": 296,
    "output_tokens": 20
  }
}

The version and numeric values are illustrative documented values, not a recorded call.

JEV API AT A GLANCE

Official provider
TypeSafe AI
Endpoint
POST https://api.typesafe.ai/v1/systemone
Model
jev-latest
Authentication
Authorization: Bearer <API_KEY>
Question types
Noul / Choice / Score
State
string / object / array
Response
Typed answers, plus probabilities or confidence where applicable

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.

Direct HTTP · one State, one NoulShell · curl
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

InstallShell
npm install @typesafe-ai/sdk
.env.localEnvironment
TYPESAFE_API_KEY=
quickstart.tsTypeScript
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

direct-evaluation.tsTypeScript
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

InstallShell
pip install typesafe-sdk
EnvironmentShell
export TYPESAFE_API_KEY="your-key"
quickstart.pyPython
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

direct_evaluation.pyPython
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/jev
question: { type: "noul", … }\nanswer: { type: "noul", noul: 0.99 }

VERCEL AI SDK / GATEWAY

typesafe-ai/jev
question: { 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.

Try Boolean in Playground Select the “Refund Verification” preset.

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.

triage.ts · Vercel GatewayTypeScript
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.

Jev Playground limits

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.

Documented TypeSafe response shapeJSON · illustrative values
{
  "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.

Observed Gateway BooleanJSON
{
  "type": "boolean",
  "probability": 0.99
}
Observed Gateway ChoiceJSON
{
  "type": "choice",
  "choice": "Billing",
  "probabilities": {
    "Billing": 1,
    "Technical": 0,
    "Sales": 0,
    "Other": 0
  }
}
Observed Gateway ScoreJSON
{
  "type": "score",
  "score": 4,
  "probabilities": { "0": 0, "1": 0, "2": 0, "3": 0, "4": 1 }
}

Turn probability into application policy

Example application policyTypeScript
// 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 error boundaryTypeScript
// 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:

Gateway ZDR optionTypeScript
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 pathWhat the current sources support
TypeSafe DirectNo 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 requestedRequest-level provider filter, subject to plan and provider eligibility; fails if none qualifies.
Jev PlaygroundVercel 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

I want the official Jev API

Use TypeSafe Direct with jev-latest.

I already use Vercel AI SDK

Use Vercel AI Gateway with typesafe-ai/jev.

I run on Cloudflare Workers

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.

InstallShell
npm install ai@7.0.105
Boolean · Vercel GatewayTypeScript
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: '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);
Choice · Vercel GatewayTypeScript
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]);
Score · Vercel GatewayTypeScript
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

Cloudflare WorkerTypeScript
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);
  },
};
How Jev Playground accesses Jev

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

TYPESAFE PUBLISHED INPUT RATE$0.042 / 1M tokens

Output is currently published at $0.00.

VERCEL MODEL LISTING$0.04 / 1M tokens (from)

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.