EnvolDocsConnexionEssai gratuit
Documentation

Documentation Envol

Envoyez vos e-mails transactionnels par API (confirmation de commande, réinitialisation de mot de passe, code de connexion, facture…), écoutez les événements en temps réel via webhooks, et authentifiez votre domaine pour atterrir en boîte de réception. Tout ce dont vous avez besoin tient sur cette page.

URL de base

Toutes les requêtes se font en HTTPS sur :

Base URL
https://envolmail.com/api/v1
Pas de SDK à installer : Envol expose une API REST en JSON. Une simple requête HTTP suffit, depuis n'importe quel langage.

Authentification

Chaque requête est authentifiée par une clé API passée dans l'en-tête Authorization, au format Bearer. Vos clés commencent par env_live_.

Header
Authorization: Bearer env_live_VOTRE_CLE

Créer une clé

  1. Dans Envol, ouvrez Réglages → Clés API.
  2. Cliquez sur Nouvelle clé, donnez-lui un nom (ex. « Production »).
  3. Copiez la clé : elle n'est affichée qu'une seule fois. Stockez-la dans une variable d'environnement, jamais dans votre code source.
Une clé compromise se révoque en un clic depuis Réglages → Clés API. La révocation est immédiate. Ne partagez jamais une clé côté navigateur (front-end public).

Envoyer un e-mail

POST/api/v1/emails

Envoie un e-mail transactionnel. L'adresse from doit être un expéditeur vérifié de votre espace (voir Authentifier votre domaine).

C'est l'API transactionnelle : des envois à l'unité déclenchés par votre application (confirmation de commande, reset de mot de passe, facture, code de connexion…), à l'inverse des campagnes marketing envoyées à un segment. Chaque envoi et son statut (délivré, ouvert, bounce) apparaissent en temps réel dans l'onglet Transac. de l'application.

Paramètres

ChampTypeDescription
fromstringrequisExpéditeur vérifié. Format email ou Nom <email>.
tostringrequisAdresse du destinataire.
subjectstringrequisObjet de l'e-mail (1 à 200 caractères).
htmlstringoptionnel*Corps HTML de l'e-mail.
textstringoptionnelVersion texte (recommandée pour la délivrabilité).
replyTostringoptionnelAdresse de réponse (Reply-To).
templatestringoptionnel*Nom ou ID d'un template enregistré.
dataobjectoptionnelVariables injectées dans le template.

* Vous devez fournir html ou template.

Exemple

curl -X POST https://envolmail.com/api/v1/emails \
  -H "Authorization: Bearer env_live_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Studio Hirsch <contact@studio-hirsch.fr>",
    "to": "client@example.com",
    "subject": "Votre commande est en route",
    "html": "<h1>Merci !</h1><p>Suivi : FR-90217</p>"
  }'

Templates & variables

Plutôt que d'envoyer du HTML à chaque requête, réutilisez un template enregistré dans Envol et passez seulement les variables. Référencez-le par son nom via template, et fournissez les valeurs dans data. Les variables s'écrivent {{maVariable}} dans le template et l'objet.

JSON
{
  "from": "contact@studio-hirsch.fr",
  "to": "client@example.com",
  "subject": "Votre commande {{order}}",
  "template": "order-shipped",
  "data": {
    "order": "FR-90217",
    "tracking": "Colissimo 6A-1180-22"
  }
}
Si le template référencé est introuvable, l'API renvoie 404 template_not_found.

Réponses & erreurs

En cas de succès, l'API renvoie 202 Accepted : l'e-mail est accepté et mis en file d'envoi.

202 Accepted
{
  "id": "0113019ea5344f47-7c2b…",
  "status": "accepted"
}

Codes d'erreur

StatutCodeCause
400invalid_inputChamps manquants ou invalides (voir details).
400no_html_or_templateNi html ni template fourni.
401missing_or_invalid_tokenEn-tête Authorization absent ou mal formé.
401invalid_tokenClé révoquée ou inconnue.
403sender_not_verifiedL'adresse from n'est pas un expéditeur vérifié.
404template_not_foundLe template référencé n'existe pas.

Configurer un webhook

Envol envoie en temps réel les événements de vos envois (ouvertures, clics, rejets…) vers l'URL HTTPS de votre choix. Configurez-la dans Réglages → Webhooks, choisissez les événements à recevoir, et conservez le secret (whsec_…) généré pour vérifier les signatures.

Événements disponibles

typeDéclenché quand…
DELIVEREDl'e-mail est remis au serveur du destinataire.
OPENune ouverture est détectée.
CLICKun lien de l'e-mail est cliqué.
BOUNCErejet (adresse invalide, boîte pleine…).
COMPLAINTle destinataire signale l'e-mail comme spam.
UNSUBSCRIBEle destinataire se désinscrit.

Format du payload

Chaque événement est envoyé en POST, corps JSON :

POST votre endpoint
{
  "type": "DELIVERED",
  "messageId": "0113019ea5344f47-7c2b…",
  "email": "client@example.com",
  "meta": {},
  "deliveredAt": "2026-06-08T10:12:30.000Z"
}

Vérifier la signature

Chaque requête porte l'en-tête X-Envol-Signature : un HMAC-SHA256 (en hexadécimal) du corps brut, calculé avec le secret de votre webhook. Recalculez-le de votre côté et comparez, pour garantir que l'événement vient bien d'Envol.

Calculez la signature sur le corps brut (non parsé). Si votre framework parse le JSON automatiquement, le HMAC ne correspondra pas.
import express from "express";
import crypto from "crypto";

const app = express();

app.post(
  "/webhooks/envol",
  express.raw({ type: "application/json" }), // garder le corps BRUT
  (req, res) => {
    const signature = req.header("X-Envol-Signature");
    const expected = crypto
      .createHmac("sha256", process.env.ENVOL_WEBHOOK_SECRET)
      .update(req.body)        // Buffer non parsé
      .digest("hex");

    if (signature !== expected) return res.status(401).end();

    const event = JSON.parse(req.body.toString());
    // event.type · event.messageId · event.email · event.deliveredAt
    res.status(200).end();
  },
);

Authentifier votre domaine

Pour envoyer depuis votre propre domaine et atterrir en boîte de réception (et non en spam), authentifiez-le avec SPF et DKIM. L'envoi passe par Zoho ZeptoMail : la clé DKIM est générée dans la console ZeptoMail, par domaine.

Le parcours en 3 étapes

  1. Console ZeptoMailDomains → ajoutez votre domaine. ZeptoMail affiche alors les 2 enregistrements exacts à publier : un TXT (DKIM) + un CNAME (retours).
  2. Publiez-les chez votre hébergeur DNS (voir les guides par hébergeur ci-dessous), puis revenez les valider dans ZeptoMail.
  3. Dans Envol, Réglages → Expéditeurs → ajoutez le même domaine → Vérifier. Envol contrôle que les enregistrements sont bien publiés.

Les enregistrements à publier

TypeHôteValeur
TXT (DKIM)<sélecteur>._domainkey.votre-domaine.frclé k=rsa; p=… fournie par la console (sélecteur numérique unique)
CNAME (retours)bounce-zem.votre-domaine.frclusterNN.zeptomail.com (valeur exacte dans la console)
TXT (DMARC, recommandé)_dmarc.votre-domaine.frv=DMARC1; p=none; rua=mailto:dmarc@votre-domaine.fr
ZeptoMail authentifie par DKIM (un TXT au sélecteur numérique, valeur k=rsa; p=…) + un CNAME de retours (bounce-zem). Pas de SPF à ajouter : DMARC passe via l'alignement DKIM. Copiez les valeurs exactes de votre console ZeptoMail (elles sont uniques par domaine). Propagation : 5 à 30 minutes.

Guides par hébergeur

Les étapes exactes selon l'endroit où votre domaine est géré. Sélectionnez votre hébergeur :

Dans le champ Nom / Host, Hostinger ajoute votre domaine automatiquement : ne saisissez que la partie de gauche (ex. 13182548._domainkey ou bounce-zem), jamais le domaine complet.
  1. Récupérez d'abord vos 2 enregistrements (TXT DKIM + CNAME de retours) dans la console ZeptoMail → Domains.
  2. Connectez-vous à hPanelDomaines → votre domaine → DNS / Gérer les enregistrements.
  3. DKIM — Type TXT, Nom = le sélecteur fourni (ex. 13182548._domainkey), Valeur = la clé k=rsa; p=… de la console.
  4. Retours — Type CNAME, Nom bounce-zem, Cible = clusterNN.zeptomail.com (valeur de la console).
  5. DMARC (recommandé) — Type TXT, Nom _dmarc, Valeur v=DMARC1; p=none; rua=mailto:dmarc@votre-domaine.fr.
  6. Enregistrez, patientez 5 à 30 min, validez dans ZeptoMail puis cliquez Vérifier dans Envol.

Domaines formulaires & landing pages

Servez vos formulaires (/f/…) et landing pages (/p/…) depuis votre propre sous-domaine (ex. forms.votre-domaine.fr) plutôt que le domaine Envol. Ajoutez le sous-domaine dans Réglages → Domaines, puis publiez un seul enregistrement CNAME.

TypeHôteValeur
CNAMEforms.votre-domaine.frcible affichée dans Réglages → Domaines
Comme pour le DKIM, mettez le proxy sur « DNS only » chez Cloudflare. Après propagation, cliquez sur Vérifier : Envol provisionne automatiquement le certificat HTTPS.
Une question qui n'est pas couverte ici ?
Plume, votre assistante IA, répond directement dans l'application.
Ouvrir Envol →