← ThalamusNetwork
API

OpenAI-kompatible API

ThalamusNetwork stellt einen OpenAI-kompatiblen Endpunkt bereit. Bestehende OpenAI-SDKs funktionieren — du änderst nur base_url und den API-Key. Jede Anfrage wird von einem Provider im Netzwerk beantwortet und mit OTH-Token abgerechnet.

Antworten sind KI-generiert; kennzeichne KI-Ausgaben in deiner Anwendung entsprechend (Transparenzpflicht Art. 50 KI-VO).

Endpunkt

POST https://enigmanet.eu/v1/chat/completions

Body und Antwort folgen dem OpenAI-Format (chat.completion). Die Antwort enthält zusätzlich ein enigma-Feld mit job_id, duration_ms und eni_cost.

Authentifizierung

Erstelle einen API-Key unter Profil (Format enk_…) und sende ihn als Bearer-Token:

Authorization: Bearer enk_…

Beispiel — curl

curl https://enigmanet.eu/v1/chat/completions \
  -H "Authorization: Bearer enk_…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma3:4b",
    "messages": [{"role": "user", "content": "Hallo!"}]
  }'

Beispiel — Python (openai SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://enigmanet.eu/v1",
    api_key="enk_…",
)

resp = client.chat.completions.create(
    model="gemma3:4b",
    messages=[{"role": "user", "content": "Hallo!"}],
)
print(resp.choices[0].message.content)

Streaming (SSE)

Mit "stream": true liefert der Endpunkt Server-Sent Events im OpenAI-chat.completion.chunk-Format (kompatibel mit OpenAI-SDKs, LiteLLM, LangChain, Open WebUI). Zusätzlich werden die Orchestrierungs-Schritte live als Content-Deltas gestreamt — Routing, Decomposition, Subtasks, Synthese — bevor die eigentliche Antwort kommt. Jeder Event-Chunk trägt zusätzlich ein maschinenlesbares enigma-Feld ({ event, area, task }). Der Stream endet mit data: [DONE]; der letzte Chunk trägt usage.

curl -N https://enigmanet.eu/v1/chat/completions \
  -H "Authorization: Bearer enk_…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma3:4b",
    "stream": true,
    "messages": [{"role": "user", "content": "Analysiere den Markt für E-Bikes."}]
  }'

Python (openai SDK, stream=True):

stream = client.chat.completions.create(
    model="gemma3:4b",
    messages=[{"role": "user", "content": "Analysiere den Markt für E-Bikes."}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)

Einbau in eine eigene Website oder App (JavaScript-Snippet + Server-Proxy): siehe Streaming-Beispiel. Coding-Agent im Terminal: siehe OpenCode mit EnigmaNet.

Modelle

Gib entweder einen Routing-Alias (enigma-auto, enigma-web, enigma-direct — siehe Abschnitt „Routing & Web-Recherche", empfohlen) oder einen echten Modellnamen an (z. B. eines der folgenden).

  • gemma3:4b
  • gemma3:12b-it-q4_K_M
  • deepseek-r1:8b
  • mistral-nemo:12b
  • qwen3:8b

Aktuelle Live-Liste der verfügbaren Modelle: GET https://enigmanet.eu/api/tags

Routing & Web-Recherche

Über das model-Feld steuerst du das Routing. Die Aliase sind der empfohlene Einstieg:

  • enigma-auto — automatische Einstufung (Standard, entspricht dem Weglassen des Feldes).
  • enigma-web — erzwingt Live-Web-Recherche: gesucht, abgerufen, per Cross-Encoder neu geordnet und ausschließlich aus den abgerufenen Quellen beantwortet. Enthalten die Quellen die Antwort nicht, wird das offen gesagt — keine erfundenen Zahlen aus Trainingswissen.
  • enigma-direct — direkte Einzelmodell-Antwort ohne Orchestrierung (am schnellsten).

Für Recherche "stream": true verwenden. Ein Recherche-Lauf dauert je nach Frage länger; im Streaming siehst du die Schritte (Suche, Abruf, Reranking, Synthese) live und der Lauf hat ein großzügiges Zeitbudget. Ohne Streaming gilt ein 120-Sekunden-Limit — für mehrstufige Recherche oft zu knapp.

curl -N https://enigmanet.eu/v1/chat/completions \
  -H "Authorization: Bearer enk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "enigma-web",
    "stream": true,
    "messages": [{"role": "user", "content": "Aktueller Goldpreis pro Unze in USD mit Quelle?"}]
}'

Datensouveränität — Vertraulichkeitsklasse

Über das optionale Feld sensitivity_class (Nicht-OpenAI-Erweiterung) steuerst du, auf welcher Provider-Hardware deine Anfrage verarbeitet werden darf. Die Klasse wird hart erzwungen: passt kein geeigneter Provider, schlägt die Anfrage fehl (kein Herabstufen). Ohne Angabe gilt public.

  • public — beliebiger Provider (Standard).
  • normal — nur vertrauenswürdige Provider.
  • confidential — nur verifizierte Provider; externe Schritte (Web-Recherche) werden unterdrückt.
  • secret — ausschließlich dein eigener Node (deine Hardware); externe Schritte unterdrückt.
curl https://enigmanet.eu/v1/chat/completions \
  -H "Authorization: Bearer enk_…" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "enigma-auto",
    "sensitivity_class": "confidential",
    "messages": [{"role": "user", "content": "Interne Marktanalyse …"}]
  }'

Ungültige Werte werden mit HTTP 400 abgelehnt. Die Durchsetzung ist eine Betreiber-Einstellung; ist sie deaktiviert, wird das Feld akzeptiert, aber nicht gefiltert.

Kosten & Hinweise

  • Jede Anfrage kostet OTH-Token (siehe eni_cost in der Antwort). Tägliches Guthaben gibt es unter Profil.
  • Bei zu geringem Guthaben: HTTP 429. Kein Provider verfügbar: HTTP 503.
  • Streaming ("stream": true) wird unterstützt — SSE im OpenAI-Format inkl. Live-Orchestrierungs-Schritten (siehe Abschnitt „Streaming (SSE)").
  • Maximal 5 API-Keys pro Account.

Business Core API (Service-to-Service)

Fuer Business Hubs gibt es zusaetzlich eine HMAC-signierte Maschinen-API unter https://server.enigmanet.eu/api/v1/business. Sie verwendet pseudonyme Subjects, verpflichtende Idempotency Keys, tenant-spezifische Ownership und denselben Request-Vertrag fuer Polling und SSE.

{
  "prompt": "Analysiere den EU-Speichermarkt.",
  "required_region": "EU",
  "sensitivity_class": "confidential",
  "service_level": "quality",
  "max_tokens": 4096,
  "run_timeout_secs": 600
}
  • fast bevorzugt eine direkte Einzelmodell-Antwort.
  • balanced laesst Core automatisch zwischen direkter Ausfuehrung und Orchestrierung waehlen.
  • quality bevorzugt mehrstufige Orchestrierung.
  • verified ergaenzt autoritative Web-Recherche, strukturierte Extraktion und numerischen Crosscheck.

Sicherheits- und Egress-Regeln haben immer Vorrang vor dem Service Level. Konkrete Provider, Node-Credentials, IP-Adressen und interne Routing-Scores bleiben ausschliesslich in Core. Der vollstaendige maschinenlesbare Vertrag liegt unter GET https://server.enigmanet.eu/api/v1/openapi.json.