Webhooks
Les webhooks vous poussent les changements au lieu de vous faire interroger l’API. Abonnez un webhook à une ou plusieurs entreprises : CompanyBelgium envoie (POST) un événement signé à votre URL dès qu’une fiche surveillée change. Vous les créez et les gérez via l’API Webhooks.
Fonctionnement#
- Créez un webhook avec une
urlcible et les numéros d’entité à surveiller. - Conservez le
hmacSecretrenvoyé à la création — il n’est affiché qu’une seule fois. - Nous envoyons (POST) un événement JSON à votre URL à chaque changement ; répondez vite en
2xxpour l’accuser.
Charge utile de l’événement#
{
"eventId": "evt_001",
"type": "enterprise.updated",
"entityNumber": "0403.170.701",
"occurredAt": "2026-06-05T09:00:00.000Z",
"data": { "changed": ["address", "denomination"] }
}Vérifier la signature#
Chaque livraison porte un en-tête X-CompanyBelgium-Signature de la forme sha256=<hex> — le HMAC-SHA256 du corps brut de la requête, signé avec votre secret de webhook. Recalculez-le sur le corps brut et comparez en temps constant avant de faire confiance à l’événement.
import crypto from "node:crypto";
// Express handler — needs the RAW request body
export function handleWebhook(req, res) {
const header = req.header("X-CompanyBelgium-Signature"); // "sha256=<hex>"
const signature = (header || "").replace(/^sha256=/, "");
const expected = crypto
.createHmac("sha256", process.env.WEBHOOK_SECRET) // whsec_...
.update(req.rawBody)
.digest("hex");
const ok = signature.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!ok) return res.status(401).end();
const event = JSON.parse(req.rawBody);
// ... process event, then ack quickly
res.status(200).end();
}Réessais & journal de livraison#
Les livraisons en échec (non-2xx ou timeout) sont réessayées avec un backoff exponentiel. Les 100 dernières tentatives sont disponibles via l’endpoint du journal de livraison, et vous pouvez envoyer un événement de test à tout moment.
Traitez le secret HMAC comme un mot de passe. En cas de fuite, faites-le tourner depuis l’API Webhooks — l’ancien secret cesse immédiatement d’être valide.
Créer un webhook#
curl -X POST https://companybelgium.be/api/v2/webhook \
-H "X-API-Key: $API_KEY" -H "X-API-Secret: $API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"name": "Prod listener",
"url": "https://example.be/hooks/bce",
"entityNumbers": ["0403.170.701"]
}'