Anbinden · Weg D

Eigene Zahlen (Ingest)

Wenn ein anderes System die Aufrufe macht und Ihnen nur die Zählwerte liefert, schicken Sie diese an die Ingest-Schnittstelle. Tokenwacht rechnet Kosten aus dem Preiskatalog, bildet Läufe und erkennt die Befunde D2, D3, D4 und D6.

Aufruf

POST https://tokenwacht.de/v1/ereignisse
Authorization: Bearer tw_live_…
Idempotency-Key: <uuid je Stapel>
Content-Type: application/json

{"ereignisse": [{
  "ereignis_id": "8d2c9c0a-1c8b-4c7e-9d7f-4a5b6c7d8e9f", "zeitpunkt": "2026-09-06T10:00:00Z",
  "anbieter": "anthropic", "modell": "claude-sonnet-5",
  "agent": "nils-icp-research", "lauf_id": "RL-0815", "schritt_nr": 3,
  "eingabe_token": 1200, "ausgabe_token": 57, "cache_lese_token": 800, "cache_schreib_token": 0, "denk_token": 0,
  "werkzeugaufrufe": 1, "latenz_ms": 2140, "status": "erfolgreich",
  "endkunde_ref": "kunde-4711", "funktion_ref": "leadliste_erzeugen", "quelle": "ingest"
}]}

Antwort 202 mit {"angenommen": 1, "doppelt": 0, "unvollstaendig": 0}. Bis 500 Ereignisse je Stapel.

Felder

FeldPflichtBedeutung
ereignis_idempfohlenUUID. Gleiche Kennung = gleiches Ereignis, wird nicht doppelt gezählt. Fehlt sie, bildet Tokenwacht eine aus Zeitpunkt, Agent und Zählwerten.
zeitpunktjaISO 8601 mit Zeitzone.
anbieter, modelljaanthropic, openai, google, bedrock; Modellname wie beim Anbieter. Unbekannte Modelle werden angenommen und ohne Preis (0 €) geführt, bis der Katalog sie kennt.
agentjaDauerhafte Einheit, an der Kosten und Befunde hängen.
lauf_id, schritt_nrempfohlenLauf-Kennung (UUID oder Text) und Schritt im Lauf. Ohne Lauf-Kennung automatische Lauf-Bildung wie beim Proxy.
eingabe_tokendenk_tokenja (mindestens Eingabe und Ausgabe)Zählwerte aus dem Nutzungsobjekt des Anbieters. Cache-Felder und Denk-Token optional.
status, fehlercodeoptionalerfolgreich, fehler, abgewiesen. Fehler zählen als verbranntes Geld.
werkzeugaufrufe, werkzeug_fingerabdruck, prompt_fingerabdruckoptionalAnzahl Werkzeugaufrufe; 16 Hex-Zeichen SimHash für Leerschleifen- und Cache-Erkennung. Kein Inhalt.
endkunde_ref, funktion_ref, benutzer_refoptionalZuordnung für Weiterbelastung und Auswertung.
geschaetztoptionaltrue, wenn die Zählwerte geschätzt sind (z. B. Zeichen ÷ 4). Wird im Cockpit gekennzeichnet.

Grundsätze

  • Datenannahme scheitert nie. Unvollständige Ereignisse werden angenommen und als solche gekennzeichnet; die Antwort nennt die Gründe.
  • Mehrfach senden ist sicher. Idempotenz über ereignis_id und den Idempotency-Key des Stapels.
  • Der Schlüssel braucht den Bereich „Ingest“ (oder keine Einschränkung).

Beispiel · Python mit dem SDK

from tokenwacht_sdk import Wacht
wacht = Wacht(schluessel=TW_KEY, agent="batch-klassifizierer")
with wacht.lauf("nacht-2026-09-06"):
    wacht.melden([{"anbieter": "openai", "modell": "gpt-5-mini", "eingabe_token": u.prompt_tokens, "ausgabe_token": u.completion_tokens}
                  for u in nutzungen])

Beispiel · LangChain-Callback

from langchain_core.callbacks import BaseCallbackHandler
class TokenwachtCallback(BaseCallbackHandler):
    def on_llm_end(self, antwort, **kw):
        u = antwort.llm_output.get("usage") or antwort.llm_output.get("token_usage") or {}
        wacht.melden({"anbieter": "anthropic", "modell": antwort.llm_output.get("model_name", "?"),
                      "eingabe_token": u.get("input_tokens", u.get("prompt_tokens", 0)),
                      "ausgabe_token": u.get("output_tokens", u.get("completion_tokens", 0))})
Prüfen: curl https://tokenwacht.de/v1/anbindung/pruefen -H "Authorization: Bearer $TOKENWACHT_KEY"letztes_ereignis.quelle ist ingest.