API d’envoi d’emails
Envoyez des emails directement via Mailpulse avec suivi automatique des ouvertures et clics. Les emails sont envoyés depuis votre domaine d’envoi vérifié via l’infrastructure Resend.
Domaine d’envoi
Deux options s’offrent à vous pour l’adresse expéditeur :
- Domaine personnalisé (recommandé) — Ajoutez et vérifiez votre propre domaine dans Paramètres > Domaines d’envoi pour un contrôle total de votre branding.
- Domaine plateforme (fallback) — Si votre domaine
fromn’est pas vérifié, Mailpulse réécrit automatiquement l’expéditeur en@send.mailpulse-io.lyten.agencyet définitreply-tovers votre adresse originale pour que les destinataires puissent vous répondre.
Par exemple, si vous envoyez depuis Newsletter <news@example.com> sans avoir vérifié example.com, l’email sera envoyé depuis Newsletter <news@send.mailpulse-io.lyten.agency> avec reply-to: news@example.com.
Envoyer un email
Endpoint
POST /api/sendCorps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
from | string | Oui | Adresse expéditeur (ex: Votre Nom <vous@votredomaine.com>) |
to | string | string[] | Oui | Adresse(s) du destinataire |
subject | string | Oui | Objet de l’email |
htmlContent | string | Oui | Contenu HTML de l’email |
replyTo | string | Non | Adresse de réponse |
cc | string | string[] | Non | Destinataire(s) en copie |
bcc | string | string[] | Non | Destinataire(s) en copie cachée |
campaignId | string | Non | Nom de campagne à associer |
metadata | object | Non | Métadonnées personnalisées |
Exemple de requête
curl -X POST NEXT_PUBLIC_BASE_URL/api/send \
-H "x-api-key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"from": "Newsletter <news@votredomaine.com>",
"to": "destinataire@example.com",
"subject": "Bienvenue dans notre newsletter",
"htmlContent": "<html><body><h1>Bonjour !</h1><a href=\"https://example.com\">Visitez-nous</a></body></html>",
"campaignId": "serie-bienvenue",
"metadata": { "userId": "123" }
}'Schéma de réponse
| Champ | Type | Description |
|---|---|---|
id | string | ID email Resend |
emailTrackingId | string | ID de suivi Mailpulse |
from | string | Adresse expéditeur utilisée |
to | string[] | Adresses destinataires |
subject | string | Objet de l’email |
links | TrackedLink[] | Liens suivis avec URLs originales et de tracking |
pixelUrl | string | URL du pixel de suivi d’ouverture |
Exemple de réponse
{
"id": "re_abc123",
"emailTrackingId": "hE4kJ9xP",
"from": "Newsletter <news@votredomaine.com>",
"to": ["destinataire@example.com"],
"subject": "Bienvenue dans notre newsletter",
"links": [
{
"originalUrl": "https://example.com",
"trackingId": "mN2pQ7",
"trackingUrl": "https://mailpulse-io.lyten.agency/api/t/c/mN2pQ7"
}
],
"pixelUrl": "https://mailpulse-io.lyten.agency/api/t/o/hE4kJ9xP"
}Comment ça fonctionne
Quand vous appelez POST /api/send, Mailpulse :
- Vérifie si le domaine expéditeur est vérifié — sinon, utilise le domaine plateforme
- Extrait tous les liens du contenu HTML
- Crée les enregistrements de suivi pour l’email et chaque lien
- Réécrit tous les liens pour passer par les endpoints de tracking Mailpulse
- Injecte un pixel de suivi 1x1 pour la détection d’ouverture
- Envoie le HTML modifié via Resend
- Déclenche le webhook
EMAIL_SENTsi configuré
Toutes les ouvertures et clics sont ensuite suivis automatiquement.
Différence avec Register Email
POST /api/send | POST /api/emails | |
|---|---|---|
| Envoie l’email | Oui (via Resend) | Non (retourne le HTML modifié) |
| Nécessite un domaine d’envoi | Non (fallback sur le domaine plateforme) | Non |
| Tracking | Automatique | Vous injectez pixel/liens vous-même |
| Cas d’usage | Envoi + suivi en un appel | Suivre des emails envoyés par un autre service |
Utilisez /api/send quand vous voulez que Mailpulse gère l’envoi et le suivi. Utilisez /api/emails quand vous envoyez via votre propre fournisseur (Gmail, SendGrid, SMTP, etc.) et avez besoin uniquement du suivi.
Réponses d’erreur
| Statut | Description |
|---|---|
400 Bad Request | Champs requis manquants ou JSON invalide |
401 Unauthorized | Clé API invalide ou manquante |
500 Internal Server Error | Échec de livraison de l’email |