Chat API
Interagieren Sie mit Ihren Minds über Chat Completions und Multi-Turn-Konversationen.
Senden Sie Nachrichten an Ihre Minds und erhalten Sie KI-generierte Antworten. Die Chat API unterstützt sowohl stateless Completions als auch stateful Multi-Turn-Konversationen mit automatischem History-Management.
Stateful Chats (empfohlen)
Erstellen Sie persistente Konversationen, bei denen der Server History, Context-Kompression und rollende Zusammenfassungen automatisch verwaltet. Es ist nicht nötig, mit jedem Request den kompletten Nachrichtenverlauf mitzusenden.
Chat erstellen
Erstellt eine neue stateful Konversation, die mit einem Mind verknüpft ist.
Endpoint: POST /api/v1/chats
Wählen Sie genau eine nicht leere Auswahl: mindId, mindIds oder audienceIds. Gemischte Auswahlen ergeben 400; ein leeres optionales Array überschreibt keinen einzelnen Mind. UUIDs sind unabhängig von Groß- und Kleinschreibung; doppelte IDs werden ignoriert. Die Chat-Erstellung akzeptiert höchstens 1 MiB JSON einschließlich Escape-Sequenzen. Größere Anfragen erhalten vor Datenbank- oder Berechtigungsprüfungen 413. Antworten sind privat und werden nicht zwischengespeichert.
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body:
{
"name": "My Conversation",
"mindId": "your-mind-id"
}
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Nein | Anzeigename für den Chat (Standard: "API Chat") |
mindId | string | Eine dieser Angaben | UUID eines einzelnen Minds. mindId, ein nicht leeres Array mindIds oder ein nicht leeres Array audienceIds ist erforderlich; fehlen alle drei, folgt 400. |
mindIds | string | Eine dieser Angaben | UUIDs mehrerer Minds. |
audienceIds | string | Eine dieser Angaben | Audience-UUIDs für einen Study-Chat. Die Antwort enthält type: "study" und audiences statt minds. |
responseThread | object | Nein | Optionales { studyId, messageId } für eine Rückfrage zu einer Study-Antwort mit einem Mind. Autorisierter Quellkontext und Dateien bleiben erhalten. Ein neuer Thread liefert 201, die Wiederaufnahme eines vorhandenen Threads 200. |
description | string | Nein | Optionale Beschreibung |
Response (201):
{
"data": {
"id": "601af953-3837-49c1-a31e-4fdbfa82ac04",
"name": "My Conversation",
"description": null,
"createdAt": "2026-04-04T12:45:24.078Z",
"minds": [
{
"id": "4774888e-0a03-40d7-979b-39b47c4c049c",
"name": "Ada Lovelace",
"discipline": "mathematician and computer scientist"
}
]
}
}
Nachricht senden
Senden Sie eine Nachricht an einen bestehenden Chat. Der Server übernimmt automatisch Konversationsverlauf, Context-Window-Kompression und rollende Zusammenfassungen.
Endpoint: POST /api/v1/chats/{chatId}/messages
Chats mit einem oder mehreren Minds beachten die gespeicherte Richtlinie knowledge_only jedes Minds und die Webrecherche-Beschränkungen des Arbeitsbereichs. Ein eingeschränkter Mind nutzt die aktuelle Frage, seine trainierte Persona und relevante abgerufene Mind-Wissensinhalte; interne Tools, Client-Tools, früherer Chat-Kontext und kopierte Study-Quellen werden aus seinem Antwortkontext ausgeschlossen. Die Antwort meldet metadata.knowledgeRetrieval.status als grounded, wenn relevante Belege abgerufen wurden, oder als fallback, wenn keine verfügbar waren oder der Abruf fehlschlug. Bei mehreren Minds steht dies separat in den metadata jedes Eintrags in messages[].
Die Webrecherche-Berechtigung des Arbeitsbereichs ist von knowledge_only getrennt: Ist sie deaktiviert, entfallen Websuche und Linkanalyse-Tools; bereitgestelltes Material und der Gesprächsverlauf bleiben für Minds mit auto erhalten. Der oben beschriebene eingeschränkte Antwortkontext gilt für Minds mit knowledge_only.
Das rollende Gedächtnis setzt nach der ID der zuletzt erfassten Nachricht fort, statt sich auf eine Position zu verlassen, die sich durch geänderten kopierten Study-Kontext verschieben kann. Generierte Zusammenfassungszeilen zählen nicht als Gesprächsbeiträge; Systemnotizen des Eigentümers bleiben in v1-Chats verfügbar. Ein Hintergrundresultat wird verworfen, wenn eine andere Anfrage die zugrunde liegende gespeicherte Zusammenfassung geändert hat.
Schlägt die rollende Zusammenfassung fehl oder liefert sie keinen Zusammenfassungstext, übernimmt der Fallback die bisherige Zusammenfassung und gültige gespeicherte Fakten und ergänzt einen kurzen Abriss des neuen Gesprächsabschnitts. Der Fallback enthält pro Aktualisierung Auszüge aus höchstens 30 neu erfassten Nachrichten und setzt die Abdeckung nur bis zu diesen fort. Die übrigen Nachrichten bleiben für spätere Aktualisierungen offen. Bei der Anfrage-Komprimierung verhindert der gespeicherte Nachrichtenanker wiederholte Auszüge; aktuelle Nachrichten, hervorgehobene Belege und kopierter Study-Kontext bleiben erhalten.
Der Moderator unterscheidet Teilnehmende anhand ihrer Mind-ID. Minds mit demselben Anzeigenamen bleiben eigenständige Kandidaten; Gesprächslimits und die Vermeidung unmittelbar aufeinanderfolgender Beiträge gelten pro ID. Der Moderator kann die Diskussion beenden, bevor jeder Mind geantwortet hat.
Unerwartete Generierungsfehler liefern ein generisches 500 ohne Anbieterdetails; für fehlgeschlagene Antworten wird eine Erstattung reservierter Einheiten veranlasst. Bereits generierte Antworten und gespeicherte Nachrichten werden nicht rückgängig gemacht. Eine ausdrückliche Ablehnung wegen fehlender Modellfähigkeiten bleibt 400 mit data.errorType: "unsupported_model_capability". Bei Multi-Mind-Chats verzögert die optionale Zusammenfassung im Hintergrund keine bereits gespeicherte Antwort und macht daraus keinen Fehler.
Auch Nachrichtenanfragen haben ein JSON-Limit von 1 MiB; größere Anfragen erhalten vor Datenbank- oder Berechtigungsprüfungen 413. Antworten sind privat und werden nicht zwischengespeichert. Nur der Chat-Eigentümer darf schreiben. Verwaltete Workspaces prüfen bei jeder Anfrage den aktuellen Workspace und die Freigaben der angehängten Minds/Audiences erneut; entzogener Zugriff ergibt vor Speicherung oder Abrechnung 404.
Das folgende Antwortbeispiel gilt für einen einzelnen Mind. Multi-Mind-Chats liefern messages[], Study-Chats outputData. Mit role: "system" wird eine Kontextnotiz ohne Generierung oder Verbrauch des Nachrichtenlimits gespeichert; die Antwort lautet { messageId, role: "system" }.
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body:
{
"content": "What are the latest advancements in solar panel technology?"
}
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
content | string | Ja | Der Nachrichtentext (alternativ message) |
model | string | Nein | Überschreibt das KI-Modell für diese Nachricht. Muss zusammen mit provider gesendet werden. |
provider | string | Nein | KI-Provider für den Model Override: openai, anthropic oder google. Muss zusammen mit model gesendet werden. |
endUserName | string|null | Nein | Optionaler Anzeigename des tatsächlichen Endnutzers für diesen Request. Wenn weggelassen, null oder leer, spricht Minds neutral an und leitet keinen Namen aus API-Key- oder Account-Inhaber ab. Aliase: userDisplayName, userName. |
Die Modellauswahl für stateful Chat folgt dieser Reihenfolge: Per-Request-Override, dann die bevorzugte Provider-Einstellung des Teams, wenn sie konfiguriert und berechtigt ist, danach der Produktstandard. Bei diesem Endpoint werden partielle Overrides mit 400 Bad Request abgelehnt; sende entweder sowohl model als auch provider oder keinen der beiden Werte.
Response:
{
"content": "Recent advancements in solar panel technology include perovskite cells with 30%+ efficiency...",
"messageId": "cmnkbsddh00033v01ptk9t4et"
}
| Feld | Typ | Beschreibung |
|---|---|---|
content | string | Die Antwort des Minds |
messageId | string | Eindeutige ID der gespeicherten Nachricht |
Multi-Turn-Beispiel
Bei stateful Chats senden Sie jedes Mal einfach die neue Nachricht. Der Server merkt sich alles:
# Schritt 1: Einen Chat erstellen
CHAT=$(curl -s -X POST "https://getminds.ai/api/v1/chats" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Research Session", "mindId": "your-mind-id" }')
CHAT_ID=$(echo $CHAT | jq -r '.data.id')
# Schritt 2: Nachrichten senden (Server verwaltet History automatisch)
curl -X POST "https://getminds.ai/api/v1/chats/$CHAT_ID/messages" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "What are the top marketing trends?" }'
# Schritt 3: Nachfassen (der Mind erinnert sich an den vorherigen Austausch)
curl -X POST "https://getminds.ai/api/v1/chats/$CHAT_ID/messages" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "Which of those would work best on a small budget?" }'
So funktioniert es unter der Haube:
- Jede Nachricht wird in der Datenbank persistiert
- In Chats mit einem Mind und langem Verlauf bleiben die letzten 8 Nachrichten im vollständigen Kontext
- Ältere Beiträge nutzen eine gespeicherte Zusammenfassung, sofern vorhanden, sowie Auszüge noch nicht erfasster Nachrichten
- Zusammenfassungen verlieren Details; sehr lange Verläufe oder große Nachrichten können weiterhin die Kontextgrenzen des Modells erreichen.
Chat löschen
DELETE /api/v1/chats/{chatId}
Nur der Eigentümer kann einen Chat samt Nachrichten endgültig löschen. Minds und Audiences bleiben erhalten. Bei Erfolg folgt 204 ohne Antworttext; die Antwort darf nicht als JSON geparst werden. Fehlende oder ungültige Zugangsdaten ergeben 401, ein fremder Chat 403 und ein fehlender Chat 404, auch wenn er vor dem abschließenden Schreibzugriff gelöscht oder übertragen wurde. Löschantworten verwenden Cache-Control: private, no-store.
Stateless Completions
Für Einzelanfragen oder wenn Sie den Konversationsverlauf selbst verwalten möchten.
Nachricht senden
Senden Sie Nachrichten an einen Mind und erhalten Sie Antworten.
Endpoint: POST /api/v1/minds/{mindId}/completion
Headers:
Authorization: Bearer minds_your_api_key
Content-Type: application/json
Request Body
{
"messages": [
{
"role": "user",
"content": "What are the latest advancements in solar panel technology?"
}
]
}
Parameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
messages | array | Nein | Array von Message-Objekten (system, user, assistant oder tool). Feld weglassen oder leeres Array senden, um den Begrüßungs-Bootstrap auszulösen (siehe Initiale Nachricht unten). |
messages[].role | string | Ja | system, user, assistant, tool |
messages[].content | string|array | Ja | Ein String oder ein Array strukturierter Inhaltsteile. Für jede Rolle erforderlich. User-Strings müssen Text enthalten, der nicht nur aus Leerzeichen besteht. Bei Tool-Ergebnissen bleibt content erhalten; tool_call_id muss zu einem früheren Assistant-Aufruf passen. Die Rolle system akzeptiert nur Strings als Inhalt. |
model | string | Nein | Überschreibt das für diesen Request verwendete KI-Modell. Siehe Model Override unten. |
provider | string | Nein | KI-Provider für den Model Override: openai, anthropic oder google. Wird nach Möglichkeit automatisch aus dem Modellnamen ermittelt. |
modelConnection | object | Nein | { "id", "revision" } einer geprüften Team-Modellverbindung: Ihr eigener Endpunkt schreibt die Antwort. Nicht mit model/provider kombinierbar. Siehe eigenes Modell. |
endUserName | string|null | Nein | Optionaler Anzeigename des tatsächlichen Endnutzers für diesen Request. Wenn weggelassen, null oder leer, spricht Minds neutral an und leitet keinen Namen aus API-Key- oder Account-Inhaber ab. Aliase: userDisplayName, userName. |
language | string | Nein | Hinweis auf die Antwortsprache. Unterstützt: en, de, es, fr, zh, tr, ar, ja, ko. Starke Personas (z. B. Klone bekannter Persönlichkeiten mit fester Muttersprache) können weiterhin in der Sprache ihrer Persona antworten. |
generateImage | boolean | Nein | Wenn true, wird KI-Bildgenerierung in der Antwort aktiviert, sofern kontextuell passend |
response_format | object | Nein | Fordert strukturierte Ausgabe an. Siehe Strukturierte Ausgabe unten. |
tools | array | Nein | Array von benutzerdefinierten Tool-Definitionen. Siehe Tool Calling unten. |
tool_choice | string|object | Nein | Steuert das Verhalten von Tool Calling. Siehe Tool-Choice-Modi. |
parallel_tool_calls | boolean | Nein | Erlaubt mehrere Tool Calls pro Turn (Standard: true). |
Response
{
"messageId": "msg_550e840029b141d4a716446655440000",
"content": "Recent advancements in solar panel technology include perovskite cells with 30%+ efficiency, bifacial panels that capture light from both sides, and integrated storage systems...",
"metadata": {
"ragCitations": [
{
"id": "abc123",
"displaySource": "Mind knowledge",
"similarity": 0.89
}
]
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
messageId | string | Eindeutige Nachrichten-ID für Tracking |
content | string | Der Antworttext des Minds (JSON-String bei strukturierter Ausgabe) |
parsed | object | Geparstes JSON-Objekt (nur bei Verwendung von response_format vorhanden) |
tool_calls | array | Array von Tool-Call-Anfragen (nur vorhanden, wenn benutzerdefinierte Tools aufgerufen werden). Jede enthält: id, name, arguments |
metadata | object | Optionale Metadaten (Citations, Bilder) |
metadata.ragCitations | array | Wissensquellen und Web-Suchergebnisse, die in der Antwort verwendet wurden |
Beispiel für eine einzelne Nachricht
Stellen Sie eine einzelne Frage:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are the top 3 marketing trends for 2025?"
}
]
}'
Multi-Turn-Konversation
Erhalten Sie den Konversationskontext, indem Sie vorherige Nachrichten mitsenden:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are the top marketing trends?"
},
{
"role": "assistant",
"content": "The top trends are AI personalization, short-form video, and community building..."
},
{
"role": "user",
"content": "How can I implement AI personalization on a budget?"
}
]
}'
Tipps für Multi-Turn-Konversationen:
- Fügen Sie in jedem Request den vollständigen Konversationsverlauf ein
- Reihenfolge ist wichtig: Nachrichten müssen chronologisch sortiert sein
- Wechseln Sie zwischen den Rollen
userundassistant - Die letzte Nachricht sollte immer von
userstammen
Datei-Anhänge
Hängen Sie Dateien, Dokumente, Bilder und Links an, um Ihren Minds Kontext zu geben. Minds erhalten den verarbeiteten Inhalt als Teil der Konversation.
Dateien anhängen
Fügen Sie Dateien über das Array metadata.attachedFiles in Ihrer User-Nachricht hinzu:
Verwenden Sie für zustandslose Completions einen eigenen Upload, eine Chat-Datei-URL mit gültiger Signatur oder Kontext, der über die Study des Uploaders geteilt wurde. Ohne Dateiberechtigung folgt 403 Upload access denied (im Streaming-Modus als Fehler-Frame). Externe HTTP(S)-URLs behalten ihr eigenes Zugriffstoken; ein beliebiger Speicherpfad wird nicht neu signiert. Ersetzen Sie your-user-id in den Beispielen durch Ihre Benutzer-ID und verwenden Sie den Pfad aus der Upload-Antwort.
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Please review this document and summarize the key points",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/quarterly-report.pdf",
"name": "Q4 2025 Report",
"type": "application/pdf"
},
{
"path": "chat/your-user-id/meeting-notes.docx",
"name": "Strategy Meeting Notes"
}
]
}
}
]
}'
Anhang-Format
Jedes Attachment-Objekt unterstützt:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
url | string | Nein* | Externe URL zur Datei (HTTP/HTTPS) |
path | string | Nein* | Supabase-Storage-Pfad (wird automatisch signiert) |
name | string | Nein | Anzeigename für die Datei |
type | string | Nein | MIME-Typ (z. B. application/pdf, image/png) |
description | string | Nein | Optionale Beschreibung |
transcription | string | Nein | Vorab transkribierter Audio-/Videoinhalt |
Hinweis: Geben Sie entweder url ODER path an, nicht beides.
Unterstützte Dateitypen
Dokumente:
- PDF (
.pdf) - Textextraktion + OCR für gescannte Seiten - Word (
.docx) - Vollständige Textextraktion - Text (
.txt,.md) - Direkter Textinhalt - CSV/Excel (
.csv,.xlsx) - Tabellen-Extraktion
Bilder:
- PNG, JPG, WEBP - OCR + visuelle Analyse
- Vision-Fähigkeiten für Bildverständnis
Externe URLs:
- Webseiten werden mit Firecrawl geladen (JS-Rendering + Screenshots)
- Automatische Markdown-Konvertierung
Verarbeitung
Dateien werden automatisch verarbeitet, bevor sie an den Mind gesendet werden:
- Download - Dateien werden von URL oder Supabase Storage geladen
- Extraktion - Inhalt wird extrahiert (Text aus PDFs, OCR aus Bildern usw.)
- Injection - Verarbeiteter Inhalt wird dem Konversationskontext hinzugefügt
- Response - Mind sieht sowohl Ihre Nachricht als auch den Dateiinhalt
Verarbeitungs-Limits:
- Timeout: 30 Sekunden pro Datei
- Dateien werden parallel verarbeitet
- Fehlgeschlagene Dateien zeigen freundliche Fallback-Nachrichten
Beispiel mit mehreren Dateien
{
"messages": [
{
"role": "user",
"content": "Compare these two proposals and recommend which one to pursue",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/proposal-a.pdf",
"name": "Proposal A - Cloud Migration",
"type": "application/pdf"
},
{
"url": "https://example.com/proposal-b.pdf",
"name": "Proposal B - On-Prem Upgrade",
"type": "application/pdf"
},
{
"path": "chat/your-user-id/budget-analysis.xlsx",
"name": "Budget Comparison"
}
]
}
}
]
}
Datei-Anhänge im Konversationsverlauf
Wenn Sie eine Konversation mit Datei-Anhängen fortsetzen, fügen Sie die ursprüngliche Nachricht samt Anhängen in die History ein:
{
"messages": [
{
"role": "user",
"content": "Analyze this sales data",
"metadata": {
"attachedFiles": [
{
"url": "https://example.com/sales-q4.csv",
"name": "Q4 Sales Data"
}
]
}
},
{
"role": "assistant",
"content": "Based on the Q4 sales data, I can see that revenue increased by 23% compared to Q3..."
},
{
"role": "user",
"content": "What were the top 3 performing products?"
}
]
}
Hinweis: Dateien werden nur einmal beim ersten Anhängen verarbeitet. Folgende Nachrichten in derselben Konversation beziehen sich auf den bereits verarbeiteten Inhalt.
Web-Links
Für Webseiten und externe Inhalte verwenden Sie das url-Feld:
{
"messages": [
{
"role": "user",
"content": "Summarize the key findings from this research paper",
"metadata": {
"attachedFiles": [
{
"url": "https://arxiv.org/pdf/2103.12345.pdf",
"name": "AI Research Paper",
"type": "application/pdf"
}
]
}
}
]
}
Speziell für Webseiten:
- JavaScript-lastige Sites werden mit Firecrawl gerendert
- Screenshots werden für visuellen Kontext erfasst
- Inhalt wird in sauberes Markdown konvertiert
Error Handling
Wenn die Dateiverarbeitung fehlschlägt:
- Der Mind erhält eine Fallback-Nachricht, die anzeigt, dass die Datei angehängt wurde, aber die Verarbeitung fehlschlug
- Die Konversation läuft normal weiter
- Timeout-Fehler zeigen
[Processing timeout - file may be too large] - Andere Fehler zeigen
[Processing failed - file uploaded but analysis unavailable]
So wissen Minds auch bei fehlgeschlagener Verarbeitung, dass ein Anhang versucht wurde.
Initiale Nachricht (Begrüßung)
Wenn Sie ein leeres Messages-Array oder keine Nachrichten senden, stellt sich der Mind selbst vor:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": []
}'
Response:
{
"content": "Hi! I'm Sarah, a marketing director with 15 years of experience in B2B SaaS. I specialize in growth marketing and data-driven strategies. What can I help you with today?"
}
Model Override
Sie können das für einen stateless Completion-Request verwendete KI-Modell optional durch den Parameter model überschreiben. Das ist nützlich für Benchmarking, Kostenoptimierung oder das Testen unterschiedlicher Modellverhalten. Stateful Chat- und Panel-Endpoints validieren Overrides strenger: model und provider müssen zusammen gesendet werden.
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What are your thoughts on sustainable packaging?"
}
],
"model": "gpt-6-luna"
}'
Wenn kein model angegeben ist, wird der Server-Standard verwendet.
Provider
| Provider | Wert | Beispielmodelle |
|---|---|---|
| OpenAI | openai | gpt-6-astra, gpt-6.1-sol, gpt-6-luna |
| Anthropic | anthropic | claude-fable-5-1, claude-opus-5-5, claude-sonnet-5-5, claude-haiku-4-5-20251001 |
google | gemini-3.8-flash, gemini-3.5-flash-lite |
Übergeben Sie eines der oben aufgeführten Modelle. Ausgemusterte IDs werden weitergeleitet (siehe unten); jedes andere Modell führt zu 400 Bad Request. Der Provider wird aus gängigen Modellnamen-Präfixen automatisch erkannt (claude- → Anthropic, gemini- → Google, gpt-/o1/o3/o4 → OpenAI).
Your own model
Um ein Fine-Tune oder ein selbst gehostetes Modell zu nutzen, fügt ein Team-Admin es als Team-Modellverbindung hinzu (Protokoll OpenAI Chat Completions, OpenAI Responses oder Anthropic Messages) und prüft es. Senden Sie dann statt model und provider die ID und die aktuelle Revision der Verbindung:
{
"messages": [...],
"modelConnection": { "id": "3f6c1e2a-5b7d-4c1e-9a0f-2d8e4b6a1c90", "revision": 3 }
}
GET /api/v1/model-connections listet die Verbindungen Ihres Teams mit ihren Revisionen und geprüften Fähigkeiten auf. Die Verbindung benötigt Text und Streaming, außerdem strukturierte Ausgabe, wenn Sie response_format senden, und Werkzeugaufrufe, wenn die Anfrage Tools verwendet. Schlägt Ihr Endpunkt fehl, schlägt die Anfrage fehl: Minds wechselt nie auf eines seiner eigenen Modelle. Bilder und andere Medien werden mit MODEL_CONNECTION_MEDIA_UNVERIFIED abgelehnt. Stateful Chat-Nachrichten (/chats/{chatId}/messages) akzeptieren keine Verbindung.
Strukturierte Ausgabe
Fordern Sie garantierte JSON-Antworten an, die einem bestimmten Schema entsprechen, mit dem Parameter response_format. Dies folgt dem OpenAI-Stil für strukturierte Ausgaben und ist nützlich, um strukturierte Daten aus Konversationen zu extrahieren.
JSON-Schema-Modus
Erzwingt, dass das Modell gültiges JSON passend zu Ihrem Schema ausgibt:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Analyze the sentiment of this text: I love this product, it exceeded all my expectations!"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "sentiment_analysis",
"description": "Sentiment analysis result",
"schema": {
"type": "object",
"properties": {
"sentiment": {
"type": "string",
"enum": ["positive", "negative", "neutral"]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keywords": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["sentiment", "confidence", "keywords"]
}
}
}
}'
Response:
{
"content": "{\"sentiment\": \"positive\", \"confidence\": 0.95, \"keywords\": [\"love\", \"exceeded\", \"expectations\"]}",
"parsed": {
"sentiment": "positive",
"confidence": 0.95,
"keywords": ["love", "exceeded", "expectations"]
}
}
JSON-Object-Modus
Erzwingt JSON-Ausgabe ohne Schema-Validierung:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "List 3 marketing ideas as JSON"
}
],
"response_format": {
"type": "json_object"
}
}'
Response-Format-Typen
| Typ | Beschreibung |
|---|---|
text | Standard-Textausgabe (aktuelles Verhalten) |
json_object | Erzwingt gültige JSON-Ausgabe ohne Schema-Validierung |
json_schema | Erzwingt JSON-Ausgabe passend zum bereitgestellten Schema |
JSON-Schema-Felder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Bezeichner für das Schema |
description | string | Nein | Beschreibung dessen, was das Schema repräsentiert |
schema | object | Ja | JSON-Schema-Definition |
strict | boolean | Nein | Strikte Schemaeinhaltung erzwingen (Standard: true) |
Unterstützte Schema-Features
Die folgenden JSON-Schema-Features werden unterstützt:
- Typen:
string,number,integer,boolean,array,object,null - Constraints:
enum,minimum,maximum,minLength,maxLength,minItems,maxItems - Struktur:
properties,required,items,additionalProperties - Metadaten:
description(wird zur Steuerung des Modells genutzt)
Hinweise
- Tools (RAG, Web Search usw.) funktionieren mit strukturierten Ausgaben — der Mind kann vor dem Generieren der strukturierten Antwort weiterhin seine Wissensbasis durchsuchen
- Das Feld
parsedenthält aus Bequemlichkeit das geparste JSON-Objekt;contententhält den rohen JSON-String - Alle großen Provider (OpenAI, Anthropic, Google) unterstützen strukturierte Ausgabe
- Bei komplexen Schemas sollten
description-Felder hinzugefügt werden, um die Modellausgabe zu steuern
Tool Calling
Ermöglichen Sie Minds, während Konversationen Ihre eigenen Funktionen aufzurufen. Dies folgt dem OpenAI-kompatiblen Function-Calling-Pattern und erlaubt es, die Fähigkeiten von Minds mit externen Tools und APIs zu erweitern.
So funktioniert es
- Tools definieren: Übergeben Sie Tool-Definitionen mit Namen, Beschreibungen und JSON-Schema-Parametern
- Mind entscheidet: Der Mind entscheidet anhand der Konversation, wann Ihre Tools aufgerufen werden (oder Sie erzwingen es per
tool_choice) - API liefert Tool Calls: Die Response enthält
tool_callsmit Toolname und generierten Argumenten - Tools ausführen: Sie führen die Tools in Ihrer Anwendung aus und erhalten die Ergebnisse
- Ergebnisse zurücksenden: Nehmen Sie Tool-Ergebnisse in die nächste Nachricht mit
role: "tool"auf - Mind antwortet: Der Mind integriert die Tool-Ergebnisse in seine finale Antwort
Grundlegendes Beispiel
Request mit Tools:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What is the weather in Berlin?"
}
],
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature units"
}
},
"required": ["city"]
}
}
]
}'
Response:
{
"content": "",
"tool_calls": [
{
"id": "call_abc123",
"name": "get_weather",
"arguments": {
"city": "Berlin",
"units": "celsius"
}
}
]
}
Tool ausführen und Ergebnisse zurücksenden:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "What is the weather in Berlin?"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_abc123",
"name": "get_weather",
"arguments": {
"city": "Berlin",
"units": "celsius"
}
}
]
},
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "{\"temperature\": 18, \"condition\": \"partly cloudy\", \"humidity\": 65}"
}
],
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["city"]
}
}
]
}'
Finale Response:
{
"content": "The current weather in Berlin is 18°C and partly cloudy, with 65% humidity."
}
Tool-Definition-Schema
Jedes Tool muss diese Struktur aufweisen:
{
"name": "tool_name",
"description": "Clear description of when and how to use this tool",
"parameters": {
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "What this parameter does"
}
},
"required": ["param1"]
},
"strict": true
}
Pflichtfelder:
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Funktionsname. Muss eindeutig sein und darf nicht mit internen Tools kollidieren. |
description | string | Klare Beschreibung, was das Tool tut und wann es verwendet werden soll. Das steuert die Tool-Auswahl des Minds. |
parameters | object | JSON-Schema, das die Funktionsargumente definiert. |
Optionale Felder:
| Feld | Typ | Standard | Beschreibung |
|---|---|---|---|
strict | boolean | true | Erzwingt strikte Schema-Validierung für Argumente. |
Tool-Choice-Modi
Steuern Sie über den Parameter tool_choice, wann und wie der Mind Tools aufruft:
| Wert | Verhalten |
|---|---|
"auto" | Mind entscheidet, ob Tools aufgerufen werden (Standard) |
"required" | Mind muss vor der Antwort mindestens ein Tool aufrufen |
"none" | Tool Calling für diesen Turn deaktivieren |
{"name": "tool_name"} | Mind zwingen, ein bestimmtes Tool aufzurufen |
Beispiele:
// Mind entscheiden lassen
{
"messages": [...],
"tools": [...],
"tool_choice": "auto"
}
// Ein bestimmtes Tool erzwingen
{
"messages": [...],
"tools": [...],
"tool_choice": {
"name": "search_database"
}
}
// Mindestens einen Tool Call erfordern
{
"messages": [...],
"tools": [...],
"tool_choice": "required"
}
Parallele Tool Calls
Standardmäßig können Minds mehrere Tools in einem Turn aufrufen, um effizienter zu sein:
{
"content": "",
"tool_calls": [
{
"id": "call_1",
"name": "get_customer",
"arguments": { "id": "CUST-001" }
},
{
"id": "call_2",
"name": "get_customer",
"arguments": { "id": "CUST-002" }
}
]
}
Um parallele Calls zu deaktivieren und sequenzielle Ausführung zu erzwingen:
{
"messages": [...],
"tools": [...],
"parallel_tool_calls": false
}
Format für Tool-Nachrichten
Beim Zurücksenden von Tool-Ergebnissen verwenden Sie die Rolle tool:
{
"role": "tool",
"tool_call_id": "call_abc123",
"content": "{\"result\": \"success\", \"data\": {...}}"
}
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
role | string | Ja | Muss "tool" sein |
tool_call_id | string | Ja | Die id aus dem Tool Call in der Assistant-Response |
content | string | Ja | Ergebnis der Tool-Ausführung (typisch JSON-String) |
Tool-Ergebnisse folgen auf die passende Assistant-Nachricht einschließlich ihrer tool_calls. Übernimm die zurückgegebene Aufruf-ID und den Namen und sende jedes Ergebnis einmal. Fehlerhafte Argumente, unbekannte Aufruf-IDs, abweichende Tool-Namen doppelte Ergebnisse und fehlende clientseitige Ergebnisse führen vor der Generierung zu 400.
Interne vs. User Tools
Minds hat eingebaute serverseitige Tools, die automatisch ausgeführt werden:
| Internes Tool | Zweck |
|---|---|
GET_SPARK_RAG | Wissensbasis des Minds durchsuchen |
WEB_SEARCH | Das Web durchsuchen |
GENERATE_IMAGE | Bilder mit KI generieren |
DISPLAY_IMAGE | Bilder aus dem Gedächtnis des Minds anzeigen |
DOCUMENT_PROCESSING | Hochgeladene Dateien analysieren |
ANALYZE_LINK | Web-URLs abrufen und analysieren |
Zentrale Unterschiede:
- Interne Tools: Laufen serverseitig, Ergebnisse sind in
contentundmetadataenthalten. Werden nie intool_callszurückgegeben. - User Tools: Werden in
tool_callszurückgegeben, damit Sie sie ausführen. Ergebnisse müssen alstool-Nachrichten zurückgesendet werden.
Interne Tools können nicht überschrieben oder deaktiviert werden. User Tools sind additiv — sie erweitern die Fähigkeiten des Minds.
Vollständiges Multi-Tool-Beispiel
Ein juristischer Assistent-Mind mit mehreren benutzerdefinierten Tools:
curl -X POST "https://getminds.ai/api/v1/minds/mind-id/completion" \
-H "Authorization: Bearer minds_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": "Create a new case for Schmidt vs. Mueller and search for similar precedents"
}
],
"tools": [
{
"name": "create_case",
"description": "Create a new legal case in the system",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Case title (parties involved)"
},
"practice_area": {
"type": "string",
"enum": ["corporate", "litigation", "employment", "ip"],
"description": "Legal practice area"
},
"client_id": {
"type": "string",
"description": "Client identifier"
}
},
"required": ["title", "practice_area"]
}
},
{
"name": "search_precedents",
"description": "Search legal database for similar cases",
"parameters": {
"type": "object",
"properties": {
"keywords": {
"type": "array",
"items": { "type": "string" },
"description": "Search keywords"
},
"practice_area": {
"type": "string",
"description": "Filter by practice area"
},
"max_results": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Maximum number of results"
}
},
"required": ["keywords"]
}
}
],
"parallel_tool_calls": true
}'
Response mit parallelen Tool Calls:
{
"content": "",
"tool_calls": [
{
"id": "call_1",
"name": "create_case",
"arguments": {
"title": "Schmidt vs. Mueller",
"practice_area": "litigation"
}
},
{
"id": "call_2",
"name": "search_precedents",
"arguments": {
"keywords": ["Schmidt", "Mueller"],
"practice_area": "litigation",
"max_results": 10
}
}
]
}
Best Practices
- Klare Beschreibungen schreiben: Das Feld
descriptionist entscheidend. Seien Sie konkret dazu, wann und warum jedes Tool eingesetzt werden soll.❌ "description": "Search database" ✅ "description": "Search the legal precedents database for similar cases based on keywords and practice area" - Parameterbeschreibungen nutzen: Helfen Sie dem Mind zu verstehen, was jeder Parameter bewirkt.
"case_id": { "type": "string", "description": "Unique case identifier in format CASE-YYYY-NNNN" } - Enums für eingeschränkte Werte verwenden:
"status": { "type": "string", "enum": ["pending", "active", "closed", "archived"] } - Validierungs-Constraints setzen:
"priority": { "type": "integer", "minimum": 1, "maximum": 5, "description": "Priority level (1=lowest, 5=highest)" } - Strict-Modus aktivieren: Belassen Sie
strict: true(Standard), damit der Mind gültige Argumente erzeugt. - Strukturierte Tool-Ergebnisse zurückgeben: Verwenden Sie JSON für Tool-Ergebnisse, damit sie leicht zu parsen sind:
{ "role": "tool", "tool_call_id": "call_123", "content": "{\"success\": true, \"case_id\": \"CASE-2026-001\", \"created_at\": \"2026-03-30T23:00:00Z\"}" } - Fehler sauber behandeln: Liefern Sie Fehlerdetails im Tool-Ergebnis zurück:
{ "role": "tool", "tool_call_id": "call_123", "content": "{\"success\": false, \"error\": \"Case already exists\", \"error_code\": \"DUPLICATE_CASE\"}" }
Limitierungen
- Maximal 128 Tools pro Request
- Toolnamen müssen eindeutig sein und dürfen nicht mit internen Toolnamen kollidieren
- Tool-Ausführung geschieht client-seitig — Sie sind dafür verantwortlich, Ihre Tools sicher auszuführen
- Tool-Ergebnisse müssen im Konversationsverlauf zurückgesendet werden, damit der Mind antworten kann
JSON-Schema-Unterstützung
Das Feld parameters unterstützt Standard-JSON-Schema-Features:
Typen:
string,number,integer,boolean,array,object,null
Validierung:
enum— auf bestimmte Werte einschränkenminimum,maximum— numerische GrenzenminLength,maxLength— StringlängeminItems,maxItems— Arraygrößepattern— Regex-Validierungformat— Stringformate (z. B."date-time","email","uri")
Struktur:
properties— Objekt-Eigenschaftenrequired— Pflichtfelderitems— Array-Item-SchemaadditionalProperties— zusätzliche Eigenschaften erlauben/verbieten
Beispiel mit erweiterter Validierung:
{
"name": "schedule_meeting",
"description": "Schedule a meeting with a client",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"date": {
"type": "string",
"format": "date-time",
"description": "Meeting date and time in ISO 8601 format"
},
"attendees": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"minItems": 1,
"maxItems": 20
},
"duration_minutes": {
"type": "integer",
"minimum": 15,
"maximum": 480,
"description": "Meeting duration (15-480 minutes)"
}
},
"required": ["title", "date", "attendees"]
}
}
So funktioniert es
1. Kontext-Laden
Wenn Sie eine Nachricht senden, lädt der Mind:
- Seinen System Prompt und seine Konfiguration
- Durchsucht automatisch seine Wissensbasis nach relevanten Informationen
- Berücksichtigt den Konversationsverlauf
2. Verarbeitung
Der Mind:
- Analysiert Ihre Nachricht im Kontext
- Grundiert Antworten in abgerufenem Wissen mit Citations
- Greift bei Bedarf auf weitere Tools zu (Web Search, Bildgenerierung usw.)
- Formuliert eine Antwort, die zu seiner Persönlichkeit passt
3. Antwortgenerierung
Der Mind:
- Erzeugt eine Antwort, die seine Expertise widerspiegelt
- Fügt Citations hinzu, wenn er die Wissensbasis oder Webquellen nutzt
- Liefert die Nachricht mit optionalen Metadaten (Citations, Bilder usw.)
Metadaten
Responses können zusätzliche Metadaten enthalten:
Bilder
Wenn ein Mind Bilder generiert oder anzeigt:
{
"content": "Here are some logo concepts...",
"metadata": {
"images": [
{
"id": "img_123",
"url": "https://...",
"filename": "Logo Concept 1",
"description": "Modern minimalist logo with blue gradient",
"source": "generated"
}
]
}
}
Knowledge Citations
Wenn ein Mind Informationen aus seiner Wissensbasis oder aus der Web-Suche abruft:
{
"content": "Based on recent research, solar panel efficiency has improved significantly...",
"metadata": {
"ragCitations": [
{
"id": "9bf44ab0-9d83-42ec-b941-c0ab7610e949",
"displaySource": "Mind knowledge",
"similarity": 0.85
},
{
"id": "external-web-123",
"displaySource": "https://example.com/solar-research",
"similarity": 0.92
}
]
}
}
Citation-Felder:
id- Eindeutige Kennung der QuelledisplaySource- Menschlich lesbarer Quellenname oder URLsimilarity- Relevanzwert (0–1), der angibt, wie gut die Quelle zur Anfrage passt
Minds durchsuchen vor der Antwort automatisch ihre Wissensbasis und fügen Citations hinzu, wenn sie ihre Antworten in bestimmten Quellen grundieren.
Zugriffskontrolle
Sie können mit Minds chatten, die Sie:
- Besitzen - Minds, die Sie erstellt haben
- Zugriff haben - Minds, die Teammitglieder mit Ihnen geteilt haben
- Mitglied sind - Minds in Team-Workspaces, denen Sie angehören
- Öffentliche Minds - öffentlich zugängliche Minds
Der Versuch, auf nicht autorisierte Minds zuzugreifen, liefert:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
Antwort-Formate
Textantwort
Die meisten Antworten sind Klartext:
{
"content": "Based on current trends, I recommend focusing on..."
}
Strukturierte Antwort
Einige Minds liefern strukturierten Inhalt zurück:
{
"content": "Here's my analysis:\n\n1. Trend: AI Personalization\n - Impact: High\n - Timeline: 6-12 months\n\n2. Trend: Short-form Video\n - Impact: Very High\n - Timeline: Immediate"
}
Leere Antwort mit Metadaten
Manchmal werden nur Metadaten zurückgegeben (z. B. bei Bildgenerierung):
{
"content": "",
"metadata": {
"images": [...]
}
}
Best Practices
Seien Sie konkret
❌ "Tell me about marketing"
✅ "What are the most cost-effective digital marketing channels for a B2B SaaS startup with a $5K monthly budget?"
Geben Sie Kontext
✅ "We're launching a sustainable fashion brand targeting Gen Z. What social media strategy would you recommend?"
Nutzen Sie Nachfragen
Profitieren Sie vom Konversationsgedächtnis:
User: "What are the top trends?"
Assistant: "The top trends are..."
User: "Which of these would work best for a small budget?"
Assistant: "For a small budget, I'd focus on..."
Beziehen Sie sich auf Wissen
Wenn Sie Wissen hochgeladen haben, beziehen Sie sich darauf:
✅ "Based on our brand guidelines, what tone should we use for this campaign?"
Error Responses
400 Bad Request
Fehlende oder ungültige Mind-ID:
{
"statusCode": 400,
"statusMessage": "Mind ID is required"
}
Nicht unterstützter Provider:
{
"statusCode": 400,
"statusMessage": "Unsupported provider: 'invalid'. Supported providers: openai, anthropic, google."
}
Mehrdeutiger Modellname ohne Provider:
{
"statusCode": 400,
"statusMessage": "Cannot auto-detect provider for model 'my-model'. Please specify a 'provider' parameter (openai, anthropic, or google)."
}
401 Unauthorized
Ungültiger API key.
403 Forbidden
Zugriff auf Mind verweigert:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
404 Not Found
Mind existiert nicht:
{
"statusCode": 404,
"statusMessage": "Mind not found"
}
Hinweise zur Nutzung
- Die v1 API erzwingt ein konfigurierbares Limit pro authentifiziertem Konto (standardmäßig 300 Requests pro Minute)
- Lesen Sie
RateLimit-LimitundRateLimit-Remainingund beachten SieRetry-Afternach429 - Begrenzen Sie parallele Completions, da Generierungsrequests ressourcenintensiv sind
Nächste Schritte
- Latency und Performance verstehen
- Mehr zu Errors und Rate Limits erfahren
- Erstellen Sie Ihren ersten Mind
- Laden Sie Wissen hoch, um Antworten zu verbessern
- Lesen Sie die API-Übersicht


