NLFREN

← Toute la documentation

Connecter le formulaire de contact à l'application de votre client

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.

Ce dont vous avez besoin

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.

L'appel

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 une

Votre 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.

La source de votre envoi, c'est nous qui la définissons

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.

La réponse

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…" }

⚠️ Continuez à envoyer votre e-mail

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.

Le champ pot de miel

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é.

Exemple (PHP)

$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

Tester

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.

Vie privée

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.


Des questions ?

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

Un instant — la connexion au serveur est en cours de rétablissement.

Toujours pas de connexion. Nouvelle tentative dans secondes.

Cela se produit lors d'une mise à jour de l'application ou en cas de problème de connexion temporaire. Dès que le serveur est de retour, votre écran reprend automatiquement.

La connexion n'a pas pu être rétablie. Réessayez ou rechargez la page.

Cette session a été mise en pause.

La session n'a pas pu être reprise. Réessayez ou rechargez la page.