Concetti di base
Cosa devi capire una volta per gestire con sicurezza ogni risposta.
Otto concetti reggono l’intera API. Una volta che li conosci, leggi correttamente ogni risposta e sai in anticipo quanto costa una richiesta.
Trovare aziende in modo univoco
Il parametro q di fetch-organization accetta tre tipi di input. Gli esempi in questa pagina sono richieste per Hetzner Online GmbH, Ansbach HRB 6089:
| Input | Esempio | Quando conviene |
|---|---|---|
| Nome dell’azienda |
Hetzner Online GmbH |
Per iniziare. Scrivi il nome completo come compare nel registro. |
| Tribunale del registro e numero di registro |
Ansbach HRB 6089 |
Univoco per ogni azienda iscritta. Tribunale, tipo di registro e numero vanno insieme. |
| entity_id |
94eb910fef13f94585c48c263fa446d4 |
Per le richieste successive. Lo ricevi in ogni risposta. |
Il numero di registro da solo non basta, perché ogni tribunale del registro assegna i propri numeri. L’ordine invece è libero: nell’esempio, HRB 6089 Ansbach trova la stessa azienda.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: LA_TUA_CHIAVE_API" \ --data-urlencode 'q=Ansbach HRB 6089'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "LA_TUA_CHIAVE_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": "LA_TUA_CHIAVE_API" }, }); const data = await response.json();
entity_id.
Se l’API non trova alcuna azienda, risponde con 404 e non addebita nulla. Per input imprecisi c’è la Modalità AI (ai_search=on-default): trova l’azienda anche da parti del nome e la ricerca sul web. Costa 20 crediti in più, anche se non trova alcuna azienda. Per ottenere più candidati in una volta usa Ricerca & Export.
Feature
Ogni profilo aziendale contiene i dati di base, tra cui nome, forma giuridica, stato, iscrizione nel registro, indirizzo, oggetto sociale, settore, capitale e regole di rappresentanza. Tutto il resto lo richiedi come feature, ad esempio related_persons per gli amministratori o financial_kpi per i KPI finanziari.
Più feature le passi ripetendo feature o come lista: features=related_persons,financial_kpi. Ogni feature compare nella risposta sotto una propria chiave. Solo publications lì si chiama history.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: LA_TUA_CHIAVE_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": "LA_TUA_CHIAVE_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": "LA_TUA_CHIAVE_API" }, }); const data = await response.json();
L’API ignora i nomi sconosciuti senza messaggio di errore, quindi controlla l’ortografia. Le feature non incluse nel tuo piano vengono omesse e non addebitate.
Tutte le feature con i loro prezzi sono elencate in fetch-organization, ogni campo nel Catalogo dati.
Crediti
Le richieste di dati costano crediti. Per un profilo aziendale valgono queste regole:
- Il prezzo base di 5 crediti si applica quando l’API restituisce un’azienda.
- Una feature costa crediti solo se restituisce dati nella risposta. Una feature vuota è gratuita, anche
insolvency_publicationssenza voci. - Tempo reale e Modalità AI non sono feature ma supplementi con regole proprie:
- Tempo reale costa 10 crediti in più non appena il recupero in diretta riesce. Vale anche quando non mostra nulla di nuovo.
- La Modalità AI costa 20 crediti in più, anche se non trova alcuna azienda. Il supplemento decade solo se l’API interrompe la richiesta con 408 perché dura troppo.
- Tutti gli altri errori non costano nulla.
La regola per ogni singola feature è in Fatturazione, i prezzi in fetch-organization.
Un esempio: i dati di base con related_persons e financial_kpi costano 5 + 2 + 1 = 8 crediti se entrambe le feature restituiscono dati.
Prima di ogni richiesta l’API controlla se il tuo saldo copre il prezzo più alto possibile. Se non lo copre, risponde con 402 e non addebita nulla. Quanto è stato effettivamente addebitato è in meta.request_credit_cost, il tuo saldo dopo in meta.credits_remaining.
1{2 "meta": {3 "request_credit_cost": 5,4 "credits_remaining": 1455 }6}
Ricevi crediti come crediti iniziali, ogni mese con un abbonamento a crediti oppure una tantum come crediti di ricarica. Senza abbonamento a crediti, i crediti iniziali e di ricarica valgono 30 giorni; con un abbonamento attivo non scadono. Tutto il resto è in Fatturazione.
Dati aggiornati e Tempo reale
Di norma il profilo aziendale viene dal nostro database. Quanto è aggiornata un’informazione dipende dalla sua fonte.
Handelsregister
Dati di base, persone e pubblicazioni del registro li manteniamo aggiornati nel nostro database a partire dal registro. È veloce e basta per la maggior parte degli scopi.
Con Tempo reale (realtime_mode=handelsregister-default) l’API recupera l’Aktueller Abdruck (AD, estratto attuale) in diretta dall’Handelsregister (registro delle imprese) nel momento della tua richiesta e lo restituisce in JSON. Ricevi anche le persone attualmente iscritte in related_persons.current, senza pagare la feature.
Se il recupero in diretta è riuscito lo indica _realtime_mode.status. Addebitiamo i 10 crediti per Tempo reale solo con success.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: LA_TUA_CHIAVE_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": "LA_TUA_CHIAVE_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": "LA_TUA_CHIAVE_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}
Se il recupero in diretta fallisce, l’API restituisce i dati salvati nel nostro database. Lo riconosci da _realtime_mode.status, che in quel caso non è success. Tempo reale allora non viene addebitato, come mostra anche meta.request_credit_cost.
Tempo reale conviene quando conta lo stato di oggi. Ad esempio, verifichi nuovi partner commerciali prima di firmare o vedi chi può rappresentare l’azienda in questo momento.
Bilanci d’esercizio
Cerchiamo ogni giorno i bilanci d’esercizio appena pubblicati. Le aziende però hanno fino a dodici mesi dalla chiusura dell’esercizio per pubblicarli (§ 325 HGB), e molte sfruttano tutto il termine. Alcune aziende mancano di proposito il termine di legge e pubblicano ancora più tardi.
L’ultimo bilancio riguarda quindi spesso l’anno precedente a quello scorso. Maggiori dettagli in Aggiornamento.
Pubblicazioni sulle insolvenze
I tribunali fallimentari pubblicano di solito i loro avvisi il giorno della decisione o poco dopo. Li ricevi tramite la feature insolvency_publications, ciascuno con tribunale, numero di procedimento e data.
Notizie
La feature news restituisce notizie sull’azienda dal web, con titolo, fonte, data e link. Quanto sono aggiornate dipende da quando si è parlato dell’azienda l’ultima volta. Per le piccole aziende ci sono spesso solo pochi articoli pertinenti.
Storico e validità
Molti dati cambiano nel tempo. Per questo l’API restituisce lo stato attuale e lo storico uno accanto all’altro:
currentè lo stato a oggi.historyelenca ogni stato iscritto coneffective_fromedeffective_to. Seeffective_toènull, lo stato vale ancora oggi.- Le persone sono in
related_persons.currenterelated_persons.past, ciascuna constart_dateedend_date.
Ogni dato con storico viene dai registri e dalle pubblicazioni, ad esempio dal Chronologischer Abdruck (CD, estratto cronologico) dell’Handelsregister o da tutti i bilanci d’esercizio pubblicati.
Ecco come appare nel nostro esempio per le regole di rappresentanza di Hetzner Online GmbH. Nella risposta di esempio nominano il consiglio di gestione fino al 28 luglio 2015 e da allora gli amministratori:
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 maggior parte delle date arriva nel formato YYYY-MM-DD. Fin dove arriva lo storico è descritto in Età e storico.
Valori vuoti
Non ogni azienda ha un valore per ogni campo. L’API lo indica in due modi:
null: per questo campo non c’è alcun valore.[]: la lista non ha voci, ad esempio nessuna pubblicazione sulle insolvenze.
Una feature richiesta senza dati arriva come null o [] e non costa nulla.
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}
Nel tuo codice tratta allo stesso modo una chiave mancante, null e [], perché alcuni oggetti vuoti arrivano come []. Leggi inoltre i campi per nome, perché l’ordine delle chiavi non è fisso.
Se un valore manca, di solito l’azienda non è affatto tenuta a pubblicarlo. Cosa prevede la legge a seconda di forma giuridica e dimensione è descritto in Disponibilità dei dati. Alcuni dati li tratteniamo di proposito; in quel caso riportano redacted: true.
Stabilità e versioni
L’API cresce in modo additivo. Nuovi dati e feature arrivano come nuovi campi. Non rimuoviamo mai campi esistenti, non li rinominiamo e non ne cambiamo né il tipo né il significato. Così ogni versione resta retrocompatibile.
Le modifiche che romperebbero il codice esistente arrivano solo in una nuova versione dell’API, ad esempio sotto /v2. La versione attuale gira sotto /v1.
Fai quindi in modo che il tuo client ignori i campi sconosciuti e tratti i valori sconosciuti come caso generico. Nuovi campi e feature sono elencati nel Changelog.
Piani
Profilo aziendale, Documenti, Ricerca & Export e Signals li puoi usare con ogni account, anche senza abbonamento a crediti. Un abbonamento a crediti porta nuovi crediti ogni mese e sblocca più dati:
| Cosa ottieni in più | Plus | Pro | Max |
|---|---|---|---|
| Profilo persona: Ruoli e partecipazioni delle persone | incluso | incluso | incluso |
| Ricerca & Export: Filtri per proprietà, direzione e insolvenza | non incluso | incluso | incluso |
| Profilo aziendale: Oltre 90 indicatori finanziari estesi | non incluso | incluso | incluso |
| Profilo aziendale: Bilanci per attività dei fornitori di energia (§ 6b EnWG) | non incluso | non incluso | incluso |
Profilo aziendale: Soci approfonditi (shareholders_deep) |
non incluso | non incluso | incluso |
Rete aziendale (network) |
non incluso | incluso | incluso |
| Signals: Insolvenze | non incluso | incluso | incluso |
| Signals: Trasformazioni & M&A | non incluso | non incluso | incluso |
L’API omette senza errore le feature fuori dal tuo piano e non le addebita. Rifiuta con 403 i profili persona e i filtri di ricerca fuori dal tuo piano, anche questo senza costi. Per Signals questo vale per i temi che richiedi esplicitamente; altrimenti ricevi semplicemente tutti i temi del tuo piano.
Prezzi e crediti dei piani li trovi nella pagina prezzi.