Events
Webhooks krijgen events van dossiers die een teamlid volgt en waarvoor webhooklevering aan staat, plus nieuwe faillissementen en portefeuilletreffers.
| Event | Wanneer |
|---|---|
case.created | Nieuw faillissement of nieuwe surseance |
case.status_changed | Opheffing, beëindiging of andere statuswijziging |
report.published | Nieuw of vervangen openbaar verslag |
report.processed | Het verslag is verwerkt; wijzigingen zijn beschikbaar |
value.corrected | Een gegeven is gecorrigeerd na een melding |
value.conflict | Bronnen spreken elkaar tegen over een gegeven |
portfolio.hit | Een KvK-nummer uit uw portefeuille is failliet (alleen exacte matches) |
auction.linked | Een veiling is aan een gevolgd dossier gekoppeld |
Levering
Elke levering is een POST met JSON. De headers Faillissement-Delivery en Faillissement-Event geven het id en het event.
POST /hooks/faillissement HTTP/1.1
Content-Type: application/json
Faillissement-Delivery: 01M3MRB2Q8W5Y1T6V9X3Z7C4N0
Faillissement-Event: report.published
Faillissement-Signature: t=1790592000,v1=5f2b…9a1c
{
"id": "01M3MRB2Q8W5Y1T6V9X3Z7C4N0",
"event": "report.published",
"created_at": "2026-09-26T09:40:12+02:00",
"data": {
"case": {
"id": "01M3MR667REBMJEMXA8R6NS3YZ",
"name": "Jansen Bouw B.V.",
"kvk_number": "12345678",
"insolvency_number": "F.05/25/184",
"status": "active",
"links": { "self": "https://api.faillissement.app/api/v1/cases/01M3MR667REBMJEMXA8R6NS3YZ" }
},
"event": { "id": "01M3MR69…", "type": "report_published", "occurred_at": "2026-09-26T09:40:00+02:00", "details": {} }
}
}Handtekening controleren
De header Faillissement-Signature bevat t (Unix-tijd) en v1 (de handtekening), gescheiden door een komma. De handtekening is HMAC-SHA256 over de tijd, een punt en de ruwe body, met het geheim van de webhook. Controleer altijd de ruwe body en weiger tijdstippen ouder dan vijf minuten.
import { createHmac, timingSafeEqual } from 'node:crypto'
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(',').map(part => part.split('=')))
if (!Number.isFinite(Number(parts.t)) || !/^[a-f0-9]{64}$/.test(parts.v1 ?? '')) return false
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false
const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex')
return timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ''))
}Opnieuw afleveren
Antwoordt uw server niet binnen 10 seconden met een 2xx-status, dan proberen we het nog 5 keer, met oplopende tussenpozen tot 6 uur. Na 20 mislukte leveringen achter elkaar schakelen we de webhook uit en mailen we u. Gebruik het delivery-id om dubbele leveringen te herkennen.