Basisbegrippen
Wat je één keer moet begrijpen om elk antwoord met vertrouwen te verwerken.
Acht begrippen dragen de hele API. Ken je ze, dan lees je elk antwoord correct en weet je vooraf wat een aanvraag kost.
Bedrijven eenduidig vinden
De parameter q van fetch-organization accepteert drie soorten invoer. De voorbeelden op deze pagina zijn aanvragen voor Hetzner Online GmbH, Ansbach HRB 6089:
| Invoer | Voorbeeld | Wanneer het past |
|---|---|---|
| Bedrijfsnaam |
Hetzner Online GmbH |
Om te beginnen. Schrijf de naam zo volledig als hij in het register staat. |
| Registerrechtbank en registernummer |
Ansbach HRB 6089 |
Eenduidig voor elk ingeschreven bedrijf. Rechtbank, registertype en nummer horen bij elkaar. |
| entity_id |
94eb910fef13f94585c48c263fa446d4 |
Voor vervolgaanvragen. Je krijgt hem in elk antwoord. |
Het registernummer alleen is niet genoeg, omdat elke registerrechtbank eigen nummers uitgeeft. De volgorde is daarentegen vrij: in het voorbeeld vindt HRB 6089 Ansbach hetzelfde bedrijf.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: JOUW_API_SLEUTEL" \ --data-urlencode 'q=Ansbach HRB 6089'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "JOUW_API_SLEUTEL"}, 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": "JOUW_API_SLEUTEL" }, }); const data = await response.json();
entity_id.
Vindt de API geen bedrijf, dan antwoordt ze met 404 en berekent niets. Voor vage invoer is er de AI-modus (ai_search=on-default): die vindt het bedrijf ook aan de hand van delen van de naam en onderzoekt het op het web. Dat kost 20 extra credits, ook als er geen bedrijf wordt gevonden. Wil je meerdere kandidaten tegelijk, gebruik dan Zoeken & exporteren.
Features
Elk bedrijfsprofiel bevat de basisgegevens, waaronder naam, rechtsvorm, status, registerinschrijving, adres, doel, branche, kapitaal en vertegenwoordigingsregels. Al het andere vraag je op als feature, bijvoorbeeld related_persons voor de bestuurders of financial_kpi voor de Financiële KPI’s.
Meerdere features geef je mee met een herhaalde feature of als lijst: features=related_persons,financial_kpi. Elke feature staat in het antwoord onder een eigen sleutel. Alleen publications heet daar history.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: JOUW_API_SLEUTEL" \ --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": "JOUW_API_SLEUTEL"}, 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": "JOUW_API_SLEUTEL" }, }); const data = await response.json();
De API negeert onbekende namen zonder foutmelding, controleer dus de spelling. Features die niet in je plan zitten, worden weggelaten en niet berekend.
Alle features met hun prijzen staan in fetch-organization, elk veld in de Datacatalogus.
Credits
Gegevensaanvragen kosten credits. Voor een bedrijfsprofiel gelden deze regels:
- De basisprijs van 5 credits geldt zodra de API een bedrijf teruggeeft.
- Een feature kost alleen credits als die gegevens in het antwoord oplevert. Een lege feature is gratis, ook
insolvency_publicationszonder vermeldingen. - Realtime en AI-modus zijn geen features maar toeslagen met eigen regels:
- Realtime kost 10 extra credits zodra de live-opvraging slaagt. Dat geldt ook als ze niets nieuws laat zien.
- De AI-modus kost 20 extra credits, ook als er geen bedrijf wordt gevonden. De toeslag vervalt alleen als de API de aanvraag met 408 afbreekt omdat ze te lang duurt.
- Alle andere fouten kosten niets.
De regel voor elke afzonderlijke feature staat in Afrekening, de prijzen in fetch-organization.
Een voorbeeld: de basisgegevens met related_persons en financial_kpi kosten 5 + 2 + 1 = 8 credits als beide features gegevens opleveren.
Vóór elke aanvraag controleert de API of je saldo de hoogst mogelijke prijs dekt. Is dat niet zo, dan antwoordt de API met 402 en berekent niets. Wat werkelijk is berekend, staat in meta.request_credit_cost, je saldo daarna in meta.credits_remaining.
1{2 "meta": {3 "request_credit_cost": 5,4 "credits_remaining": 1455 }6}
Credits krijg je als startcredits, elke maand met een creditabonnement, of eenmalig als top-up-credits. Zonder creditabonnement zijn startcredits en top-up-credits 30 dagen geldig; met een actief abonnement vervallen ze niet. Al het andere staat in Afrekening.
Actuele gegevens en Realtime
Standaard komt het bedrijfsprofiel uit onze database. Hoe actueel een gegeven is, hangt af van de bron.
Handelsregister
Basisgegevens, personen en registerbekendmakingen houden we in onze database actueel vanuit het register. Dat is snel en volstaat voor de meeste doeleinden.
Met Realtime (realtime_mode=handelsregister-default) haalt de API op het moment van je aanvraag de Aktueller Abdruck (AD, actueel uittreksel) live op uit het Handelsregister (Duits handelsregister) en levert die als JSON. Je krijgt daarbij ook de op dat moment ingeschreven personen in related_persons.current, zonder voor de feature te betalen.
Of de live-opvraging is gelukt, zie je in _realtime_mode.status. De 10 credits voor Realtime berekenen we alleen bij success.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: JOUW_API_SLEUTEL" \ --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": "JOUW_API_SLEUTEL"}, 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": "JOUW_API_SLEUTEL" }, }); 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}
Mislukt de live-opvraging, dan levert de API de opgeslagen gegevens uit onze database. Je herkent dat aan _realtime_mode.status, dat dan niet success is. Realtime wordt dan niet berekend, zoals ook meta.request_credit_cost laat zien.
Realtime loont als de stand van vandaag telt. Bijvoorbeeld als je nieuwe zakenpartners vóór de ondertekening controleert, of wilt zien wie het bedrijf op dit moment mag vertegenwoordigen.
Jaarrekeningen
We zoeken elke dag naar nieuw gepubliceerde jaarrekeningen. Bedrijven hebben echter tot twaalf maanden na het einde van het boekjaar om ze te publiceren (§ 325 HGB), en veel bedrijven gebruiken die hele termijn. Sommige bedrijven laten de wettelijke termijn bewust verstrijken en publiceren nog later.
De nieuwste jaarrekening gaat daarom vaak over het jaar vóór vorig jaar. Meer in Actualiteit.
Insolventiepublicaties
De insolventierechtbanken publiceren hun bekendmakingen meestal op de dag van de beslissing of kort daarna. Je krijgt ze via de feature insolvency_publications, elk met rechtbank, zaaknummer en datum.
Nieuws
De feature news levert nieuws over het bedrijf van het web, met titel, bron, datum en link. Hoe actueel dat is, hangt af van wanneer er voor het laatst over het bedrijf is bericht. Voor kleine bedrijven zijn er vaak maar weinig passende berichten.
Historie en geldigheid
Veel gegevens veranderen in de loop van de tijd. De API levert daarom de actuele stand en de historie naast elkaar:
currentis de stand van vandaag.historybevat elke ingeschreven stand meteffective_fromeneffective_to. Iseffective_togelijk aannull, dan geldt de stand vandaag nog.- Personen staan in
related_persons.currentenrelated_persons.past, elk metstart_dateenend_date.
Elk gegeven met historie komt uit de registers en publicaties, bijvoorbeeld uit de Chronologischer Abdruck (CD, chronologisch uittreksel) van het Handelsregister of uit alle gepubliceerde jaarrekeningen.
Zo ziet dat er in ons voorbeeld uit voor de vertegenwoordigingsregels van Hetzner Online GmbH. In het voorbeeldantwoord noemen ze tot 28 juli 2015 het bestuur en sindsdien de bedrijfsleiders (Geschäftsführer):
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}
De meeste datums komen in het formaat YYYY-MM-DD. Hoe ver de historie teruggaat, staat in Leeftijd en historie.
Lege waarden
Niet elk bedrijf heeft een waarde voor elk veld. De API toont dat op twee manieren:
null: voor dit veld is er geen waarde.[]: de lijst heeft geen items, bijvoorbeeld geen insolventiepublicaties.
Een gevraagde feature zonder gegevens komt als null of [] en kost niets.
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}
Behandel in je code een ontbrekende sleutel, null en [] gelijk, omdat sommige lege objecten als [] komen. Lees velden ook op hun naam, omdat de volgorde van de sleutels niet vastligt.
Ontbreekt een waarde, dan hoeft het bedrijf die meestal helemaal niet te publiceren. Wat de wet afhankelijk van rechtsvorm en omvang verlangt, staat in Beschikbaarheid van gegevens. Sommige gegevens houden we bewust achter; die hebben dan redacted: true.
Stabiliteit en versies
De API groeit additief. Nieuwe gegevens en features komen erbij als nieuwe velden. Bestaande velden verwijderen we nooit, we hernoemen ze niet en we veranderen noch hun type noch hun betekenis. Zo blijft elke versie achterwaarts compatibel.
Wijzigingen die bestaande code zouden breken, komen alleen in een nieuwe API-versie, bijvoorbeeld onder /v2. De huidige versie draait onder /v1.
Laat je client dus onbekende velden negeren en onbekende waarden als algemeen geval behandelen. Nieuwe velden en features staan in de Changelog.
Plannen
Bedrijfsprofiel, Documenten, Zoeken & exporteren en Signals kun je met elk account gebruiken, ook zonder creditabonnement. Een creditabonnement brengt elke maand nieuwe credits en ontgrendelt meer gegevens:
| Wat je extra krijgt | Plus | Pro | Max |
|---|---|---|---|
| Persoonsprofiel: Rollen en deelnemingen van personen | inbegrepen | inbegrepen | inbegrepen |
| Zoeken & exporteren: Filters op eigendom, bestuur en insolventie | niet inbegrepen | inbegrepen | inbegrepen |
| Bedrijfsprofiel: Meer dan 90 uitgebreide financiële kerncijfers | niet inbegrepen | inbegrepen | inbegrepen |
| Bedrijfsprofiel: Activiteitenjaarrekeningen van energiebedrijven (§ 6b EnWG) | niet inbegrepen | niet inbegrepen | inbegrepen |
Bedrijfsprofiel: Diepgaande aandeelhoudersgegevens (shareholders_deep) |
niet inbegrepen | niet inbegrepen | inbegrepen |
Bedrijfsnetwerk (network) |
niet inbegrepen | inbegrepen | inbegrepen |
| Signals: Insolventies | niet inbegrepen | inbegrepen | inbegrepen |
| Signals: Omzettingen & M&A | niet inbegrepen | niet inbegrepen | inbegrepen |
Features buiten je plan laat de API zonder fout weg en berekent ze niet. Persoonsprofielen en zoekfilters buiten je plan weigert ze met 403, ook zonder kosten. Bij Signals geldt dat voor onderwerpen die je expliciet opvraagt; zonder dat krijg je gewoon alle onderwerpen van je plan.
De prijzen en credits van de plannen vind je op de prijspagina.