API & webhooks voor je eigen platform
Dit is de developer-facing laag van het besturingssysteem voor leadgeneratoren. Met een heldere REST API lever je aanvragen aan, lees je leads en status uit en stuur je accounts van je eigen leadnetwerk programmatisch aan. Met webhooks ontvang je elke belangrijke gebeurtenis realtime op je eigen endpoint: ondertekend, herhaalbaar en idempotent.
Wat OXIAE bijzonder maakt: bij elke call en elk event reizen herkomst en toestemming standaard mee, met een volledige audit trail. Je bouwt dus niet alleen sneller op je eigen platform, maar levert ook een aantoonbaar AVG-conforme datastroom op, zonder dat je daar zelf extra infrastructuur voor hoeft te bouwen.
Wat de REST API doet
De OXIAE API is een voorspelbare REST-API met JSON over HTTPS, duidelijke resources en heldere foutmeldingen. Je gebruikt dezelfde API voor de publisher-kant en de buyer-kant van je platform, of je nu leads laat aanleveren of laat ontvangen. Onder de motorkap draaien drie kern-resources.
Leads
Het hart van de API. Maak, lees en update aanvragen, inclusief contactgegevens, herkomst en het consent-bewijs dat bij elke lead hoort.
GET /v1/leads
Status
Volg de levenscyclus van een lead: ontvangen, geverifieerd, gematcht, geaccepteerd of afgewezen. Elke statuswijziging is terug te lezen in de audit trail.
GET /v1/leads/{id}/status
Accounts
Beheer labels, afnemers en publishers programmatisch. Stuur routing, scopes en webhook-abonnementen aan vanuit je eigen systeem.
GET /v1/accounts
Lever je vooral aan, dan is de Supply API je startpunt. Ontvang je leads, kijk dan naar de Demand API. De volledige referentie staat in de documentatie.
Authenticatie
Je kiest de authenticatie die bij je koppeling past. In beide gevallen werk je met scopes en met aparte sleutels per omgeving, zodat je nooit per ongeluk testverkeer en productie door elkaar haalt.
Bearer API-key
De snelste route voor server-to-server-koppelingen. Stuur je key mee als Authorization: Bearer sk_live_…. Keys zijn scoped en per omgeving (sk_test_ voor sandbox, sk_live_ voor productie).
OAuth 2.0
Voor koppelingen waarbij een gebruiker namens een account toegang verleent. Doorloop de OAuth-flow, ontvang een access token en ververs het met een refresh token, met dezelfde scopes als een API-key.
Sandbox vs. live
Elke omgeving heeft eigen keys en eigen data. In de sandbox stuur je onbeperkt testleads zonder gevolgen; pas als alles klopt schakel je over op je live-key.
Stappen, scopes en token-lifetimes lees je in de documentatie. Een gelekte key trek je direct in vanuit je dashboard, zonder andere koppelingen te raken.
Kern-endpoints
Een handvol endpoints dekt het overgrote deel van wat je nodig hebt. Alles is gepagineerd, filterbaar en geeft heldere HTTP-statuscodes terug.
| Methode | Endpoint | Wat het doet |
|---|---|---|
| POST | /v1/leads | Lever een nieuwe aanvraag aan, met contact, herkomst en consent in één call. Geeft een lead-id en de eerste status terug. |
| GET | /v1/leads | Haal een gepagineerde lijst van leads op. Filter op status, label, periode of afnemer met query-parameters. |
| GET | /v1/leads/{id} | Lees één lead volledig uit, inclusief het complete consent- en herkomstobject en de bijbehorende audit-events. |
| GET | /v1/leads/{id}/status | Vraag de actuele status van een lead op zonder de hele payload te laden: handig voor polling als alternatief op webhooks. |
| GET | /v1/accounts | Bekijk je labels, afnemers en publishers, met de routing- en scope-instellingen die per account gelden. |
| POST | /v1/webhooks | Registreer of beheer een webhook-endpoint en abonneer het op de events die je nodig hebt. |
Webhooks & events
In plaats van te pollen, laat je OXIAE je systemen realtime op de hoogte houden. Registreer een endpoint, abonneer het op de events die je nodig hebt en ontvang een ondertekende payload zodra er iets gebeurt.
Een nieuwe aanvraag is binnengekomen en heeft de eerste validatie doorstaan.
De toestemming van de aanvrager is geregistreerd met tekst, tijdstip, IP en bron.
De lead is via de routingregels gekoppeld aan een afnemer.
Een uitbetaling of acceptatie is afgerond en geboekt in de audit trail.
Betrouwbare aflevering
Een webhook is pas waardevol als hij aankomt, klopt en niet dubbel verwerkt wordt. Daarom zijn ondertekening, retries, idempotentie en rate limits ingebouwd: je hoeft die complexiteit niet zelf op te lossen.
Ondertekend met HMAC-SHA256
Elke webhook draagt de header X-OXIAE-Signature met een HMAC-SHA256-handtekening over de ruwe payload. Verifieer die met je endpoint-secret en wijs alles af wat niet klopt.
Retries met exponentiële backoff
Antwoordt je endpoint niet met een 2xx, dan herhalen we de aflevering met groeiende tussenpozen (enkele seconden tot enkele uren) gedurende 24 uur, voordat de levering als mislukt wordt gemarkeerd.
Idempotentie via event_id
Elke gebeurtenis draagt een uniek event_id. Sla verwerkte id’s op en negeer herhalingen, zodat een retry nooit tot dubbele verwerking leidt.
Rate limits
De API hanteert een ruime limiet per API-key. Bij overschrijding krijg je een 429 met een Retry-After-header; respecteer die en val terug op exponentiële backoff.
Zo ziet het eruit in code
Drie concrete voorbeelden uit je eigen platform: je levert een lead aan met consent en herkomst, je ontvangt een ondertekende webhook, en je verifieert die handtekening voordat je de payload vertrouwt.
# Een nieuwe lead aanleveren via de REST API
curl -X POST https://api.oxiae.com/v1/leads \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{
"contact": {
"naam": "Sanne de Vries",
"email": "sanne@example.nl",
"telefoon": "+31 6 12345678"
},
"herkomst": {
"bron": "google-ads",
"campagne": "rechtsbijstand-q2",
"label": "juridisch-loket",
"landingspagina": "https://aanvraag.example.nl/start"
},
"consent": {
"gegeven": true,
"tekst": "Ik geef toestemming om contact met mij op te nemen.",
"tijdstip": "2026-06-26T09:41:07Z",
"ip": "84.12.x.x"
}
}'
# Antwoord
{
"id": "lead_8f21",
"status": "ontvangen",
"ontvangen_op": "2026-06-26T09:41:08Z"
} // Inkomende webhook op jouw endpoint
// Headers:
// X-OXIAE-Event: match.gevonden
// X-OXIAE-Signature: sha256=3a7f…b2e1
// X-OXIAE-Delivery: dlv_77c0
{
"event_id": "evt_5c93",
"type": "match.gevonden",
"aangemaakt": "2026-06-26T09:41:12Z",
"data": {
"lead_id": "lead_8f21",
"afnemer_id": "afn_204",
"herkomst": {
"bron": "google-ads",
"campagne": "rechtsbijstand-q2"
},
"consent": {
"gegeven": true,
"tijdstip": "2026-06-26T09:41:07Z"
}
}
} // Verifieer de handtekening voordat je de payload vertrouwt (Node.js)
import crypto from "node:crypto";
function verifieer(ruwePayload, handtekening, secret) {
const verwacht = "sha256=" + crypto
.createHmac("sha256", secret)
.update(ruwePayload, "utf8")
.digest("hex");
// Constante-tijd-vergelijking tegen timing-aanvallen
return crypto.timingSafeEqual(
Buffer.from(verwacht),
Buffer.from(handtekening)
);
}
// in je handler:
// const ok = verifieer(req.rawBody, req.header("X-OXIAE-Signature"), secret);
// if (!ok) return res.status(401).end(); Zo bouw je je eerste koppeling
Van nul naar live in vier overzichtelijke stappen. Je begint altijd in de sandbox en schakelt pas over op je live-key als alles klopt.
API-key aanmaken
Genereer in je dashboard een scoped API-key voor de sandbox (sk_test_…). Kies de scopes die je koppeling nodig heeft (alleen lezen, alleen leveren, of beide).
Eerste call doen
Stuur een POST naar /v1/leads of een GET naar /v1/leads met je Bearer-key. Je ziet direct de JSON-respons, inclusief lead-id, status en de herkomst- en consent-velden.
Webhook-endpoint registreren
Registreer je endpoint via POST /v1/webhooks en abonneer het op de events die je nodig hebt. Bewaar het endpoint-secret om de X-OXIAE-Signature te verifiëren.
Live gaan
Werkt alles in de sandbox? Wissel je sk_test_-key in voor je sk_live_-key en zet de koppeling live. Vanaf dat moment stromen aanvragen realtime door, met retries en audit trail als vangnet.
Herkomst & consent reizen mee over de API
Op dit kanaal is compliance geen apart spoor maar onderdeel van het datamodel. Elke lead-resource draagt een herkomst- en een consent-object, en elk event dat je via een webhook ontvangt bevat dezelfde context.
Bij aanleveren
Stuur je consent (tekst, tijdstip, IP) en herkomst (bron, campagne, label) mee in de POST. OXIAE valideert ze en weigert een lead zonder geldige toestemming.
Bij ontvangen
Lees je een lead of event uit, dan zit het volledige consent-bewijs in de payload. Je hoeft het nergens apart op te halen of te reconstrueren.
Aantoonbaar
Elke call en aflevering wordt gelogd. Via de audit trail toon je achteraf precies aan wat er met een lead gebeurde.
Meer over de juridische basis lees je bij consent & herkomst en de exacte velddefinities in de documentatie.
Beveiliging
Een koppeling is zo veilig als haar zwakste schakel. Daarom zijn versleuteling, toegangscontrole en logging in OXIAE de standaard, niet iets wat je zelf moet aanzetten.
Versleuteld over TLS
Al het API- en webhook-verkeer verloopt uitsluitend over TLS 1.2 of hoger. Onversleutelde verbindingen worden geweigerd, zodat data nooit leesbaar over de lijn gaat.
IP-allowlisting
Beperk inkomend API-verkeer tot je eigen vertrouwde IP-adressen en ontvang webhooks van een vast, gepubliceerd IP-bereik dat je in je firewall kunt allowlisten.
Scoped, intrekbare keys
Geef elke koppeling alleen de scopes die ze nodig heeft (alleen lezen, alleen leveren, of beide) per omgeving. Trek een gelekte key direct in zonder andere koppelingen te raken.
Alles in de audit trail
Elke call, statuswijziging en webhook-aflevering wordt gelogd. Zo kun je achteraf precies aantonen wat er met een lead is gebeurd, inclusief herkomst en consent.
API-documentatie
Volledige referentie, schema’s, authenticatie en voorbeeldcode.
Open de docsSupply API
Alles om als publisher aanvragen aan te leveren, met consent en herkomst.
Naar Supply APIDemand API
Alles om als afnemer leads te ontvangen, te accepteren en te verwerken: voor de buyer-kant van je platform.
Naar Demand APIVeelgestelde vragen over de API & webhooks
De vragen die ontwikkelaars het vaakst stellen bij het bouwen op OXIAE.
Welke authenticatie ondersteunt de API?
Server-to-server koppel je met een scoped Bearer API-key (Authorization: Bearer sk_live_…). Voor koppelingen waarbij een gebruiker namens een account toegang verleent, gebruik je OAuth 2.0 met access- en refresh-tokens. In beide gevallen werk je met scopes en met aparte sleutels voor sandbox en live.
Wat is het verschil tussen de sandbox en de live-omgeving?
De sandbox (keys met prefix sk_test_) heeft eigen data en gevolgen-vrije testleads, zodat je onbeperkt kunt experimenteren. Pas als alles klopt wissel je in voor je live-key (sk_live_). Je haalt zo nooit per ongeluk testverkeer en productie door elkaar.
Hoe weet ik zeker dat een webhook echt van OXIAE komt?
Elke webhook draagt de header X-OXIAE-Signature met een HMAC-SHA256-handtekening over de ruwe payload. Bereken dezelfde handtekening met je endpoint-secret en vergelijk in constante tijd. Klopt hij niet, antwoord dan met 401 en negeer de payload.
Wat gebeurt er als mijn endpoint tijdelijk niet bereikbaar is?
Krijgen we geen 2xx terug, dan herhalen we de aflevering met exponentiële backoff gedurende 24 uur. Elke gebeurtenis draagt een uniek event_id; bewaar verwerkte id’s en negeer herhalingen, zodat een retry nooit tot dubbele verwerking leidt.
Reizen herkomst en consent ook echt mee via de API?
Ja. Elke lead-resource draagt een herkomst- en een consent-object, en elk webhook-event bevat dezelfde context. Bij aanleveren weigert OXIAE een lead zonder geldige toestemming; bij ontvangen zit het volledige consent-bewijs (tekst, tijdstip, IP) al in de payload.
Zijn er rate limits?
Ja, er geldt een ruime limiet per API-key. Bij overschrijding krijg je een 429 met een Retry-After-header. Respecteer die en val terug op exponentiële backoff. De exacte limieten staan in de documentatie.
Kan ik webhooks gebruiken in plaats van polling?
Dat raden we aan. Registreer een endpoint via POST /v1/webhooks en abonneer het op de events die je nodig hebt (lead.ontvangen, consent.vastgelegd, match.gevonden, payout.verwerkt). Wil je toch pollen, dan kan dat via GET /v1/leads/{id}/status.
Bouw vandaag nog je eerste koppeling
Maak een sandbox-key aan, doe je eerste call en ga live met herkomst en consent standaard meegeleverd, of plan een demo en zie hoe de API in het platform werkt.