Reference¶
What this page is
Look-up facts for the Jev API: endpoints, request and response fields, hard limits, model IDs, access routes, pricing, SDK packages, and a dated timeline. The wire schema below comes from the official Python SDK. Its models are generated from https://api.typesafe.ai/openapi.json (typesafe-sdk 0.7.1). Treat everything here as current on 2026-09-25. The product is ten days old and changes weekly.
API Surface¶
| Item | Value | Source |
|---|---|---|
| Base URL | https://api.typesafe.ai (override with TYPESAFE_BASE_URL) |
SDK constants.py |
| Decision endpoint | POST /v1/systemone |
SDK _core/constants.py |
| Model listing | GET /v1/models returns { models: [{ name, description, release_date }] } |
SDK wire schema |
| Auth | Authorization: Bearer <key>; keys from console.typesafe.ai/settings/keys |
SDK, jev-mcp README |
| Request ID header | x-typesafe-request-id (log it with support tickets) |
SDK _core/constants.py |
| Rate-limit hints | retry-after, retry-after-ms headers; SDK raises TypeSafeRateLimitError |
SDK |
| Content type | application/json in both directions |
SDK |
Request Schema¶
SystemOneRequest. All three fields are required on the wire. SDKs fill model with jev-latest when you omit it.
| Field | Type | Notes |
|---|---|---|
state |
string, JSON object, or JSON array | The content every question refers to. One shared state per request, even when it is an array. Text only: no images, audio or video. |
model |
string | A name or alias from GET /v1/models, e.g. jev-latest, jev-preview, jev-1.13.0 |
questions |
map of name -> question (min 1) |
Names are local keys. The response echoes them, and the model never sees them. |
Question objects, discriminated by type:
type |
instructions |
criteria |
Notes |
|---|---|---|---|
noul |
optional; text, object or array | optional { "true": ..., "false": ... } |
Yes/no question or statement to evaluate |
choice |
optional | required map label -> description or null |
A null description means the label is read by its name alone |
score |
optional | required ordered list; position = score level, starting at 0 | Since SDK 0.6.0 (2026-09-15) criteria is a list, not an integer-keyed map |
Adapters rename noul
Vercel AI SDK's experimental_evaluate calls the yes/no type boolean and returns probability. Pydantic AI maps bool fields to nouls. The TypeSafe wire type is always noul.
Response Shape Reference¶
SystemOneResponse has three top-level fields:
| Field | Type | Notes |
|---|---|---|
model |
string | The model that answered. It can differ from the alias you sent, so log it. |
answers |
map name -> answer |
One answer per question. Each answer's type matches its question's type. |
usage |
{ input_tokens, output_tokens } |
Output tokens are reported but "currently free of charge" |
Per-primitive answer fields (wire schema):
| Primitive | Fields | Notes |
|---|---|---|
noul |
type, noul (0.0-1.0) |
The probability of yes/true. Nothing else. |
choice |
type, choice, probabilities (per label, sum ~1), confidence (0-1) |
choice is the argmax label. confidence summarizes how close the race was: a 0.52 winner against a 0.46 runner-up yields low confidence. |
score |
type, score (float), legend (level -> criterion), probabilities (per level), confidence |
score is the probability-weighted average of levels, so it can fall between integers |
This illustrative wire response uses the OpenAPI example values:
{
"model": "jev-1.13.0",
"answers": {
"billing": { "type": "noul", "noul": 0.98 },
"tone": { "type": "choice", "choice": "angry",
"probabilities": { "angry": 0.8, "calm": 0.1, "excited": 0.1 },
"confidence": 0.9 },
"urgency": { "type": "score", "score": 1.7, "confidence": 0.9,
"legend": { "0": "Can wait", "1": "Needs attention this week", "2": "Needs attention today" },
"probabilities": { "0": 0.1, "1": 0.1, "2": 0.8 } }
},
"usage": { "input_tokens": 120, "output_tokens": 12 }
}
The DDDS ticket-routing walkthrough gives a worked example. urgent returns {"noul": 0.92} and owner returns the choice shape. The calling code pages on-call only when urgent > 0.9 and the winning team matches. It sends the ticket to human review when confidence < 0.6. The response also carries the model version that answered, so treat it as part of the audit record.
Limits¶
| Limit | Value | Source |
|---|---|---|
| State + longest single question | ~32,000 tokens on jev-1.13 (~150K English characters) |
Pydantic AI docs, TypeSafe docs |
| State + all questions | ~64,000 tokens | Pydantic AI docs |
| Over budget | HTTP error max_tokens_exceeded |
Pydantic AI docs |
| Choice cardinality | up to 255 options; the 256th returns HTTP 400 | Pydantic AI docs, TypeSafe docs |
| Score levels | up to 10; the 11th returns HTTP 400 (docs describe 2-10; AI SDK requires at least 2) | Pydantic AI docs, AI SDK types |
| Questions per request | at least 1; the schema sets no maximum (min_length=1 only), so the 64K-token state + all-questions budget is the practical cap |
OpenAPI-generated SDK models (checked 2026-09-27) |
| Input modality | text / JSON only | TypeSafe docs |
| Sampling knobs | none (temperature, top_p are ignored) |
Pydantic AI docs |
| Latency | 70-500 ms end-to-end (TypeSafe). Third parties report ~180 ms typical (Pydantic AI) and 150-500 ms (jev-mcp). | vendor + integrators |
| Advertised context on OpenRouter | 32,000 tokens | OpenRouter listing |
Rate limits (jev-1.13) |
250,000 tokens/s and 1,200 requests/min per account; over either returns HTTP 429. TypeSafe says the limits adjust with demand and capacity | TypeSafe models page (via search listing and third-party guides, 2026-09-27) |
High-cardinality choices use a 2-stage internal process (score options, then choose), which can be slower. The official SDK's default HTTP timeout is 10 s per operation. It retries connection errors, timeouts and retryable statuses twice by default (RetryPolicy).
Model IDs and Aliases¶
| ID | Meaning | Notes |
|---|---|---|
jev-latest |
Moving alias for the stable release | SDK default. Currently resolves to jev-1.13.0. |
jev-preview |
Moving alias that runs ahead when a preview build exists | Has pointed to the same model as jev-latest since launch (third-party check, 2026-09-20) |
jev-1.13.0 |
Pinned version, released 2026-09-15 | Pin this once thresholds are tuned |
jev-1.12 |
Earlier version referenced by third-party tools (jev-mcp docs) | Not listed as current. TypeSafe has published no availability or deprecation statement for it (checked 2026-09-27). |
typesafe/jev-1.13, ~typesafe/jev-latest |
OpenRouter IDs | OpenRouter serves pinned versions, plus a ~ alias |
typesafe-ai/jev |
Vercel AI Gateway ID | GatewayEvaluationModelId in @ai-sdk/gateway |
typesafe/jev |
Cloudflare Workers AI ID | A single always-current alias with no pinned versions |
TypeSafe publishes no model changelog. It does publish a per-version "jaggedness" page (docs.typesafe.ai/model-jaggedness/jev-1.13) that lists known weak spots.
Access Routes¶
| Route | Model ID | Endpoint / call | Pricing | Status (2026-09-25) |
|---|---|---|---|---|
| TypeSafe direct | jev-latest, jev-1.13.0 |
POST api.typesafe.ai/v1/systemone |
$0.042/MTok input, output free | New signups paused since 2026-09-22. Existing accounts work. |
| Vercel AI Gateway | typesafe-ai/jev |
AI SDK 7 experimental_evaluate with a gateway key |
official price | Live since ~2026-09-16 |
| OpenRouter | typesafe/jev-1.13, ~typesafe/jev-latest |
POST https://openrouter.ai/api/alpha/decisions (Decisions API, alpha). Not the chat-completions API. |
$0.042/MTok input, $0 output | Live, no TypeSafe account needed |
| Cloudflare Workers AI | typesafe/jev |
env.AI.run('typesafe/jev', { state, questions }) |
Listed in the Cloudflare dashboard | Live; question schema matches TypeSafe's |
jevtypesafeai.com |
n/a | Unofficial reseller | $0.25-$0.42/M (reseller markup) | Not TypeSafe. Treat as untrusted. |
Pricing¶
| Item | Value | Source |
|---|---|---|
| Input tokens | $0.042 per million ($42 per billion) | TypeSafe blog, OpenRouter, Vercel, press |
| Output tokens | free ("currently free of charge" per the API schema) | OpenAPI schema, OpenRouter |
| Signup credit | $5 (≈119M input tokens at list price), offered from 2026-09-20 | TypeSafe (X), press |
| Sustainability | TypeSafe discloses that it "can't prove it isn't subsidized" | TypeSafe blog |
| Worked example | TypeSafe's Doom demo bot makes ~10 queries/s for ~$7/hour (vendor figure) | TypeSafe launch demo, reported by The Register (2026-09-16) |
SDKs and Integrations¶
| Package | Registry | Latest (date) | License | What it is |
|---|---|---|---|---|
typesafe-sdk |
PyPI | 0.7.1 (2026-09-21) | MIT | Official Python SDK: TypeSafeClient / AsyncTypeSafeClient, Noul / Choice / Score, Python >= 3.10 |
typesafe-ai |
PyPI | 0.1.0 (2026-09-17) | n/a | Third-party redirect shim to typesafe-sdk. Not published by TypeSafe. |
@typesafe-ai/sdk |
npm | 0.6.0 (2026-09-15) | MIT | Official JS/TS SDK: TypeSafeClient, choice(), Node >= 20 |
system-one-adapter |
PyPI | 0.2.1 (2026-09-22) | n/a | TypeSafe's drop-in system_one API backed by OpenAI / Anthropic / Gemini, for LLM baselines. Does not call Jev. |
pydantic-ai-slim[typesafe] |
PyPI | pydantic-ai 2.50.0 (2026-09-25) | MIT | TypeSafeModel, typesafe:jev-latest. Native support reported from 2.46. |
langchain-typesafe |
PyPI | 0.0.1a3 (2026-09-20) | MIT | TypeSafeClassifier Runnable, experimental ModelRouterMiddleware and AutoModeMiddleware |
@langchain/typesafe |
npm | 0.0.1 | n/a | LangChain.js integration |
ai + @ai-sdk/gateway |
npm | 7.0.114 / 4.0.92 | Apache-2.0 | experimental_evaluate and the gateway ID typesafe-ai/jev |
@jkudish/jev-mcp |
npm | 0.8.0 (2026-09-24) | MIT | Eleven MCP judgment tools. Multi-provider: TypeSafe, OpenRouter, Cloudflare, Vercel. |
jev-mcp |
npm | 0.5.0 (2026-09-20) | MIT | A different MCP server (rashedInt32), unrelated to jkudish's repo |
anyjev |
PyPI | 0.0.2 (2026-09-21); 0.1.0 with L2 unreleased | Apache-2.0 | Nokia Applied Research: Jev-style decisions over open LLMs. Not affiliated with TypeSafe. |
SDK Environment Variables and Errors¶
| Variable | Default | Purpose |
|---|---|---|
TYPESAFE_API_KEY |
none | API key |
TYPESAFE_BASE_URL |
https://api.typesafe.ai |
Endpoint override (gateways, proxies) |
TYPESAFE_DEFAULT_MODEL |
jev-latest |
Default model |
TYPESAFE_LOG_LEVEL |
n/a | SDK logging level |
Python SDK exception classes: TypeSafeError (base), TypeSafeAPIError, TypeSafeAPIConnectionError, TypeSafeAPITimeoutError, TypeSafeAPIResponseValidationError, TypeSafeAuthenticationError, TypeSafeBadRequestError, TypeSafePermissionDeniedError, TypeSafeNotFoundError, TypeSafeRateLimitError, TypeSafeUnprocessableEntityError, TypeSafeInternalServerError. Since 0.7.1 the SDK validates the key early and keeps it out of logged exceptions.
Timeline¶
| Date | Event | Source |
|---|---|---|
| 2026-09-11 / 09-14 | First public JS SDK (0.5.7) and Python SDK (0.5.7) releases | npm, SDK changelog |
| 2026-09-15 | TypeSafe AI leaves stealth with a $40M seed led by DCVC (reported ~$200M valuation). Jev (jev-1.13.0) launches in early access with a waitlist. SDKs 0.6.0 ship. |
TypeSafe blog, AIwire, Forbes |
| ~2026-09-16 | Vercel AI Gateway adds typesafe-ai/jev |
Vercel, press |
| 2026-09-17 | langchain-typesafe 0.0.1a1 |
PyPI |
| 2026-09-18 | typesafe-sdk 0.7.0 switches from msgspec to pydantic (breaking) and adds response_model |
SDK changelog |
| ~2026-09-19 | Pydantic AI native TypeSafeModel. OpenRouter (Decisions API) and Cloudflare Workers AI routes appear in the same week. |
PyPI, Forbes (2026-09-19) |
| 2026-09-20 | "Jev is now available to everyone. No waitlist." $5 credit for new accounts. | TypeSafe on X |
| 2026-09-22 | New signups paused "due to immense swell of demand". Existing accounts keep working. | TypeSafe on X |
| late Sept 2026 | Prompt-injection research on Jev published: arXiv 2609.28613, Check Point, VentureBeat | see Sources |
Source Discrepancies¶
- Pricing: the official figure is $0.042/MTok input with output free. TypeSafe's blog, the Vercel and OpenRouter listings, and flaviocopes all agree. The unofficial reseller site jevtypesafeai.com shows $0.25-$0.42/M, which is reseller markup, not official pricing. The official domain is
typesafe.ai. - Headline multipliers: the claims vary. The product page says "up to 200x lower latency / 400x lower cost". The workflow-evals derivation says 193.6x / 444.6x. The announcement table says "40x-200x faster". Launch press says "up to 100x faster and 100x cheaper". All of these are self-reported against different comparison points, so treat them as upper bounds.
- Latency: TypeSafe quotes 70-500 ms end-to-end. Integrators report ~180 ms typical (Pydantic AI) and 150-500 ms per judgment (jev-mcp), which is consistent with the vendor range.
- Context: OpenRouter lists a 32,000-token context. TypeSafe and Pydantic describe two budgets: 32K for state plus the longest question, and 64K for state plus all questions. The 32K figure is the one that binds in practice.
- "Cannot hallucinate": TypeSafe means schema impossibility. The DDDS walkthrough correctly narrows it: Jev "cannot break the declared output schema. It can still choose the wrong valid option with high confidence."
- Founder name: a few write-ups say "Diego Almeida". Company press and interviews say Diogo Almeida.
- Independent Jev accuracy: AnyJev's tables quote Jev at 0.727 accuracy on LocalLLaMA/typed-decisions "as published by their authors" (not rerun). Earlier vault revisions also quoted an ECE and a Brier score; AnyJev's current docs no longer carry them, so they are dropped here.
Sources¶
- typesafe-sdk-python (official): wire schema generated from the OpenAPI spec, constants, changelog; PyPI
- @typesafe-ai/sdk on npm and typesafe-sdk-js
- system-one-adapter-python: LLM-backed drop-in for baselines
- Pydantic AI: TypeSafe (Jev): limits, aliases, jaggedness summary, retries
- OpenRouter: Jev 1.13 and OpenRouter Jev guide: Decisions API, pricing, context
- Cloudflare Workers AI: Jev
- TypeSafe models page: rate limits (read via search listing, 2026-09-27)
- The Register: TypeSafe debuts a model that plays Doom (2026-09-16)
- jev-mcp (jkudish): provider matrix, model pinning, per-gateway behavior
- TypeSafe: Jev available to everyone (X) and signups paused (X)
- AIwire: TypeSafe emerges from stealth with $40M and Forbes: $200M valuation