Naar de inhoud

API-documentatie

v1.0.0

Events

Webhooks krijgen events van dossiers die een teamlid volgt en waarvoor webhooklevering aan staat, plus nieuwe faillissementen en portefeuilletreffers.

Events
EventWanneer
case.createdNieuw faillissement of nieuwe surseance
case.status_changedOpheffing, beëindiging of andere statuswijziging
report.publishedNieuw of vervangen openbaar verslag
report.processedHet verslag is verwerkt; wijzigingen zijn beschikbaar
value.correctedEen gegeven is gecorrigeerd na een melding
value.conflictBronnen spreken elkaar tegen over een gegeven
portfolio.hitEen KvK-nummer uit uw portefeuille is failliet (alleen exacte matches)
auction.linkedEen 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.