Jev API & Access Quickstart
You can access Jev through two primary routes: directly via the official TypeSafe API or via OpenRouter. Both routes expose the stable POST /v1/systemone contract.
Official SDK libraries are available for Python (typesafe_sdk) and JavaScript/TypeScript (@typesafe-ai/sdk).
Available Provider Endpoints
| Route / Provider | Endpoint URL | Model String | Status |
|---|---|---|---|
| TypeSafe Direct ↗ | https://api.typesafe.ai/v1/systemone | jev-latest or jev-1.13.0 | Production Stable |
| OpenRouter (System One) ↗ | https://openrouter.ai/api/v1/systemone | typesafe/jev-1.13 or ~typesafe/jev-latest | Production Stable |
| OpenRouter Decisions (Alpha Route) | https://openrouter.ai/api/alpha/decisions | typesafe/jev-1.13 | Alpha (Subject to change) |
Implementation note: Always prefer the stable POST /v1/systemone endpoint for production workloads. The OpenRouter Decisions alpha endpoint uses an alternative simplified payload shape and does not yet support multi-question batching across shared state.
1. Direct TypeSafe API Quickstart (cURL)
Base URL: api.typesafe.aiSend a POST request containing your bearer token, model version, shared application state, and an array of questions:
curl -X POST "https://api.typesafe.ai/v1/systemone" \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "Customer account balance: $450. Order amount: $120. Shipping to billing address: Yes. Card CVV matched: Yes. Velocity: 1 order in 7 days.",
"questions": [
{
"id": "order_risk_tier",
"type": "choice",
"prompt": "Evaluate order transaction risk level",
"choices": ["low", "medium", "high"]
},
{
"id": "require_manual_review",
"type": "noul",
"statement": "This transaction requires manual underwriter review before fulfillment."
}
]
}'2. OpenRouter System One Quickstart (cURL)
Base URL: openrouter.ai/apiOpenRouter natively accepts the TypeSafe System One request payload format at POST /api/v1/systemone:
curl -X POST "https://openrouter.ai/api/v1/systemone" \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": "Customer account balance: $450. Order amount: $120. Shipping to billing address: Yes. Card CVV matched: Yes. Velocity: 1 order in 7 days.",
"questions": [
{
"id": "order_risk_tier",
"type": "choice",
"prompt": "Evaluate order transaction risk level",
"choices": ["low", "medium", "high"]
}
]
}'3. Python SDK Quickstart (typesafe_sdk)
pip install typesafe-sdkUsing the official Python client library to query multiple questions in a single parallel inference call:
from typesafe_sdk import TypeSafeClient
client = TypeSafeClient(api_key="your_typesafe_api_key")
response = client.systemone.create(
model="jev-latest",
state="Ticket: User reports error 500 when saving preferences. Browser: Chrome 128. Account tier: Enterprise. Service logs indicate timeout in user-prefs DB replica.",
questions=[
{
"id": "routing_queue",
"type": "choice",
"prompt": "Select target escalation tier",
"choices": ["tier1_general", "tier2_database", "tier3_sre", "account_executive"]
},
{
"id": "churn_risk",
"type": "score",
"prompt": "Estimate account churn risk",
"levels": [
{"level": 1, "description": "No churn risk; routine issue"},
{"level": 2, "description": "Minor frustration"},
{"level": 3, "description": "High risk of contract cancellation"}
]
}
]
)
# Inspect calibrated decisions
print("Selected Queue:", response.decisions["routing_queue"].choice)
print("Confidence:", response.decisions["routing_queue"].confidence)
print("Churn Score (1-3):", response.decisions["churn_risk"].score)4. TypeScript SDK Quickstart (@typesafe-ai/sdk)
npm install @typesafe-ai/sdkTypeScript SDK implementation with strongly-typed response payloads:
import { TypeSafeClient } from "@typesafe-ai/sdk";
const client = new TypeSafeClient({
apiKey: process.env.TYPESAFE_API_KEY!,
});
async function evaluateTicket() {
const response = await client.systemone.create({
model: "jev-latest",
state: "Account status: Active. Issue: API 429 rate limit exceeded. Usage: 10,000 req/min (Limit: 5,000 req/min). Plan: Growth.",
questions: [
{
"id": "is_abuse",
"type": "noul",
"statement": "The client is executing a deliberate denial-of-service pattern rather than legitimate surge load."
},
{
"id": "action",
"type": "choice",
"prompt": "Recommended immediate action",
"choices": ["temporary_block", "offer_quota_increase", "ignore"]
}
]
});
const abuseProbability = response.decisions["is_abuse"].probability; // 0.0 to 1.0
const recommendedAction = response.decisions["action"].choice;
console.log({ abuseProbability, recommendedAction });
}
evaluateTicket();Reference: OpenRouter Alpha Decisions Endpoint
OpenRouter also maintains an experimental alpha endpoint at POST /api/alpha/decisions. It provides a simplified single-decision abstraction across multiple decision models, but it is currently in alpha and may change without notice. For production systems, stick to POST /api/v1/systemone.
# OPENROUTER ALPHA ENDPOINT (For reference only; prefer POST /api/v1/systemone above)
curl -X POST "https://openrouter.ai/api/alpha/decisions" \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"context": "Context text...",
"decision_type": "categorical",
"options": ["option_a", "option_b"]
}'Request Guardrails & Token Limits
state plus all tokens across all questions combined must not exceed 64,000 tokens.state plus the single longest individual question must not exceed 32,000 tokens on TypeSafe direct. (Note: OpenRouter catalogs Jev 1.13 with a flat 32,000-token context window.)