CompanyBelgium

API v2 : Reference Data, validation TVA et webhooks temps réel

La v2 de l'API Company Belgium ajoute des endpoints de Reference Data (NACE, formes juridiques), la validation TVA belge, un scoring de risque de paiement et des webhooks signés HMAC.

19 avril 20268 min de lecture

En bref

L'API Company Belgium v2 introduit quatre nouveautés structurantes : des endpoints Reference Data pour les codes NACE et formes juridiques (conçus pour le cache client), la validation de numéro TVA belge en temps réel, un scoring de risque de paiement 0-100, et des webhooks signés HMAC-SHA256 pour recevoir les événements BCE en push plutôt qu'en polling. La v1 reste supportée jusqu'à fin 2026.

Pourquoi une v2 ?

Notre API BCE v1 a tenu sa promesse : exposer proprement les données BCE/KBO et les enrichissements Company Belgium. Mais l'usage nous a appris deux choses : les intégrateurs veulent du push plutôt que du polling, et ils veulent des référentiels stables plutôt qu'à chaque appel un paquet de codes à traduire.

La v2 est disponible en parallèle de la v1. Elle introduit quatre nouveautés structurantes : Reference Data, validation TVA, scoring de risque et webhooks.

Reference Data

Les codes NACE, les formes juridiques et les groupes d'activité sont désormais accessibles via des endpoints dédiés :

  • GET /api/v2/reference/nace-codes?lang=fr
  • GET /api/v2/reference/juridical-forms?lang=nl
  • GET /api/v2/reference/activity-groups?lang=en

Ces tables changent rarement. Elles sont conçues pour être cachées côté client (ETag + Cache-Control 24 h fournis). Vous ne demandez plus « décrivez-moi ce code » à chaque lookup d'entreprise : vous avez le dictionnaire en mémoire.

TypeScript
1
2
3
4
5
class="code-comment">// Charger les codes NACE une fois au démarrage, les cacher en mémoire
const res = await fetch(class="code-string">"https:class="code-comment">//companybelgium.be/api/v2/reference/nace-codes?lang=fr", {
  headers: { class="code-string">"X-API-Key": key, class="code-string">"X-API-Secret": secret }
});
const naceCodes = await res.json(); class="code-comment">// { class="code-string">"62010": class="code-string">"Programmation informatique", ... }

Validation TVA belge

Endpoint très demandé :

Terminal
1
2
3
4
curl -X POST https://companybelgium.be/api/v2/vat/validate \
  -H "X-API-Key: pk_live_..." \
  -H "X-API-Secret: sk_live_..." \
  -d '{"vatNumber": "BE 0200.065.765"}'

Renvoie la version normalisée, le statut (valid / invalid / bad_format) et le numéro d'entreprise BCE associé. Utile pour valider un formulaire d'onboarding avant de créer un client en base. Ce mécanisme est aussi au coeur de notre module de facturation belge avec autoliquidation intracom.

Scoring du risque de paiement

Terminal
1
2
3
curl https://companybelgium.be/api/v2/companies/0200065765/payment-risk \
  -H "X-API-Key: pk_live_..." \
  -H "X-API-Secret: sk_live_..."

Renvoie un score 0–100 et une catégorie (low / moderate / high / critical), calculés à partir de signaux agrégés : âge de l'entreprise, taille, secteur, situation comptable, événements BCE récents.

Un widget front prêt à l'emploi est également disponible pour intégrer visuellement l'information dans votre back-office sans tout construire.

Webhooks temps réel

La nouveauté la plus structurante. Abonnez-vous à des événements :

  • company.updated
  • company.status_changed
  • company.filing_deposited
  • establishment.created
  • establishment.closed

Chaque événement part en POST vers votre URL, signé en HMAC SHA-256 avec un secret partagé. En-tête X-Espero-Signature.

TypeScript
1
2
3
4
5
6
7
8
9
import crypto from class="code-string">"crypto";

function verify(rawBody: string, signature: string, secret: string) {
  const expected = crypto
    .createHmac(class="code-string">"sha256", secret)
    .update(rawBody)
    .digest(class="code-string">"hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

Retry exponentiel jusqu'à 24 h, page d'admin pour rejouer manuellement un événement en cas d'échec côté consommateur. Pour un guide complet sur les webhooks et leur sécurisation, lisez notre article sur les webhooks et notifications en temps réel.

Authentification et quotas

L'auth reste basée sur une paire clé publique + secret (pk_live_... / sk_live_...), inchangée depuis la v1. Les quotas sont plus généreux sur la v2, et le compteur est visible en temps réel dans votre tableau de bord.

Migration depuis la v1

La v1 reste supportée jusqu'à fin 2026. Pour la majorité des cas :

  • Remplacer /api/ par /api/v2/ dans vos URLs.
  • Ajouter l'en-tête Accept: application/json (recommandé).
  • Revoir les réponses enrichies (plus de champs par défaut, pas moins).

Un guide de migration détaillé sera publié au prochain sprint. En attendant, consultez le guide d'intégration de l'API BCE dans une application et notre référence des endpoints REST pour les détails des routes v2.

Questions fréquentes

Quelle est la différence entre l'API BCE v1 et la v2 de Company Belgium ?

La v1 couvre l'identité des entreprises belges : numéro BCE, dénomination, adresse, NACE, statut. La v2 ajoute quatre couches supplémentaires : des endpoints Reference Data pour les codes NACE et formes juridiques avec cache client 24 h, la validation de numéro TVA belge en temps réel, un scoring de risque de paiement 0-100, et des webhooks signés HMAC-SHA256. Les deux versions fonctionnent en parallèle et partagent le même mécanisme d'authentification.

Comment fonctionne la validation de numéro TVA belge via l'API v2 ?

Envoyez une requête POST à /api/v2/vat/validate avec le numéro TVA à tester. L'endpoint normalise le format, vérifie la structure belge et retourne le statut valid, invalid ou bad_format ainsi que le numéro d'entreprise BCE associé. Tant que le numéro n'est pas valide, la facture reste en brouillon dans le module de facturation Company Belgium.

Que sont les Reference Data dans l'API BCE v2 et pourquoi les mettre en cache ?

Les Reference Data sont trois tables de référence stables : les codes NACE avec descriptions en FR/NL/EN, les formes juridiques et les groupes d'activité. Elles sont accessibles via des endpoints dédiés avec un en-tête Cache-Control de 24 heures et un ETag. L'idée est de charger ces tables une seule fois au démarrage de l'application et de les garder en mémoire plutôt que de redemander la traduction d'un code à chaque lookup d'entreprise.

Comment sécuriser la réception des webhooks BCE envoyés par l'API v2 ?

Chaque webhook part en POST vers votre URL avec un en-tête X-Espero-Signature contenant un HMAC-SHA256 du corps calculé avec votre secret partagé. Côté récepteur, recalculez le HMAC du corps brut reçu et comparez avec la signature de l'en-tête via crypto.timingSafeEqual pour éviter les attaques en timing. Un retry exponentiel jusqu'à 24 heures garantit la livraison en cas d'indisponibilité temporaire de votre endpoint.

Prêt à commencer ?

Créez votre compte gratuitement et obtenez vos clés API en quelques minutes.

Commentaires

Chargement des commentaires…

Laisser un commentaire

Non publié — sert uniquement à vous notifier.

Les commentaires sont modérés avant publication.

Articles similaires