NLFREN

← Alle documentatie

Contactformulier koppelen aan de toepassing van je klant

Voor de webbouwer van een klant van ADM-Concept. Je contactformulier stuurt vandaag een mail; met deze koppeling verschijnen dezelfde gegevens rechtstreeks als lead in de toepassing die je klant gebruikt. Je hebt geen kennis van ADM One nodig — één adres en één sleutel volstaan.

Je contactformulier stuurt vandaag een mail. Post dezelfde gegevens ook naar dit adres, en ze verschijnen rechtstreeks in de toepassing van je klant.

Wat je nodig hebt

Eén API-sleutel, die je van ADM-Concept krijgt. Die sleutel hoort bij één website van één klant.

⚠️ De sleutel hoort op je server, niet in de pagina. Stuur de aanvraag vanaf je backend — daar waar je nu ook de mail verstuurt. Zet hem nooit in JavaScript, in de HTML of in een publieke repository: wie hem leest, kan leads in de toepassing van je klant schrijven.

De aanroep

POST https://platform.digitalcloud.be/api/v1/leads
X-Api-Key: <de sleutel die je kreeg>
Content-Type: application/json
{
  "name": "Jan Peeters",                     // aanbevolen
  "email": "jan@peeters.be",                 // aanbevolen — hierop wordt ontdubbeld
  "phone": "0475 12 34 56",
  "company": "Peeters Dakwerken",
  "message": "Graag een offerte voor een plat dak van 80 m².",
  "subject": "Offerteaanvraag",
  "externalRef": "form-2026-08-11-00427",    // jouw eigen referentie — zie hieronder
  "pageUrl": "https://bavo-saunabouw.be/contact",
  "locale": "nl",
  "botcheck": "",                            // honeypot: laat leeg (zie verderop)
  "fields": {                                // álle andere velden van je formulier, vrij te kiezen
    "aantal m²": "80",
    "gewenste startdatum": "september",
    "hoe ken je ons": "Google"
  }
}

Geen enkel veld is verplicht behalve dat er íets bruikbaars in staat: minstens één van email, phone of message. Een volledig lege inzending wordt geweigerd.

Vorm je formulier niet naar dit schema. Heb je velden die hier niet in passen — en dat heb je — zet ze dan gewoon in fields. Die map gaat ongewijzigd mee tot in de toepassing. Je hoeft niets weg te laten en niets te hernoemen.

externalRef — stuur er één mee

Je eigen referentie voor deze inzending: een volgnummer, een uuid, wat je maar wil, zolang hij uniek is per inzending. Stuur je dezelfde externalRef twee keer (een hertry na een time-out, een dubbelklik van de bezoeker), dan krijg je hetzelfde antwoord terug en komt er geen tweede lead. Zonder externalRef maken we er zelf een op basis van de inhoud, maar dat is minder betrouwbaar.

De bron van je inzending stellen wij in

Je hoeft — en kán — geen bron mee te sturen. Elke inzending draagt automatisch de naam van je sleutel als bron: heet je sleutel "contactformulier hoofdsite", dan ziet je klant dat bij elke lead die er doorheen komt.

Waarom zo? Anders zou dat veld ingevuld worden door wie post, en dan is de vraag "welk kanaal levert klanten op" niet meer betrouwbaar te beantwoorden. Eén formulier dat per ongeluk iets verkeerds meestuurt, en de hele rapportering klopt niet meer.

Heb je meerdere formulieren? Vraag dan een sleutel per formulier — hoofdsite, campagnepagina, offerteaanvraag. Dat is precies waarvoor dit bedoeld is, en het kost niets extra. Je klant ziet dan per lead waar hij vandaan komt, en een sleutel intrekken raakt enkel dat ene formulier.

Stuur je toch een veld source of bron mee, dan belandt het gewoon in fields — het overschrijft de bron niet.

Het antwoord

Code Betekenis Wat te doen
202 Aangenomen Toon je bezoeker de gewone bedankboodschap
400 Inhoud onbruikbaar (alles leeg, of geen geldige JSON) Nakijken; opnieuw sturen helpt niet
401 Sleutel ontbreekt of klopt niet Controleer de header X-Api-Key
413 Te groot (meer dan 64 KB) Kort het bericht in; bijlagen kunnen niet
429 Te veel aanvragen Wacht en probeer opnieuw (zie Retry-After)
5xx Bij ons iets mis Later opnieuw proberen mag
// 202
{ "accepted": true, "id": "9f1c…" }

⚠️ Blijf je mail versturen

Zeker de eerste maanden. Ligt onze dienst er even uit of klopt de sleutel niet, dan is die inzending anders gewoon weg — en dat merkt niemand, want een lead die er niet is vraagt niet waarom hij ontbreekt. Laat je formulier de mail versturen zoals vandaag, en beschouw deze aanroep als een aanvulling. Als het maanden vlot loopt, kan de klant beslissen om de mail te laten vallen.

Laat je verzending ook nooit de bedankpagina blokkeren: mislukt de aanroep, toon de bezoeker dan gewoon je normale bevestiging. Hij kan er niets aan doen.

Het honeypot-veld

Zet in je formulier een veld dat een mens nooit invult (verborgen met CSS, niet met type="hidden") en stuur de inhoud mee als botcheck. Staat er iets in, dan is het een bot: wij antwoorden dan gewoon 202 maar maken geen lead aan. Een bot mag niet leren wanneer hij betrapt is.

Voorbeeld (PHP)

$payload = [
  'name'        => $_POST['naam']    ?? '',
  'email'       => $_POST['email']   ?? '',
  'phone'       => $_POST['tel']     ?? '',
  'message'     => $_POST['bericht'] ?? '',
  'botcheck'    => $_POST['website'] ?? '',      // het verborgen veld
  'externalRef' => bin2hex(random_bytes(12)),
  'pageUrl'     => 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
  'fields'      => ['gewenste startdatum' => $_POST['startdatum'] ?? ''],
];

$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,                    // kort: de bezoeker mag hier niet op wachten
]);
curl_exec($ch);                                   // resultaat mag mislukken — de mail hieronder blijft
curl_close($ch);

mail($ontvanger, $onderwerp, $tekst);             // blijf dit voorlopig doen

Testen

curl -i -X POST https://platform.digitalcloud.be/api/v1/leads \
  -H "X-Api-Key: <sleutel>" -H "Content-Type: application/json" \
  -d '{"name":"Test","email":"test@example.be","message":"Test vanaf de website","externalRef":"test-1"}'

Verwacht 202. Stuur dezelfde externalRef nog eens: opnieuw 202, en in de toepassing staat er nog steeds maar één lead.

Privacy

Wat je doorstuurt zijn persoonsgegevens van een bezoeker. Stuur enkel wat in het formulier stond — geen IP-adressen, geen cookie-id's, geen trackinggegevens. ADM One bewaart de inzending tijdelijk: zodra de toepassing van je klant ze opgehaald heeft, wordt ze bij ons gewist. Vanaf dat moment is je klant de enige die ze bijhoudt — bevestigde inzendingen worden bij ons na 30 dagen gewist. Een inzending die het platform nooit ophaalt blijft wél staan; die is nog van niemand. Vermeld het formulier in de privacyverklaring van de website.


Vragen?

Neem contact op met ADM-Concept via support@adm-concept.be. Vermeld om welke klant en welke website het gaat; de sleutel is aan die ene website gebonden.

Deze pagina beschrijft de koppeling zoals ze vandaag live staat. Er komt geen versie van dit document in omloop die kan verouderen — bookmark de link in plaats van de tekst te kopiëren.


ADM-Concept · support@adm-concept.be

Even geduld — de verbinding met de server wordt hersteld.

Nog geen verbinding. Volgende poging over seconden.

Dit gebeurt bij een update van de toepassing of bij een tijdelijk verbindingsprobleem. Zodra de server terug is, gaat uw scherm vanzelf verder.

De verbinding kon niet hersteld worden. Probeer het opnieuw of herlaad de pagina.

Deze sessie is tijdelijk gepauzeerd.

De sessie kon niet hervat worden. Probeer het opnieuw of herlaad de pagina.