# Modèles de l’organisation

> Lister les modèles que les règles autorisent, créer des modèles de l’organisation avec prompt et bases de connaissances, et poser des consignes par modèle.

Un modèle de l’organisation part d’un modèle de la plateforme et lui ajoute un prompt système, des suggestions, des bases de connaissances et un avatar. Les membres le choisissent comme les autres modèles. Une consigne par modèle, elle, s’ajoute à toutes les conversations des membres qui utilisent ce modèle de base.

Toutes les routes sont sous `https://chat.realmoon.ai/api/v1/orgs/{org_id}`. Portées : `rules:read` pour lire, `rules:write` pour écrire. Créer, modifier ou rétablir un modèle, et poser une consigne, demandent une [organisation gérée](https://realmoon.ai/documentation/organisations/organisations-gerees/) : sinon `409 org_not_managed`.

## Catalogue des modèles

`GET /models/catalog` · `rules:read`

Les modèles publics de la plateforme qu’une [règle](https://realmoon.ai/documentation/api-organisations/regles/) peut autoriser, triés par nom.

```json
{
  "items": [
    { "id": "anthropic/claude-haiku-4.5", "name": "Claude Haiku 4.5", "owned_by": "openai", "eu_hosted": false, "capabilities": { "vision": true, "file_upload": true, "web_search": true } },
    { "id": "mistralai/mistral-large-2512", "name": "Mistral Large 3", "owned_by": "openai", "eu_hosted": true, "capabilities": null }
  ],
  "total": 2
}
```

`owned_by` indique le type de connexion qui sert le modèle, pas son éditeur. `eu_hosted` dit si le modèle compte comme hébergé dans l’Union européenne pour la règle `models.eu_only`. `503 models_unavailable` : la liste des modèles est momentanément indisponible.

## L’objet modèle de l’organisation

```json
{
  "id": "6f1c2e8a-3b4d-4f5a-9e7c-1d2b3a4c5e6f",
  "model_id": "orgm-6f1c2e8a3b4d4f5a",
  "name": "Assistant RH",
  "description": "Répond aux questions du personnel sur les congés.",
  "base_model_id": "mistralai/mistral-large-2512",
  "base_model_name": "Mistral Large 3",
  "base_status": "ok",
  "avatar": { "character": "chic", "background": "moon" },
  "avatar_image": "/api/v1/agents/avatar/chic/moon?v=1",
  "sharing": { "all": false, "group_ids": ["<id de groupe>"], "role_keys": ["manager"], "label_ids": [] },
  "archived": false,
  "has_prompt": true,
  "prompt_length": 1840,
  "starters_count": 3,
  "knowledge_count": 1,
  "created_by": "0d9a2f44-1c3b-4e7a-8b6f-55e2c1d0a9b8",
  "created_at": 1762339200,
  "updated_at": 1762425600
}
```

| Champ | Description |
| --- | --- |
| `model_id` | L’identifiant que les membres choisissent. |
| `base_status` | `ok`, `unavailable` (le modèle de base n’est plus proposé), `not_allowed` (les règles le refusent) ou `null`. |
| `sharing` | Qui peut l’utiliser, en plus du propriétaire et des administrateurs. |

La lecture d’un modèle, sa création et sa modification ajoutent `system_prompt`, `starters`, `knowledge` (`id`, `name`, `missing`) et `capabilities`.

## Lister les modèles

`GET /models/custom` · `rules:read`

| Paramètre | Description |
| --- | --- |
| `status` | `active` (par défaut), `archived` ou `all`. |
| `q` | Partie du nom. |
| `page`, `limit` | [Pagination](https://realmoon.ai/documentation/api-organisations/administration/#pagination). |

La réponse ajoute `max_models` (200), `managed` et `limits` (longueurs permises).

## Créer un modèle

`POST /models/custom` · `rules:write`

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `name` | chaîne | oui | 1 à 80 caractères, unique parmi les modèles actifs. |
| `base_model_id` | chaîne | oui | Un modèle de la plateforme que les règles autorisent. |
| `description` | chaîne | non | 1 000 caractères au plus. |
| `system_prompt` | chaîne | non | 20 000 caractères au plus. |
| `starters` | liste | non | Suggestions de départ : les 6 premières sont gardées, 200 caractères chacune. |
| `knowledge` | liste | non | 20 bases de connaissances au plus, du workspace et partagées avec lui. |
| `capabilities` | objet | non | `vision`, `file_upload`, `web_search`, `image_generation`, `code_interpreter`, `citations`, `usage` : `true` ou `false`. |
| `avatar` | objet | non | `character` et `background`, deux noms d’illustrations de l’avatar. |
| `sharing` | objet | non | `all` (tout le monde), `group_ids` (200 au plus), `role_keys` (50 au plus), `label_ids` (200 au plus). |

```bash title="cURL"
curl https://chat.realmoon.ai/api/v1/orgs/$ORG_ID/models/custom \
  -H "Authorization: Bearer $MOONAI_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: modele-assistant-rh" \
  -d '{
    "name": "Assistant RH",
    "base_model_id": "mistralai/mistral-large-2512",
    "system_prompt": "Tu réponds aux questions du personnel sur les congés, avec le règlement intérieur.",
    "starters": ["Combien de jours de congés me reste-t-il ?"],
    "sharing": {"all": true}
  }'
```

```python title="Python"
import os
import requests

r = requests.post(
    f"https://chat.realmoon.ai/api/v1/orgs/{os.environ['ORG_ID']}/models/custom",
    headers={
        "Authorization": f"Bearer {os.environ['MOONAI_ADMIN_KEY']}",
        "Idempotency-Key": "modele-assistant-rh",
    },
    json={
        "name": "Assistant RH",
        "base_model_id": "mistralai/mistral-large-2512",
        "system_prompt": "Tu réponds aux questions du personnel sur les congés, avec le règlement intérieur.",
        "starters": ["Combien de jours de congés me reste-t-il ?"],
        "sharing": {"all": True},
    },
    timeout=30,
)
r.raise_for_status()
print(r.json()["model_id"])
```

```javascript title="JavaScript"
const r = await fetch(`https://chat.realmoon.ai/api/v1/orgs/${process.env.ORG_ID}/models/custom`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.MOONAI_ADMIN_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'modele-assistant-rh',
  },
  body: JSON.stringify({
    name: 'Assistant RH',
    base_model_id: 'mistralai/mistral-large-2512',
    system_prompt: 'Tu réponds aux questions du personnel sur les congés, avec le règlement intérieur.',
    starters: ['Combien de jours de congés me reste-t-il ?'],
    sharing: { all: true },
  }),
});
if (!r.ok) throw new Error(await r.text());
console.log((await r.json()).model_id);
```

| Statut | `code` | Cause |
| --- | --- | --- |
| 400 | `invalid_request` | Nom vide, modèle de base indisponible ou refusé par les règles, plus de 200 modèles, avatar inconnu, rôle ou identifiant invalide. |
| 403 | `forbidden` | Base de connaissances non partagée avec le workspace. |
| 404 | `not_found` | Base de connaissances, groupe, rôle ou étiquette introuvable. |
| 409 | `invalid_request` | Un modèle de l’organisation porte déjà ce nom. |
| 409 | `org_not_managed` | L’organisation n’est pas gérée. |

`GET /models/knowledge-candidates?q=` (`rules:read`) liste les bases de connaissances qu’on peut attacher : `{"items": [{"id", "name"}], "total"}`, 200 au plus.

## Lire, modifier, archiver, supprimer

| Méthode et chemin | Portée | Rôle |
| --- | --- | --- |
| `GET /models/custom/{org_model_id}` | `rules:read` | Le modèle, prompt système compris. |
| `PATCH /models/custom/{org_model_id}` | `rules:write` | Modifier les champs envoyés. `null` efface `description`, `system_prompt`, `capabilities` et `avatar`. |
| `POST /models/custom/{org_model_id}/archive` | `rules:write` | Archiver : les membres ne le voient plus. |
| `POST /models/custom/{org_model_id}/restore` | `rules:write` | Rétablir un modèle archivé (`409` si un modèle actif porte le même nom). |
| `DELETE /models/custom/{org_model_id}` | `rules:write` | Supprimer définitivement ; répond `{"ok": true}`. |

## Consignes par modèle

Une consigne s’ajoute aux conversations des membres qui utilisent ce modèle de base, quel que soit le modèle de l’organisation qui l’emploie.

`GET /models/instructions` · `rules:read`

```json
{
  "items": [{ "base_model_id": "anthropic/claude-haiku-4.5", "base_model_name": "Claude Haiku 4.5", "text": "Ne rédigez jamais de contrat.", "length": 29, "updated_by": "0d9a2f44-1c3b-4e7a-8b6f-55e2c1d0a9b8", "updated_at": 1762339200, "available": true }],
  "total": 1,
  "max_models": 200,
  "text_max": 8000,
  "managed": true
}
```

`PUT /models/instructions` · `rules:write`

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `base_model_id` | chaîne | oui | Le modèle de base. |
| `text` | chaîne | non | 8 000 caractères au plus ; vide retire la consigne. |

Avec un texte, la réponse est la consigne ; sans texte, `{"ok": true, "removed": true}` (ou `false` s’il n’y en avait pas). 200 modèles au plus ont une consigne.

`DELETE /models/instructions?model_id=<id>` · `rules:write`

Répond `{"ok": true}`, ou `404` s’il n’y avait pas de consigne.

## Voir aussi

- [Règles](https://realmoon.ai/documentation/api-organisations/regles/)
- [Modèles et ressources](https://realmoon.ai/documentation/organisations/modeles-ressources/), dans l’administration
- [Ressources](https://realmoon.ai/documentation/api-organisations/ressources/)

---

Documentation Moon AI › API des organisations › Modèles de l’organisation. Page : https://realmoon.ai/documentation/api-organisations/modeles/. Modifiée le 5 novembre 2026.

© 2026 Stellarr Studio SAS. Tous droits réservés. Moon AI, Moon Blur et Stellarr Studio sont des marques déposées à l’INPI.
