# Clés de workspace

> Les clés moai_org_ appellent le chat de Moon AI au nom d’un workspace d’équipe : points d’accès ouverts, données exclues, gestion des clés et erreurs.

Une clé de workspace (`moai_org_…`) appelle le chat de Moon AI au nom d’un workspace d’équipe : la requête se déroule dans ce workspace, avec ses modèles, ses règles et sa limite d’utilisation.

> [!WARNING]
> **Pas d’écran de création**
>
> L’administration ne propose pas d’écran pour les clés de workspace : la page « API et clés » gère les clés d’administration. Les clés de workspace existantes continuent de fonctionner, et se gèrent par les routes décrites plus bas. Pour une nouvelle intégration, préférez l’[API développeur](https://realmoon.ai/documentation/api/) (appeler les modèles) ou l’[API d’administration](https://realmoon.ai/documentation/api-organisations/administration/) (gérer l’organisation).

## Points d’accès ouverts

Une clé de workspace n’atteint que ces chemins, sur `https://chat.realmoon.ai` :

| Méthode et chemin | Rôle |
| --- | --- |
| `POST /api/chat/completions` ou `/api/v1/chat/completions` | Une réponse du chat, au format Chat Completions d’OpenAI. |
| `GET /api/models` ou `/api/v1/models` | Les modèles que la clé peut utiliser. |
| `POST /api/message` ou `/api/v1/messages` | Une réponse au format Messages d’Anthropic. |

Tout autre chemin répond `403 org_api_key_scope_forbidden`. Sur les deux chemins au format Anthropic, l’en-tête `x-api-key` est accepté à la place de `Authorization: Bearer`.

### Envoyer un message

`POST /api/chat/completions`

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `model` | chaîne | oui | Un identifiant rendu par `GET /api/models`. |
| `messages` | liste | oui | Les messages, au format d’OpenAI (`role`, `content`). |
| `stream` | booléen | non | `true` pour recevoir la réponse en flux (événements SSE). |

```bash title="cURL"
curl https://chat.realmoon.ai/api/chat/completions \
  -H "Authorization: Bearer $MOONAI_ORG_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-4.5",
    "messages": [{"role": "user", "content": "Résume la politique de congés en trois points."}],
    "stream": false
  }'
```

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

r = requests.post(
    "https://chat.realmoon.ai/api/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['MOONAI_ORG_KEY']}"},
    json={
        "model": "anthropic/claude-haiku-4.5",
        "messages": [{"role": "user", "content": "Résume la politique de congés en trois points."}],
        "stream": False,
    },
    timeout=120,
)
r.raise_for_status()
print(r.json()["choices"][0]["message"]["content"])
```

```javascript title="JavaScript"
const r = await fetch('https://chat.realmoon.ai/api/chat/completions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.MOONAI_ORG_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'anthropic/claude-haiku-4.5',
    messages: [{ role: 'user', content: 'Résume la politique de congés en trois points.' }],
    stream: false,
  }),
});
if (!r.ok) throw new Error(await r.text());
const data = await r.json();
console.log(data.choices[0].message.content);
```

La réponse suit le format d’OpenAI : `choices[0].message.content` porte le texte.

## Au nom de qui

- La clé agit au nom de la personne qui l’a créée, avec le rôle de membre, jamais avec des droits d’administrateur.
- Elle reste rattachée au workspace de la clé, quel que soit le workspace ouvert par cette personne dans l’application.
- L’utilisation compte dans la limite de cette personne dans ce workspace.

## Ce que la clé n’utilise pas

Pour qu’une clé ne puisse rien lire de privé, une requête faite avec elle :

- n’a ni fichiers joints, ni outils, ni serveurs d’outils ;
- n’utilise ni la mémoire, ni les connecteurs, ni les dossiers de la personne ;
- ne choisit que parmi les modèles publics de la plateforme et ceux partagés avec le workspace, jamais un modèle ou un agent privé de la personne ni une connexion directe (`Model not found`).

## Quand la clé cesse de fonctionner

| Situation | Réponse |
| --- | --- |
| Clé inconnue ou expirée | `401` |
| Le créateur n’est plus propriétaire ou administrateur actif du workspace : la clé est révoquée définitivement, même s’il le redevient | `401 org_api_key_revoked` |
| Le compte du créateur est suspendu | `403 account_not_active` |
| Le forfait du workspace n’inclut plus l’accès à l’API | `403 org_api_key_plan_required` |
| Chemin hors de la liste | `403 org_api_key_scope_forbidden` |
| Lecture impossible côté serveur | `503`, réessayez |

Supprimer le workspace rend aussi ses clés inutilisables.

## Gérer les clés

Ces routes s’appellent avec la session d’un propriétaire ou d’un administrateur du workspace connecté à Moon AI, jamais avec une clé.

### Créer une clé

`POST /api/v1/organizations/{org_id}/api-keys`

| Champ | Type | Obligatoire | Description |
| --- | --- | --- | --- |
| `name` | chaîne | oui | Le nom de la clé, gardé sur 128 caractères. |
| `expires_in_days` | entier | non | Durée de validité, de 1 à 3 650 jours. Absent : la clé n’expire pas. |

```json
{
  "id": "6a5b4c3d-2e1f-4a0b-9c8d-7e6f5a4b3c2d",
  "org_id": "8c1f2a4e-5b6d-4e7f-9a0b-1c2d3e4f5a6b",
  "name": "Intranet",
  "key": "moai_org_…",
  "key_prefix": "moai_org_3f9a",
  "expires_at": 1801296000,
  "created_at": 1793520000
}
```

La clé complète (`key`) n’est rendue que dans cette réponse.

| Statut | Code ou message | Cause |
| --- | --- | --- |
| 400 | « Un nom est requis. » | `name` vide. |
| 400 | `org_api_key_personal_workspace` | Le workspace est personnel. |
| 403 | `org_api_key_plan_required` | Le forfait du workspace n’inclut pas l’accès à l’API. |
| 409 | `org_api_key_limit` | Le workspace a déjà 25 clés actives. |

### Lister les clés

`GET /api/v1/organizations/{org_id}/api-keys`

Rend les clés non révoquées, sans leur valeur :

```json
[
  {
    "id": "6a5b4c3d-2e1f-4a0b-9c8d-7e6f5a4b3c2d",
    "org_id": "8c1f2a4e-5b6d-4e7f-9a0b-1c2d3e4f5a6b",
    "name": "Intranet",
    "key_prefix": "moai_org_3f9a",
    "created_by": "3f2b9c1d-7e4a-4b8c-9d0e-1f2a3b4c5d6e",
    "last_used_at": 1793606400,
    "expires_at": 1801296000,
    "revoked_at": null,
    "created_at": 1793520000,
    "updated_at": 1793520000
  }
]
```

### Révoquer une clé

`DELETE /api/v1/organizations/{org_id}/api-keys/{key_id}`

Rend `{"success": true}`, ou `404` si la clé n’existe pas dans ce workspace. La révocation est définitive.

Chaque création et chaque révocation est inscrite au journal d’audit de l’organisation.

---

Documentation Moon AI › API des organisations › Clés de workspace. Page : https://realmoon.ai/documentation/api-organisations/cles-workspace/. 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.
