SSilentCRMDokuZur Anwendung
Für Entwickler

LLM-Gateway (OpenAI-Format)

Modelle über dein SilentCRM-Guthaben ansprechen — mit der OpenAI-Bibliothek, die du ohnehin schon benutzt.

Diese Seite beschreibt die SilentCRM-API für Arbeitsbereiche auf closed.silentcrm.de (bisherige Fassung). Arbeitest du auf app.silentcrm.de, findest du deine Zugänge in der App unter Einstellungen, MCP und APIs.

Die Idee

Wer ein eigenes Werkzeug baut, braucht meistens irgendwo ein Modell. Statt dir dafür einen zweiten Anbieter, einen zweiten Vertrag und eine zweite Rechnung zuzumuten, kannst du das Guthaben nehmen, das ohnehin in deinem Arbeitsbereich liegt.

Das ist ein Angebot, keine Bedingung. Hast du eigene Modellschlüssel, benutz sie — die Daten-API funktioniert davon unabhängig.

Einrichten: eine Zeile

Das Gateway spricht das OpenAI-Format. Du brauchst also keine neue Bibliothek, nur eine andere Adresse.

from openai import OpenAI

client = OpenAI(
    base_url="https://silentcrm.de/api/llm/v1",
    api_key="scrm_llm_…",
)

antwort = client.chat.completions.create(
    model="silent-core",
    messages=[{"role": "user", "content": "Fasse diesen Vertrag in fünf Sätzen zusammen: …"}],
)
print(antwort.choices[0].message.content)

In JavaScript genauso:

import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://silentcrm.de/api/llm/v1", apiKey: "scrm_llm_…" });

Dasselbe gilt für LangChain, LlamaIndex, das Vercel AI SDK und jedes Werkzeug mit einem Feld für eine OpenAI-kompatible Adresse.

Welches Modell

model: "silent-core" nimmt immer das aktuelle Standardmodell — du musst deinen Code nicht anfassen, wenn wir wechseln. Wer ein bestimmtes will, holt sich die Liste:

curl https://silentcrm.de/api/llm/v1/models -H "Authorization: Bearer scrm_llm_…"

Dort steht zu jedem Modell auch der Preis je Million Token.

Was geht

  • Text und Bilder (image_url als data:-URL oder als http-Adresse)
  • Function Calling (tools, tool_choice) — vollständig, auch parallele Werkzeugaufrufe
  • Streaming (stream: true), auch stream_options: {"include_usage": true}
  • max_tokens (Obergrenze 8000), stop, top_p

temperature wird angenommen und ignoriert: die aktuellen Modelle lehnen den Parameter ab. Dein Beispielcode aus der OpenAI-Doku läuft trotzdem.

Was es kostet

Was es uns kostet — 1:1, ohne Aufschlag. Verdient wird an der Aufladung, nicht am Verbrauch.

Jede Antwort trägt das gleich mit:

{
  "choices": [ … ],
  "usage": { "prompt_tokens": 11820, "completion_tokens": 412, "total_tokens": 12232 },
  "silentcrm": { "costEur": 0.0638, "balanceEur": 41.72, "workspace": "ws_…" }
}

Das Feld silentcrm ist unsere Zugabe; OpenAI-Bibliotheken übergehen unbekannte Felder, also stört es niemanden — wer mitrechnen will, braucht dafür keinen zweiten Aufruf.

Ist das Guthaben leer, kommt 402 mit einem klaren Satz. Aufladen geht im CRM unter KI-Nutzung.

Fehler

Im OpenAI-Format, also {"error": {"message": …, "type": …, "code": …}} — deine Bibliothek zeigt den Text von selbst an.

Ein wichtiger Unterschied, den wir bewusst durchreichen: Lehnt das Modell deine Anfrage ab (zu lang, ungültiges Bild), bekommst du dessen Code und dessen Text. Klemmt es bei uns, bekommst du 502 oder 504. Du sollst unterscheiden können, ob dein Aufruf falsch war oder unsere Seite hakt.

Und die Dokumenten-Auswertung?

Für den häufigsten Fall — ein PDF hinein, die Auswertung heraus — gibt es weiterhin den einfacheren Weg POST /api/llm/analyze mit file als Anhang. Er rendert PDFs selbst seitenweise, du musst dich um nichts kümmern. Beide Wege verbrauchen dasselbe Guthaben.