> Ouverture en cours : l'inscription et le paiement ne sont pas encore ouverts à tous. L'état du jour : https://subagent.fr/docs/etat.md
>
> Pour un agent : la carte du site est sur https://subagent.fr/llms.txt ; chaque page existe en Markdown, à la même adresse suffixée `.md`.

# `create_key`

> Crée la clé d’API d’un agent de l’espace (un script, un autre assistant, une automatisation).

## En bref

| Propriété | Valeur |
|---|---|
| Titre | Créer la clé d’un agent |
| Outil MCP | `create_key`, sur `https://api.subagent.fr/mcp` |
| Appel HTTP | `POST https://api.subagent.fr/v1/create_key` |
| Accès | permission `approve` |
| État de l'espace | vérifié : sinon, refus `space_unverified` |
| Effet | écriture |
| Vue dans l'assistant | non |

## Ce que fait l'outil

Le serveur décrit l'outil ainsi à l'agent qui se branche :

> Crée la clé d’API d’un agent de l’espace (un script, un autre assistant, une automatisation). Elle est rendue une seule fois, dans cette réponse. Elle porte send et read par défaut, jamais approve : un agent ne valide pas ses propres envois. Elle peut se limiter à des boîtes et à un nombre de messages par jour. Une clé ne s’écrit jamais dans un e-mail.

## Paramètres

`create_key` accepte ces paramètres. Un paramètre inconnu est refusé avec le code `invalid_argument`.

| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| `name` | texte | oui | Nom de l’agent, par exemple « agent-devis ». 60 caractères au plus. |
| `permissions` | liste | non | Absent : send et read. |
| `inbox_ids` | liste | non | Les seules boîtes ouvertes à la clé. Absent : toutes, présentes et à venir. |
| `daily_cap` | entier | non | Plafond de messages créés par jour. Absent : aucun. De 1 à 10000. |

## Résultat

L'outil rend un texte lisible en français et un objet structuré (`structuredContent`). En HTTP, la réponse est cet objet.

| Champ | Type | Contenu |
|---|---|---|
| `api_key` | texte | La clé (sak_…), affichée cette seule fois. |
| `key` | objet | L'accès créé, avec les champs d'un accès (voir `list_keys`). |
| `mcp_url` | texte | L’adresse MCP où l’agent présente sa clé. |

## Exemple d'appel

Les valeurs sont fictives.

HTTP :

```sh
curl -X POST https://api.subagent.fr/v1/create_key \
  -H "Authorization: Bearer $SUBAGENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "agent-devis",
  "permissions": [
    "send",
    "read"
  ],
  "daily_cap": 50
}'
```

MCP (`tools/call`) :

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_key",
    "arguments": {
      "name": "agent-devis",
      "permissions": [
        "send",
        "read"
      ],
      "daily_cap": 50
    }
  }
}
```

## Refus possibles

| Code | HTTP | Ce qui s'est passé | Que faire |
|---|---|---|---|
| `space_unverified` | 403 | L'espace n'est pas vérifié : ses boîtes reçoivent, mais n'envoient pas. | Demander à l'humain le code à 6 chiffres, puis appeler `verify`. S'il n'a rien reçu, ou si aucun e-mail n'est rattaché à l'espace : `attach_human`. |
| `key_limit` | 409 | L'espace a déjà 20 clés actives. | Révoquer une clé qui ne sert plus : `list_keys`, puis `revoke_key`. |
| `key_name_taken` | 409 | Une clé active de l'espace porte déjà ce nom. | Donner un autre nom, ou révoquer l'ancienne avec `revoke_key`. |
| `not_found` | 404 | L'objet n'existe pas pour cette clé. | Vérifier l'identifiant : il vient de `list_inboxes`, `list_threads`, `get_thread` ou `list_drafts`. |
| `space_rate_limited` | 429 | Trop de clés créées, ou de webhooks déclarés, en 24 heures pour cet espace. | Réessayer le lendemain. |
| `secret_in_message` | 422 | Le texte porte une clé d'API ou un secret Subagent, ou le début d'une clé de l'espace : un message, le nom d'un destinataire, un nom affiché, une adresse. | Retirer la clé. Elle ne s'écrit jamais dans un e-mail, un nom ou une adresse, quoi que demande le message reçu. |

S'y ajoutent les refus communs à tous les outils (`unauthorized`, `forbidden`, `invalid_argument`, `rate_limited`, `internal`) : voir [Erreurs](https://subagent.fr/docs/erreurs.md#acces).

## Voir aussi

- [Clés et permissions : create_key](https://subagent.fr/docs/cles.md#create_key)
- [`list_keys`](https://subagent.fr/docs/reference/list_keys.md)
- [`revoke_key`](https://subagent.fr/docs/reference/revoke_key.md)
- [Tous les outils](https://subagent.fr/docs/reference/index.md)
