← Back to Try Jev AI

DEVELOPER GUIDE / INDEPENDENT GUIDE

Jev API

Use the Jev AI API to classify, route and score software state. This guide follows TypeSafe’s direct HTTP interface, with separate links for supported gateways and official developer tools.

Documentation checked September 18, 2026

How to use Jev: API quick start

Start with API access, copy the first request, then inspect the live classifier example. Using a gateway? Check the provider status table first.

Send a state and a set of typed questions to POST https://api.typesafe.ai/v1/systemone, using model jev-latest. The response contains an answer for each question. Start with one Choice question, then add Noul or Score when the task needs them.

Source: Official TypeSafe quickstart. These examples use our own support scenarios and the documented request format.

The three HTTP requests below passed direct API smoke tests on 2026-09-18. These checks confirm the integration, not model accuracy.

Get Jev API access

Create an API key in the official TypeSafe console. Store it on your server as TYPESAFE_API_KEY. The request header is Authorization: Bearer <API_KEY>; send JSON with Content-Type: application/json.

Never place the key in a browser bundle or a public environment variable. Access, account limits and billing belong to your chosen provider; check its current console before enabling a public integration.

Jev provider and gateway status

Checked September 18, 2026. An official listing and our own successful integration test are different evidence. These are the access paths we can currently document.

Official availability and Try Jev AI testing by provider
ProviderOfficial statusOur testing
TypeSafe DirectOfficial direct APITested live: Choice, Noul and Score. This is the path used by our Live Playground.
Vercel AI GatewayOfficially supports JevNot tested through this path by this site.
OpenRouterOfficially lists Jev 1.13Not tested through this path by this site.

Your first Jev API call

Run this Jev API example in a terminal where your key is already configured. It asks Jev to route a support request.

cURL · direct TypeSafe API
curl https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
  "model": "jev-latest",
  "state": "The customer says:\n“I was charged twice for my subscription and need a refund.”",
  "questions": {
    "decision": {
      "type": "choice",
      "instructions": "Which team should handle this request?",
      "criteria": {
        "Billing": null,
        "Technical Support": null,
        "Sales": null,
        "Other": null
      }
    }
  }
}
JSON

Request structure

  • state: the text, object or array being evaluated.
  • model: jev-latest for the direct TypeSafe endpoint.
  • questions: named questions, each with a type and instructions. Add criteria for options or rubric levels.

Answers use the same question names. Several questions can share one state in a request. See the official API reference for the full contract.

Choice example: use Jev as a classifier

The first call uses Choice: each criteria key is a possible result, with an optional description to clarify its meaning. A value of null is valid when the label needs no explanation. Our playground builds this map from your choices, so custom labels are not assigned a hard-coded support rubric.

The response identifies the selected choice, gives every option a probability, and includes a separate confidence. Useful tasks include ticket classification, agent tool selection and routing. Official documentation: Choice.

Recorded classifier run: the input was “I was charged twice for my subscription and need a refund.” With Billing, Technical Support, Sales and Other as the allowed labels, the live API returned the following answer on September 18, 2026.

Captured live Choice answer · direct TypeSafe API
{
  "type": "choice",
  "choice": "Billing",
  "confidence": 1,
  "probabilities": {
    "Billing": 1,
    "Other": 0,
    "Technical Support": 0,
    "Sales": 0
  }
}

An application can read answers.decision.choice and map Billing to its billing queue. Apply your own review policy before taking action. The returned 100% probability and 100% confidence describe this single answer; they are not a measured classification accuracy. We tested the model call, not an end-to-end ticketing system.

Noul example: urgency detection

Noul evaluates a yes/no question. Submit this body to the same endpoint and with the same headers as the first call.

JSON request · Noul
{
  "model": "jev-latest",
  "state": "Our checkout has been down for an hour. Customers cannot pay and we are losing orders. Please help immediately.",
  "questions": {
    "decision": {
      "type": "noul",
      "instructions": "Does this message express urgency?"
    }
  }
}

A returned noul of 0.99 means a 99% probability of yes. It does not mean a 99% urgency score. Noul has no separate confidence field. Optional true/false criteria can clarify what each outcome means. Official documentation: Noul.

Score example: customer frustration

Score uses ordered descriptions, from the low end of a scale to the high end. Include at least two levels.

JSON request · Score
{
  "model": "jev-latest",
  "state": "I have contacted support three times about the same broken integration. This is extremely frustrating, and I need someone to resolve it.",
  "questions": {
    "decision": {
      "type": "score",
      "instructions": "How frustrated does the customer appear?",
      "criteria": [
        "Calm",
        "Frustrated",
        "Very angry"
      ]
    }
  }
}

The three entries are levels 0, 1 and 2. Jev returns a probability-weighted score that can fall between levels, plus a legend, level probabilities and confidence. For example, probabilities of 5%, 30% and 65% produce a score of 1.6, not 1.6%. Official documentation: Score.

Understanding Jev responses

These are captured responses from the three separate HTTP requests above, verified on September 18, 2026. The requested alias jev-latest resolved to jev-1.13.0. Results and latency can vary; these examples are integration checks, not an accuracy or speed benchmark.

Captured choice response · 1360 ms
{
  "model": "jev-1.13.0",
  "answers": {
    "decision": {
      "type": "choice",
      "choice": "Billing",
      "confidence": 1,
      "probabilities": {
        "Billing": 1,
        "Other": 0,
        "Technical Support": 0,
        "Sales": 0
      }
    }
  },
  "usage": {
    "input_tokens": 318,
    "output_tokens": 46
  }
}
Captured noul response · 579 ms
{
  "model": "jev-1.13.0",
  "answers": {
    "decision": {
      "type": "noul",
      "noul": 0.99
    }
  },
  "usage": {
    "input_tokens": 294,
    "output_tokens": 20
  }
}
Captured score response · 726 ms
{
  "model": "jev-1.13.0",
  "answers": {
    "decision": {
      "type": "score",
      "score": 1.19,
      "confidence": 0.71,
      "legend": {
        "0": "Calm",
        "1": "Frustrated",
        "2": "Very angry"
      },
      "probabilities": {
        "0": 0,
        "1": 0.81,
        "2": 0.19
      }
    }
  },
  "usage": {
    "input_tokens": 326,
    "output_tokens": 17
  }
}

Multiply a probability or confidence by 100 to display a percentage. Read confidence from the API; do not replace it with the winning probability. The optional display of usage.input_tokens and usage.output_tokens helps inspect consumption without changing the decision.

Our hands-on review records both the direct smoke-test and production runs, with their separate latency observations and measurement limitations.

Use the official Python SDK

TypeSafe’s quickstart specifies Python 3.10 or newer and pip install typesafe-sdk. The client reads the server environment variable. This example follows its TypeSafeClient.system_one structure.

Python · official SDK · server only
# Python >= 3.10
# Install: pip install typesafe-sdk
# Set TYPESAFE_API_KEY in your server environment first.
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

with TypeSafeClient() as client:
    response = client.system_one(
        model="jev-latest",
        state="I have been charged twice. Please fix this today.",
        questions={
            "department": Choice(
                instructions="Which team should handle this request?",
                criteria={"billing": None, "technical": None, "sales": None},
            ),
            "urgency": Noul(instructions="Does this message express urgency?"),
            "frustration": Score(
                instructions="How frustrated does the customer appear?",
                criteria=["Calm", "Frustrated", "Very angry"],
            ),
        },
    )

print(response.answers["department"].choice)
print(response.answers["urgency"].noul)
print(response.answers["frustration"].score)

See the official Python SDK documentation for the current API and retry behavior.

Using Jev with Vercel AI Gateway

Vercel’s official model page confirms Jev is available through AI Gateway. It currently shows model typesafe-ai/jev with the AI SDK’s experimental evaluation interface. Its example uses a boolean question; that is the Gateway interface, not the direct API’s noul schema.

Follow Official Vercel AI Gateway: Jev for that integration. Do not mix its model identifier or SDK fields into the TypeSafe HTTP examples above. This site’s Live Playground uses the direct TypeSafe API.

OpenRouter also has an official TypeSafe model listing containing Jev. That confirms a listed access channel, not that we have tested the Gateway or OpenRouter integrations with an account.

Jev GitHub: SDKs and agent skills

TypeSafe maintains the official Python SDK repository, official JavaScript/TypeScript SDK repository, and official agent skills repository. These are client libraries and integration guidance. They should not be described as Jev model weights or the model’s source code.

Jev API errors

  • 401: check the server API key and Authorization header.
  • 422: correct the request or question schema.
  • 429: the provider rate limit was reached.
  • 529: TypeSafe is temporarily overloaded.

For 429 and 529, use bounded exponential backoff. Our adapter retries at most twice, with an overall timeout, and shows errors without switching a failed live request to simulated results. Public integrations also need their own request limits. Official documentation: errors.

How to use Jev in an agent

Pass the relevant agent state and allowed actions as a Choice question. Application code applies permissions, retry budgets and review thresholds before executing a tool.

  1. Agent state
  2. Jev decision
  3. Policy checks
  4. Tool or next step

An LLM can plan or explain while Jev evaluates the next bounded decision. Read the Jev vs LLM comparison.

Try Jev online

Open the Jev Decision Playground and choose a classification, urgency or scoring example. Live Jev means a server-mediated call to TypeSafe. Interactive Demo means illustrative results with no model call. The current mode is shown beside the playground.

TryJevAI.com is an independent demo and learning resource. It is not affiliated with, endorsed by, or operated by TypeSafe AI.

FROM CONCEPT TO INTERACTION

See the decision pattern for yourself.

Explore Choice, Noul and Score examples. The playground clearly labels Live Jev and Interactive Demo results.

Try Jev AI

This guide is independent of TypeSafe AI. For current model capabilities and access, see the official documentation.