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).
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.
Erstelle einen API-Key unter Profil (Format enk_…) und sende ihn als Bearer-Token:
Authorization: Bearer enk_…
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!"}]
}'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)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.
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:4bgemma3:12b-it-q4_K_Mdeepseek-r1:8bmistral-nemo:12bqwen3:8bAktuelle Live-Liste der verfügbaren Modelle: GET https://enigmanet.eu/api/tags
Ü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?"}]
}'Ü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.
eni_cost in der Antwort). Tägliches Guthaben gibt es unter Profil."stream": true) wird unterstützt — SSE im OpenAI-Format inkl. Live-Orchestrierungs-Schritten (siehe Abschnitt „Streaming (SSE)").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.