Ga naar hoofdinhoud

Webhooks

Selgeo stuurt real-time HTTP POST-meldingen naar uw server wanneer er gebeurtenissen in uw account plaatsvinden. Gebruik webhooks om workflows te automatiseren, zoals toegang verlenen wanneer een partner wordt goedgekeurd, commissies synchroniseren met uw boekhoudsysteem of uw team waarschuwen voor fraude.

Alle webhook-payloads gebruiken API-versie v1.

Eindpuntregistratie

Registreer webhook-eindpunten op de pagina Instellingen > Webhooks in het verkopersdashboard.

  1. Klik op Eindpunt toevoegen.
  2. Voer de URL in waar u gebeurtenissen wilt ontvangen. Live-modus-eindpunten moeten HTTPS gebruiken.
  3. Selecteer de gebeurtenissen waarop u zich wilt abonneren.
  4. Klik op Aanmaken. Uw ondertekeningsgeheim (whsec_...) wordt eenmalig weergegeven — kopieer het en bewaar het veilig.

Handtekeningverificatie

Elk webhookverzoek bevat een X-Selgeo-Signature-header:

t=<unix_timestamp>,v1=<hmac_hex>

De HMAC wordt berekend als HMAC-SHA256(signing_secret_bytes, "<timestamp>.<raw_json_body>").

Verificatievoorbeelden

import crypto from 'node:crypto';

function verifyWebhookSignature(signingSecret, signatureHeader, rawBody) {
if (!signatureHeader) return false;

const rawSecret = signingSecret.replace(/^whsec_/, '');
const secretBytes = Buffer.from(rawSecret, 'hex');

const parts = Object.fromEntries(
signatureHeader.split(',').map((part) => part.split('=', 2))
);

const timestamp = parts.t;
const receivedHmac = parts.v1;

if (!timestamp || !receivedHmac) return false;

const age = Math.floor(Date.now() / 1000) - parseInt(timestamp, 10);
if (age > 300 || age < -30) return false;

const expectedHmac = crypto
.createHmac('sha256', secretBytes)
.update(`${timestamp}.${rawBody}`)
.digest('hex');

const receivedBuf = Buffer.from(receivedHmac, 'hex');
const expectedBuf = Buffer.from(expectedHmac, 'hex');
if (receivedBuf.length !== expectedBuf.length) return false;
return crypto.timingSafeEqual(receivedBuf, expectedBuf);
}

Gebeurteniscatalogus

Partnergebeurtenissen

GebeurtenisBeschrijving
participant.createdEen nieuwe partner heeft een aanvraag ingediend of is toegevoegd aan een programma
participant.approvedEen partner is goedgekeurd
participant.rejectedEen partneraanvraag is afgewezen
participant.suspendedEen actieve partner is geschorst
participant.reinstatedEen geschorste partner is hersteld
participant.erasedDe gegevens van een partner zijn gewist (AVG)

Attributiegebeurtenissen

GebeurtenisBeschrijving
attribution.createdEen klik is toegeschreven aan een partner
attribution.convertedEen toegeschreven klik heeft geleid tot een conversie
attribution.expiredEen attributievenster is verlopen zonder conversie

Conversiegebeurtenissen

GebeurtenisBeschrijving
conversion.createdEen nieuwe conversie is geregistreerd
conversion.fraud_detectedFraude is gedetecteerd (zelf-referral of dubbele conversie)

Commissiegebeurtenissen

GebeurtenisBeschrijving
commission.createdEen nieuwe commissie is berekend
commission.approvedEen commissie is goedgekeurd voor uitbetaling
commission.rejectedEen commissie is afgewezen
commission.refundedEen commissie is teruggedraaid vanwege een terugbetaling

Beleid voor opnieuw proberen

Als uw eindpunt een niet-2xx-statuscode retourneert of het verzoek een time-out heeft (30 seconden), probeert Selgeo het opnieuw met exponentiële vertraging:

PogingVertraging na mislukking
1e poging1 minuut
2e poging2 minuten
3e poging4 minuten
4e poging15 minuten

Na 5 pogingen totaal gaat de bezorging naar de dead-letter-status.

Beste praktijken

  • Snel 200 retourneren. Verwerk de gebeurtenis asynchroon in een achtergrondtaak.
  • Duplicaten verwerken. Gebruik het veld event_id voor deduplicatie.
  • Handtekeningen verifiëren. Verifieer altijd de X-Selgeo-Signature-header.
  • HTTPS gebruiken in productie. Live-modus-eindpunten vereisen HTTPS.