Docs · Models
Jev (TypeSafe System One)
What Jev 1.14 returns, how to call POST /v1/systemone with text or images, Box questions, the one-line setup for a TypeSafe key, and the price.
Jev is TypeSafe's System One model. It does not write text: you send a state and a map of typed questions, it returns typed answers with probabilities. The catalogue id is jev-1.14.0, which replaced jev-1.13.0 on 2026-10-16 at the same price. jev-latest and jev-preview are accepted as aliases; TopxAI bills them as jev-1.14.0 and sends jev-1.14.0 to TypeSafe, so the response's model field always reads jev-1.14.0. On TypeSafe's own API jev-latest still pointed at 1.13 that day; through TopxAI every name reaches the same model. jev-1.13.0 is no longer served here: a request for it gets a 403, and if you tuned thresholds on 1.13, check them again on 1.14. A key whose allowed-model list names jev-1.13.0 needs jev-1.14.0 added to it; jev-latest and jev-preview count as jev-1.14.0 there.
The four question types
noul: a yes/no question. The answer is the probability of yes: near 1 yes, near 0 no, near 0.5 undecided. There is no separate confidence.choice: one option from a map you define, up to 255. The answer carrieschoice,confidenceandprobabilitiesover every option.score: a position on an ordered scale of 2 to 10 levels you describe in words; probability-weighted, so it can fall between levels. The answer carriesscore,confidence,legendandprobabilities.box: where something is in an image.instructionsnames the target and the image ("the coffee mug inphoto"), there are nocriteria, and the answer isboxwithtop,bottom,leftandrightas fractions of the image's height and width, plusconfidence. Box needs an image in the request and Jev 1.14.
Questions in one request are independent and run in parallel, so put every question you might need into one call. The question id is never sent to the model; write the whole question in instructions.
Request and response
curl -X POST https://ai.topxea.com/v1/systemone \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{
"state": "I have asked three times now. Can I please just talk to a real person?",
"model": "jev-1.14.0",
"questions": {
"is_human_escalation": {
"type": "noul",
"instructions": "Is the customer asking for a human agent?"
}
}
}'
{
"model": "jev-1.14.0",
"answers": {
"is_human_escalation": { "type": "noul", "noul": 0.99 }
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}
The body is identical to TypeSafe's own API; only the base URL and key are TopxAI's. POST /v1/system_one is accepted as a second spelling of the same endpoint. Another catalogue model on this endpoint gets a 400.
Images and Box
Images can go anywhere text can: in the state, in a question's instructions, or in its criteria. List each image once in a top-level assets map under a reference string, then write that reference where the image belongs. This request finds a mug in a photo and asks whether one is there at all, because a Box answer is always a box, even when the target is missing:
{
"model": "jev-1.14.0",
"state": { "photo": "3f9c2e1a-kitchen" },
"assets": {
"3f9c2e1a-kitchen": { "type": "image", "format": "jpg", "data_base64": "/9j/4AAQSkZJRg..." }
},
"questions": {
"mug_visible": { "type": "noul", "instructions": "Is there a coffee mug in `photo`?" },
"mug": { "type": "box", "instructions": "the coffee mug in `photo`" }
}
}
{
"model": "jev-1.14.0",
"answers": {
"mug_visible": { "type": "noul", "noul": 0.94 },
"mug": { "type": "box", "box": { "top": 0.25, "bottom": 0.82, "left": 0.44, "right": 0.84 }, "confidence": 0.92 }
},
"usage": { "input_tokens": 1618, "output_tokens": 52 }
}
To crop or draw the box, multiply left and right by the image width in pixels, top and bottom by its height.
Images can also travel as file parts of a multipart/form-data request, which is what TypeSafe's SDKs send: the first part is named request and holds the JSON body, each image is its own part, and the asset names its part with "part": "<part name>" instead of data_base64. Multipart skips base64's extra third. Both forms work through TopxAI, and so does the SDKs' zstd body compression.
TypeSafe calls images and Box "Dreamer-ready": fine for prototypes, not yet up to its production standard, and the format, answers and limits can change between releases. On its own API every such request needs the header TypeSafe-Danger-Zone-Images: true. TopxAI adds that header whenever a request carries assets or a Box question, so you can leave it out; sending it does no harm.
TypeSafe's image limits apply unchanged: PNG or JPEG stills only, at most 1568 pixels on each side, between 78,400 and 2,458,624 pixels in total, at most 16 MiB per file. Its docs give 256 pixels as the smallest side, but in our tests on 2026-10-16 any side under 280 pixels was rejected (279 × 400 failed, 280 × 400 passed), so keep both sides at 280 or more. An image outside the limits is rejected, never resized, and one bad image fails the whole request. Scale images so the longest side is at most 1568 pixels and rotate the pixels upright before sending; the API strips EXIF and ignores its orientation. Each place a reference appears adds the image again, so when several questions look at the same picture, put it in the state once and point to it by path.
Limits and errors
Before any quota is reserved, the relay checks the body itself: model, state and a non-empty questions object, state and questions together at most 1 MiB, the whole body (base64 images included) at most 32 MiB, and assets, when present, an object of at most 1,024 images whose reference strings are non-empty, at most 1,024 bytes each and 64 KiB together. A body over 32 MiB gets a 413; anything else that fails these checks is a 400. A malformed multipart body (the first part not named request, a repeated part name, a file part that is not PNG, JPEG or untyped bytes) is a 400 too.
When TypeSafe rejects a request with a 400, 413 or 422 (an unreadable image, an asset nobody references, a request over the context length), you get its detail as written and the reservation is released. A 429 is passed on with its Retry-After; back off and retry. A provider outage or a rejected upstream key comes back as a 503.
The context limits are TypeSafe's defaults: 64k tokens per request and 32k for the state plus any one question, image tokens included. TypeSafe's long-context header is not forwarded.
One-line setup
Create a key on the API keys page. Under Group, pick Official line in the TypeSafe section (its note reads Official key · 107% of list price). An Auto route key can call Jev too, since Jev has only one line, but the setup command below is shown only for keys on the TypeSafe line. Open the full-key popover in the key's row, or the key detail drawer, and look for One-command setup for Jev:
curl -fsSL https://ai.topxea.com/install/typesafe.sh | sh -s -- --key sk-xxxx
The script installs the typesafe-ai agent skill, writes TYPESAFE_BASE_URL=https://ai.topxea.com and TYPESAFE_API_KEY=<your key> to ~/.config/topxai/typesafe.env, adds a block to ~/.zshrc and ~/.bashrc (whichever exist) that sources that file, and merges the same two variables into the env of ~/.claude/settings.json when that file exists. Then it sends one test request: a real, billed call to jev-latest with one noul question. A 401 means the key was rejected.
Leave out --key and the script takes TOPXAI_API_KEY from the environment, then the key saved by an earlier run, and only then asks for the key in the terminal without echo. With no key at all it still installs the skill and writes the config, and skips the test. --no-skill and --no-verify skip those two steps, --base-url points at another relay origin, -h prints the help. Running it again is safe: every file it touches is rewritten in place, and settings.json gets a timestamped .bak copy first.
The official SDKs (pip install typesafe-sdk, npm install @typesafe-ai/sdk) read TYPESAFE_BASE_URL and TYPESAFE_API_KEY and call /v1/systemone themselves; TYPESAFE_DEFAULT_MODEL picks the model. Images and Box need Python SDK 0.7.5 or JavaScript SDK 0.7.0 (Node.js 22 or newer).
Price
$0.04494 per 1M input tokens, 107% of TypeSafe's list price of $0.042. Output tokens are free. Images have no separate charge: their tokens are input tokens at the same price, and usage.input_tokens includes them. TypeSafe has not published how it counts image tokens yet; in our measurements on 2026-10-16 an image cost ceil(width / 28) × ceil(height / 28) × 2 tokens for each place its reference appears, so an 800 × 600 photo is 1,276 tokens and a full 1568 × 1568 image 6,272, about $0.00028. The charge is settled from the provider's usage.input_tokens; if a response carries no usage, the estimate reserved before the call (text plus that image arithmetic) is charged.
Known weak spots
From TypeSafe's own docs:
- It answers the question you wrote, not the one you meant.
- It is not a calculator, and it reads dates as text.
- Double negatives, multi-hop questions and irrelevant state cost accuracy.
- Contradictory criteria make answers unreliable.
- It is not trained to generate text.
- English is its main language; CJK input is handled "but not equally well".
- Images and Box are experimental, and there is no recommended Box confidence threshold yet. A target a few dozen pixels wide in a large image can be missed; crop to the region first.
- Do not reuse a threshold across question types.
Questions? Use the help button at the bottom right of the site or write to support@topxea.com.
Models: jev-1.14.0 · Models & pricing
Related
- Jev 1.14 on TopxAI: images, Box questions and what they cost
- TypeSafe Jev: a System One model that returns judgments, not text
- Why I paused an AI project: the cache bill missing from the architecture
- Hosted MCP servers
- API reference: every endpoint, with an OpenAPI specification
- Jev 1.14.0 API pricing
Previous: Reading your usage log · Next: GLM-5.3-Abliterated
Other languages: 简体中文