Webhook de création de destinataires
Votre back office (CRM, boutique en ligne, formulaire de contact, outil d'automatisation…) peut ajouter automatiquement des destinataires à JalonMail et compléter leur preuve de consentement, par un simple appel HTTP.
1. Obtenir l'adresse du webhook
- Connectez-vous à JalonMail et ouvrez Profil › Webhook de création de destinataires.
- Choisissez la phase par défaut des destinataires créés et leur état (actif ou à activer manuellement), puis cliquez sur « Créer le webhook ».
- Copiez l'adresse affichée. Elle contient votre jeton secret :
https://jalonmail.com/webhooks/recipients/VOTRE_JETON
Vous pouvez à tout moment désactiver le webhook, ou générer une nouvelle adresse : l'ancienne cesse alors immédiatement de fonctionner.
2. Format de l'appel
- Méthode POST, en JSON (
Content-Type: application/json) ou en formulaire classique (application/x-www-form-urlencoded). - Le jeton est passé dans l'adresse (
https://jalonmail.com/webhooks/recipients/VOTRE_JETON) ou dans l'en-têteAuthorization: Bearer VOTRE_JETONsurhttps://jalonmail.com/webhooks/recipients. - Ajoutez l'en-tête
Accept: application/jsonpour recevoir les erreurs au format JSON. - Un appel crée un destinataire. Les champs vides sont ignorés : les valeurs par défaut s'appliquent.
3. Champs acceptés
| Champ | Obligatoire | Description |
|---|---|---|
email | Oui | Adresse email du destinataire (255 caractères max.). Elle identifie le destinataire : un même email n'est jamais créé deux fois. |
first_name | Oui | Prénom (100 caractères max.). |
last_name | Oui | Nom (100 caractères max.). |
locale | Non | Langue des mails :
fr (Français), en (English), es (Español), de (Deutsch), it (Italiano), pt (Português), nl (Nederlands). Par défaut : la langue par défaut de votre compte email. |
campaign_started_at | Non | Date de début de la campagne, au format AAAA-MM-JJ. Par défaut : aujourd'hui. Les mails J+X de la phase sont comptés depuis cette date. |
phase | Non | Nom de la phase (majuscules indifférentes), ex. « Prospect ». Par défaut : la phase choisie dans les réglages du webhook. Une phase inconnue est refusée (erreur 422 listant vos phases). |
consent_source | Non | Origine du consentement, voir ci-dessous. |
consent_at | Non | Date et heure du consentement, ex. 2026-11-10 14:30:00 ou ISO 8601 2026-11-10T14:30:00+01:00. Pas dans le futur. |
consent_ip | Non | Adresse IP (IPv4 ou IPv6) de la personne au moment du consentement. |
consent_proof | Non | Preuve du consentement en texte libre (2 000 caractères max.), ex. le libellé de la case cochée et l'adresse du formulaire. |
purpose | Non | Usage de l'email, par son nom (majuscules indifférentes), ex. « Prospection commerciale ». Un usage inconnu est refusé (erreur 422 listant vos usages). |
Les destinataires créés reçoivent l'état (actif ou inactif) choisi dans les réglages du webhook. Les autres champs envoyés sont ignorés.
4. Consentement et usage (RGPD)
Transmettez la preuve du consentement recueilli : son origine, sa date et son heure, l'adresse IP et toute précision utile. Un destinataire dont l'origine et la date sont renseignées est considéré comme ayant un consentement renseigné.
Valeurs de consent_source
| Valeur | Signification |
|---|---|
web | Formulaire web |
phone | Téléphone |
email | |
linkedin | |
facebook | |
instagram | |
in_person | En personne (salon, rendez-vous...) |
paper | Papier / contrat signé |
other | Autre |
Le libellé complet est aussi accepté (ex. « LinkedIn »), ainsi que tel, téléphone, site, formulaire et mail.
Usages de l'email (purpose)
Chaque compte dispose des usages « Prospection commerciale », « Informations commerciales complémentaires », « Suivi de la relation client », « Lettre d'information » et peut ajouter les siens depuis Destinataires › Usages de l'email. Envoyez le nom exact de l'usage.
5. Destinataire déjà existant
Si un destinataire de votre compte a déjà cet email :
- son nom, sa langue, sa phase et son état ne sont pas modifiés : vous pouvez renvoyer le même appel sans risque ;
- sa preuve de consentement (
consent_*) et son usage (purpose) sont mis à jour s'ils sont fournis. Seulsemailet ces champs sont alors nécessaires.
{
"email": "marie@example.org",
"consent_source": "web",
"consent_at": "2026-11-10 14:30:00",
"consent_ip": "203.0.113.42",
"purpose": "Prospection commerciale"
}
6. Réponses
| Code | Signification |
|---|---|
| 201 | Destinataire créé ("created": true). |
| 200 | Destinataire déjà existant ("created": false) ; "updated": true si son consentement ou son usage a été mis à jour. |
| 422 | Données invalides : le détail par champ est dans errors. Rien n'est enregistré. |
| 403 | Webhook désactivé. |
| 404 | Adresse (jeton) inconnue ou régénérée. |
| 429 | Trop d'appels : réessayez une minute plus tard. |
Exemple de réponse (201)
{
"created": true,
"updated": false,
"recipient": {
"id": 1234,
"email": "marie@example.org",
"first_name": "Marie",
"last_name": "Curie",
"locale": "fr",
"campaign_started_at": "2026-11-10",
"phase": "Prospect",
"is_active": true,
"unsubscribed": false,
"consent_source": "web",
"consent_at": "2026-11-10T14:30:00+01:00",
"consent_ip": "203.0.113.42",
"consent_proof": "Case cochée sur https://exemple.fr/contact",
"purpose": "Prospection commerciale"
}
}
Exemple d'erreur (422)
{
"message": "Données invalides.",
"errors": {
"phase": ["Cette phase n'existe pas. Phases disponibles : Prospect, Client."]
}
}
7. Exemples
cURL
curl -X POST https://jalonmail.com/webhooks/recipients/VOTRE_JETON \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"email": "marie@example.org",
"first_name": "Marie",
"last_name": "Curie",
"locale": "fr",
"phase": "Prospect",
"consent_source": "web",
"consent_at": "2026-11-10 14:30:00",
"consent_ip": "203.0.113.42",
"consent_proof": "Case cochée sur https://exemple.fr/contact",
"purpose": "Prospection commerciale"
}'
PHP (formulaire de contact)
$response = file_get_contents('https://jalonmail.com/webhooks/recipients/VOTRE_JETON', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nAccept: application/json\r\n",
'content' => json_encode([
'email' => $_POST['email'],
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'consent_source' => 'web',
'consent_at' => date('Y-m-d H:i:s'),
'consent_ip' => $_SERVER['REMOTE_ADDR'],
'consent_proof' => 'Case « J\'accepte de recevoir des informations » cochée',
'purpose' => 'Prospection commerciale',
]),
'ignore_errors' => true,
],
]));
JavaScript (Node.js, côté serveur)
const response = await fetch('https://jalonmail.com/webhooks/recipients', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.JALONMAIL_WEBHOOK_TOKEN}`,
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: JSON.stringify({
email: 'marie@example.org',
first_name: 'Marie',
last_name: 'Curie',
phase: 'Prospect',
}),
});
const data = await response.json();
Les outils d'automatisation (Zapier, Make, n8n…) utilisent la même requête : action « Webhook / HTTP », méthode POST, corps JSON.
8. Sécurité et limites
- Le jeton donne le droit d'ajouter des destinataires à votre compte : appelez le webhook depuis votre serveur, jamais depuis le navigateur de vos visiteurs, et ne le publiez pas.
- En cas de fuite, générez une nouvelle adresse depuis votre profil : l'ancienne est aussitôt refusée (404).
- Le webhook n'accède qu'aux données de votre compte (phases, usages, destinataires).
- Limite : 60 appels par minute. Au-delà, la réponse est 429.
- Un destinataire qui s'est désinscrit reste désinscrit : le webhook ne le réactive pas.