Jev REST channel
A REST channel is any HTTPS POST that carries state + typed questions and returns typed answers. Jev (TypeSafe System One) has one first-party evaluation URL. Marketplaces wrap that contract with different hosts, keys, and model strings.
This page is the HTTP-shaped half of the channel matrix (snapshot 2026-09-21). Independent unofficial guide — not TypeSafe docs. We do not sell or proxy keys. Confirm first-party fields on docs.typesafe.ai/api.
First-party REST (canonical)
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <TYPESAFE_API_KEY>
Content-Type: application/json
Required body: state, model, questions. Use jev-latest in examples or pin jev-1.13.0 once you tune thresholds. GET https://api.typesafe.ai/v1/models lists aliases; the versioned id still works on POST.
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"state":"Payouts have failed for 3 days.","model":"jev-latest","questions":{"urgent":{"type":"noul","instructions":"Does this convey urgency?"}}}'
Documented HTTP failures: 401, 422, 429, 529. Official SDKs retry 429/529; raw curl does not.
Marketplace REST (third-party cards)
Label these as that vendor’s surface, not TypeSafe’s API reference.
| Host | Auth | Model string | Body gotcha |
|---|---|---|---|
OpenRouter Decisions https://openrouter.ai/api/alpha/decisions |
OpenRouter bearer | typesafe/jev-1.13 |
Not the OpenAI-compatible chat URL. Their card lists 32k context and $0.042 / $0 per 1M (vendor claim). Insufficient credit → 402. |
Cloudflare https://api.cloudflare.com/client/v4/accounts/$ACCOUNT/ai/run |
CF API token | typesafe/jev |
REST wraps the payload as {"model","input":{state,questions}}. env.AI.run skips that envelope. Card: 32k context; price in the CF dashboard. |
Do not send jev-1.13.0 to OpenRouter or typesafe/jev-1.13 to api.typesafe.ai. Names are door-specific.
First-party POST vs marketplace REST
Steps (first-party):
- Obtain a TypeSafe console key you already have (waitlist/console — not this site).
POST /v1/systemonewithAuthorization: Bearer,state,model,questions.- Types: Choice ≤255, Score 2–10, Noul 0–1; confidence on Choice/Score only.
- On 422, read the named field — invalid input. Do not retry. On 401, unauthorized. On 429/529, back off.
Steps (marketplace): swap host, bearer, and model id. Keep question design. Translate boolean vs noul if that door’s examples differ. 402/403 are that vendor’s billing/auth.
Pitfalls: chat-completions URLs are the wrong tool. Copy-paste of model ids across doors is schema mismatch. OIDC / env.AI without a raw key is the serverless channel. No “buy a key” CTA here.
When REST is the right channel
- You already wrap HTTP (Go, JVM, edge without the official SDK).
- You need to log raw status + JSON error bodies (see error envelope).
- You are comparing doors and want one client with a swappable
baseURL— still keep model id maps per door.
Prefer official SDKs when you want default retries. Prefer serverless channel when the host is Vercel OIDC or env.AI.
FAQ
Is there a second first-party evaluation path?
TypeSafe documents POST /v1/systemone plus GET /v1/models. Chat-completions URLs are the wrong tool.
Can jev.pro give me a key? No. Waitlist and console live on TypeSafe; marketplace keys live on those vendors.
Does curl retry 429? Not by itself. Official SDKs retry 429/529 only.
Pin or alias?
Pin jev-1.13.0 after you fit thresholds. jev-latest can move.
Hub: Channels. Siblings: channels compared, decision endpoint.
Disclaimer
This is an independent unofficial site and is not affiliated with TypeSafe AI; official documentation is available at https://docs.typesafe.ai. Never treat jev.pro as TypeSafe official documentation. We do not sell, issue, or proxy API keys.