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

# `save_contact`

> Crée ou modifie la fiche globale : les propriétés absentes restent conservées.

## En bref

| Propriété | Valeur |
|---|---|
| Titre | Enregistrer un contact |
| Outil MCP | `save_contact`, sur `https://api.subagent.fr/mcp` |
| Appel HTTP | `POST https://api.subagent.fr/v1/save_contact` |
| Accès | permission `send` |
| É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 :

> Crée ou modifie la fiche globale : les propriétés absentes restent conservées. Ne modifie ni les personnalisations des audiences, ni les campagnes déjà programmées, ni les désinscriptions. Aucun envoi.

## Paramètres

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

| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| `email` | texte | oui | Adresse unique : crée la fiche si elle n’existe pas. |
| `name` | texte | non | Nom. Absent : conservé ; vide : effacé. 160 caractères au plus. |
| `fields` | objet | non | Remplace les champs globaux si fourni ; les champs propres aux audiences restent inchangés. |
| `labels` | liste | non | Remplace les tags globaux si fourni. |

## 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 |
|---|---|---|
| `contact` | objet | La fiche telle qu'enregistrée. |

## Exemple d'appel

Les valeurs sont fictives.

HTTP :

```sh
curl -X POST https://api.subagent.fr/v1/save_contact \
  -H "Authorization: Bearer $SUBAGENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "nadia.morel@exemple.com",
  "name": "Nadia Morel",
  "fields": {
    "societe": "Atelier Morel"
  }
}'
```

MCP (`tools/call`) :

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "save_contact",
    "arguments": {
      "email": "nadia.morel@exemple.com",
      "name": "Nadia Morel",
      "fields": {
        "societe": "Atelier Morel"
      }
    }
  }
}
```

## Refus possibles

| Code | HTTP | Ce qui s'est passé | Que faire |
|---|---|---|---|
| `contact_scope` | 403 | Le répertoire des contacts demande un accès à toutes les boîtes de l'espace ; cette clé est limitée à certaines. | Passer par une clé qui accède à tout l'espace, ou par l'assistant de l'humain. |

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

- [Contacts et audiences : save_contact](https://subagent.fr/docs/contacts.md#save_contact)
- [`get_contact`](https://subagent.fr/docs/reference/get_contact.md)
- [`set_contact_audiences`](https://subagent.fr/docs/reference/set_contact_audiences.md)
- [Tous les outils](https://subagent.fr/docs/reference/index.md)
