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

# `add_domain`

> Enregistre le domaine d’où votre espace veut envoyer (le vôtre, ou un sous-domaine comme agents.exemple.fr) et rend la liste exacte des enregistrements DNS à publier chez l’hébergeur du domaine : preuve de propriété, deux clés DKIM, SPF, MX, et DMARC conseillé.

## En bref

| Propriété | Valeur |
|---|---|
| Titre | Enregistrer son domaine |
| Outil MCP | `add_domain`, sur `https://api.subagent.fr/mcp` |
| Appel HTTP | `POST https://api.subagent.fr/v1/add_domain` |
| Accès | permission `manage_inboxes` |
| État de l'espace | vérifié : sinon, refus `space_unverified` |
| Effet | écriture |
| Vue dans l'assistant | oui : voir [Vues](https://subagent.fr/docs/vues.md) |

## Ce que fait l'outil

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

> Enregistre le domaine d’où votre espace veut envoyer (le vôtre, ou un sous-domaine comme agents.exemple.fr) et rend la liste exacte des enregistrements DNS à publier chez l’hébergeur du domaine : preuve de propriété, deux clés DKIM, SPF, MX, et DMARC conseillé. Rien ne change tant que `verify_domain` ne les a pas trouvés. Une fois le domaine vérifié, vous y créez des boîtes qui ne sont plus soumises aux limites du domaine commun. Enregistrer un domaine ne le réserve pas : il revient au premier espace qui publie sa preuve de propriété. Une messagerie publique (gmail.com…) ou un domaine dont un autre espace a déjà prouvé la propriété sont refusés.

## Paramètres

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

| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| `domain` | texte | oui | Le nom de domaine, par exemple exemple.fr ou agents.exemple.fr. |

## Résultat

L'outil rend un domaine. L'objet structuré déclare les champs ci-dessous ; la page de concept les décrit tous : voir [les champs d'un domaine](https://subagent.fr/docs/domaines.md#champs).

| Champ | Type | Contenu |
|---|---|---|
| `domain` | texte | Nom de domaine. |
| `id` | texte | Identifiant du domaine (dom_…). |
| `last_checked_at` | texte ou `null` | La date du dernier contrôle DNS (ISO 8601), sinon `null`. |
| `records` | liste | Les enregistrements DNS à publier, et leur état au dernier contrôle. Chaque élément porte `label`, `name`, `note`, `required`, `role`, `seen`, `state`, `type`, `value`. |
| `status` | texte | pending : DNS à publier ; verified : on peut y créer des boîtes ; suspended : le DNS a disparu, ses boîtes n’envoient plus. |
| `status_reason` | texte ou `null` | La raison d'une suspension, sinon `null`. |
| `verified_at` | texte ou `null` | La date de la vérification (ISO 8601), sinon `null`. |

## Exemple d'appel

Les valeurs sont fictives.

HTTP :

```sh
curl -X POST https://api.subagent.fr/v1/add_domain \
  -H "Authorization: Bearer $SUBAGENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "domain": "agents.exemple.fr"
}'
```

MCP (`tools/call`) :

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "add_domain",
    "arguments": {
      "domain": "agents.exemple.fr"
    }
  }
}
```

## 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`. |
| `payment_required` | 402 | L'espace n'a pas de forfait en cours : sa boîte reçoit, prépare des brouillons et n'écrit qu'à son humain. Le refus vaut pour un envoi à un tiers, la validation d'un brouillon, une seconde boîte et `add_domain`. | Appeler `subscribe`, après l'accord de l'humain, et lui remettre le lien de paiement. Ensuite, `billing_status` dit si le forfait est en cours. |
| `public_mail_domain` | 422 | Une messagerie publique (`gmail.com`…) ne se bloque pas en entier, et ne s'enregistre pas comme domaine. | Bloquer les adresses une à une. Enregistrer un domaine dont vous gérez le DNS. |
| `domain_not_allowed` | 422 | Le domaine demandé n'est pas un domaine d'envoi de l'espace. Ou, pour `add_domain`, c'est un domaine de Subagent. | Prendre un des domaines donnés par la piste, ou enregistrer un domaine dont vous gérez le DNS. |
| `domain_taken` | 409 | Un autre espace a déjà prouvé la propriété de ce domaine. | Enregistrer un sous-domaine, ou demander à un administrateur de Subagent de le libérer. |
| `domain_limit` | 409 | Le plafond de cinq domaines par espace est atteint. | Retirer un domaine inutile avec `remove_domain`. |
| `domain_exists` | 409 | Le domaine est déjà enregistré pour cet espace. | Appeler `list_domains` : il donne ses enregistrements DNS et son état. |

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

- [Domaines : add_domain](https://subagent.fr/docs/domaines.md#add_domain)
- [`verify_domain`](https://subagent.fr/docs/reference/verify_domain.md)
- [`list_domains`](https://subagent.fr/docs/reference/list_domains.md)
- [Tous les outils](https://subagent.fr/docs/reference/index.md)
