Ladda ner dokument
Registerutdrag, delägarförteckningar och bolagsordningar som filer.
fetch-document hämtar ett dokument från Handelsregister (handelsregistret) och returnerar det som fil: som PDF, eller som XML för det strukturerade registerinnehållet. Allt du behöver är företagets entity_id, se Hämta en företagsprofil.
Välj dokumenttyp
Det finns fem dokumenttyper. Du skickar typen i document_type, skriven exakt som i tabellen, inklusive versaler och gemener.
| document_type | Dokument | Format | För |
|---|---|---|---|
| AD | Aktueller Abdruck (aktuellt utdrag): alla anteckningar som gäller i dag | varje registrerat företag | |
| CD | Chronologischer Abdruck (kronologiskt utdrag): alla anteckningar i kronologisk ordning | varje registrerat företag | |
| SI | Strukturierter Registerinhalt (strukturerat registerinnehåll) i XJustiz-formatet, maskinläsbart | XML | varje registrerat företag |
| shareholders_list | Gesellschafterliste (delägarförteckning) | GmbH och UG | |
| articles_of_association | Satzung eller Gesellschaftsvertrag (bolagsordning) | Kapitalbolag och kooperativ |
Hämta ett dokument
Skicka entity_id som company_id och typen som document_type. Svaret är själva filen, inte JSON. Vår exempelförfrågan sparar Aktueller Abdruck för Hetzner Online GmbH, Ansbach HRB 6089.
curl -G "https://handelsregister.ai/api/v1/fetch-document" \ -H "x-api-key: DIN_API_NYCKEL" \ --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_NYCKEL"}, 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"], "krediter debiterade")
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_NYCKEL" }, 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"), "krediter debiterade");
Eftersom svaret inte är JSON står uppgifterna om det i headers:
| Fält | Betydelse |
|---|---|
| Content-Type |
application/pdf, för det strukturerade registerinnehållet application/xml. |
| Content-Disposition | Filnamnet med entity_id, typ och den dag då dokumentet kom från registret. |
| X-Credits-Charged | Vad förfrågan kostade. |
| X-Credits-Remaining | Ditt saldo efteråt. |
Om dokumentet inte finns för företaget får du HTTP 404 utan kostnad.
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}
Hämta i bakgrunden
Om din klient inte kan vänta så länge sätter du async=true. Om dokumentet redan finns kommer det direkt. Annars svarar API:et med HTTP 202 och anger väntetiden i sekunder i Retry-After. I exemplet hämtar vi Chronologischer Abdruck för SAP SE, Mannheim HRB 719915.
curl -G "https://handelsregister.ai/api/v1/fetch-document" \ -H "x-api-key: DIN_API_NYCKEL" \ --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_NYCKEL"}, 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_NYCKEL" }, }); 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}
Upprepa samma förfrågan efter denna tid, så kommer filen med HTTP 200. Bara den levererade filen kostar krediter; 202-svaret är gratis. Om ingen kapacitet är ledig just nu får du HTTP 503, också med Retry-After.
Varje upprepning räknas mot gränsen. Vänta därför den angivna tiden i stället för att fråga igen med korta intervall.
Kostnader och gränser
| Vad | Krediter |
|---|---|
| Ett levererat dokument | 15 |
Gräns: 5 förfrågningar per minut. Sökning, dokument och Signals delar en kvot på 60 förfrågningar per minut.
Varje levererat dokument kostar 15 krediter, oavsett typ. Eftersom varje dokument kommer från registret har fetch-document en egen, lägre gräns på 5 förfrågningar per minut.
Med en Idempotency-Key betalar du för ett dokument bara en gång, även om du upprepar förfrågan efter att den avbrutits. Mer under Gränser.
Retry-After. API:et debiterar ingenting. Försök igen efter några minuter.
Vanliga fallgropar
- Registernummer i stället för entity_id:
company_idtar bara emot det 32 tecken långa entity_id.Ansbach HRB 6089ger HTTP 400. - Delägarförteckning för andra bolagsformer: Den finns bara för GmbH och UG. För ett KG eller en enskild näringsidkare får du HTTP 404.
- Dokument som bildfiler: Om ett dokument bara finns som TIFF i registret svarar API:et med HTTP 415 och debiterar ingenting.