Jev API decision endpoint
The only first-party decision endpoint TypeSafe documents is:
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json
Jev (TypeSafe System One) evaluates one state against a map of typed questions and returns answers under the same ids. This unofficial page is a developer field table. Canonical prose: docs.typesafe.ai/api. We do not sell keys. Companion list: GET https://api.typesafe.ai/v1/models.
What you POST
| Field | Required | Type | Notes from the official API reference |
|---|---|---|---|
state |
yes | string, object, or array of text | Material to judge. No image/audio/video. |
model |
yes | string | Examples use jev-latest. Pin jev-1.13.0 when thresholds are fitted. |
questions |
yes | object | Map of your ids → question objects. Keys are not sent to the underlying model. |
Each question: type (noul | choice | score) + instructions (string, object, or array) + type-specific criteria. Choice criteria: map, max 255 options. Score criteria: ordered array, 2–10 levels. Noul criteria: optional {true,false} glosses.
What you GET
| Field | Role |
|---|---|
model |
Versioned id that answered (quick-start examples: jev-1.13.0) even if you sent an alias |
answers map |
Same keys you sent |
usage.input_tokens / usage.output_tokens |
Billing is input-only on the public models page (vendor claim: $0.042 / MTok; output free) |
Answer shapes: see OpenAPI-like shape. HTTP errors: 401 / 422 / 429 / 529 — error envelope.
Gotcha: jev-1.13 vs jev-1.13.0
| String | Where it belongs |
|---|---|
jev-1.13.0 |
First-party versioned id. Models page column for “Jev 1.13”. Pin this. |
jev-latest / jev-preview |
First-party aliases. Both pointed at jev-1.13.0 on the models page we cited; jev-preview moves first when a preview exists. |
jev-1.13 (no patch) |
Appears in some cookbook snippets and in OpenRouter as typesafe/jev-1.13. Do not assume first-party HTTP accepts the unpatched name. |
typesafe-ai/jev, typesafe/jev |
Gateway / Workers AI ids — wrong host if you POST to api.typesafe.ai. |
GET /v1/models currently lists aliases. Versioned ids are still valid on POST whether or not they appear in that list (TypeSafe models page).
Dual-stack sketch
from typesafe_sdk import Noul, TypeSafeClient
client = TypeSafeClient() # TYPESAFE_API_KEY, default jev-latest
r = client.system_one(
state="Payouts failing for 3 days.",
questions={"urgent": Noul(instructions="Does this convey urgency?")},
)
print(r.model, r.answers["urgent"].noul)
import { TypeSafeClient, noul } from "@typesafe-ai/sdk";
const client = new TypeSafeClient();
const r = await client.systemOne({
state: "Payouts failing for 3 days.",
questions: { urgent: noul({ instructions: "Does this convey urgency?" }) },
});
Method names follow current SDK docs — if they drift, believe docs.typesafe.ai/sdk.
FAQ
Is there a batch HTTP route?
Not in the public API reference we used. Extra questions on one state are the documented parallelism. Treat “batch endpoint” inventory pages as application patterns unless TypeSafe adds a URL.
Chat completions? Wrong contract. Structured decisions are not a generated JSON document.
Hub: API. Siblings: request schema, response shape. Official: docs.typesafe.ai/api.
Sources
Public TypeSafe or adjacent documentation only. No private claims.