Download dokumenter
Registerudskrifter, ejerlister og vedtægter som filer.
fetch-document henter et dokument fra Handelsregister (det tyske handelsregister) og returnerer det som fil: som PDF eller som XML for det strukturerede registerindhold. Alt, du skal bruge, er virksomhedens entity_id, se Hent en virksomhedsprofil.
Vælg dokumenttypen
Der er fem dokumenttyper. Du angiver typen i document_type, skrevet præcis som i tabellen, inklusive store og små bogstaver.
| document_type | Dokument | Format | For |
|---|---|---|---|
| AD | Aktueller Abdruck (aktuel udskrift): alle indførsler, der gælder i dag | hver registreret virksomhed | |
| CD | Chronologischer Abdruck (kronologisk udskrift): alle indførsler i kronologisk rækkefølge | hver registreret virksomhed | |
| SI | Strukturierter Registerinhalt (struktureret registerindhold) i XJustiz-formatet, maskinlæsbart | XML | hver registreret virksomhed |
| shareholders_list | Gesellschafterliste (ejerliste) | GmbH og UG | |
| articles_of_association | Satzung eller Gesellschaftsvertrag (vedtægter) | Kapitalselskaber og andelsselskaber |
Hent et dokument
Angiv entity_id som company_id og typen som document_type. Svaret er selve filen, ikke JSON. Vores eksempelforespørgsel gemmer Aktueller Abdruck for Hetzner Online GmbH, Ansbach HRB 6089.
curl -G "https://handelsregister.ai/api/v1/fetch-document" \ -H "x-api-key: DIN_API_NOEGLE" \ --data-urlencode "company_id=94eb910fef13f94585c48c263fa446d4" \ --data-urlencode "document_type=AD" \ --fail-with-body --max-time 120 \ -o hetzner-ad.pdf
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-document", headers={"x-api-key": "DIN_API_NOEGLE"}, params={ "company_id": "94eb910fef13f94585c48c263fa446d4", "document_type": "AD", }, timeout=120, ) response.raise_for_status() with open("hetzner-ad.pdf", "wb") as file: file.write(response.content) print(response.headers["X-Credits-Charged"], "kreditter trukket")
import { writeFile } from "node:fs/promises"; const url = new URL("https://handelsregister.ai/api/v1/fetch-document"); url.searchParams.append("company_id", "94eb910fef13f94585c48c263fa446d4"); url.searchParams.append("document_type", "AD"); const response = await fetch(url, { headers: { "x-api-key": "DIN_API_NOEGLE" }, signal: AbortSignal.timeout(120_000), }); if (!response.ok) throw new Error(`HTTP ${response.status}`); await writeFile("hetzner-ad.pdf", Buffer.from(await response.arrayBuffer())); console.log(response.headers.get("x-credits-charged"), "kreditter trukket");
Fordi svaret ikke er JSON, står oplysningerne om det i headers:
| Felt | Betydning |
|---|---|
| Content-Type |
application/pdf, for det strukturerede registerindhold application/xml. |
| Content-Disposition | Filnavnet med entity_id, type og den dag, dokumentet kom fra registret. |
| X-Credits-Charged | Hvad forespørgslen kostede. |
| X-Credits-Remaining | Din saldo bagefter. |
Findes dokumentet ikke for virksomheden, får du HTTP 404 uden omkostninger.
1{2 "error": "Document fetch failed",3 "message": "Document not available for this company. It may not exist or may become available later.",4 "meta": {5 "request_credit_cost": 0,6 "credits_remaining": 1457 }8}
Hent i baggrunden
Kan din klient ikke vente så længe, så sæt async=true. Er dokumentet allerede tilgængeligt, kommer det med det samme. Ellers svarer API’et med HTTP 202 og angiver ventetiden i sekunder i Retry-After. I eksemplet henter vi Chronologischer Abdruck for SAP SE, Mannheim HRB 719915.
curl -G "https://handelsregister.ai/api/v1/fetch-document" \ -H "x-api-key: DIN_API_NOEGLE" \ --data-urlencode 'company_id=e3918174fb6c5d04e5e217e6ee4a6ffe' \ --data-urlencode 'document_type=CD' \ --data-urlencode 'async=true'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-document", headers={"x-api-key": "DIN_API_NOEGLE"}, params={ "company_id": "e3918174fb6c5d04e5e217e6ee4a6ffe", "document_type": "CD", "async": "true", }, ) data = response.json()
const url = new URL("https://handelsregister.ai/api/v1/fetch-document"); url.searchParams.append("company_id", "e3918174fb6c5d04e5e217e6ee4a6ffe"); url.searchParams.append("document_type", "CD"); url.searchParams.append("async", "true"); const response = await fetch(url, { headers: { "x-api-key": "DIN_API_NOEGLE" }, }); const data = await response.json();
1{2 "status": "processing",3 "meta": {4 "message": "The document is being retrieved. Repeat this request after Retry-After seconds to receive it.",5 "retry_after": 20,6 "request_credit_cost": 0,7 "credits_remaining": 1458 }9}
Gentag den samme forespørgsel efter denne tid, så kommer filen med HTTP 200. Kun den leverede fil koster kreditter; 202-svaret er gratis. Er der ingen ledig kapacitet lige nu, får du HTTP 503, også med Retry-After.
Hver gentagelse tæller med i grænsen. Vent derfor den angivne tid i stedet for at spørge igen med korte mellemrum.
Omkostninger og grænser
| Hvad | Kreditter |
|---|---|
| Ét leveret dokument | 15 |
Grænse: 5 forespørgsler pr. minut. Søgning, dokumenter og Signals deler en kvote på 60 forespørgsler pr. minut.
Hvert leveret dokument koster 15 kreditter, uanset type. Fordi hvert dokument kommer fra registret, har fetch-document sin egen, lavere grænse på 5 forespørgsler pr. minut.
Med en Idempotency-Key betaler du kun for et dokument én gang, også hvis du gentager forespørgslen, efter at den blev afbrudt. Mere under Grænser.
Retry-After. API’et afregner intet. Prøv igen efter nogle minutter.
Typiske faldgruber
- Registernummer i stedet for entity_id:
company_idtager kun det 32 tegn lange entity_id.Ansbach HRB 6089returnerer HTTP 400. - Ejerliste for andre selskabsformer: Den findes kun for GmbH og UG. For en KG eller en enkeltmandsvirksomhed får du HTTP 404.
- Dokumenter som billedfiler: Findes et dokument kun som TIFF i registret, svarer API’et med HTTP 415 og afregner intet.