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), publiez 3 types d'enregistrements DNS chez votre hébergeur : SPF, DKIM et DMARC. Ajoutez d'abord votre domaine dans Réglages → Expéditeurs : Envol génère alors vos 3 enregistrements DKIM personnalisés.

Les enregistrements à publier

TypeHôteValeur
TXT (SPF)votre-domaine.frv=spf1 include:mail.envol.email ~all
CNAME (DKIM ×3)<sélecteur>._domainkey.votre-domaine.frfourni dans Réglages → Expéditeurs
TXT (DMARC)_dmarc.votre-domaine.frv=DMARC1; p=none; rua=mailto:dmarc@votre-domaine.fr
Le DKIM est composé de 3 enregistrements CNAME générés automatiquement pour votre domaine — copiez-les depuis Réglages → Expéditeurs. La propagation DNS prend de 5 à 30 minutes ; cliquez ensuite sur Vérifier dans Envol.

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. abc123._domainkey), jamais le domaine complet.
  1. Connectez-vous à hPanel, ouvrez Domaines puis cliquez sur votre domaine.
  2. Allez dans DNS / Serveurs de noms → section Gérer les enregistrements DNS.
  3. SPF — Type TXT, Nom @, Valeur v=spf1 include:mail.envol.email ~all. Si un SPF existe déjà, n'en créez pas un second : ajoutez include:mail.envol.email dans l'existant.
  4. DMARC — Type TXT, Nom _dmarc, Valeur v=DMARC1; p=none; rua=mailto:dmarc@votre-domaine.fr.
  5. DKIM (×3) — Pour chacune des 3 lignes affichées dans Envol (Réglages → Expéditeurs) : Type CNAME, Nom = la partie hôte sans le domaine, Valeur = la cible fournie.
  6. Enregistrez, patientez 5 à 30 min, puis revenez dans Envol et cliquez sur Vérifier.

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 →