Pour le développeur web d'un client d'ADM-Concept. Aujourd'hui, votre formulaire de contact envoie un e-mail ; avec cette intégration, les mêmes données arrivent directement comme lead dans l'application qu'utilise votre client. Aucune connaissance d'ADM One n'est requise — une adresse et une clé suffisent.
Votre formulaire de contact envoie aujourd'hui un e-mail. Envoyez les mêmes données également à cette adresse, et elles apparaîtront directement dans l'application de votre client.
Une clé API, fournie par ADM-Concept. Cette clé correspond à un seul site web d'un seul client.
⚠️ La clé doit rester sur votre serveur, pas dans la page. Envoyez la requête depuis votre backend — là où vous envoyez déjà l'e-mail. Ne la placez jamais dans du JavaScript, dans le HTML ou dans un dépôt public : quiconque la lit peut écrire des leads dans l'application de votre client.
POST https://platform.digitalcloud.be/api/v1/leads
X-Api-Key: <la clé que vous avez reçue>
Content-Type: application/json
{
"name": "Jean Peeters", // recommandé
"email": "jean@peeters.be", // recommandé — sert à la déduplication
"phone": "0475 12 34 56",
"company": "Peeters Toitures",
"message": "Je souhaite un devis pour une toiture plate de 80 m².",
"subject": "Demande de devis",
"externalRef": "form-2026-08-11-00427", // votre propre référence — voir plus bas
"pageUrl": "https://bavo-saunabouw.be/contact",
"locale": "fr",
"botcheck": "", // pot de miel : laissez vide (voir plus bas)
"fields": { // tous les autres champs de votre formulaire, libres
"nombre de m²": "80",
"date de début souhaitée": "septembre",
"comment nous avez-vous connus": "Google"
}
}
Aucun champ n'est obligatoire, à condition qu'il y ait quelque chose d'exploitable : au moins un parmi
email, phone ou message. Un envoi entièrement vide est refusé.
N'adaptez pas votre formulaire à ce schéma. Vous avez des champs qui n'y figurent pas — placez-les
simplement dans fields. Cette liste est transmise telle quelle jusque dans l'application. Vous ne devez rien
supprimer ni renommer.
externalRef — envoyez-en uneVotre propre référence pour cet envoi : un numéro d'ordre, un uuid, ce que vous voulez, pour autant qu'elle soit
unique par envoi. Si vous envoyez deux fois la même externalRef (une nouvelle tentative après un
dépassement de délai, un double-clic du visiteur), vous recevez la même réponse et aucun deuxième lead n'est
créé. Sans externalRef, nous en générons une à partir du contenu, mais c'est moins fiable.
Vous n'avez pas besoin d'envoyer une source — et vous ne le pouvez pas. Chaque envoi porte automatiquement le nom de votre clé comme source : si votre clé s'appelle « formulaire de contact site principal », votre client le voit sur chaque lead qui passe par là.
Pourquoi ainsi ? Sinon ce champ serait rempli par celui qui envoie, et la question « quel canal amène des clients » ne pourrait plus recevoir de réponse fiable. Un seul formulaire qui transmet par erreur une valeur incorrecte, et toute la remontée de chiffres est faussée.
Vous avez plusieurs formulaires ? Demandez alors une clé par formulaire — site principal, page de campagne, demande de devis. C'est exactement l'usage prévu, et cela ne coûte rien de plus. Votre client voit alors d'où vient chaque lead, et révoquer une clé n'affecte que ce formulaire-là.
Si vous envoyez malgré tout un champ source, il atterrit simplement dans fields — il n'écrase pas la source.
| Code | Signification | Que faire |
|---|---|---|
202 |
Accepté | Affichez votre message de remerciement habituel |
400 |
Contenu inexploitable (tout est vide, ou JSON invalide) | À vérifier ; réessayer n'aide pas |
401 |
Clé absente ou incorrecte | Contrôlez l'en-tête X-Api-Key |
413 |
Trop volumineux (plus de 64 Ko) | Raccourcissez le message ; les pièces jointes ne sont pas possibles |
429 |
Trop de requêtes | Attendez et réessayez (voir Retry-After) |
5xx |
Problème chez nous | Vous pouvez réessayer plus tard |
// 202
{ "accepted": true, "id": "9f1c…" }
Surtout les premiers mois. Si notre service est momentanément indisponible ou si la clé est incorrecte, cet envoi est autrement perdu — et personne ne s'en aperçoit, car un lead qui n'existe pas ne réclame rien. Laissez votre formulaire envoyer l'e-mail comme aujourd'hui et considérez cet appel comme un complément. Si tout fonctionne pendant des mois, votre client pourra décider d'abandonner l'e-mail.
Ne laissez jamais cet envoi bloquer la page de remerciement : si l'appel échoue, affichez simplement votre confirmation habituelle. Le visiteur n'y peut rien.
Placez dans votre formulaire un champ qu'un humain ne remplit jamais (masqué en CSS, pas en type="hidden") et
envoyez son contenu sous botcheck. S'il contient quelque chose, c'est un robot : nous répondons alors 202
mais ne créons aucun lead. Un robot ne doit pas apprendre qu'il a été détecté.
$payload = [
'name' => $_POST['nom'] ?? '',
'email' => $_POST['email'] ?? '',
'phone' => $_POST['tel'] ?? '',
'message' => $_POST['message'] ?? '',
'botcheck' => $_POST['website'] ?? '', // le champ masqué
'externalRef' => bin2hex(random_bytes(12)),
'pageUrl' => 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
'fields' => ['date de début souhaitée' => $_POST['date_debut'] ?? ''],
];
$ch = curl_init('https://platform.digitalcloud.be/api/v1/leads');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-Api-Key: ' . LEADS_API_KEY],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5, // court : le visiteur ne doit pas attendre
]);
curl_exec($ch); // peut échouer — l'e-mail ci-dessous reste
curl_close($ch);
mail($destinataire, $sujet, $texte); // continuez à le faire pour l'instant
curl -i -X POST https://platform.digitalcloud.be/api/v1/leads \
-H "X-Api-Key: <clé>" -H "Content-Type: application/json" \
-d '{"name":"Test","email":"test@example.be","message":"Test depuis le site","externalRef":"test-1"}'
Attendez-vous à 202. Renvoyez la même externalRef : de nouveau 202, et l'application ne contient toujours
qu'un seul lead.
Ce que vous transmettez sont des données à caractère personnel d'un visiteur. N'envoyez que ce qui figurait dans le formulaire — pas d'adresses IP, pas d'identifiants de cookies, pas de données de suivi. ADM One conserve l'envoi temporairement : dès que l'application de votre client l'a récupéré, il est supprimé chez nous — les envois confirmés sont effacés après 30 jours. Un envoi que l'application ne récupère jamais reste conservé ; il n'appartient encore à personne. Mentionnez le formulaire dans la déclaration de confidentialité du site.
Contactez ADM-Concept via support@adm-concept.be. Précisez de quel client et de quel site web il s'agit ; la clé est liée à ce site précis.
Cette page décrit l'intégration telle qu'elle est en ligne aujourd'hui. Aucune version de ce document ne circulera qui pourrait devenir obsolète — enregistrez le lien plutôt que de copier le texte.
ADM-Concept · support@adm-concept.be