Access · Last updated

Jev on TypeSafe

Jev on TypeSafe is the first-party door: a console key, POST https://api.typesafe.ai/v1/systemone, and the official SDKs. Snapshot: 2026-09-21. Jev is TypeSafe’s System One decision model — text state in, typed answers out. This is a setup guide, not a checkout.

Channel hub: Jev channels. Compact curl twin: first API call. Waitlist only: how to get access.

1. Waitlist, console, key

  1. Join early access from typesafe.ai. The 15 September 2026 launch post says TypeSafe is bringing people off the waitlist. This site cannot expedite it.
  2. When invited, open console.typesafe.ai. Optional: official Playground — paste state, add a Noul, then mix types.
  3. Create an API key in the dashboard. Store it as TYPESAFE_API_KEY. Never paste it into jev.pro. Details: API keys.

No console yet? You can still call Jev through OpenRouter or Vercel AI Gateway.

2. Endpoint and model pin (confirm on docs)

TypeSafe’s quick start and API reference document:

Do not send OpenRouter’s typesafe/jev-1.13 or Vercel’s typesafe-ai/jev to this host. Do not use a chat-completions URL.

Vendor list price on the models page this day: $0.042 / MTok input ($42 / Btok). Output tokens are free. Rate limits on that page: 250,000 tokens/second and 1,200 RPM, described as dynamic. Context: 64k tokens per request; 32k for state plus the longest question.

3. First curl (Noul)

From the official quick start (compacted):

export TYPESAFE_API_KEY=...   # console key, not from this site
curl -X POST https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'EOF'
{
  "state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
  "model": "jev-latest",
  "questions": {
    "urgency": {
      "type": "noul",
      "instructions": "Does this message express urgency?"
    }
  }
}
EOF

Expect answers.urgency.noul in 0–1 and a resolved "model": "jev-1.13.0" (TypeSafe’s published example). Noul has no confidence field.

4. Same state: Choice + Score + Noul

Official quick-start body (three question types, one HTTP call):

{
  "state": "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
  "model": "jev-1.13.0",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this",
      "criteria": {
        "billing": "Payment or subscription issues",
        "technical": "Bugs or integration problems",
        "sales": "Pricing or account questions"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "How frustrated the customer appears",
      "criteria": [
        "Calm, just stating facts",
        "Frustrated but civil",
        "Very angry, strong language"
      ]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "The message conveys urgency or time-sensitivity"
    }
  }
}

TypeSafe’s published mixed response (theirs — do not treat the probabilities as a benchmark):

{
  "model": "jev-1.13.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "technical",
      "confidence": 0.78,
      "probabilities": { "technical": 0.85, "sales": 0.0, "billing": 0.15 }
    },
    "frustration": {
      "type": "score",
      "score": 1.0,
      "confidence": 1.0,
      "legend": {
        "0": "Calm, just stating facts",
        "1": "Frustrated but civil",
        "2": "Very angry, strong language"
      },
      "probabilities": { "0": 0.0, "1": 1.0, "2": 0.0 }
    },
    "is_urgent": { "type": "noul", "noul": 1.0 }
  },
  "usage": { "input_tokens": 392, "output_tokens": 65 }
}

Questions run in parallel against the ingested state.

Yes/no on this door is noul, not Vercel AI SDK’s boolean. Copy-pasting boolean here is a documented 422 / invalid-request class of failure.

5. Python SDK

Requires Python ≥ 3.10. Official package: typesafe-sdk. The client reads TYPESAFE_API_KEY and defaults to jev-latest.

pip install typesafe-sdk
# or: uv add typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

client = TypeSafeClient()

ticket = (
    "Hi, I've been trying to connect my Stripe account for 3 days "
    "and the integration keeps failing. I'm losing sales. Please help ASAP."
)

response = client.system_one(
    model="jev-1.13.0",
    state=ticket,
    questions={
        "department": Choice(
            instructions="Which team should handle this",
            criteria={
                "billing": "Payment or subscription issues",
                "technical": "Bugs or integration problems",
                "sales": "Pricing or account questions",
            },
        ),
        "frustration": Score(
            instructions="How frustrated the customer appears",
            criteria=[
                "Calm, just stating facts",
                "Frustrated but civil",
                "Very angry, strong language",
            ],
        ),
        "is_urgent": Noul(
            instructions="The message conveys urgency or time-sensitivity",
        ),
    },
)

print(response.model)
print(response.answers["department"].choice)
print(response.answers["frustration"].score)
print(response.answers["is_urgent"].noul)
print(response.usage)

More: Python SDK.

6. TypeScript SDK

Requires Node.js 20+. Official package: @typesafe-ai/sdk. Method name is systemOne. Helpers infer answer types.

npm install @typesafe-ai/sdk
import { choice, TypeSafeClient } from "@typesafe-ai/sdk";

const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY

const response = await client.systemOne({
  model: "jev-1.13.0",
  state: {
    document:
      "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP.",
  },
  questions: {
    department: choice("Which team should handle this", {
      billing: "Payment or subscription issues",
      technical: "Bugs or integration problems",
      sales: "Pricing or account questions",
    }),
    frustration: {
      type: "score",
      instructions: "How frustrated the customer appears",
      criteria: [
        "Calm, just stating facts",
        "Frustrated but civil",
        "Very angry, strong language",
      ],
    },
    is_urgent: {
      type: "noul",
      instructions: "The message conveys urgency or time-sensitivity",
    },
  },
});

console.log(response.model);
console.log(response.answers.department.choice);
console.log(response.answers.frustration.score);
console.log(response.answers.is_urgent.noul);

Bare constructor (no helpers) also works: pass { type: "noul", instructions: "..." } like the HTTP body. More: JavaScript SDK.

Optional: TypeSafe’s agent skill (npx skills add typesafe-ai/skills --skill typesafe-ai) still needs your key.

7. Errors and limits (documented)

Status Meaning Retry?
401 Missing or invalid key No — fix the secret
422 Body failed validation No — fix model / state / questions
429 Token/s or RPM limit Yes — honor retry-after
529 Overloaded Yes — backoff

Official SDKs retry 429/529 by default. Full table: errors and retries. Higher limits: TypeSafe says contact [email protected] (models page). Version aliases: models and aliases.

A 200 with Noul ≈ 0.5 is not an HTTP error. Schema-safe ≠ factually correct.

When this door wins

Official pin, Playground, first-party 64k envelope, TypeSafe MSA. When it loses: you are still on the waitlist — use OpenRouter or Vercel. Invoice sketch: Jev pricing. Independent field notes: Jev review.

FAQ

Is the first-party model id jev-1.13 or jev-1.13.0?

Docs pin jev-1.13.0. Aliases are jev-latest / jev-preview. OpenRouter’s public id is typesafe/jev-1.13 — different door.

Does jev.pro issue a TypeSafe key?

No.

Can I use chat completions?

No. System One only.

What this page does not claim

Sources