API, webhooks en MCP
Gegevens ophalen met de REST API, gebeurtenissen ontvangen met webhooks en Leadspotr koppelen aan AI-assistenten.
Met de API, webhooks en MCP koppel je Leadspotr aan je eigen systemen en aan AI-assistenten. Je beheert ze bij /admin/developers. De volledige documentatie staat in de app, onder Documentatie op die pagina.
Een token maken
Voor de API en MCP heb je een token nodig. Een token hoort bij je workspace.
- Ga naar /admin/developers.
- Vul een naam in, bijvoorbeeld CRM-sync.
- Kies de rechten (scopes) die nodig zijn:
| Recht | Wat |
|---|---|
companies:read |
Bedrijven en bedrijfskaarten lezen |
visits:read |
Bezoeken lezen |
leads:read |
Leads lezen (persoonsgegevens) |
leads:write |
Leads aanmaken (identify) |
sites:read |
Sites, snippet en trackingdomein lezen |
sites:write |
Sites en trackingdomein beheren |
- Klik op Token maken en kopieer het token. Je ziet het maar één keer.
Geef een token alleen de rechten die echt nodig zijn. Met Intrekken maak je een token direct ongeldig. Alleen de eigenaar van de workspace kan tokens maken en intrekken.
REST API
- Base URL:
https://app.leadspotr.nl/api/v1 - Authenticatie:
Authorization: Bearer <token>enAccept: application/json - Limiet: 120 verzoeken per minuut per workspace
Endpoints
| Endpoint | Recht | Wat |
|---|---|---|
GET /me |
– | Workspace en rechten van het token |
GET /companies |
companies:read |
Herkende bedrijven met bezoeken, pagina's en score. Standaard de laatste 7 dagen. Filters: from, to, confidence=high|medium, per_page. |
GET /companies/{id} |
companies:read |
Bedrijfskaart met de bezoeken in je workspace |
GET /companies/lookup?domain=… |
companies:read |
Bedrijfskaart op domein. Onbekend: 202, de kaart wordt gemaakt. Probeer het later opnieuw. |
GET /visits |
visits:read |
Bezoeken met kanaal, campagne en pagina's. Standaard vandaag. Filters: from, to, company_id, identified=1. |
GET /leads, GET /leads/{id} |
leads:read |
Leads. Filter: updated_since. |
POST /identify |
leads:write |
Lead aanmaken of bijwerken, bijvoorbeeld vanuit je CRM |
GET /sites, GET /sites/{id} |
sites:read |
Sites met snippet, installatiestatus en trackingdomein |
POST /sites, PATCH /sites/{id} |
sites:write |
Site aanmaken of wijzigen, binnen de sitelimiet van je plan |
PUT /sites/{id}/tracking-domain |
sites:write |
Eigen trackingdomein instellen. null haalt het weg. |
POST /sites/{id}/tracking-domain/check |
sites:write |
Trackingdomein opnieuw controleren |
Voorbeeld
Bedrijven met hoge betrouwbaarheid ophalen:
curl "https://app.leadspotr.nl/api/v1/companies?confidence=high" \
-H "Authorization: Bearer $LEADSPOTR_TOKEN" \
-H "Accept: application/json"
Een lead doorgeven vanuit je eigen systeem:
curl -X POST "https://app.leadspotr.nl/api/v1/identify" \
-H "Authorization: Bearer $LEADSPOTR_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "name": "Jan Jansen", "company": "Bedrijf B.V.", "form": "Webinar", "consent": true}'
consent is verplicht. Daarmee bevestig je dat deze persoon toestemming gaf.
Webhooks
Een webhook stuurt een bericht naar jouw systeem zodra er iets gebeurt. Handig voor Zapier, Make, n8n of je eigen backend.
Gebeurtenissen
| Event | Wanneer |
|---|---|
company.identified |
Bedrijf herkend (score middel of hoog), één keer per bedrijf per dag |
lead.created |
Nieuwe lead |
form.submitted |
Formulier met bedrijfsgegevens |
label.added |
Label toegekend aan een bedrijf of lead |
widget.request |
Aanvraag via de widget (bel mij, afspraak, bericht, flow, chat) |
ping |
Testbericht |
Een webhook toevoegen
- Ga naar /admin/developers, onder Webhooks.
- Vul de URL in, bijvoorbeeld
https://jouw-app.nl/webhooks/leadspotr. - Kies de events en klik op Webhook toevoegen.
- Klik op Testbericht om een
pingte sturen.
Wat je ontvangt
Elke webhook is een POST met JSON:
{
"id": "…",
"event": "company.identified",
"created_at": "…",
"workspace": "…",
"data": { … }
}
Antwoord met een 2xx-status. Anders proberen we het opnieuw, tot 5 keer: na 1, 5, 15 en 60 minuten. Na 20 mislukte afleveringen op rij gaat de webhook uit. Bij /admin/developers zie je de laatste status en hoe vaak het mislukte. Met Aanzetten zet je hem weer aan.
De handtekening controleren
Elk bericht heeft een header Leadspotr-Signature: t=<timestamp>,v1=<hmac>. De v1 is een HMAC-SHA256 met het geheim van de webhook over "<timestamp>.<ruwe body>". Het geheim vind je bij de webhook, onder Geheim voor de handtekening.
Weiger berichten met een ongeldige handtekening of een timestamp ouder dan 5 minuten. In PHP:
[$t, $v1] = sscanf($request->header('Leadspotr-Signature'), 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t.'.'.$request->getContent(), $secret);
abort_unless(hash_equals($expected, $v1) && abs(time() - $t) < 300, 401);
In Node.js:
const crypto = require('crypto');
function verify(header, rawBody, secret) {
const [, t, v1] = header.match(/t=(\d+),v1=([a-f0-9]+)/) || [];
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && v1 && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
Gebruik de ruwe body, niet de JSON nadat die is ingelezen en opnieuw opgebouwd.
MCP (AI-assistenten)
Met MCP (Model Context Protocol) kan een AI-assistent zelf in Leadspotr zoeken. Je vraagt dan bijvoorbeeld: "Welke bouwbedrijven bekeken deze week onze prijzenpagina?"
- Adres:
https://app.leadspotr.nl/mcp(Streamable HTTP) - Authenticatie: hetzelfde token als de API, als header
Authorization: Bearer <token>
Voeg in je MCP-client een server van het type HTTP toe met deze gegevens:
Naam: leadspotr
URL: https://app.leadspotr.nl/mcp
Header: Authorization: Bearer <jouw token>
Waar je dit invult, verschilt per client. Kijk in de documentatie van je AI-assistent bij MCP-servers toevoegen.
Beschikbare tools:
| Tool | Wat |
|---|---|
search_companies |
Herkende bedrijven zoeken |
get_company |
Een bedrijfskaart met bezoeken |
recent_visits |
Recente bezoeken |
list_leads |
Leads |
lookup_domain |
Een bedrijfskaart op domein |
list_sites |
Je sites |
create_site |
Een site aanmaken |
set_tracking_domain |
Een eigen trackingdomein instellen |
check_tracking_domain |
Een trackingdomein controleren |
De tools geven alleen terug wat de rechten van het token toestaan. Wil je dat de assistent alleen bedrijven ziet en geen persoonsgegevens? Maak dan een token met alleen companies:read en visits:read.
Tip: maak voor elke koppeling een eigen token. Dan zie je bij /admin/developers welk token wanneer is gebruikt, en kun je er één intrekken zonder de rest te raken.