---
title: "Minds API"
description: "Créez et gérez des AI minds de manière programmatique avec des configurations et personnalités personnalisées."
---

# Minds API

Créez et gérez des AI minds (agents) de manière programmatique. Les minds sont des assistants IA personnalisables avec une expertise, une personnalité et des connaissances spécifiques.

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

## Obtenir un mind

Récupérez un mind unique avec tous ses détails, y compris le system prompt, les paramètres de partage et le nombre d'éléments de connaissance.

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

**Headers :**

```text
Authorization: Bearer minds_your_api_key
```

### Réponse

```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
  }
}
```

### Champs de réponse

<table>
<thead>
  <tr>
    <th>
      Champ
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        id
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Identifiant unique du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Nom du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Description du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       ou <code>
        user
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Domaine d'expertise
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        systemPrompt
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      System prompt complet définissant le comportement du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Tags de catégorisation
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isPublic
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Indique si le mind est accessible publiquement
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isLinkSharingEnabled
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Indique si le partage par lien est activé
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        publicShareId
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      ID de partage pour l'accès public (null si non partagé)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profileImageUrl
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      URL de l'image d'avatar
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        phoneNumber
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Numéro de téléphone associé (null si aucun)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        clonedVoiceStatus
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Statut du clonage vocal (null si non cloné)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profitSplitOptIn
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Indique si le partage des revenus est activé
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        knowledgeItemCount
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Nombre d'éléments de connaissance attachés
    </td>
  </tr>
</tbody>
</table>

### Exemple de requête

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

### Réponses d'erreur

**400 Bad Request** — Format d'ID de mind invalide

**401 Unauthorized** — API key invalide ou manquante

**403 Forbidden** — Pas d'accès à ce mind

**404 Not Found** — Le mind n'existe pas

---

## Lister les minds

Récupérez tous les minds appartenant à l'utilisateur authentifié.

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

**Headers :**

```text
Authorization: Bearer minds_your_api_key
```

### Paramètres de requête

<table>
<thead>
  <tr>
    <th>
      Paramètre
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Défaut
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        search
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      —
    </td>
    
    <td>
      Filtre les minds par nom, description ou discipline (insensible à la casse)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        limit
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      100
    </td>
    
    <td>
      Nombre maximum de minds à renvoyer (1–100)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        offset
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      0
    </td>
    
    <td>
      Nombre de minds à ignorer pour la pagination
    </td>
  </tr>
</tbody>
</table>

### Réponse

```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
  }
}
```

### Champs de réponse

<table>
<thead>
  <tr>
    <th>
      Champ
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        data
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Tableau d'objets mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.total
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Nombre total de minds correspondant à la requête
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.limit
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Résultats maximum par page
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pagination.offset
      </code>
    </td>
    
    <td>
      number
    </td>
    
    <td>
      Nombre de résultats ignorés
    </td>
  </tr>
</tbody>
</table>

### Exemple de requête

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

## Créer un mind

Créez un nouveau AI mind avec une configuration personnalisée en utilisant différents modes d'entraînement.

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

**Headers :**

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

### Corps de la requête

```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"
}
```

### Paramètres

<table>
<thead>
  <tr>
    <th>
      Paramètre
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Requis
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <strong>
        Oui
      </strong>
    </td>
    
    <td>
      Nom du mind (2-100 caractères)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      <strong>
        Oui
      </strong>
    </td>
    
    <td>
      Domaine d'expertise du mind (par ex. « Marketing », « Engineering »)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        mode
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Mode d'entraînement : <code>
        keywords
      </code>
      
      , <code>
        clone
      </code>
      
      , <code>
        link
      </code>
      
       ou <code>
        manual
      </code>
      
      . Par défaut : <code>
        keywords
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Type de mind : <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       ou <code>
        user
      </code>
      
      . Par défaut : <code>
        creative
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Description de l'objectif du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        keywords
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Conditionnel
    </td>
    
    <td>
      Tableau de mots-clés (requis si <code>
        mode
      </code>
      
       vaut <code>
        keywords
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        personaContext
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditionnel
    </td>
    
    <td>
      Nom/contexte de la personne à émuler (requis si <code>
        mode
      </code>
      
       vaut <code>
        clone
      </code>
      
       ; également utilisé pour dériver automatiquement des mots-clés)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        contextLink
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditionnel
    </td>
    
    <td>
      URL vers un profil/contenu (requis si <code>
        mode
      </code>
      
       vaut <code>
        link
      </code>
      
       ; le serveur l'analyse pour dériver des mots-clés)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Tableau de tags pour la catégorisation (max 20 tags)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        profileImageUrl
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      URL externe vers l'image d'avatar (elle sera téléchargée et stockée)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        generateImage
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Si <code>
        true
      </code>
      
      , déclenche la génération d'image de profil par IA en arrière-plan
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        cloneVoice
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Si <code>
        true
      </code>
      
      , déclenche le clonage vocal via recherche YouTube (expérimental)
    </td>
  </tr>
</tbody>
</table>

### Valeurs de mode

Le paramètre `mode` détermine comment votre mind sera entraîné :

- **keywords** (par défaut) — Entraînez votre mind avec des mots-clés séparés par des virgules. L'IA rassemblera les informations pertinentes depuis différentes sources sur la base de ces mots-clés pour construire la base de connaissances du mind.
  - **Champ requis :** `keywords` — Tableau de mots-clés/sujets
  - **Idéal pour :** Expertise générale sur des sujets ou domaines spécifiques
- **clone** — Clonez le style et les connaissances d'une personne en fournissant son nom et son contexte. L'IA fera des recherches et construira un profil complet imitant son expertise et son style de communication.
  - **Champ requis :** `personaContext` — Nom et bref contexte (par ex. « Ada Lovelace, pioneering computer scientist »)
  - **Idéal pour :** Émuler des individus spécifiques, des personnages historiques ou des experts reconnus
- **link** — Entraînez votre mind avec le contenu d'une URL spécifique. Fournissez un lien vers un profil, portfolio ou site web, et l'IA analysera et extraira les informations pertinentes.
  - **Champ requis :** `contextLink` — URL vers la source de contenu
  - **Idéal pour :** Entraîner sur des sites web, portfolios ou profils en ligne spécifiques
- **manual** — Créez un mind sans entraînement automatique. Vous configurerez manuellement tous les paramètres et ajouterez des connaissances plus tard via l'API Knowledge.
  - **Aucun champ supplémentaire requis**
  - **Idéal pour :** Des configurations personnalisées où vous voulez un contrôle total sur les données d'entraînement

> **Traitement automatique :** Quand vous utilisez `keywords`, `clone` ou `link`, le backend reproduit le formulaire Add Mind in-product — il dérive les mots-clés d'entités (assistés par IA pour `clone`/`link`) et entraîne le mind de façon asynchrone. Suivez cet entraînement via le bloc `training` de la réponse de création et le endpoint dédié décrit dans **Cycle de vie de l'entraînement du mind** ci-dessous. Le mode `manual` ignore cette automatisation pour que vous puissiez entraîner le mind plus tard via l'API Knowledge.

### Valeurs de type

- **creative** — Pour les artistes, designers, écrivains et professionnels créatifs
- **expert** — Pour les spécialistes, consultants et experts d'un domaine
- **user** — Pour les personas utilisateurs, clients et archétypes d'audience cible

### Réponse

```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
  }
}
```

Le bloc `training` indique le cycle de vie du mind au moment de la création. Les modes `keywords`, `clone` et `link` démarrent en `queued` et s'entraînent en arrière-plan ; les minds `manual` reviennent en `completed` avec `readyToChat` déjà à `true`. L'`id` d'un mind existe dès que cet appel se termine, mais le mind ne peut répondre que lorsque `readyToChat` vaut `true`. Voir **Cycle de vie de l'entraînement du mind** ci-dessous pour le polling.

### Exemple : Créer un mind en mode keywords

```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"]
  }'
```

### Exemple : Créer un mind en mode clone

```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"]
  }'
```

### Exemple : Créer un mind en mode link

```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"]
  }'
```

### Exemple : Créer un mind en mode manual

```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"]
  }'
```

## Cycle de vie de l'entraînement du mind

La création d'un mind est asynchrone. `POST /v1/minds` renvoie immédiatement un `id`, mais pour les modes `keywords`, `clone` et `link`, le mind est encore en cours d'entraînement en arrière-plan. **L'existence de l'id d'un mind ne signifie pas que le mind est prêt** — le mind ne peut répondre que lorsque `readyToChat` vaut `true`. La seule exception est le mode `manual` : ces minds sautent la collecte de données et sont `completed` dès leur création.

Interrogez le endpoint d'entraînement dédié jusqu'à ce que le mind soit prêt :

```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
}
```

### Valeurs de statut

<table>
<thead>
  <tr>
    <th>
      Statut
    </th>
    
    <th>
      Signification
    </th>
    
    <th>
      <code>
        readyToChat
      </code>
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        queued
      </code>
    </td>
    
    <td>
      L'entraînement est en file d'attente mais n'a pas encore commencé.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        running
      </code>
    </td>
    
    <td>
      Le mind collecte activement des connaissances et construit sa persona.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        completed
      </code>
    </td>
    
    <td>
      L'entraînement est terminé. Le mind est prêt à discuter.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        failed
      </code>
    </td>
    
    <td>
      L'entraînement ne s'est pas terminé. Inspectez <code>
        error
      </code>
      
       et relancez l'entraînement si c'est réessayable.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
</tbody>
</table>

`GET /v1/minds/{id}` renvoie aussi `readyToChat` (et `trainingStatus`) avec le reste du mind, de sorte qu'une seule lecture vous indique à la fois qui est le mind et s'il peut déjà répondre.

### En cas d'échec de l'entraînement

Quand `status` vaut `failed`, la réponse inclut un objet `error` avec un `code` et un indicateur `retryable` :

<table>
<thead>
  <tr>
    <th>
      Code d'erreur
    </th>
    
    <th>
      Signification
    </th>
    
    <th>
      <code>
        retryable
      </code>
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        COLLECTION_FAILED
      </code>
    </td>
    
    <td>
      La collecte de connaissances n'a pas pu aboutir.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        PROFILE_GEN_FAILED
      </code>
    </td>
    
    <td>
      Le profil de persona n'a pas pu être généré.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        TIMEOUT
      </code>
    </td>
    
    <td>
      L'entraînement a dépassé son budget de temps et a été arrêté.
    </td>
    
    <td>
      <code>
        true
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        INTERNAL
      </code>
    </td>
    
    <td>
      Une erreur interne inattendue s'est produite.
    </td>
    
    <td>
      <code>
        false
      </code>
    </td>
  </tr>
</tbody>
</table>

### Relancer l'entraînement

Si un mind se termine en `failed` (ou si vous voulez simplement reconstruire un mind `completed`), relancez son entraînement :

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

Cela remet le mind en file d'attente et renvoie un nouveau bloc `training` avec `status` défini sur `queued`. La relance ne fonctionne que sur les minds terminés : un mind encore en `queued` ou `running` renvoie `409 Conflict` car un entraînement est déjà en cours. Après la relance, interrogez de nouveau `GET /v1/minds/{id}/training` jusqu'à ce que `readyToChat` vaille `true`.

## Images de profil

Quand vous fournissez un `profileImageUrl` :

1. L'image est téléchargée depuis l'URL externe
2. Uploadée dans un storage sécurisé
3. L'URL stockée est renvoyée dans la réponse

Formats pris en charge : JPG, PNG, GIF, WEBP

## Fonctionnement de l'entraînement

Le système génère automatiquement un system prompt intelligent basé sur votre mode, type et discipline choisis :

- **Mode keywords** : Crée une expertise autour de vos mots-clés spécifiés
- **Mode clone** : Construit un profil émulant le style et les connaissances de la personne spécifiée
- **Mode link** : Extrait les connaissances depuis l'URL fournie
- **Mode manual** : Crée un assistant basique que vous entraînerez avec des connaissances personnalisées

Vous pouvez enrichir davantage votre mind en [uploadant des connaissances](/api/knowledge) après la création.

## Limites selon l'offre

Consultez le [tableau généré des limites](/api/overview) pour les valeurs publiques actuelles. Les ajustements contractuels peuvent différer ; les intégrations doivent utiliser `data.limit` et `data.current` dans une réponse authentifiée `PLAN_LIMIT`. L'offre Individual apparaît comme `"premium"` dans les payloads API.

Quand vous atteignez votre limite, vous recevrez une erreur `403 Forbidden` :

```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
  }
}
```

## Réponses d'erreur

### 400 Bad Request

Paramètres manquants ou invalides.

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

### 401 Unauthorized

API key invalide ou manquante.

### 403 Forbidden

Limite de l'offre atteinte.

### 500 Internal Server Error

Erreur côté serveur (rare).

## Mettre à jour un mind

Mettez à jour la configuration d'un mind existant, y compris le nom, la description, le system prompt et d'autres paramètres.

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

**Headers :**

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

### Corps de la requête

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

### Paramètres

<table>
<thead>
  <tr>
    <th>
      Paramètre
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Requis
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Nom du mind (2-100 caractères)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        description
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Description de l'objectif du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Type : <code>
        creative
      </code>
      
      , <code>
        expert
      </code>
      
       ou <code>
        user
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        discipline
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Domaine d'expertise du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        systemPrompt
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      System prompt personnalisé qui définit le comportement et la personnalité du mind
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      array
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Tableau de tags pour la catégorisation (max 20 tags)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        isPublic
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      Non
    </td>
    
    <td>
      Indique si le mind est accessible publiquement
    </td>
  </tr>
</tbody>
</table>

### System prompt

Le champ `systemPrompt` vous permet de personnaliser comment votre mind se comporte et répond. C'est utile pour :

- **Personnalisation de persona** : Définir des traits de personnalité spécifiques, un style de communication ou des domaines d'expertise
- **Formatage des réponses** : Instruire le mind à répondre dans des formats spécifiques (par ex. listes à puces, listes numérotées)
- **Contraintes de domaine** : Limiter les réponses à des sujets ou perspectives spécifiques
- **Langue/ton** : Définir la langue, le niveau de formalité ou le ton des réponses

**Exemples de 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.
```

### Réponse

```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"
  }
}
```

### Exemple : Mettre à jour le system prompt

```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."
  }'
```

### Exemple : Mettre à jour plusieurs champs

```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"]
  }'
```

### Réponses d'erreur

**400 Bad Request** — Aucun champ valide à mettre à jour ou valeurs de champ invalides

**401 Unauthorized** — API key invalide ou manquante

**403 Forbidden** — Pas la permission de mettre à jour ce mind (vous devez en être le propriétaire)

**404 Not Found** — Le mind n'existe pas

## Obtenir les patterns de connaissance d'un mind

Récupérez les patterns de pensée et les connaissances organisées par framework pour un mind spécifique.

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

**Headers :**

```text
Authorization: Bearer minds_your_api_key
```

### Structure de la réponse

L'endpoint renvoie les patterns groupés par frameworks (par ex. AOX Internal, OCEAN, DISC, etc.), avec des méthodes et des compétences montrant les occurrences et les preuves.

```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"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
```

### Comprendre la réponse

- **frameworks** : Tableau de frameworks contenant les patterns du mind

  - **totalOccurrences** : Nombre total de patterns dans ce framework
  - **methods** : Méthodes ou approches de pensée détectées
  
    - **occurrences** : Nombre de fois où cette méthode apparaît
    - **competencies** : Compétences ou sous-domaines spécifiques au sein de la méthode
    
      - **occurrences** : Nombre de patterns pour cette compétence
      - **evidence** : Tableau de citations démontrant ce pattern
      
        - **mind** : La citation réelle ou l'insight issu du contenu
        - **portfolioItemId** : Référence au matériel source
        - **createdAt** : Date d'identification du pattern

### Exemple de requête

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

### Cas d'usage

- **Comprendre l'expertise d'un mind** : Voyez quelles méthodes et compétences votre mind a apprises
- **Assurance qualité** : Vérifiez que les patterns sont correctement extraits des données d'entraînement
- **Lacunes de connaissance** : Identifiez les domaines où davantage de données d'entraînement sont nécessaires
- **Comparaison de frameworks** : Comparez la performance d'un mind à travers différents frameworks

### Réponses d'erreur

**401 Unauthorized** — API key invalide ou manquante

**403 Forbidden** — Pas d'accès à ce mind

**404 Not Found** — Le mind n'existe pas

## Régénérer le system prompt

Régénérez tous les composants du system prompt d'un mind en utilisant sa base de connaissances existante. Utilise la même génération assistée par IA que le bouton « Generate All » de l'UI.

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

**Headers :**

```text
Authorization: Bearer minds_your_api_key
```

### Fonctionnement

L'endpoint analyse la base de connaissances du mind (portfolio items, patterns, embeddings) et génère tous les composants du prompt :

Pour les minds de type **user** :

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

Pour les minds de type **expert** :

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

Pour les minds de type **creative** :

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

### Réponse

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

### Exemple de requête

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

### Cas d'usage

- **Après ajout de connaissances** : Régénérez le prompt pour intégrer les éléments de connaissance récemment ajoutés
- **Affinage de persona** : Régénérez pour mettre à jour la persona en fonction des patterns de connaissance actuels
- **Réinitialiser les personnalisations** : Effacez les modifications manuelles et régénérez des prompts frais depuis la base de connaissances

### Réponses d'erreur

**401 Unauthorized** — API key invalide ou manquante

**403 Forbidden** — Pas la permission de modifier ce mind (vous devez en être le propriétaire)

**404 Not Found** — Le mind n'existe pas

**500 Internal Server Error** — Échec de la génération du prompt (par ex. connaissances insuffisantes)

## Supprimer un mind

Supprimez définitivement un mind et toutes les données associées, y compris les connaissances, portfolio items et fichiers.

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

**Headers :**

```text
Authorization: Bearer minds_your_api_key
```

### Réponse

Renvoie `204 No Content` avec un corps vide en cas de succès.

### Exemple de requête

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

### Ce qui est supprimé

Quand vous supprimez un mind, les éléments suivants sont définitivement supprimés :

- Le mind lui-même et toute sa configuration
- Toutes les connaissances et données d'entraînement
- Tous les portfolio items et fichiers associés
- Tout l'historique de chat et les messages
- Les images de profil et fichiers uploadés

**Attention :** Cette action est irréversible.

### Réponses d'erreur

**400 Bad Request** — Format d'ID de mind invalide

**401 Unauthorized** — API key invalide ou manquante

**403 Forbidden** — Pas la permission de supprimer ce mind (vous devez en être le propriétaire)

**404 Not Found** — Le mind n'existe pas

## Étapes suivantes

- [Uploader des connaissances vers votre mind](/api/knowledge)
- [Discuter avec votre mind](/api/chat)
- Découvrez [errors and limits](/api/errors)
