Grundbegreber
Det, du skal forstå én gang for at håndtere hvert svar sikkert.
Otte begreber bærer hele API’et. Når du kender dem, læser du hvert svar korrekt og ved på forhånd, hvad en forespørgsel koster.
Find virksomheder entydigt
Parameteren q i fetch-organization tager tre slags input. Eksemplerne på denne side er forespørgsler for Hetzner Online GmbH, Ansbach HRB 6089:
| Input | Eksempel | Hvornår det passer |
|---|---|---|
| Virksomhedens navn |
Hetzner Online GmbH |
Til at komme i gang. Skriv navnet så fuldstændigt, som det står i registret. |
| Registerret og registernummer |
Ansbach HRB 6089 |
Entydigt for hver registreret virksomhed. Ret, registertype og nummer hører sammen. |
| entity_id |
94eb910fef13f94585c48c263fa446d4 |
Til opfølgende forespørgsler. Du får det i hvert svar. |
Registernummeret alene er ikke nok, for hver registerret tildeler sine egne numre. Rækkefølgen er derimod fri: i eksemplet finder HRB 6089 Ansbach den samme virksomhed.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: DIN_API_NOEGLE" \ --data-urlencode 'q=Ansbach HRB 6089'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "DIN_API_NOEGLE"}, 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": "DIN_API_NOEGLE" }, }); const data = await response.json();
entity_id.
Finder API’et ingen virksomhed, svarer det med 404 og trækker intet. Til uskarpt input findes AI-tilstand (ai_search=on-default): den finder også virksomheden ud fra dele af navnet og researcher den på nettet. Den koster 20 ekstra kreditter, også hvis den ikke finder nogen virksomhed. Vil du have flere kandidater på én gang, så brug Søgning & eksport.
Features
Hver virksomhedsprofil indeholder grunddataene, herunder navn, selskabsform, status, registerindførsel, adresse, formål, branche, kapital og tegningsregler. Alt andet anmoder du om som feature, f.eks. related_persons for direktørerne eller financial_kpi for Finansielle nøgletal.
Flere features angiver du med en gentaget feature eller som liste: features=related_persons,financial_kpi. Hver feature optræder i svaret under sin egen nøgle. Kun publications hedder history dér.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: DIN_API_NOEGLE" \ --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": "DIN_API_NOEGLE"}, 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": "DIN_API_NOEGLE" }, }); const data = await response.json();
API’et ignorerer ukendte navne uden fejlmeddelelse, så tjek stavemåden. Features, som dit abonnement ikke omfatter, udelades og afregnes ikke.
Alle features med priser står under fetch-organization, hvert felt i Datakataloget.
Kreditter
Dataforespørgsler koster kreditter. For en virksomhedsprofil gælder disse regler:
- Grundprisen på 5 kreditter gælder, når API’et returnerer en virksomhed.
- En feature koster kun kreditter, når den returnerer data i svaret. En tom feature er gratis, også
insolvency_publicationsuden poster. - Realtid og AI-tilstand er ikke features, men tillæg med egne regler:
- Realtid koster 10 ekstra kreditter, så snart live-opslaget lykkes. Det gælder også, når det ikke viser noget nyt.
- AI-tilstand koster 20 ekstra kreditter, også hvis den ikke finder nogen virksomhed. Tillægget bortfalder kun, når API’et afbryder forespørgslen med 408, fordi den tager for lang tid.
- Alle andre fejl koster intet.
Reglen for hver enkelt feature står under Afregning, priserne under fetch-organization.
Et eksempel: grunddataene med related_persons og financial_kpi koster 5 + 2 + 1 = 8 kreditter, hvis begge features returnerer data.
Før hver forespørgsel tjekker API’et, om din saldo dækker den højest mulige pris. Gør den ikke det, svarer API’et med 402 og trækker intet. Hvad der faktisk blev trukket, står i meta.request_credit_cost, din saldo bagefter i meta.credits_remaining.
1{2 "meta": {3 "request_credit_cost": 5,4 "credits_remaining": 1455 }6}
Kreditter får du som startkreditter, hver måned med et kreditabonnement eller én gang som optankningskreditter. Uden kreditabonnement er startkreditter og optankningskreditter gyldige i 30 dage; med et aktivt abonnement udløber de ikke. Alt andet står under Afregning.
Aktuelle data og Realtid
Som standard kommer virksomhedsprofilen fra vores database. Hvor aktuel en oplysning er, afhænger af dens kilde.
Handelsregister
Grunddata, personer og registerbekendtgørelser holder vi opdateret i vores database ud fra registret. Det er hurtigt og nok til de fleste formål.
Med Realtid (realtime_mode=handelsregister-default) henter API’et Aktueller Abdruck (AD, aktuel udskrift) live fra Handelsregister (det tyske handelsregister) i det øjeblik, du forespørger, og returnerer den som JSON. Du får også de aktuelt registrerede personer i related_persons.current, uden at betale for featuren.
Om live-opslaget lykkedes, ser du i _realtime_mode.status. De 10 kreditter for Realtid trækker vi kun ved success.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: DIN_API_NOEGLE" \ --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": "DIN_API_NOEGLE"}, 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": "DIN_API_NOEGLE" }, }); 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}
Fejler live-opslaget, returnerer API’et de gemte data fra vores database. Det kan du se på _realtime_mode.status, som så ikke er success. Realtid afregnes så ikke, hvilket meta.request_credit_cost også viser.
Realtid kan betale sig, når dagens tilstand er vigtig. Du tjekker f.eks. nye forretningspartnere før underskrift eller ser, hvem der må tegne virksomheden lige nu.
Årsregnskaber
Vi leder hver dag efter nyligt offentliggjorte årsregnskaber. Virksomheder har dog op til tolv måneder efter regnskabsårets afslutning til at offentliggøre dem (§ 325 HGB), og mange udnytter hele fristen. Nogle virksomheder overskrider bevidst den lovpligtige frist og offentliggør endnu senere.
Det seneste regnskab dækker derfor ofte forrige år. Mere under Aktualitet.
Insolvensbekendtgørelser
Insolvensretterne offentliggør som regel deres bekendtgørelser på dagen for afgørelsen eller kort efter. Du får dem via featuren insolvency_publications, hver med ret, sagsnummer og dato.
Nyheder
Featuren news returnerer nyheder om virksomheden fra nettet, med titel, kilde, dato og link. Hvor aktuelle de er, afhænger af, hvornår der sidst blev skrevet om virksomheden. For små virksomheder er der ofte kun få passende artikler.
Historik og gyldighed
Mange oplysninger ændrer sig over tid. API’et returnerer derfor den nuværende tilstand og historikken side om side:
currenter tilstanden i dag.historyviser hver registreret tilstand medeffective_fromogeffective_to. Ereffective_tonull, gælder tilstanden stadig i dag.- Personer står i
related_persons.currentogrelated_persons.past, hver medstart_dateogend_date.
Hver oplysning med historik kommer fra registrene og offentliggørelserne, f.eks. fra Chronologischer Abdruck (CD, kronologisk udskrift) i Handelsregister eller fra alle offentliggjorte årsregnskaber.
Sådan ser det ud i vores eksempel for tegningsreglerne for Hetzner Online GmbH. I eksempelsvaret nævner de direktionen indtil 28. juli 2015 og direktørerne siden da:
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 fleste datoer kommer i formatet YYYY-MM-DD. Hvor langt historikken rækker tilbage, er beskrevet under Alder og historik.
Tomme værdier
Ikke alle virksomheder har en værdi for hvert felt. API’et viser det på to måder:
null: der er ingen værdi for dette felt.[]: listen har ingen poster, f.eks. ingen insolvensbekendtgørelser.
En ønsket feature uden data kommer som null eller [] og koster intet.
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}
Behandl i din kode en manglende nøgle, null og [] ens, for nogle tomme objekter kommer som []. Læs også felter via deres navne, for nøglernes rækkefølge er ikke fast.
Mangler en værdi, skal virksomheden som regel slet ikke offentliggøre den. Hvad loven kræver afhængigt af selskabsform og størrelse, er beskrevet under Datatilgængelighed. Nogle oplysninger tilbageholder vi bevidst; de har så redacted: true.
Stabilitet og versioner
API’et vokser additivt. Nye data og features kommer som nye felter. Vi fjerner aldrig eksisterende felter, vi omdøber dem ikke, og vi ændrer hverken deres type eller betydning. Det holder hver version bagudkompatibel.
Ændringer, der ville bryde eksisterende kode, kommer kun i en ny API-version, f.eks. under /v2. Den aktuelle version kører under /v1.
Lad derfor din klient ignorere ukendte felter og behandle ukendte værdier som et generelt tilfælde. Nye felter og features står i Changelog.
Abonnementer
Virksomhedsprofil, Dokumenter, Søgning & eksport og Signals kan du bruge med enhver konto, også uden kreditabonnement. Et kreditabonnement giver nye kreditter hver måned og låser op for flere data:
| Hvad du får derudover | Plus | Pro | Max |
|---|---|---|---|
| Personprofil: Personers roller og ejerandele | inkluderet | inkluderet | inkluderet |
| Søgning & eksport: Filtre for ejerskab, ledelse og insolvens | ikke inkluderet | inkluderet | inkluderet |
| Virksomhedsprofil: Over 90 udvidede finansielle nøgletal | ikke inkluderet | inkluderet | inkluderet |
| Virksomhedsprofil: Aktivitetsregnskaber fra energiselskaber (§ 6b EnWG) | ikke inkluderet | ikke inkluderet | inkluderet |
Virksomhedsprofil: Dybe ejeroplysninger (shareholders_deep) |
ikke inkluderet | ikke inkluderet | inkluderet |
Virksomhedsnetværk (network) |
ikke inkluderet | inkluderet | inkluderet |
| Signals: Insolvenser | ikke inkluderet | inkluderet | inkluderet |
| Signals: Omdannelser & M&A | ikke inkluderet | ikke inkluderet | inkluderet |
API’et udelader features uden for dit abonnement uden fejl og afregner dem ikke. Personprofiler og søgefiltre uden for dit abonnement afviser det med 403, også uden omkostninger. For Signals gælder det emner, du udtrykkeligt anmoder om; ellers får du blot alle emner i dit abonnement.
Abonnementernes priser og kreditter finder du på prissiden.