# Jev-API einbinden

> Binde Jev per curl, Python oder Node.js ein. Erfahre, wie Choice, Score und Noul funktionieren und wie du API-Schlüssel, Kontextlimits und Fehler behandelst.

- Canonical HTML: https://omniakey.com/de/blog/jev-api-guide
- Markdown: https://omniakey.com/de/blog/jev-api-guide.md
- Published: 2026-09-28 (updated 2026-10-24)
- Author: Kiki, COO at OmniaKey
- Language: de
- Category: API setup
- Reading time: 11 min
- All posts: https://omniakey.com/blog/llms.txt

---

Die **Jev-API** bewertet Text anhand vorgegebener Fragen. Eine Anfrage enthält `state`, `model` und eine `questions`-Map; die typisierten Ergebnisse stehen unter denselben IDs in `answers`. Das ist kein Chat-Endpunkt, dessen Freitext du nachträglich in Kategorien zerlegen musst.

Diese Anleitung behandelt die Integration. Einsatzgebiete, Grenzen und den Preishintergrund erklärt die [Einführung in das Jev-Modell](https://omniakey.com/de/blog/jev-model-explained).

> **Geprüft am 24. Oktober 2026.** Grundlage ist die TypeSafe-Dokumentation; die Gateway-Route wurde mit der OmniaKey-Implementierung abgeglichen. Die Beispiele wurden offline geprüft, nicht in einem neuen kostenpflichtigen Leistungstest. Direkte Anbieterpreise und Limits gelten nicht automatisch für ein Gateway-Konto.

## Endpunkt und API-Schlüssel müssen zusammenpassen

|Zugang|POST-Endpunkt|Schlüssel|
|-|-|-|
|OmniaKey|`https://api.omniakey.com/v1/alpha/search`|OmniaKey-Key mit Zugriff auf `jev-latest`|
|TypeSafe direkt|`https://api.typesafe.ai/v1/systemone`|TypeSafe-Key|

Beide Varianten verwenden `Authorization: Bearer ...` und das native Jev-Format. **Sende niemals den Schlüssel des einen Dienstes an den anderen.** Die Gateway-Route ist nicht `/v1/chat/completions`; `messages` ist kein Ersatz für `state`.

Erstelle einen eingeschränkten Schlüssel, prüfe die [aktuelle Jev-Route](https://omniakey.com/de/jev-latest) und setze `OMNIAKEY_API_KEY` lokal als Umgebungsvariable. Schlüssel gehören nicht in Browser-Code, Git oder Screenshots. Allgemeine Schritte stehen im [API-Schnellstart (Englisch)](https://docs.omniakey.com/en/quick-start).

## Vollständige JSON-Anfrage

Speichere das Beispiel als `jev-request.json`. Es ordnet eine Supportnachricht einer Abteilung zu und bewertet Frustration sowie Dringlichkeit. Der Beispieltext bleibt Englisch: Laut TypeSafe funktioniert diese Sprache derzeit am besten. Deutsche Eingaben solltest du mit eigenen repräsentativen Daten prüfen.

```json
{
  "model": "jev-latest",
  "state": "My payouts have failed for three days. Please help me resolve this today.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this message?",
      "criteria": {
        "billing": "Payments, invoices, or refunds",
        "technical": "Bugs, outages, or integrations",
        "sales": "Pricing, upgrades, or new accounts"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "How frustrated is the customer?",
      "criteria": ["Calm", "Frustrated", "Very angry"]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "Does the message express a time-sensitive need?"
    }
  }
}
```

Die IDs verbinden Fragen und Antworten. Laut TypeSafe fließen die ID-Namen nicht in die Inferenz ein. Beschreibe die Aufgabe daher in `instructions`, nicht nur im Schlüsselnamen. `state` kann auch ein JSON-Objekt oder Array mit Textwerten sein, etwa ein strukturierter Supportfall.

```bash
curl --fail-with-body https://api.omniakey.com/v1/alpha/search \
  -H "Authorization: Bearer $OMNIAKEY_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @jev-request.json
```

Für TypeSafe direkt verwendest du `https://api.typesafe.ai/v1/systemone` und `$TYPESAFE_API_KEY`. Das native JSON bleibt gleich; prüfe die für das Konto zulässigen Modellnamen.

## Choice, Score und Noul auswerten

|Fragetyp|Definition|Antwortfelder|Bedeutung|
|-|-|-|-|
|`choice`|Optionen mit Beschreibungen, höchstens 255|`choice`, `probabilities`, `confidence`|Gewählte Kategorie und Verteilung über die Optionen|
|`score`|Geordnete Skala mit 2–10 Stufen|`score`, `legend`, `probabilities`, `confidence`|Wahrscheinlichkeitsgewichtete Stufe, auch als Dezimalwert|
|`noul`|Ja/Nein-Frage, optional mit `true`-/`false`-Kriterien|`noul`|Wahrscheinlichkeit für Ja zwischen 0 und 1, kein Boolean|

Zusätzlich kommen `model` und `usage.input_tokens` / `usage.output_tokens` zurück. `jev-latest` verweist derzeit auf `jev-1.14.0`; ein Alias kann sich später ändern. Halte die tatsächlich verwendete Version bei Auswertungen fest und schreibe `jev-1.14.0`, wenn sie fix bleiben soll.

Bei drei Stufen liegt `1.05` knapp über Stufe 1, nicht bei 1,05 von 100 Punkten. Maßgeblich ist `legend`. Ein Noul-Wert von `0.8` ist keine automatische Freigabe für eine Rückzahlung. Bestimme Schwellen mit beschrifteten Beispielen. `confidence` wird aus der Verteilung berechnet und garantiert keine richtige Entscheidung.

Die folgende vollständige Antwort ist ein erklärendes Beispiel, kein gemessenes API-Ergebnis. Antwortwerte und Tokenzahlen veranschaulichen nur die Struktur; tatsächliche Ergebnisse können abweichen.

```json
{
  "model": "jev-1.14.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": {
        "billing": 0.88,
        "technical": 0.12,
        "sales": 0.0
      },
      "confidence": 0.81
    },
    "frustration": {
      "type": "score",
      "score": 1.05,
      "legend": {
        "0": "Calm",
        "1": "Frustrated",
        "2": "Very angry"
      },
      "probabilities": {
        "0": 0.0,
        "1": 0.95,
        "2": 0.05
      },
      "confidence": 0.92
    },
    "is_urgent": {
      "type": "noul",
      "noul": 0.8
    }
  },
  "usage": {
    "input_tokens": 320,
    "output_tokens": 72
  }
}
```

## Python und Node.js

Die Beispiele lesen `jev-request.json` und senden genau eine Anfrage. Sie geben native Antworten aus und erwarten kein OpenAI-Feld `choices`. Für den Betrieb ergänzt du die unten beschriebene begrenzte Wiederholungsstrategie.

```python
import json
import os
import urllib.error
import urllib.request
from pathlib import Path

request = urllib.request.Request(
    "https://api.omniakey.com/v1/alpha/search",
    data=Path("jev-request.json").read_bytes(),
    headers={
        "Authorization": f"Bearer {os.environ['OMNIAKEY_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=30) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise SystemExit(f"Jev request failed: HTTP {error.code}") from None

print(result["model"])
print(json.dumps(result["answers"], indent=2))
```

```javascript
import { readFile } from 'node:fs/promises';

const key = process.env.OMNIAKEY_API_KEY;
if (!key) throw new Error('Set OMNIAKEY_API_KEY first');

const response = await fetch('https://api.omniakey.com/v1/alpha/search', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${key}`,
    'Content-Type': 'application/json',
  },
  body: await readFile('jev-request.json', 'utf8'),
  signal: AbortSignal.timeout(30_000),
});
if (!response.ok) throw new Error(`Jev request failed: HTTP ${response.status}`);

const result = await response.json();
console.log(result.model);
console.log(result.answers);
```

Erforderlich sind Python 3 beziehungsweise Node.js mit eingebautem `fetch` und `AbortSignal.timeout`. Das sind HTTP-Beispiele, keine Zusage, dass das OpenAI-SDK das Jev-Schema unterstützt. Eigene TypeSafe-SDKs beschreibt die [offizielle Dokumentation](https://docs.typesafe.ai/api).

## Kontext, Rate Limits und Kosten

Es gelten gleichzeitig **64K Tokens für die gesamte Anfrage** und **32K für `state` plus die längste einzelne Frage**. Entferne irrelevanten Kontext und bündele nur Fragen, die denselben Zustand benötigen.

TypeSafe nennt **250,000 Tokens pro Sekunde und 1,200 Anfragen pro Minute**, mit veränderlichen Limits während der frühen Bereitstellung. Das sind Kontolimits, keine Geschwindigkeit pro Anfrage und keine Zusage für OmniaKey. Ein Gateway kann weitere Grenzen setzen.

Der geprüfte Direktpreis beträgt **$0.042 je Million Eingabetokens**, Ausgabetokens sind kostenlos. Ihre Anzahl wird trotzdem zurückgegeben. Damit ist weder die gesamte API kostenlos noch die Abrechnungseinheit eines Gateways festgelegt. Prüfe dort den aktuellen Preis und die Nutzungsdaten; die [Modelleinführung](https://omniakey.com/de/blog/jev-model-explained) erläutert die Einordnung.

OmniaKey rechnet Jev im aktuellen Modellkatalog **pro Anfrage** ab. Prüfe für eine Kostenschätzung den aktuellen Modellpreis und die Nutzungsdaten im Dashboard.

## Fehler behandeln und kontrolliert wiederholen

|Direkter TypeSafe-Status|Zuerst prüfen|Vorgehen|
|-|-|-|
|`401`|Richtiger Dienst für den Key, Bearer-Header|Zugang korrigieren, nicht denselben ungültigen Key wiederholen|
|`422`|Pflichtfelder, Fragetyp und `criteria`|Das im Fehler genannte Feld korrigieren|
|`429`|Anfrage- oder Tokenlimit|`Retry-After` beachten, falls vorhanden; begrenztes exponentielles Backoff mit Zufallsanteil|
|`529`|Vorübergehende Überlastung|Wiederholen mit maximaler Versuchszahl und Zeitgrenze|

Diese Statusbedeutungen stammen vom Direktanbieter. Gateways können eigene Authentifizierungs-, Validierungs- oder Upstream-Fehler zurückgeben. Prüfe bei nicht verfügbaren Routen auch Pfad und Modell-ID. Teile keine Schlüssel oder privaten Anfrageinhalte in Diagnoseberichten.

Trenne Modellaufruf und Geschäftsaktion: Ein Klassifizierungsversuch darf nicht zweimal dieselbe E-Mail oder Rückzahlung auslösen. Nach wiederholtem Scheitern folgt ein sichtbarer Fehler oder eine Prüfung, keine heimliche Standardentscheidung.

## Häufige Fragen

### Ist das die offizielle Jev-API-Dokumentation?

Dies ist eine OmniaKey-Integrationsanleitung. Das direkte Schema definiert die [TypeSafe-API-Referenz](https://docs.typesafe.ai/api), direkte Preise und Limits die [Modellseite](https://docs.typesafe.ai/models). Die Endpunkttabelle unterscheidet beide Dienste.

### Kann Jev Bilder verarbeiten oder Text schreiben?

Jev 1.14 verarbeitet standardmäßig Text und liefert typisierte Entscheidungen. Nichttextuelle Inhalte müssen zunächst in Text oder Felder umgewandelt werden; Bildeingaben stecken in 1.14 hinter einer experimentellen Einstellung. Erklärungen, Bilder und Videos benötigen ein anderes Modell oder einen weiteren Anwendungsschritt.

### Alias oder feste Modellversion?

Ein Alias ist beim Ausprobieren bequem. Für einen produktiven Ablauf mit Schwellenwerten prüfst du eine unterstützte feste Version, protokollierst `model` und validierst vor einem Wechsel erneut. Die Modellverfügbarkeit kann je Route abweichen.

## Quellen

- [TypeSafe-API-Referenz](https://docs.typesafe.ai/api)
- [Modelle, Preise, Aliase und Limits](https://docs.typesafe.ai/models)
- [Konfidenz verstehen](https://docs.typesafe.ai/confidence)
- [Grenzen von Jev 1.13](https://docs.typesafe.ai/model-jaggedness/jev-1.13)
