Access & quickstart
How to get access to Jev and make your first call
Jev is a closed managed API. There is no download, no open weights and no self-hosting — you need a key from TypeSafe, or a provider that already has one.
1. Get on the early-access list
Jev came out of stealth on September 15, 2026, and access is still being rolled out in batches. TypeSafe is running an early-access waitlist on its official console and issuing API keys to approved developers in waves.
Start at typesafe.ai to join the queue.
At launch there was no publicly documented free-credit or trial program, so budget for paid usage from your first request. Given the price, that is a low bar — see pricing.
2. Or skip the queue via an aggregator
If you are still waiting on a first-party key, Jev is already resold through gateways you may already be using:
OpenRouter
Live as `typesafe/jev-1.13` at $0.042/M input, $0 output, 32K context, ~99.8% availability. Note it will not show up in OpenRouter's default model list — see the gotcha below.
Vercel AI Gateway
Also carries it, as model id `typesafe-ai/jev`, at the same $0.042/M input, $0 output.
Going through a gateway means the gateway's billing, rate limits and privacy terms apply — not TypeSafe's. Worth a read before you route production traffic through one.
3. Make your first request
The endpoint is POST https://api.typesafe.ai/v1/systemone, and the early-access model route is jev-latest. Note this is not the OpenAI chat-completions shape — you send a state plus questions, so you need TypeSafe's client (or a small bespoke one) rather than pointing an OpenAI SDK at a new base URL.
Install
pip install "typesafe-sdk>=0.5.7"
Python
import os
from typesafe_sdk import Choice, Noul, NoulCriteria, Score, TypeSafeClient
client = TypeSafeClient(api_key=os.environ["TYPESAFE_API_KEY"], timeout=120.0)
response = client.system_one(
model="jev-latest",
state="The payment failed twice and the customer is asking for a refund.",
questions={
"department": Choice(
instructions="Which team should handle this?",
criteria={
"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts",
},
),
"urgency": Noul(
instructions="Does this convey urgency?",
criteria=NoulCriteria(
true="Explicitly time-sensitive",
false="No urgency expressed",
),
),
"frustration": Score(
instructions="How frustrated is the customer?",
criteria=["Calm", "Frustrated", "Very angry"],
),
},
)
answers = response.answers
print(answers["department"].choice) # -> "billing"
print(answers["department"].confidence) # -> 0.0-1.0
print(answers["urgency"].noul) # -> 0.0-1.0
print(answers["frustration"].score) # -> "Frustrated"
print(response.usage.input_tokens)JavaScript / TypeScript
An official JavaScript SDK ships alongside Python under the same typesafe-sdk package name. TypeSafe's published examples are Python-first, so for exact JS signatures check the SDK section of the docs rather than transliterating the Python above.
4. Things that will bite you
- It will not write anything. If your use case ends in a sentence, Jev is the wrong half of the pipeline. Pair it with an LLM.
- Options must be known at request time. Choice picks from the set you send, so a dynamic action space means building that list per call.
- Use the confidence value. A winning option at 0.34 confidence is a coin flip with extra steps — gate on a threshold and fall back to an LLM or a human.
- ~32,000 tokens per request per request. Long documents need chunking or a retrieval step in front.
- Text only at launch. Text only — no image or audio input at launch