CompanyBelgium

Entreprise — Endpoints v2

Tous les endpoints relatifs aux entreprises belges (BCE/KBO). Chaque sous-endpoint renvoie une portion ciblée du profil entreprise, ce qui permet de minimiser la taille des réponses et d'optimiser vos appels API.

Détail complet de l'entreprise

Retourne le profil complet d'une entreprise belge : numéro BCE, statut, forme juridique, dénominations, adresses, activités NACE et contacts.

GET
/api/v2/enterprise/{num}

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE. Accepte plusieurs formats : avec points, sans points, ou avec préfixe BE.Exemple: 0200065765, 0200.065.765, BE0200065765

Exemple de requête

cURL
# Avec points
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200.065.765" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"

# Sans points
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"

# Avec préfixe BE
curl -X GET "https://companybelgium.be/api/v2/enterprise/BE0200065765" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  const enterprise = data.data;
  console.log(`Nom: ${enterprise.name}`);
  console.log(`Statut: ${enterprise.status}`);
  console.log(`Forme juridique: ${enterprise.juridicalForm}`);
  console.log(`Adresse: ${enterprise.address}`);
  console.log(`Activités: ${enterprise.activities?.length || 0}`);
  console.log(`Établissements: ${enterprise.establishments?.length || 0}`);
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    enterprise = data['data']
    print(f"Nom: {enterprise['name']}")
    print(f"Statut: {enterprise['status']}")
    print(f"Forme juridique: {enterprise.get('juridicalForm', 'N/A')}")
    print(f"Adresse: {enterprise.get('address', 'N/A')}")
    for activity in enterprise.get('activities', []):
        print(f"  - {activity['naceCode']}: {activity['description']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "enterpriseNumber": "0200.065.765",
    "vatNumber": "BE0200065765",
    "name": "Proximus",
    "shortName": "Proximus",
    "commercialName": "Proximus",
    "status": "Active",
    "statusCode": "AC",
    "type": "Personne morale",
    "typeCode": "2",
    "juridicalForm": "SA de droit public",
    "juridicalFormCode": "430",
    "startDate": "1994-01-01",
    "address": "Boulevard du Roi Albert II 27, 1030 Schaerbeek",
    "addressDetail": {
      "street": "Boulevard du Roi Albert II",
      "houseNumber": "27",
      "box": null,
      "zipcode": "1030",
      "city": "Schaerbeek",
      "country": "Belgique"
    },
    "phone": "+32 2 202 41 11",
    "mobile": null,
    "email": "info@proximus.com",
    "fax": "+32 2 203 65 93",
    "website": "https://www.proximus.be",
    "activities": [
      {
        "naceCode": "61.100",
        "description": "Télécommunications par câble",
        "classification": "Activité TVA principale"
      },
      {
        "naceCode": "61.200",
        "description": "Télécommunications sans fil",
        "classification": "Activité TVA secondaire"
      }
    ],
    "secondaryActivities": [
      {
        "naceCode": "62.090",
        "description": "Autres activités informatiques",
        "classification": "Activité NSSO secondaire"
      }
    ],
    "establishments": [
      {
        "establishmentNumber": "2.003.018.838",
        "name": "Siège social",
        "address": "Boulevard du Roi Albert II 27, 1030 Schaerbeek",
        "startDate": "1994-01-01"
      }
    ],
    "denominations": [
      {
        "type": "Dénomination sociale",
        "language": "FR",
        "value": "Proximus"
      },
      {
        "type": "Dénomination sociale",
        "language": "NL",
        "value": "Proximus"
      },
      {
        "type": "Dénomination commerciale",
        "language": "FR",
        "value": "Proximus"
      }
    ]
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0000000000 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Le numéro d'entreprise accepte trois formats : avec points (0200.065.765), sans points (0200065765), ou avec préfixe BE (BE0200065765).
  • Les entreprises inactives (status = ST) restent accessibles avec leurs données historiques complètes.
  • Les champs optionnels (shortName, commercialName, mobile, fax, etc.) sont null s'ils ne sont pas renseignés dans la BCE.
  • Les activités sont séparées en activités principales (activities) et secondaires (secondaryActivities), chacune avec leur classification BCE.

Activités NACE de l'entreprise

Retourne les activités NACE d'une entreprise, séparées en activités principales et secondaires, avec le nombre total.

GET
/api/v2/enterprise/{num}/activities

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/activities" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/activities',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  console.log(`Total activités: ${data.data.total}`);
  for (const activity of data.data.main) {
    console.log(`Principal: ${activity.naceCode} — ${activity.description}`);
  }
  for (const activity of data.data.secondary) {
    console.log(`Secondaire: ${activity.naceCode} — ${activity.description}`);
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/activities',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    print(f"Total activités: {data['data']['total']}")
    for a in data['data']['main']:
        print(f"  Principal: {a['naceCode']} — {a['description']}")
    for a in data['data']['secondary']:
        print(f"  Secondaire: {a['naceCode']} — {a['description']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "main": [
      {
        "naceCode": "61.100",
        "description": "Télécommunications par câble",
        "classification": "Activité TVA principale"
      },
      {
        "naceCode": "61.200",
        "description": "Télécommunications sans fil",
        "classification": "Activité TVA principale"
      }
    ],
    "secondary": [
      {
        "naceCode": "62.090",
        "description": "Autres activités informatiques",
        "classification": "Activité NSSO secondaire"
      },
      {
        "naceCode": "46.510",
        "description": "Commerce de gros d'ordinateurs et de logiciels",
        "classification": "Activité TVA secondaire"
      }
    ],
    "total": 4
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Les activités sont séparées en deux catégories : main (principales) et secondary (secondaires), suivant la classification BCE.
  • Chaque activité contient un code NACE, sa description en français, et sa classification (Activité TVA principale, Activité NSSO secondaire, etc.).
  • Le champ total indique le nombre total d'activités (principales + secondaires).

Adresse du siège de l'entreprise

Retourne l'adresse du siège social de l'entreprise, à la fois sous forme formatée (une seule ligne) et sous forme détaillée (champs séparés).

GET
/api/v2/enterprise/{num}/address

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/address" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/address',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  console.log(`Adresse: ${data.data.formatted}`);
  const detail = data.data.detail;
  console.log(`Rue: ${detail.street} ${detail.houseNumber}`);
  console.log(`Ville: ${detail.zipcode} ${detail.city}`);
  console.log(`Pays: ${detail.country}`);
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/address',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    print(f"Adresse: {data['data']['formatted']}")
    detail = data['data']['detail']
    print(f"Rue: {detail['street']} {detail.get('houseNumber', '')}")
    print(f"Ville: {detail['zipcode']} {detail['city']}")
    print(f"Pays: {detail['country']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "formatted": "Boulevard du Roi Albert II 27, 1030 Schaerbeek",
    "detail": {
      "street": "Boulevard du Roi Albert II",
      "houseNumber": "27",
      "box": null,
      "zipcode": "1030",
      "city": "Schaerbeek",
      "country": "Belgique"
    }
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Le champ formatted contient l'adresse en une seule ligne, prête à l'affichage.
  • Le champ detail contient les composants séparés de l'adresse (rue, numéro, boîte, code postal, ville, pays).
  • Le champ box (boîte postale) est null si non applicable.
  • Si l'entreprise n'a pas d'adresse enregistrée dans la BCE, les deux champs (formatted et detail) seront null.

Coordonnées de contact de l'entreprise

Retourne les coordonnées de contact de l'entreprise : téléphone, mobile, email, fax et site web. Tous les champs sont nullable.

GET
/api/v2/enterprise/{num}/contact

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/contact" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/contact',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  const contact = data.data;
  if (contact.phone) console.log(`Téléphone: ${contact.phone}`);
  if (contact.mobile) console.log(`Mobile: ${contact.mobile}`);
  if (contact.email) console.log(`Email: ${contact.email}`);
  if (contact.website) console.log(`Site web: ${contact.website}`);
  if (contact.fax) console.log(`Fax: ${contact.fax}`);
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/contact',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    contact = data['data']
    if contact.get('phone'):
        print(f"Téléphone: {contact['phone']}")
    if contact.get('email'):
        print(f"Email: {contact['email']}")
    if contact.get('website'):
        print(f"Site web: {contact['website']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "phone": "+32 2 202 41 11",
    "mobile": null,
    "email": "info@proximus.com",
    "fax": "+32 2 203 65 93",
    "website": "https://www.proximus.be"
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Tous les champs de contact sont nullable — ils valent null si non renseignés dans la BCE.
  • Les numéros de téléphone incluent l'indicatif international (+32 pour la Belgique).
  • Le champ website inclut le protocole (https:// ou http://).
  • Le champ fax est conservé car encore utilisé par certaines entreprises belges, notamment les administrations.

Dénominations de l'entreprise

Retourne toutes les dénominations enregistrées pour l'entreprise dans la BCE : dénomination sociale, commerciale et abrégée, dans les différentes langues (FR, NL, DE, EN).

GET
/api/v2/enterprise/{num}/denominations

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/denominations" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/denominations',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  for (const denom of data.data) {
    console.log(`[${denom.language}] ${denom.type}: ${denom.value}`);
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/denominations',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    for denom in data['data']:
        print(f"[{denom['language']}] {denom['type']}: {denom['value']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": [
    {
      "type": "Dénomination sociale",
      "language": "FR",
      "value": "Proximus"
    },
    {
      "type": "Dénomination sociale",
      "language": "NL",
      "value": "Proximus"
    },
    {
      "type": "Dénomination sociale",
      "language": "DE",
      "value": "Proximus"
    },
    {
      "type": "Dénomination commerciale",
      "language": "FR",
      "value": "Proximus"
    },
    {
      "type": "Abréviation",
      "language": "FR",
      "value": "PXS"
    }
  ],
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Les types de dénomination courants sont : Dénomination sociale, Dénomination commerciale et Abréviation.
  • Les langues possibles sont FR (français), NL (néerlandais), DE (allemand) et EN (anglais).
  • Une entreprise peut avoir plusieurs dénominations dans la même langue (ex. dénomination sociale + commerciale).
  • Les dénominations sont conservées même pour les entreprises inactives (historique complet).

Établissements de l'entreprise

Retourne la liste de tous les établissements (sièges d'exploitation) liés à cette entreprise, avec leur numéro, nom, adresse et date de début.

GET
/api/v2/enterprise/{num}/establishments

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/establishments" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/establishments',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  console.log(`Total établissements: ${data.data.total}`);
  for (const estab of data.data.items) {
    console.log(`${estab.establishmentNumber} — ${estab.name ?? 'Sans nom'}`);
    console.log(`  Adresse: ${estab.address}`);
    console.log(`  Depuis: ${estab.startDate}`);
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/establishments',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    print(f"Total établissements: {data['data']['total']}")
    for estab in data['data']['items']:
        print(f"  {estab['establishmentNumber']} — {estab.get('name', 'Sans nom')}")
        print(f"    Adresse: {estab.get('address', 'N/A')}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "total": 3,
    "items": [
      {
        "establishmentNumber": "2.003.018.838",
        "name": "Siège social",
        "address": "Boulevard du Roi Albert II 27, 1030 Schaerbeek",
        "startDate": "1994-01-01"
      },
      {
        "establishmentNumber": "2.221.382.064",
        "name": "Centre technique Bruxelles",
        "address": "Rue de Trèves 49, 1040 Etterbeek",
        "startDate": "2001-06-15"
      },
      {
        "establishmentNumber": "2.287.456.913",
        "name": "Centre régional Liège",
        "address": "Rue Louvrex 95, 4000 Liège",
        "startDate": "2005-03-01"
      }
    ]
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Le champ total indique le nombre total d'établissements liés à l'entreprise.
  • Les établissements sont listés dans le tableau items avec leur numéro d'établissement BCE unique.
  • Le champ name peut être null si l'établissement n'a pas de dénomination enregistrée.
  • Pour obtenir les détails complets d'un établissement (activités, contacts, etc.), utilisez l'endpoint /api/v2/establishment/{num}.

Données financières de l'entreprise

Retourne l'analyse financière structurée de l'entreprise à partir des comptes annuels déposés à la BNB (Banque Nationale de Belgique / CBSO) : classification de taille (CSA micro/petite/grande), âge inféré, la série pluriannuelle complète (tous les exercices et toutes les rubriques) et les ratios par année (solvabilité, endettement, marge nette, ROE). La profondeur d'historique est réglable via ?years=. Pour la couche de scoring (santé, limite de crédit, modèles de défaillance), voir l'endpoint /financial/intelligence.

GET
/api/v2/enterprise/{num}/financial

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765
years
optionnel
integer (query)Nombre d'exercices d'historique à retourner (1 à 10, défaut 5). Plafonné au nombre d'années réellement disponibles à la BNB.Exemple: 5

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/financial?years=5" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/financial',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  const fin = data.data;
  console.log(`Devise: ${fin.currency}`);
  if (fin.latest) {
    console.log(`Année: ${fin.latest.year}`);
    console.log(`Chiffre d'affaires: ${fin.latest.turnover?.toLocaleString() ?? 'N/A'} ${fin.currency}`);
    console.log(`Résultat net: ${fin.latest.profitLoss?.toLocaleString() ?? 'N/A'} ${fin.currency}`);
    console.log(`Capitaux propres: ${fin.latest.equity?.toLocaleString() ?? 'N/A'} ${fin.currency}`);
    console.log(`Total actif: ${fin.latest.totalAssets?.toLocaleString() ?? 'N/A'} ${fin.currency}`);
    console.log(`Ratio solvabilité: ${fin.latest.solvencyRatio?.toFixed(1) ?? 'N/A'}%`);
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/financial',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    fin = data['data']
    print(f"Devise: {fin['currency']}")
    latest = fin.get('latest')
    if latest:
        print(f"Année: {latest['year']}")
        print(f"Chiffre d'affaires: {latest.get('turnover', 'N/A')} {fin['currency']}")
        print(f"Résultat net: {latest.get('profitLoss', 'N/A')} {fin['currency']}")
        print(f"Capitaux propres: {latest.get('equity', 'N/A')} {fin['currency']}")
    for s in fin.get('series', []):
        print(f"  {s['year']}: CA={s.get('turnover', 'N/A')}, Résultat={s.get('profitLoss', 'N/A')}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "enterpriseNumber": "0200065765",
    "enterpriseName": "PROXIMUS",
    "currency": "EUR",
    "companySize": {
      "size": "large",
      "criteria": { "totalAssets": 10234000000, "turnover": 5876000000, "employees": 11482 },
      "microCriteriaCount": 0,
      "smallCriteriaCount": 0
    },
    "companyAgeYears": 28,
    "yearsRequested": 5,
    "yearsAvailable": 5,
    "yearsWithXbrl": 5,
    "latest": {
      "year": 2024,
      "profitLoss": 432000000,
      "turnover": 5876000000,
      "equity": 3245000000,
      "grossMargin": 3102000000,
      "totalAssets": 10234000000,
      "debts": 6989000000,
      "employees": 11482,
      "solvencyRatio": 31.7
    },
    "series": [
      {
        "year": 2024,
        "exerciseStart": "2024-01-01",
        "exerciseEnd": "2024-12-31",
        "source": "xbrl",
        "profitLoss": 432000000,
        "turnover": 5876000000,
        "equity": 3245000000,
        "grossMargin": 3102000000,
        "totalAssets": 10234000000,
        "debts": 6989000000,
        "employees": 11482
      }
    ],
    "ratios": [
      {
        "year": 2024,
        "solvencyRatio": 31.7,
        "debtToEquityRatio": 2.15,
        "netMarginRatio": 7.35,
        "returnOnEquityRatio": 13.31
      }
    ],
    "latestRatio": {
      "year": 2024,
      "solvencyRatio": 31.7,
      "debtToEquityRatio": 2.15,
      "netMarginRatio": 7.35,
      "returnOnEquityRatio": 13.31
    },
    "pdfOnlyDeposits": []
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucun compte annuel trouvé pour cette entreprise auprès de la BNB
404 Not Found
{
  "success": false,
  "error": "No filings found at NBB",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Source des données : Banque Nationale de Belgique (BNB) — Centrale des bilans (CBSO).
  • Le paramètre years (1 à 10, défaut 5) règle la profondeur d'historique. yearsAvailable indique le nombre d'exercices réellement trouvés, yearsWithXbrl ceux exploitables en données structurées.
  • Le champ latest contient l'exercice le plus récent avec tous les indicateurs financiers. Il est null si aucun compte n'est disponible.
  • Le champ series contient tous les exercices retournés, chacun avec l'ensemble des rubriques (résultat, CA, capitaux propres, marge brute, total actif, dettes, effectif) et les dates d'exercice.
  • Le champ ratios fournit, par exercice, la solvabilité, le ratio d'endettement (debtToEquityRatio), la marge nette (netMarginRatio) et le rendement des capitaux propres (returnOnEquityRatio) ; latestRatio reprend l'exercice le plus récent.
  • companySize classe l'entreprise selon le CSA (micro / petite / grande) à partir des seuils total actif / chiffre d'affaires / effectif.
  • Le ratio de solvabilité (solvencyRatio) est calculé comme : capitaux propres / total actif * 100.
  • Les montants sont exprimés en unités de la devise (EUR) — pas en milliers ni en millions.
  • Les valeurs financières peuvent être null si elles ne sont pas disponibles dans les comptes déposés (ex. le chiffre d'affaires n'est pas obligatoire pour les schémas abrégés).
  • pdfOnlyDeposits liste les dépôts trouvés à la BNB disponibles uniquement en PDF (non convertis en données structurées).
  • Toutes les personnes morales ne déposent pas de comptes annuels à la BNB (ex. indépendants, petites ASBL). Dans ce cas, une erreur 404 est retournée.

Intelligence financière

Couche d'analyse premium au-dessus des données financières : baromètre de santé (-5 à +5 avec détail des indicateurs), limite de crédit recommandée (plafonds capitaux propres / chiffre d'affaires / actif + niveau de confiance), scores académiques de défaillance révisés par les pairs (Altman Z'', Conan-Holder et leur consensus) et ratios étendus par exercice (current ratio, fonds de roulement, EBITDA, couverture des intérêts, valeur ajoutée par employé). Même modèle d'accès et même coût de quota qu'un endpoint v2 standard.

GET
/api/v2/enterprise/{num}/financial/intelligence

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765
years
optionnel
integer (query)Nombre d'exercices d'historique à analyser (1 à 10, défaut 5).Exemple: 5

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/financial/intelligence?years=5" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/financial/intelligence',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  const intel = data.data;
  console.log(`Santé: ${intel.healthScore.globalScore} (${intel.healthScore.rating})`);
  console.log(`Limite de crédit: ${intel.creditLimit.amount.toLocaleString()} ${intel.currency} (${intel.creditLimit.confidence})`);
  if (intel.academicScores?.consensus) {
    console.log(`Consensus défaillance: ${intel.academicScores.consensus.verdict}`);
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/financial/intelligence',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    intel = data['data']
    health = intel['healthScore']
    print(f"Santé: {health['globalScore']} ({health['rating']})")
    credit = intel['creditLimit']
    print(f"Limite de crédit: {credit['amount']} {intel['currency']} ({credit['confidence']})")
    academic = intel.get('academicScores')
    if academic and academic.get('consensus'):
        print(f"Consensus défaillance: {academic['consensus']['verdict']}")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "enterpriseNumber": "0200065765",
    "enterpriseName": "PROXIMUS",
    "currency": "EUR",
    "companySize": { "size": "large", "criteria": { "totalAssets": 10234000000, "turnover": 5876000000, "employees": 11482 }, "microCriteriaCount": 0, "smallCriteriaCount": 0 },
    "companyAgeYears": 28,
    "yearsRequested": 5,
    "yearsAvailable": 5,
    "yearsWithXbrl": 5,
    "healthScore": {
      "globalScore": 2.4,
      "rating": "good",
      "indicatorsUsed": 6,
      "indicators": [
        { "id": "solvency", "label": "Solvabilité", "value": 31.7, "score": 2, "weight": 0.2, "contribution": 0.4 }
      ],
      "computedAt": "2026-04-17T10:30:00.000Z"
    },
    "creditLimit": {
      "amount": 4500000,
      "scoreFactor": 0.7,
      "caps": { "equityCap": 6490000, "turnoverCap": 4500000, "assetsCap": 5117000 },
      "confidence": "high",
      "computedAt": "2026-04-17T10:30:00.000Z"
    },
    "academicScores": {
      "altman": { "value": 3.1, "zone": "SAFE", "components": {}, "proxyNotes": [], "computedAt": "2026-04-17T10:30:00.000Z" },
      "conanHolder": { "value": 12.4, "band": "GOOD", "failureProbability": 0.1, "components": {}, "proxyNotes": [], "computedAt": "2026-04-17T10:30:00.000Z" },
      "consensus": { "verdict": "HEALTHY", "confidence": "HIGH", "note": "Les deux modèles concordent" },
      "fiscalYear": 2024,
      "computedAt": "2026-04-17T10:30:00.000Z"
    },
    "years": [
      {
        "year": 2024,
        "source": "xbrl",
        "profitLoss": 432000000,
        "turnover": 5876000000,
        "equity": 3245000000,
        "totalAssets": 10234000000,
        "currentAssets": 4120000000,
        "shortTermDebts": 3890000000,
        "operatingResult": 612000000,
        "depreciation": 980000000
      }
    ],
    "ratios": [
      {
        "year": 2024,
        "solvencyRatio": 31.7,
        "currentRatio": 1.06,
        "workingCapital": 230000000,
        "ebitda": 1592000000,
        "interestCoverageRatio": 8.4,
        "valueAddedPerEmployee": 270000
      }
    ],
    "generatedAt": "2026-04-17T10:30:00.000Z"
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

404 Not Found
Aucun compte annuel trouvé pour cette entreprise auprès de la BNB
404 Not Found
{
  "success": false,
  "error": "No filings found at NBB",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 24 heures (Cache-Control: s-maxage=86400)

Notes

  • Source des données : Banque Nationale de Belgique (BNB) — Centrale des bilans (CBSO).
  • healthScore est un baromètre propriétaire sur l'échelle -5 / +5 (rating : excellent / good / fair / poor / critical), pondéré sur plusieurs indicateurs détaillés dans indicators.
  • creditLimit recommande une exposition de crédit maximale en EUR ; caps détaille les 3 méthodes de plafonnement (le minimum l'emporte) et confidence reflète la disponibilité des données.
  • academicScores fournit les modèles de défaillance révisés par les pairs (Altman Z'', Conan-Holder) et leur consensus ; le champ peut être null pour les dépôts antérieurs à cette analyse — prévoir un garde-fou côté client.
  • ratios reprend les ratios étendus par exercice (current ratio, fonds de roulement, EBITDA, couverture des intérêts, valeur ajoutée par employé) en plus des ratios de base.
  • Les montants sont exprimés en unités de la devise (EUR). Les valeurs peuvent être null pour les schémas abrégés (rubriques non obligatoires).
  • Endpoint plus coûteux à calculer que /financial mais facturé au même tarif (1 unité de quota par appel).

Dirigeants et mandataires

Retourne les mandataires et administrateurs en fonction d'une entreprise, extraits automatiquement des publications au Moniteur belge. Les données BCE Open Data ne contiennent pas ces informations — cet endpoint les reconstitue à partir des actes juridiques publiés. Cette donnée n'est PAS un extrait du registre UBO du SPF Finances et ne peut pas être utilisée comme telle pour vos obligations de vigilance AML (loi du 18/09/2017).

GET
/api/v2/enterprise/{num}/roles

Headers

HeaderValueDescription
X-API-Keypk_live_...Votre clé API publique
X-API-Secretsk_live_...Votre clé API secrète

Paramètres

NameTypeDescription
num
requis
string (path)Numéro d'entreprise BCE (avec ou sans points, avec ou sans préfixe BE).Exemple: 0200065765

Exemple de requête

cURL
curl -X GET "https://companybelgium.be/api/v2/enterprise/0200065765/roles" \
  -H "X-API-Key: pk_live_votre_cle" \
  -H "X-API-Secret: sk_live_votre_secret"
JavaScript / Node.js
const response = await fetch(
  'https://companybelgium.be/api/v2/enterprise/0200065765/roles',
  {
    headers: {
      'X-API-Key': process.env.API_KEY,
      'X-API-Secret': process.env.API_SECRET,
    },
  }
);

const data = await response.json();

if (data.success) {
  const rolesData = data.data;
  console.log(`Statut: ${rolesData.status}`);

  if (rolesData.source) {
    console.log(`Publication: ${rolesData.source.publicationTitle}`);
    console.log(`Date: ${rolesData.source.publicationDate}`);
    console.log(`Type: ${rolesData.source.publicationType}`);
  }

  for (const role of rolesData.roles) {
    console.log(`${role.fullName} (${role.entityType})`);
    console.log(`  Rôles: ${role.roles.join(', ')}`);
    if (role.ownershipPercentage !== null) {
      console.log(`  Participation: ${role.ownershipPercentage}%`);
    }
  }
}
Python
import requests

response = requests.get(
    'https://companybelgium.be/api/v2/enterprise/0200065765/roles',
    headers={
        'X-API-Key': 'pk_live_votre_cle',
        'X-API-Secret': 'sk_live_votre_secret',
    }
)
data = response.json()

if data['success']:
    roles_data = data['data']
    print(f"Statut: {roles_data['status']}")

    if roles_data.get('source'):
        src = roles_data['source']
        print(f"Publication: {src['publicationTitle']}")
        print(f"Date: {src['publicationDate']}")

    for role in roles_data.get('roles', []):
        print(f"  {role['fullName']} ({role['entityType']})")
        print(f"    Rôles: {', '.join(role['roles'])}")
        if role.get('ownershipPercentage') is not None:
            print(f"    Participation: {role['ownershipPercentage']}%")

Exemple de réponse

200 OK
{
  "success": true,
  "data": {
    "enterpriseNumber": "0200065765",
    "status": "ok",
    "source": {
      "refNumber": "2024-MB-0145782",
      "publicationDate": "2024-05-15T00:00:00.000Z",
      "publicationTitle": "Proximus — Nomination administrateur",
      "publicationType": "nomination"
    },
    "roles": [
      {
        "fullName": "Guillaume Boutin",
        "entityType": "person",
        "roles": ["Administrateur délégué", "CEO"],
        "ownershipPercentage": null,
        "dateOfBirth": "1970-08-12",
        "nationality": "Française",
        "address": null,
        "enterpriseNumber": null
      },
      {
        "fullName": "Stefaan De Clerck",
        "entityType": "person",
        "roles": ["Président du conseil d'administration"],
        "ownershipPercentage": null,
        "dateOfBirth": "1951-05-13",
        "nationality": "Belge",
        "address": null,
        "enterpriseNumber": null
      },
      {
        "fullName": "État belge",
        "entityType": "company",
        "roles": ["Actionnaire majoritaire"],
        "ownershipPercentage": 53.3,
        "dateOfBirth": null,
        "nationality": null,
        "address": "Rue de la Loi 16, 1000 Bruxelles",
        "enterpriseNumber": "0308.357.159"
      }
    ],
    "updatedAt": "2026-04-10T08:45:00.000Z"
  },
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Codes d'erreur

400 Bad Request
Le numéro d'entreprise fourni n'est pas valide
400 Bad Request
{
  "success": false,
  "error": "Invalid enterprise number format",
  "timestamp": "2026-04-17T10:30:00.000Z"
}
404 Not Found
Aucune entreprise trouvée pour ce numéro
404 Not Found
{
  "success": false,
  "error": "Enterprise 0200065765 not found",
  "timestamp": "2026-04-17T10:30:00.000Z"
}

Mise en cache

Durée du cache: 1 heure (Cache-Control: s-maxage=3600)

Notes

  • Source : Publications du Moniteur belge. Les données ne proviennent pas de la BCE Open Data.
  • Le champ status peut valoir : ok (extraction réussie), no_publication (aucune publication trouvée au Moniteur belge), ou extraction_failed (erreur lors de l'extraction).
  • Quand status est no_publication ou extraction_failed, le champ source est null et roles est un tableau vide.
  • Chaque rôle contient un entityType : person (personne physique) ou company (personne morale).
  • Le champ roles est un tableau car une même personne peut cumuler plusieurs mandats (ex. administrateur + gérant).
  • Le champ ownershipPercentage est renseigné quand le pourcentage de participation est mentionné dans la publication.
  • Les champs dateOfBirth, nationality et address ne sont disponibles que si mentionnés dans la publication source.
  • Le champ enterpriseNumber est renseigné uniquement pour les personnes morales (entityType = company).
  • La première requête pour une entreprise peut prendre quelques secondes (extraction OCR en temps réel). Les requêtes suivantes sont servies depuis le cache.

Besoin d'aide ?

Notre equipe de support est disponible pour vous aider avec l'integration de l'API.