Naar de inhoud
Integraties

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.

AVG / GDPR Data in de EU Volledige audit trail

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.

lead.ontvangen

Een nieuwe aanvraag is binnengekomen en heeft de eerste validatie doorstaan.

consent.vastgelegd

De toestemming van de aanvrager is geregistreerd met tekst, tijdstip, IP en bron.

match.gevonden

De lead is via de routingregels gekoppeld aan een afnemer.

payout.verwerkt

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.

Lead aanleveren (request + payload) REST
# 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"
}
Ondertekende webhook-payload Webhook
// 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"
    }
  }
}
Handtekening verifiëren Node.js
// 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.

01

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

02

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.

03

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.

04

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.

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