# Démarrage avec Node

Ce guide utilise le paquet `vaemail`, versionné dans `mcp/package.json` et compatible avec Node 18 ou plus.

## Prérequis

- Node.js 18 ou plus.
- Une clé d’API dans `VAEMAIL_API_KEY`.
- Un domaine d’envoi authentifié.

```bash
export VAEMAIL_API_KEY="<votre clé de test>"
npm install vaemail
```

## Tutoriel

```js
import { VaEmail } from 'vaemail';

const client = new VaEmail({ apiKey: process.env.VAEMAIL_API_KEY });
const message = {
  to: 'client@example.com',
  subject: 'Votre commande',
  html: '<p>Votre commande est confirmée.</p>',
};

const contrôle = await client.validate(message);
if (contrôle.sendable === false) throw new Error(JSON.stringify(contrôle));

const accepte = await client.send(message, 'commande-4711');
console.log(accepte);
const statut = await client.getMessage(accepte.data.id);
console.log(statut);
```

Le second argument de `send` est la clé d’idempotence. Une relance avec la même clé rejoue la réponse pendant 24 heures.

L’API dispose aussi de la spécification [OpenAPI 3.1](https://app.vaemail.fr/openapi.json). Il n’existe pas de collection Postman.

## Comment tester

Avant le code Node, vérifie la capacité du service sans clé :

```bash
curl https://app.vaemail.fr/api/v1/capabilities
npm test --prefix mcp
```

Puis vérifie le résultat de `getMessage`. `queued` signifie accepté, pas remis.

## Limites

Le paquet n’a aucune dépendance et utilise `fetch` natif. Il ne crée ni compte ni clé et ne publie pas les DNS. Le SDK ne remplace pas la confirmation humaine d’une campagne.

## Reprise après erreur

Lis `error.code` et `error.retryable`. Si la requête d’envoi a expiré, rejoue exactement le même corps avec `commande-4711`. Ne génère pas une nouvelle clé d’idempotence avant d’avoir vérifié le premier statut.

