Notions de base
Ce qu’il faut comprendre une fois pour traiter chaque réponse en toute confiance.
Huit notions portent toute l’API. Une fois que tu les connais, tu lis chaque réponse correctement et sais à l’avance ce que coûte une requête.
Identifier les entreprises sans ambiguïté
Le paramètre q de fetch-organization accepte trois types de saisie. Les exemples de cette page sont des requêtes pour Hetzner Online GmbH, Ansbach HRB 6089 :
| Saisie | Exemple | Quand l’utiliser |
|---|---|---|
| Nom de l’entreprise |
Hetzner Online GmbH |
Pour démarrer. Écris le nom aussi complètement qu’il figure au registre. |
| Tribunal du registre et numéro de registre |
Ansbach HRB 6089 |
Unique pour chaque entreprise inscrite. Tribunal, type de registre et numéro vont ensemble. |
| entity_id |
94eb910fef13f94585c48c263fa446d4 |
Pour les requêtes suivantes. Tu le reçois dans chaque réponse. |
Le numéro de registre seul ne suffit pas, car chaque tribunal du registre attribue ses propres numéros. L’ordre, en revanche, est libre : dans l’exemple, HRB 6089 Ansbach trouve la même entreprise.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: TA_CLE_API" \ --data-urlencode 'q=Ansbach HRB 6089'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "TA_CLE_API"}, params={ "q": "Ansbach HRB 6089", }, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/fetch-organization"); url.searchParams.append("q", "Ansbach HRB 6089"); const response = await fetch(url, { headers: { "x-api-key": "TA_CLE_API" }, }); const data = await response.json();
entity_id.
Si l’API ne trouve aucune entreprise, elle répond 404 et ne facture rien. Pour une saisie approximative, il y a le mode IA (ai_search=on-default) : il trouve l’entreprise même à partir de fragments du nom et fait des recherches sur le web. Il coûte 20 crédits supplémentaires, même s’il ne trouve aucune entreprise. Pour obtenir plusieurs candidats d’un coup, utilise Recherche & Export.
Fonctionnalités
Chaque profil d’entreprise contient les données de base, notamment nom, forme juridique, statut, inscription au registre, adresse, objet, secteur, capital et règles de représentation. Tout le reste se demande sous forme de fonctionnalité, par exemple related_persons pour les dirigeants ou financial_kpi pour les indicateurs financiers.
Tu passes plusieurs fonctionnalités avec un feature répété ou sous forme de liste : features=related_persons,financial_kpi. Chaque fonctionnalité apparaît dans la réponse sous sa propre clé. Seule publications s’y appelle history.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: TA_CLE_API" \ --data-urlencode 'q=Hetzner Online GmbH' \ --data-urlencode 'feature=related_persons' \ --data-urlencode 'feature=financial_kpi'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "TA_CLE_API"}, params={ "q": "Hetzner Online GmbH", "feature": ["related_persons", "financial_kpi"], }, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/fetch-organization"); url.searchParams.append("q", "Hetzner Online GmbH"); url.searchParams.append("feature", "related_persons"); url.searchParams.append("feature", "financial_kpi"); const response = await fetch(url, { headers: { "x-api-key": "TA_CLE_API" }, }); const data = await response.json();
L’API ignore les noms inconnus sans message d’erreur : vérifie donc l’orthographe. Les fonctionnalités que ton plan n’inclut pas sont omises et non facturées.
Toutes les fonctionnalités avec leurs prix figurent dans fetch-organization, chaque champ dans le Catalogue de données.
Crédits
Les requêtes de données coûtent des crédits. Pour un profil d’entreprise, ces règles s’appliquent :
- Le prix de base de 5 crédits s’applique quand l’API renvoie une entreprise.
- Une fonctionnalité ne coûte des crédits que si elle renvoie des données dans la réponse. Une fonctionnalité vide est gratuite, y compris
insolvency_publicationssans entrées. - Le mode temps réel et le mode IA ne sont pas des fonctionnalités mais des suppléments avec leurs propres règles :
- Le mode temps réel coûte 10 crédits supplémentaires dès que la récupération en direct réussit. Cela vaut aussi quand elle ne montre rien de nouveau.
- Le mode IA coûte 20 crédits supplémentaires, même s’il ne trouve aucune entreprise. Le supplément n’est supprimé que si l’API interrompt la requête avec 408 parce qu’elle dure trop longtemps.
- Toutes les autres erreurs ne coûtent rien.
La règle de chaque fonctionnalité figure dans Facturation, les prix dans fetch-organization.
Un exemple : les données de base avec related_persons et financial_kpi coûtent 5 + 2 + 1 = 8 crédits si les deux fonctionnalités renvoient des données.
Avant chaque requête, l’API vérifie si ton solde couvre le prix le plus élevé possible. Sinon, l’API répond 402 et ne facture rien. Ce qui a réellement été facturé figure dans meta.request_credit_cost, ton solde ensuite dans meta.credits_remaining.
1{2 "meta": {3 "request_credit_cost": 5,4 "credits_remaining": 1455 }6}
Tu reçois des crédits comme crédits de départ, chaque mois avec un abonnement de crédits, ou ponctuellement comme crédits de recharge. Sans abonnement de crédits, les crédits de départ et de recharge sont valables 30 jours ; avec un abonnement actif, ils n’expirent pas. Tout le reste figure dans Facturation.
Données actuelles et mode temps réel
Par défaut, le profil d’entreprise provient de notre base de données. L’actualité d’une information dépend de sa source.
Handelsregister
Nous tenons à jour dans notre base, à partir du registre, les données de base, les personnes et les publications du registre. C’est rapide et suffisant pour la plupart des usages.
Avec le mode temps réel (realtime_mode=handelsregister-default), l’API récupère en direct l’Aktueller Abdruck (AD, extrait actuel) du Handelsregister (registre du commerce) au moment de ta requête et le renvoie en JSON. Tu obtiens aussi les personnes actuellement inscrites dans related_persons.current, sans payer la fonctionnalité.
Le résultat de la récupération en direct figure dans _realtime_mode.status. Nous ne facturons les 10 crédits du mode temps réel qu’en cas de success.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: TA_CLE_API" \ --data-urlencode 'q=Hetzner Online GmbH' \ --data-urlencode 'realtime_mode=handelsregister-default'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "TA_CLE_API"}, params={ "q": "Hetzner Online GmbH", "realtime_mode": "handelsregister-default", }, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/fetch-organization"); url.searchParams.append("q", "Hetzner Online GmbH"); url.searchParams.append("realtime_mode", "handelsregister-default"); const response = await fetch(url, { headers: { "x-api-key": "TA_CLE_API" }, }); const data = await response.json();
1{2 "name": "Hetzner Online GmbH",3 "_realtime_mode": {4 "mode": "handelsregister-default",5 "status": "success"6 },7 "related_persons": {8 "current": [9 {10 "entity_id": "78ad32e16ff779f589a9e88d23356f74",11 "label": "MANAGING_DIRECTOR",12 "role": {13 "en": {14 "long": "Managing Director",15 "short": "MD"16 },17 "de": {18 "long": "Geschäftsführer",19 "short": "GF"20 }21 },22 "name": "Max Mustermann",23 "name_parts": {24 "given": "Max",25 "family": "Mustermann",26 "maiden": null,27 "canonical_name": "Mustermann, Max",28 "aliases": [29 "Mustermann, Max"30 ],31 "previous_names": null32 },33 "start_date": null,34 "end_date": null,35 "birth_date": "1976-01-15",36 "location": {37 "home": {38 "city": "Musterheim"39 }40 },41 "organization_representation_scheme": {42 "current": [43 "Ist nur ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, so wird die Gesellschaft durch zwei Geschäftsführer oder durch einen Geschäftsführer gemeinsam mit einem Prokuristen vertreten."44 ],45 "history": []46 },47 "role_representation_scheme": {48 "current": [49 "einzelvertretungsberechtigt",50 "mit der Befugnis, im Namen der Gesellschaft mit sich im eigenen Namen oder als Vertreter eines Dritten Rechtsgeschäfte abzuschließen"51 ],52 "history": []53 }54 },55 {56 "entity_id": "73549375ff7d709b9e7e2941ad1ffaa3",57 "label": "MANAGING_DIRECTOR",58 "role": {59 "en": {60 "long": "Managing Director",61 "short": "MD"62 },63 "de": {64 "long": "Geschäftsführer",65 "short": "GF"66 }67 },68 "name": "Paul Musterwald",69 "name_parts": {70 "given": "Paul",71 "family": "Musterwald",72 "maiden": null,73 "canonical_name": "Musterwald, Paul",74 "aliases": [75 "Musterwald, Paul"76 ],77 "previous_names": null78 },79 "start_date": null,80 "end_date": null,81 "birth_date": "1989-07-18",82 "location": {83 "home": {84 "city": "Probebrück"85 }86 },87 "organization_representation_scheme": {88 "current": [89 "Ist nur ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, so wird die Gesellschaft durch zwei Geschäftsführer oder durch einen Geschäftsführer gemeinsam mit einem Prokuristen vertreten."90 ],91 "history": []92 },93 "role_representation_scheme": {94 "current": [95 "einzelvertretungsberechtigt"96 ],97 "history": []98 }99 },100 {101 "entity_id": "cfecded2c1d17946c8ab0379aa786eed",102 "label": "MANAGING_DIRECTOR",103 "role": {104 "en": {105 "long": "Managing Director",106 "short": "MD"107 },108 "de": {109 "long": "Geschäftsführer",110 "short": "GF"111 }112 },113 "name": "Jan Musterhuber",114 "name_parts": {115 "given": "Jan",116 "family": "Musterhuber",117 "maiden": null,118 "canonical_name": "Musterhuber, Jan",119 "aliases": [120 "Musterhuber, Jan"121 ],122 "previous_names": null123 },124 "start_date": null,125 "end_date": null,126 "birth_date": "1955-11-06",127 "location": {128 "home": {129 "city": "Probeingen"130 }131 },132 "organization_representation_scheme": {133 "current": [134 "Ist nur ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, so wird die Gesellschaft durch zwei Geschäftsführer oder durch einen Geschäftsführer gemeinsam mit einem Prokuristen vertreten."135 ],136 "history": []137 },138 "role_representation_scheme": {139 "current": [140 "einzelvertretungsberechtigt"141 ],142 "history": []143 }144 }145 ]146 },147 "meta": {148 "request_credit_cost": 15,149 "credits_remaining": 145150 }151}
Si la récupération en direct échoue, l’API renvoie les données enregistrées dans notre base. Tu le reconnais à _realtime_mode.status, qui n’est alors pas success. Le mode temps réel n’est alors pas facturé, comme le montre aussi meta.request_credit_cost.
Le mode temps réel vaut la peine quand l’état du jour compte. Par exemple, tu vérifies de nouveaux partenaires commerciaux avant de signer, ou vois qui peut représenter l’entreprise en ce moment.
Comptes annuels
Nous recherchons chaque jour les comptes annuels nouvellement publiés. Les entreprises disposent toutefois de douze mois après la clôture de l’exercice pour les publier (§ 325 HGB), et beaucoup utilisent tout le délai. Certaines dépassent délibérément le délai légal et publient encore plus tard.
Les derniers comptes portent donc souvent sur l’avant-dernière année. Plus d’informations dans Actualité.
Publications d’insolvabilité
Les tribunaux d’insolvabilité publient généralement leurs avis le jour de la décision ou peu après. Tu les obtiens via la fonctionnalité insolvency_publications, chacun avec tribunal, numéro de dossier et date.
Actualités
La fonctionnalité news renvoie des actualités sur l’entreprise issues du web, avec titre, source, date et lien. Leur actualité dépend de la date à laquelle on a parlé de l’entreprise pour la dernière fois. Pour les petites entreprises, il y a souvent peu d’articles correspondants.
Historique et validité
De nombreuses informations changent avec le temps. L’API renvoie donc l’état actuel et l’historique côte à côte :
currentest l’état à ce jour.historyliste chaque état inscrit aveceffective_frometeffective_to. Sieffective_tovautnull, l’état est encore valable aujourd’hui.- Les personnes figurent dans
related_persons.currentetrelated_persons.past, chacune avecstart_dateetend_date.
Chaque information avec historique provient des registres et des publications, par exemple du Chronologischer Abdruck (CD, extrait chronologique) du Handelsregister ou de l’ensemble des comptes annuels publiés.
Voici ce que cela donne dans notre exemple pour les règles de représentation de Hetzner Online GmbH. Dans l’exemple de réponse, elles désignent le directoire jusqu’au 28 juillet 2015, puis les gérants :
1{2 "representation_scheme": {3 "current": [4 "Ist nur ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, so wird die Gesellschaft durch zwei Geschäftsführer oder durch einen Geschäftsführer gemeinsam mit einem Prokuristen vertreten."5 ],6 "history": [7 {8 "value": [9 "Ist nur ein Vorstandsmitglied bestellt, so vertritt es die Gesellschaft allein. Sind mehrere Vorstandsmitglieder bestellt, so wird die Gesellschaft durch zwei Vorstandsmitglieder oder durch ein Vorstandsmitglied gemeinsam mit einem Prokuristen vertreten."10 ],11 "effective_from": "2002-10-15",12 "effective_to": "2015-07-28"13 },14 {15 "value": [16 "Ist nur ein Geschäftsführer bestellt, so vertritt er die Gesellschaft allein. Sind mehrere Geschäftsführer bestellt, so wird die Gesellschaft durch zwei Geschäftsführer oder durch einen Geschäftsführer gemeinsam mit einem Prokuristen vertreten."17 ],18 "effective_from": "2015-07-28",19 "effective_to": null20 }21 ]22 }23}
La plupart des dates sont au format YYYY-MM-DD. Jusqu’où remonte l’historique est décrit dans Ancienneté et historique.
Valeurs vides
Toutes les entreprises n’ont pas une valeur pour chaque champ. L’API l’indique de deux façons :
null: il n’y a pas de valeur pour ce champ.[]: la liste n’a pas d’entrées, par exemple aucune publication d’insolvabilité.
Une fonctionnalité demandée sans données arrive sous forme de null ou [] et ne coûte rien.
1{2 "name": "dm-drogerie markt GmbH + Co. KG",3 "legal_form": "GmbH & Co. KG",4 "contact_data": {5 "website": "https://www.dm.de",6 "phone_number": "+49 721 55920",7 "email": null8 },9 "capital": {10 "current": null,11 "history": []12 },13 "mergers_and_acquisitions": null,14 "insolvency_publications": []15}
Dans ton code, traite de la même façon une clé absente, null et [], car certains objets vides arrivent sous forme de []. Lis aussi les champs par leur nom, car l’ordre des clés n’est pas fixe.
Si une valeur manque, l’entreprise n’est généralement pas tenue de la publier. Ce que la loi exige selon la forme juridique et la taille est décrit dans Disponibilité des données. Nous retenons délibérément certaines informations ; elles portent alors redacted: true.
Stabilité et versions
L’API évolue de manière additive. Les nouvelles données et fonctionnalités arrivent sous forme de nouveaux champs. Nous ne supprimons jamais de champs existants, nous ne les renommons pas et nous ne changeons ni leur type ni leur signification. Chaque version reste ainsi rétrocompatible.
Les changements qui casseraient du code existant n’arrivent que dans une nouvelle version de l’API, par exemple sous /v2. La version actuelle tourne sous /v1.
Fais donc en sorte que ton client ignore les champs inconnus et traite les valeurs inconnues comme un cas général. Les nouveaux champs et fonctionnalités sont listés dans le Changelog.
Plans
Tu peux utiliser Profil d’entreprise, Documents, Recherche & Export et Signals avec chaque compte, même sans abonnement de crédits. Un abonnement de crédits apporte de nouveaux crédits chaque mois et débloque davantage de données :
| Ce que tu obtiens en plus | Plus | Pro | Max |
|---|---|---|---|
| Profil de personne: Rôles et participations des personnes | inclus | inclus | inclus |
| Recherche & Export: Filtres par propriété, direction et insolvabilité | non inclus | inclus | inclus |
| Profil d’entreprise: Plus de 90 indicateurs financiers étendus | non inclus | inclus | inclus |
| Profil d’entreprise: Comptes d’activité des fournisseurs d’énergie (§ 6b EnWG) | non inclus | non inclus | inclus |
Profil d’entreprise: Associés approfondis (shareholders_deep) |
non inclus | non inclus | inclus |
Réseau d’entreprises (network) |
non inclus | inclus | inclus |
| Signals: Insolvabilités | non inclus | inclus | inclus |
| Signals: Transformations & fusions-acquisitions | non inclus | non inclus | inclus |
L’API omet sans erreur les fonctionnalités hors de ton plan et ne les facture pas. Elle refuse avec 403 les profils de personne et les filtres de recherche hors de ton plan, également sans frais. Pour Signals, cela vaut pour les thèmes que tu demandes explicitement ; sinon, tu obtiens simplement tous les thèmes de ton plan.
Les prix et crédits des plans figurent sur la page des tarifs.