---
title: "Minds API"
description: "Erstellen und verwalten Sie KI-Minds programmatisch mit individuellen Konfigurationen und Persönlichkeiten."
---

# Minds API

Erstellen und verwalten Sie KI-Minds (Agenten) programmatisch. Minds sind anpassbare KI-Assistenten mit spezifischer Expertise, Persönlichkeit und Wissen.

**Base URL:** `https://getminds.ai/api/v1` oder `https://api.getminds.ai/v1`

## Mind abrufen

Ruft einen einzelnen Mind mit allen Details ab, einschließlich System Prompt, Sharing-Einstellungen und Anzahl der Knowledge-Einträge.

**Endpoint:** `GET /api/v1/minds/{mindId}`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
```

### Response

```json
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Marketing Expert",
    "description": "Experienced marketing director",
    "type": "expert",
    "discipline": "Marketing",
    "systemPrompt": "## Core Identity & Personality\n\nYou are a seasoned marketing director...",
    "tags": ["marketing", "b2b"],
    "isPublic": false,
    "isLinkSharingEnabled": false,
    "publicShareId": null,
    "profileImageUrl": "https://...",
    "phoneNumber": null,
    "clonedVoiceStatus": null,
    "profitSplitOptIn": false,
    "createdAt": "2025-12-10T12:00:00.000Z",
    "updatedAt": "2025-12-10T12:00:00.000Z",
    "knowledgeItemCount": 12
  }
}
```

### Response-Felder

<table>
<thead>
  <tr>
    <th>
      Feld
    </th>
    
    <th>
      Typ
    </th>
    
    <th>
      Beschreibung
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        id
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Eindeutige Mind-Kennung
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Mind-Name
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Mind-Beschreibung
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       oder <code>
        user
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Fachgebiet
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        systemPrompt
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Vollständiger System Prompt, der das Verhalten des Minds definiert
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Tags zur Kategorisierung
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isPublic
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Ob der Mind öffentlich zugänglich ist
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isLinkSharingEnabled
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Ob Link Sharing aktiviert ist
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        publicShareId
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Share-ID für öffentlichen Zugriff (null, wenn nicht geteilt)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profileImageUrl
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      URL des Avatarbildes
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        phoneNumber
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Zugehörige Telefonnummer (null, wenn keine)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        clonedVoiceStatus
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Status des Voice-Clonings (null, wenn nicht geklont)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profitSplitOptIn
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Ob Profit-Split aktiviert ist
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        knowledgeItemCount
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Anzahl der angehängten Knowledge-Einträge
    </td>
  </tr>
</tbody>
</table>

### Beispiel-Request

```bash
curl -X GET "https://getminds.ai/api/v1/minds/{mindId}" \
  -H "Authorization: Bearer minds_your_api_key"
```

### Error Responses

**400 Bad Request** - Ungültiges Mind-ID-Format

**401 Unauthorized** - Ungültiger oder fehlender API key

**403 Forbidden** - Kein Zugriff auf diesen Mind

**404 Not Found** - Mind existiert nicht

---

## Minds auflisten

Ruft alle Minds des authentifizierten Nutzers ab.

**Endpoint:** `GET /api/v1/minds`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
```

### Query-Parameter

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Typ
    </th>
    
    <th>
      Standard
    </th>
    
    <th>
      Beschreibung
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        search
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      —
    </td>
    
    <td>
      Filtert Minds nach Name, Beschreibung oder Discipline (case-insensitive)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        limit
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      100
    </td>
    
    <td>
      Maximale Anzahl zurückgegebener Minds (1–100)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        offset
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      0
    </td>
    
    <td>
      Anzahl der zu überspringenden Minds für Pagination
    </td>
  </tr>
</tbody>
</table>

### Response

```json
{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Marketing Expert",
      "description": "Experienced marketing director",
      "type": "expert",
      "discipline": "Marketing",
      "tags": ["marketing", "b2b"],
      "profileImageUrl": "https://...",
      "createdAt": "2025-12-10T12:00:00.000Z",
      "updatedAt": "2025-12-10T12:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 42,
    "limit": 100,
    "offset": 0
  }
}
```

### Response-Felder

<table>
<thead>
  <tr>
    <th>
      Feld
    </th>
    
    <th>
      Typ
    </th>
    
    <th>
      Beschreibung
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        data
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Array von Mind-Objekten
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.total
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Gesamtzahl der Minds, die zur Anfrage passen
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.limit
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Maximale Ergebnisse pro Seite
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.offset
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Anzahl der übersprungenen Ergebnisse
    </td>
  </tr>
</tbody>
</table>

### Beispiel-Request

```bash
curl -X GET "https://getminds.ai/api/v1/minds?limit=10&offset=0" \
  -H "Authorization: Bearer minds_your_api_key"
```

## Mind erstellen

Erstellt einen neuen KI-Mind mit individueller Konfiguration in verschiedenen Trainingsmodi.

**Endpoint:** `POST /api/v1/minds`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
Content-Type: application/json
```

### Request Body

```json
{
  "name": "My AI Expert",
  "description": "An expert in renewable energy",
  "mode": "keywords",
  "type": "expert",
  "discipline": "Renewable Energy",
  "keywords": ["solar", "wind energy", "sustainability", "green tech"],
  "personaContext": "Ada Lovelace, pioneering computer scientist",
  "contextLink": "https://example.com/profile",
  "tags": ["energy", "solar", "sustainability"],
  "profileImageUrl": "https://example.com/avatar.jpg"
}
```

### Parameter

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Typ
    </th>
    
    <th>
      Erforderlich
    </th>
    
    <th>
      Beschreibung
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <strong>
        Ja
      </strong>
    </td>
    
    <td>
      Name des Minds (2–100 Zeichen)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <strong>
        Ja
      </strong>
    </td>
    
    <td>
      Das Fachgebiet des Minds (z. B. "Marketing", "Engineering")
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        mode
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Trainingsmodus: <code>
        keywords
      </code>
      
      , <code>
        clone
      </code>
      
      , <code>
        link
      </code>
      
       oder <code>
        manual
      </code>
      
      . Standard: <code>
        keywords
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Mind-Typ: <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       oder <code>
        user
      </code>
      
      . Standard: <code>
        creative
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Beschreibung des Zwecks des Minds
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        keywords
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Bedingt
    </td>
    
    <td>
      Array von Keywords (erforderlich, wenn <code>
        mode
      </code>
      
       = <code>
        keywords
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        personaContext
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Bedingt
    </td>
    
    <td>
      Name/Kontext der zu emulierenden Person (erforderlich, wenn <code>
        mode
      </code>
      
       = <code>
        clone
      </code>
      
      ; wird auch zur automatischen Keyword-Ableitung verwendet)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        contextLink
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Bedingt
    </td>
    
    <td>
      URL zu Profil/Inhalt (erforderlich, wenn <code>
        mode
      </code>
      
       = <code>
        link
      </code>
      
      ; der Server scrapt sie, um Keywords abzuleiten)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Array von Tags zur Kategorisierung (max. 20 Tags)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profileImageUrl
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Externe URL zum Avatarbild (wird heruntergeladen und gespeichert)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        generateImage
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Wenn <code>
        true
      </code>
      
      , wird im Hintergrund eine KI-generierte Profilbild-Generierung angestoßen
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        cloneVoice
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Wenn <code>
        true
      </code>
      
      , wird Voice Cloning per YouTube-Suche ausgelöst (experimentell)
    </td>
  </tr>
</tbody>
</table>

### Werte für `mode`

Der Parameter `mode` bestimmt, wie Ihr Mind trainiert wird:

- **keywords** (Standard) - Trainieren Sie Ihren Mind über durch Komma getrennte Keywords. Die KI sammelt auf Basis dieser Keywords relevante Informationen aus verschiedenen Quellen, um die Wissensbasis des Minds aufzubauen.
  - **Pflichtfeld:** `keywords` - Array von Keywords/Themen
  - **Am besten für:** allgemeine Expertise zu bestimmten Themen oder Domänen
- **clone** - Klonen Sie den Stil und das Wissen einer Person, indem Sie ihren Namen und Kontext angeben. Die KI recherchiert und erstellt ein umfassendes Profil, das Expertise und Kommunikationsstil nachahmt.
  - **Pflichtfeld:** `personaContext` - Name und kurzer Kontext (z. B. "Ada Lovelace, pioneering computer scientist")
  - **Am besten für:** die Emulation bestimmter Personen, historischer Persönlichkeiten oder bekannter Expert:innen
- **link** - Trainieren Sie Ihren Mind mit Inhalten einer bestimmten URL. Geben Sie einen Link zu einem Profil, Portfolio oder einer Website an, und die KI analysiert und extrahiert relevante Informationen.
  - **Pflichtfeld:** `contextLink` - URL zur Inhaltsquelle
  - **Am besten für:** Training auf Basis spezifischer Websites, Portfolios oder Online-Profile
- **manual** - Erstellen Sie einen Mind ohne automatisches Training. Alle Einstellungen werden manuell konfiguriert; Wissen wird später über die Knowledge API ergänzt.
  - **Keine zusätzlichen Felder erforderlich**
  - **Am besten für:** individuelle Konfigurationen, bei denen Sie die volle Kontrolle über die Trainingsdaten haben möchten

> **Auto-Processing:** Wenn Sie `keywords`, `clone` oder `link` verwenden, spiegelt das Backend das In-Product-Formular "Add Mind" — es leitet Entity-Keywords ab (KI-unterstützt bei `clone`/`link`) und trainiert den Mind asynchron. Verfolgen Sie dieses Training über den `training`-Block in der Erstellungsantwort und den dedizierten Endpunkt, der unter **Mind-Trainingszyklus** beschrieben wird. Der `manual`-Modus überspringt diese Automatisierung, sodass Sie den Mind später über die Knowledge API trainieren können.

### Werte für `type`

- **creative** - Für Künstler:innen, Designer:innen, Autor:innen und Kreativschaffende
- **expert** - Für Spezialist:innen, Berater:innen und Domänenexpert:innen
- **user** - Für Nutzerpersonas, Kunden und Zielgruppen-Archetypen

### Response

```json
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "My AI Expert",
    "description": "An expert in renewable energy",
    "type": "expert",
    "discipline": "Renewable Energy",
    "tags": ["energy", "solar", "sustainability"],
    "profileImageUrl": "https://...",
    "createdAt": "2025-12-10T12:00:00.000Z",
    "updatedAt": "2025-12-10T12:00:00.000Z"
  },
  "training": {
    "status": "queued",
    "readyToChat": false,
    "message": "Queued for data collection",
    "startedAt": null,
    "completedAt": null,
    "error": null
  }
}
```

Der `training`-Block meldet den Lebenszyklus des Minds bei der Erstellung. Die Modi `keywords`, `clone` und `link` starten mit `queued` und trainieren im Hintergrund; `manual`-Minds kommen mit `completed` und bereits auf `true` gesetztem `readyToChat` zurück. Die `id` eines Minds existiert, sobald dieser Aufruf zurückkehrt, aber der Mind kann erst antworten, wenn `readyToChat` `true` ist. Siehe **Mind-Trainingszyklus** unten für das Polling.

### Beispiel: Mind im Keywords-Modus erstellen

```bash
curl -X POST "https://getminds.ai/api/v1/minds" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marketing Expert",
    "description": "Experienced marketing director with expertise in B2B SaaS",
    "mode": "keywords",
    "type": "expert",
    "discipline": "Marketing",
    "keywords": ["B2B marketing", "SaaS", "growth marketing", "content strategy", "brand positioning", "ROI"],
    "tags": ["marketing", "b2b", "saas", "growth"]
  }'
```

### Beispiel: Mind im Clone-Modus erstellen

```bash
curl -X POST "https://getminds.ai/api/v1/minds" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ada Lovelace AI",
    "description": "AI trained to emulate Ada Lovelace",
    "mode": "clone",
    "type": "expert",
    "discipline": "Computer Science Pioneer",
    "personaContext": "Ada Lovelace, pioneering computer scientist and mathematician, first computer programmer",
    "tags": ["computer science", "mathematics", "history"]
  }'
```

### Beispiel: Mind im Link-Modus erstellen

```bash
curl -X POST "https://getminds.ai/api/v1/minds" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Brand Voice Expert",
    "description": "Trained on company brand guidelines",
    "mode": "link",
    "type": "creative",
    "discipline": "Brand Strategy",
    "contextLink": "https://example.com/brand-guidelines",
    "tags": ["branding", "copywriting"]
  }'
```

### Beispiel: Mind im Manual-Modus erstellen

```bash
curl -X POST "https://getminds.ai/api/v1/minds" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Custom Assistant",
    "description": "Custom configured assistant",
    "mode": "manual",
    "type": "creative",
    "discipline": "General Assistant",
    "tags": ["custom"]
  }'
```

## Mind-Trainingszyklus

Das Erstellen eines Minds erfolgt asynchron. `POST /v1/minds` liefert sofort eine `id` zurück, aber bei den Modi `keywords`, `clone` und `link` wird der Mind im Hintergrund noch trainiert. **Eine vorhandene id bedeutet nicht, dass der Mind bereit ist** — der Mind kann erst antworten, wenn `readyToChat` `true` ist. Die einzige Ausnahme ist der `manual`-Modus: solche Minds überspringen die Datensammlung und sind `completed`, sobald sie erstellt wurden.

Fragen Sie den dedizierten Trainings-Endpunkt ab, bis der Mind bereit ist:

```bash
curl "https://getminds.ai/api/v1/minds/{mindId}/training" \
  -H "Authorization: Bearer minds_your_api_key"
```

```json
{
  "status": "running",
  "readyToChat": false,
  "message": "Collecting knowledge...",
  "startedAt": "2025-12-10T12:00:01.000Z",
  "completedAt": null,
  "error": null
}
```

### Statuswerte

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Bedeutung
    </th>
    
    <th>
      <code>
        readyToChat
      </code>
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        queued
      </code>
    </td>
    
    <td>
      Das Training ist in der Warteschlange, aber noch nicht gestartet.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        running
      </code>
    </td>
    
    <td>
      Der Mind sammelt aktiv Wissen und baut seine Persona auf.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        completed
      </code>
    </td>
    
    <td>
      Das Training ist abgeschlossen. Der Mind ist bereit zum Chatten.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        failed
      </code>
    </td>
    
    <td>
      Das Training wurde nicht abgeschlossen. Prüfen Sie <code>
        error
      </code>
      
       und trainieren Sie neu, falls es wiederholbar ist.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
</tbody>
</table>

`GET /v1/minds/{id}` liefert ebenfalls `readyToChat` (und `trainingStatus`) zusammen mit dem restlichen Mind zurück, sodass ein einziger Aufruf Ihnen sowohl sagt, wer der Mind ist, als auch ob er schon antworten kann.

### Wenn das Training fehlschlägt

Wenn `status` `failed` ist, enthält die Antwort ein `error`-Objekt mit einem `code` und einem `retryable`-Flag:

<table>
<thead>
  <tr>
    <th>
      Fehlercode
    </th>
    
    <th>
      Bedeutung
    </th>
    
    <th>
      <code>
        retryable
      </code>
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        COLLECTION_FAILED
      </code>
    </td>
    
    <td>
      Die Wissenssammlung konnte nicht abgeschlossen werden.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        PROFILE_GEN_FAILED
      </code>
    </td>
    
    <td>
      Das Persona-Profil konnte nicht generiert werden.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        TIMEOUT
      </code>
    </td>
    
    <td>
      Das Training hat sein Zeitbudget überschritten und wurde gestoppt.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        INTERNAL
      </code>
    </td>
    
    <td>
      Ein unerwarteter interner Fehler ist aufgetreten.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
</tbody>
</table>

### Neutraining

Wenn ein Mind mit `failed` endet (oder Sie einen `completed` Mind einfach neu aufbauen möchten), trainieren Sie ihn neu:

```bash
curl -X POST "https://getminds.ai/api/v1/minds/{mindId}/retrain" \
  -H "Authorization: Bearer minds_your_api_key"
```

Dadurch wird der Mind erneut in die Warteschlange gestellt und ein frischer `training`-Block mit `status` auf `queued` zurückgegeben. Neutraining funktioniert nur bei Minds, die fertig sind: Ein Mind, der noch `queued` oder `running` ist, gibt `409 Conflict` zurück, weil bereits ein Trainingslauf läuft. Fragen Sie nach dem Neutraining erneut `GET /v1/minds/{id}/training` ab, bis `readyToChat` `true` ist.

## Profilbilder

Wenn Sie eine `profileImageUrl` angeben:

1. Das Bild wird von der externen URL heruntergeladen
2. In sicheren Speicher hochgeladen
3. Die gespeicherte URL wird in der Response zurückgegeben

Unterstützte Formate: JPG, PNG, GIF, WEBP

## So funktioniert das Training

Das System generiert automatisch einen intelligenten System Prompt auf Basis des gewählten Modus, Typs und der Discipline:

- **Keywords-Modus**: Erzeugt Expertise rund um Ihre angegebenen Keywords
- **Clone-Modus**: Baut ein Profil auf, das Stil und Wissen der angegebenen Person emuliert
- **Link-Modus**: Extrahiert Wissen aus der angegebenen URL
- **Manual-Modus**: Erzeugt einen Basis-Assistenten, den Sie mit eigenem Wissen trainieren

Sie können Ihren Mind weiter optimieren, indem Sie nach der Erstellung [Wissen hochladen](/api/knowledge).

## Plan-Limits

Die aktuellen öffentlichen Standardwerte finden Sie in der generierten [Plan-Limit-Tabelle](/api/overview). Vertragliche Overrides können abweichen; Integrationen sollten deshalb `data.limit` und `data.current` aus einer authentifizierten `PLAN_LIMIT`-Antwort verwenden. Der Individual-Plan wird in API-Payloads als `"premium"` ausgegeben.

Beim Erreichen des Limits erhalten Sie einen `403 Forbidden`-Fehler:

```json
{
  "statusCode": 403,
  "statusMessage": "Individual plan limit reached",
  "message": "Individual plan limit reached",
  "url": "/api/v1/minds",
  "error": true,
  "data": {
    "code": "PLAN_LIMIT",
    "limitType": "minds",
    "currentPlan": "premium",
    "limit": 100,
    "current": 100
  }
}
```

## Error Responses

### 400 Bad Request

Fehlende oder ungültige Parameter.

```json
{
  "statusCode": 400,
  "statusMessage": "Name is required"
}
```

### 401 Unauthorized

Ungültiger oder fehlender API key.

### 403 Forbidden

Plan-Limit erreicht.

### 500 Internal Server Error

Serverseitiger Fehler (selten).

## Mind aktualisieren

Aktualisiert die Konfiguration eines bestehenden Minds, darunter Name, Beschreibung, System Prompt und weitere Einstellungen.

**Endpoint:** `PUT /api/v1/minds/{mindId}`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
Content-Type: application/json
```

### Request Body

```json
{
  "name": "Updated Name",
  "description": "Updated description",
  "type": "expert",
  "discipline": "Updated Discipline",
  "systemPrompt": "Custom system prompt instructions...",
  "tags": ["tag1", "tag2"],
  "isPublic": false
}
```

### Parameter

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Typ
    </th>
    
    <th>
      Erforderlich
    </th>
    
    <th>
      Beschreibung
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Name des Minds (2–100 Zeichen)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Beschreibung des Zwecks des Minds
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Typ: <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       oder <code>
        user
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Das Fachgebiet des Minds
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        systemPrompt
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Individueller System Prompt, der Verhalten und Persönlichkeit des Minds definiert
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Array von Tags zur Kategorisierung (max. 20 Tags)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isPublic
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Nein
    </td>
    
    <td>
      Ob der Mind öffentlich zugänglich ist
    </td>
  </tr>
</tbody>
</table>

### System Prompt

Über das Feld `systemPrompt` können Sie anpassen, wie Ihr Mind sich verhält und antwortet. Das ist nützlich für:

- **Persona-Anpassung**: Legen Sie konkrete Persönlichkeitsmerkmale, Kommunikationsstil oder Expertisebereiche fest
- **Antwortformatierung**: Weisen Sie den Mind an, in bestimmten Formaten zu antworten (z. B. Bulletpoints, nummerierte Listen)
- **Domänen-Beschränkungen**: Begrenzen Sie Antworten auf bestimmte Themen oder Perspektiven
- **Sprache/Tonalität**: Legen Sie Sprache, Formalitätsgrad oder Tonalität der Antworten fest

**Beispiel-System-Prompts:**

```text
# Survey Response Expert
Du bist ein erfahrener Handwerker. Bei Umfragen antworte immer aus deiner
persönlichen Erfahrung, nicht mit allgemeinen Branchendurchschnittswerten.
Wähle bei Multiple-Choice-Fragen immer genau eine Option.
```

```text
# Technical Expert
You are a senior software architect. Always provide concrete,
actionable advice. Include code examples when relevant.
Avoid vague statements.
```

### Response

```json
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Updated Name",
    "description": "Updated description",
    "type": "expert",
    "discipline": "Updated Discipline",
    "systemPrompt": "Custom system prompt...",
    "tags": ["tag1", "tag2"],
    "isPublic": false,
    "profileImageUrl": "https://...",
    "createdAt": "2025-12-10T12:00:00.000Z",
    "updatedAt": "2025-12-29T15:30:00.000Z"
  }
}
```

### Beispiel: System Prompt aktualisieren

```bash
curl -X PUT "https://getminds.ai/api/v1/minds/{mindId}" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "systemPrompt": "Du bist ein erfahrener Handwerker im Sanitärbereich. Antworte immer aus deiner persönlichen Praxiserfahrung."
  }'
```

### Beispiel: Mehrere Felder aktualisieren

```bash
curl -X PUT "https://getminds.ai/api/v1/minds/{mindId}" \
  -H "Authorization: Bearer minds_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Senior Plumber Expert",
    "description": "Expert plumber with 20 years of experience",
    "discipline": "Plumbing & Sanitary Installation",
    "tags": ["plumbing", "sanitary", "renovation"]
  }'
```

### Error Responses

**400 Bad Request** - Keine gültigen Felder zum Aktualisieren oder ungültige Feldwerte

**401 Unauthorized** - Ungültiger oder fehlender API key

**403 Forbidden** - Keine Berechtigung, diesen Mind zu aktualisieren (Sie müssen der Owner sein)

**404 Not Found** - Mind existiert nicht

## Mind-Knowledge-Patterns abrufen

Ruft Denkmuster und Wissen, nach Framework organisiert, für einen bestimmten Mind ab.

**Endpoint:** `GET /api/v1/minds/{mindId}/knowledge/patterns`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
```

### Response-Struktur

Der Endpoint gibt Patterns zurück, die nach Frameworks gruppiert sind (z. B. AOX Internal, OCEAN, DISC usw.), mit Methoden und Kompetenzen inklusive Vorkommen und Belegen.

```json
{
  "success": true,
  "data": {
    "mindId": "550e8400-e29b-41d4-a716-446655440000",
    "mindName": "Marketing Expert",
    "totalPatterns": 47,
    "frameworks": [
      {
        "id": "aox-internal",
        "name": "AOX Internal Framework",
        "totalOccurrences": 32,
        "methods": [
          {
            "id": "strategic-thinking",
            "name": "Strategic Thinking",
            "description": "Ability to think strategically and plan long-term",
            "occurrences": 15,
            "competencies": [
              {
                "id": "market-analysis",
                "name": "Market Analysis",
                "description": "Understanding market dynamics and trends",
                "occurrences": 8,
                "evidence": [
                  {
                    "mind": "Market segmentation requires understanding customer pain points and aligning product features with specific needs...",
                    "portfolioItemId": "abc-123",
                    "createdAt": "2025-12-10T15:30:00.000Z"
                  },
                  {
                    "mind": "Competitive analysis shows that timing and positioning are critical for market entry...",
                    "portfolioItemId": "def-456",
                    "createdAt": "2025-12-10T14:20:00.000Z"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
```

### Verständnis der Response

- **frameworks**: Array von Frameworks, die die Patterns des Minds enthalten

  - **totalOccurrences**: Gesamtzahl der Patterns in diesem Framework
  - **methods**: Erkannte Denkmethoden oder Ansätze
  
    - **occurrences**: Anzahl, wie oft diese Methode auftaucht
    - **competencies**: Spezifische Fähigkeiten oder Unterbereiche innerhalb der Methode
    
      - **occurrences**: Anzahl Patterns für diese Kompetenz
      - **evidence**: Array von Zitaten/Belegen, die dieses Pattern demonstrieren
      
        - **mind**: Das eigentliche Zitat oder der Insight aus dem Inhalt
        - **portfolioItemId**: Referenz auf das Quellmaterial
        - **createdAt**: Wann dieses Pattern identifiziert wurde

### Beispiel-Request

```bash
curl -X GET "https://getminds.ai/api/v1/minds/{mindId}/knowledge/patterns" \
  -H "Authorization: Bearer minds_your_api_key"
```

### Anwendungsfälle

- **Expertise eines Minds verstehen**: Sehen Sie, welche Methoden und Kompetenzen Ihr Mind gelernt hat
- **Qualitätssicherung**: Prüfen Sie, ob Patterns korrekt aus den Trainingsdaten extrahiert werden
- **Wissenslücken**: Erkennen Sie Bereiche, in denen mehr Trainingsdaten benötigt werden
- **Framework-Vergleich**: Vergleichen Sie, wie ein Mind über verschiedene Frameworks hinweg performt

### Error Responses

**401 Unauthorized** - Ungültiger oder fehlender API key

**403 Forbidden** - Kein Zugriff auf diesen Mind

**404 Not Found** - Mind existiert nicht

## System Prompt neu generieren

Generieren Sie alle System-Prompt-Komponenten für einen Mind neu auf Basis seiner bestehenden Wissensbasis. Hierzu wird dieselbe KI-gestützte Generierung wie beim "Generate All"-Button in der UI verwendet.

**Endpoint:** `POST /api/v1/minds/{mindId}/regenerate-prompt`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
```

### Funktionsweise

Der Endpoint analysiert die Wissensbasis des Minds (Portfolio-Items, Patterns, Embeddings) und generiert alle Prompt-Komponenten:

Für Minds vom Typ **user**:

- Core Identity & Demographics
- Needs & Motivations
- Pain Points & Challenges
- Tone & Communication Style
- Goals & Desires
- Behavioral Patterns

Für Minds vom Typ **expert**:

- Core Identity & Personality
- Professional Expertise & Credentials
- Tone & Communication Style
- Professional Approach & Methods
- Domain Knowledge

Für Minds vom Typ **creative**:

- Core Identity & Personality
- Creative Philosophy & Values
- Tone & Communication Style
- Creative Approach & Methods
- Domain Expertise

### Response

```json
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "My Mind",
    "systemPrompt": "## Core Identity & Demographics\n\n...",
    "promptLength": 2847
  }
}
```

### Beispiel-Request

```bash
curl -X POST "https://getminds.ai/api/v1/minds/{mindId}/regenerate-prompt" \
  -H "Authorization: Bearer minds_your_api_key"
```

### Anwendungsfälle

- **Nach dem Hinzufügen von Wissen**: Prompt neu generieren, um neu hinzugefügte Knowledge-Einträge einzubeziehen
- **Persona-Feintuning**: Neu generieren, um die Persona basierend auf aktuellen Wissensmustern zu aktualisieren
- **Anpassungen zurücksetzen**: Manuelle Änderungen verwerfen und aus der Wissensbasis frische Prompts neu erzeugen

### Error Responses

**401 Unauthorized** - Ungültiger oder fehlender API key

**403 Forbidden** - Keine Berechtigung, diesen Mind zu verändern (Sie müssen der Owner sein)

**404 Not Found** - Mind existiert nicht

**500 Internal Server Error** - Prompt konnte nicht generiert werden (z. B. wegen unzureichendem Wissen)

## Mind löschen

Löscht einen Mind und alle zugehörigen Daten dauerhaft, einschließlich Wissen, Portfolio-Items und Dateien.

**Endpoint:** `DELETE /api/v1/minds/{mindId}`

**Headers:**

```text
Authorization: Bearer minds_your_api_key
```

### Response

Bei Erfolg wird `204 No Content` mit leerem Body zurückgegeben.

### Beispiel-Request

```bash
curl -X DELETE "https://getminds.ai/api/v1/minds/{mindId}" \
  -H "Authorization: Bearer minds_your_api_key"
```

### Was wird gelöscht

Wenn Sie einen Mind löschen, wird Folgendes dauerhaft entfernt:

- Der Mind selbst und seine gesamte Konfiguration
- Alle Knowledge- und Trainingsdaten
- Alle Portfolio-Items und zugehörigen Dateien
- Der gesamte Chatverlauf und alle Nachrichten
- Profilbilder und hochgeladene Dateien

**Warnung:** Diese Aktion kann nicht rückgängig gemacht werden.

### Error Responses

**400 Bad Request** - Ungültiges Mind-ID-Format

**401 Unauthorized** - Ungültiger oder fehlender API key

**403 Forbidden** - Keine Berechtigung, diesen Mind zu löschen (Sie müssen der Owner sein)

**404 Not Found** - Mind existiert nicht

## Nächste Schritte

- [Wissen für Ihren Mind hochladen](/api/knowledge)
- [Mit Ihrem Mind chatten](/api/chat)
- Mehr über [Errors und Limits](/api/errors) erfahren
