Developers / JevModel

JevModel API: request and response

Use a JevModel API key to send typed Jev questions to /api/v1/systemone.

Make your first request

Create a JevModel API key in account settings after verifying your email. Keep it on your server and POST to this site’s /api/v1/systemone endpoint. This example asks one yes/no question. The model is fixed to typesafe/jev-1.13 through OpenRouter; do not send a model field.

curl -X POST https://jevmodel.app/api/v1/systemone \
  -H "Authorization: Bearer $JEVMODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state":"The customer was charged twice and requests a refund.","questions":{"escalate":{"type":"noul","instructions":"Should a human billing specialist review this request now?","criteria":{"true":"A specialist should review it now.","false":"No immediate review is needed."}}}}'

Request limits

Send a text state, JSON object, or nonempty JSON array plus 1–8 named questions. The serialized state and the validated full request must each fit within 8,000 characters. Question IDs start with a lowercase letter and contain up to 40 lowercase letters, digits, or underscores. Instructions need 8–600 characters. Choice needs 2–12 named options; Score needs 2–10 ordered levels; Noul needs both true and false descriptions. Each description needs 2–350 characters.

Read the response

Successful calls use the JevModel envelope below. The data object contains a request_id, answers keyed by question ID, upstream usage, and the remaining quota. The example values are illustrative. Choice may include a selected label and probabilities; Score is numeric and may be fractional; Noul is the probability of true from 0 to 1. Your application must choose its own action thresholds.

{
  "code": 0,
  "message": "ok",
  "data": {
    "request_id": "example-id",
    "answers": {
      "escalate": {
        "type": "noul",
        "noul": 0.94
      }
    },
    "usage": {
      "inputTokens": 186
    },
    "quota": {
      "used": 1,
      "limit": 5,
      "tokenBalance": 100000,
      "globalUsed": 1,
      "globalLimit": 1000,
      "dayUtc": "2026-09-28"
    }
  }
}

Errors, retries, and billing

Errors use {"code":-1,"message":"ERROR_NAME"}. HTTP 400 means invalid JSON or request fields; 401 an invalid key; 403 unverified email; 413 an oversized request; 429 insufficient daily capacity or token balance; 502 an unusable upstream result; and 503 an unavailable model connection. Check both HTTP status and code. Five successful runs are free each UTC day, subject to site capacity; later successful runs deduct the model-reported input tokens from the shared Playground/API balance. Failed runs are refunded. This API does not support idempotency keys: if a response is lost after a successful run, check account history and balance before retrying to avoid a second charge.

JevModel is independent and not affiliated with TypeSafe AI.