Using a REST channel for Jev decisions
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.
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.
Hub: Channels. Siblings: channels compared, decision endpoint.
Sources
Public TypeSafe or adjacent documentation only. No private claims.