Conceitos básicos
O que você precisa entender uma vez para lidar com segurança com qualquer resposta.
Oito conceitos sustentam a API inteira. Conhecendo-os, você lê qualquer resposta corretamente e sabe de antemão quanto uma requisição custa.
Encontrar empresas sem ambiguidade
O parâmetro q de fetch-organization aceita três tipos de entrada. Os exemplos desta página são requisições para a Hetzner Online GmbH, Ansbach HRB 6089:
| Entrada | Exemplo | Quando serve |
|---|---|---|
| Nome da empresa |
Hetzner Online GmbH |
Para começar. Escreva o nome tão completo quanto consta no registro. |
| Tribunal de registro e número de registro |
Ansbach HRB 6089 |
Único para toda empresa registrada. Tribunal, tipo de registro e número vão juntos. |
| entity_id |
94eb910fef13f94585c48c263fa446d4 |
Para requisições seguintes. Você o recebe em toda resposta. |
Só o número de registro não basta, porque cada tribunal de registro atribui seus próprios números. A ordem, por outro lado, é livre: no exemplo, HRB 6089 Ansbach encontra a mesma empresa.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: SUA_CHAVE_DE_API" \ --data-urlencode 'q=Ansbach HRB 6089'
import requests response = requests.get( "https://handelsregister.ai/api/v1/fetch-organization", headers={"x-api-key": "SUA_CHAVE_DE_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": "SUA_CHAVE_DE_API" }, }); const data = await response.json();
entity_id.
Se a API não encontra nenhuma empresa, responde com 404 e não cobra nada. Para entradas imprecisas, existe o Modo IA (ai_search=on-default): ele encontra a empresa também a partir de partes do nome e a pesquisa na web. Custa 20 créditos adicionais, mesmo que não encontre nenhuma empresa. Para obter vários candidatos de uma vez, use a Busca & Exportação.
Recursos
Todo perfil de empresa contém os dados básicos, incluindo nome, forma jurídica, situação, registro, endereço, objeto social, setor, capital e regras de representação. Todo o resto você solicita como recurso, por exemplo related_persons para os diretores ou financial_kpi para os KPIs financeiros.
Você passa vários recursos com feature repetido ou como lista: features=related_persons,financial_kpi. Cada recurso aparece na resposta sob sua própria chave. Só publications se chama history lá.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: SUA_CHAVE_DE_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": "SUA_CHAVE_DE_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": "SUA_CHAVE_DE_API" }, }); const data = await response.json();
A API ignora nomes desconhecidos sem mensagem de erro, então confira a grafia. Recursos que o seu plano não inclui são omitidos e não são cobrados.
Todos os recursos com seus preços estão em fetch-organization, cada campo no Catálogo de dados.
Créditos
Requisições de dados custam créditos. Para um perfil de empresa, valem estas regras:
- O preço base de 5 créditos vale quando a API retorna uma empresa.
- Um recurso só custa créditos quando retorna dados na resposta. Um recurso vazio é grátis, incluindo
insolvency_publicationssem entradas. - Tempo real e Modo IA não são recursos, mas acréscimos com regras próprias:
- O Tempo real custa 10 créditos adicionais assim que a consulta ao vivo é bem-sucedida. Isso vale também quando não mostra nada novo.
- O Modo IA custa 20 créditos adicionais, mesmo que não encontre nenhuma empresa. O acréscimo só deixa de ser cobrado quando a API interrompe a requisição com 408 por demorar demais.
- Todos os outros erros não custam nada.
A regra de cada recurso está em Cobrança, os preços em fetch-organization.
Um exemplo: os dados básicos com related_persons e financial_kpi custam 5 + 2 + 1 = 8 créditos se os dois recursos retornarem dados.
Antes de cada requisição, a API verifica se o seu saldo cobre o maior preço possível. Se não cobrir, a API responde com 402 e não cobra nada. O que foi realmente cobrado está em meta.request_credit_cost, o seu saldo depois em meta.credits_remaining.
1{2 "meta": {3 "request_credit_cost": 5,4 "credits_remaining": 1455 }6}
Você recebe créditos como créditos iniciais, todo mês com uma assinatura de créditos, ou uma única vez como créditos de recarga. Sem assinatura de créditos, os créditos iniciais e de recarga valem por 30 dias; com uma assinatura ativa, não expiram. Todo o resto está em Cobrança.
Dados atuais e Tempo real
Por padrão, o perfil da empresa vem do nosso banco de dados. Quão atual é uma informação depende da sua fonte.
Handelsregister
Mantemos dados básicos, pessoas e publicações do registro atualizados no nosso banco de dados a partir do registro. Isso é rápido e basta para a maioria dos fins.
Com Tempo real (realtime_mode=handelsregister-default), a API busca o Aktueller Abdruck (AD, extrato atual) ao vivo no Handelsregister (registro comercial) no momento da sua requisição e o retorna como JSON. Você também recebe as pessoas registradas no momento em related_persons.current, sem pagar pelo recurso.
Se a consulta ao vivo funcionou, aparece em _realtime_mode.status. Só cobramos os 10 créditos do Tempo real com success.
curl -G "https://handelsregister.ai/api/v1/fetch-organization" \ -H "x-api-key: SUA_CHAVE_DE_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": "SUA_CHAVE_DE_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": "SUA_CHAVE_DE_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 a consulta ao vivo falhar, a API retorna os dados armazenados no nosso banco de dados. Você percebe isso por _realtime_mode.status, que então não é success. O Tempo real então não é cobrado, como meta.request_credit_cost também mostra.
O Tempo real vale a pena quando o estado de hoje importa. Por exemplo, você verifica novos parceiros comerciais antes de assinar ou vê quem pode representar a empresa neste momento.
Demonstrações financeiras anuais
Procuramos demonstrações financeiras anuais recém-publicadas todos os dias. As empresas, porém, têm até doze meses após o fim do exercício para publicá-las (§ 325 HGB), e muitas usam o prazo inteiro. Algumas empresas perdem o prazo legal de propósito e publicam ainda mais tarde.
Por isso, a demonstração mais recente muitas vezes cobre o ano retrasado. Mais em Atualidade.
Publicações de insolvência
Os tribunais de insolvência geralmente publicam seus avisos no dia da decisão ou pouco depois. Você os recebe pelo recurso insolvency_publications, cada um com tribunal, número do processo e data.
Notícias
O recurso news retorna notícias sobre a empresa na web, com título, fonte, data e link. Quão atuais elas são depende de quando se noticiou algo sobre a empresa pela última vez. Para empresas pequenas, muitas vezes há poucas reportagens correspondentes.
Histórico e validade
Muitos dados mudam com o tempo. Por isso, a API retorna o estado atual e o histórico lado a lado:
currenté o estado de hoje.historylista cada estado registrado comeffective_fromeeffective_to. Seeffective_toénull, o estado ainda vale hoje.- Pessoas estão em
related_persons.currenterelated_persons.past, cada uma comstart_dateeend_date.
Todo dado com histórico vem dos registros e publicações, por exemplo do Chronologischer Abdruck (CD, extrato cronológico) do Handelsregister ou de todas as demonstrações financeiras anuais publicadas.
Veja como fica no nosso exemplo das regras de representação da Hetzner Online GmbH. Na resposta de exemplo, elas mencionam a diretoria executiva até 28 de julho de 2015 e, desde então, os diretores:
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}
A maioria das datas vem no formato YYYY-MM-DD. Até onde vai o histórico está descrito em Idade e histórico.
Valores vazios
Nem toda empresa tem um valor para cada campo. A API mostra isso de duas formas:
null: não há valor para este campo.[]: a lista não tem entradas, por exemplo nenhum aviso de insolvência.
Um recurso solicitado sem dados vem como null ou [] e não custa nada.
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}
No seu código, trate uma chave ausente, null e [] da mesma forma, porque alguns objetos vazios vêm como []. Leia também os campos pelos nomes, porque a ordem das chaves não é fixa.
Se falta um valor, a empresa geralmente nem é obrigada a publicá-lo. O que a lei exige conforme a forma jurídica e o porte está descrito em Disponibilidade de dados. Alguns dados retemos de propósito; eles trazem então redacted: true.
Estabilidade e versões
A API cresce de forma aditiva. Novos dados e recursos chegam como novos campos. Nunca removemos campos existentes, não os renomeamos e não mudamos nem o tipo nem o significado deles. Assim, toda versão continua retrocompatível.
Mudanças que quebrariam código existente só vêm numa nova versão da API, por exemplo em /v2. A versão atual roda em /v1.
Por isso, faça seu cliente ignorar campos desconhecidos e tratar valores desconhecidos como caso geral. Novos campos e recursos estão listados no Changelog.
Planos
Você pode usar Perfil da empresa, Documentos, Busca & Exportação e Signals com qualquer conta, mesmo sem assinatura de créditos. Uma assinatura de créditos traz novos créditos todo mês e libera mais dados:
| O que você recebe a mais | Plus | Pro | Max |
|---|---|---|---|
| Perfil de pessoa: Cargos e participações de pessoas | incluído | incluído | incluído |
| Busca & Exportação: Filtros por propriedade, gestão e insolvência | não incluído | incluído | incluído |
| Perfil da empresa: Mais de 90 indicadores financeiros avançados | não incluído | incluído | incluído |
| Perfil da empresa: Demonstrações por atividade de concessionárias de energia (§ 6b EnWG) | não incluído | não incluído | incluído |
Perfil da empresa: Sócios em profundidade (shareholders_deep) |
não incluído | não incluído | incluído |
Rede da empresa (network) |
não incluído | incluído | incluído |
| Signals: Insolvências | não incluído | incluído | incluído |
| Signals: Transformações & M&A | não incluído | não incluído | incluído |
A API omite recursos fora do seu plano sem erro e não os cobra. Perfis de pessoas e filtros de busca fora do seu plano ela recusa com 403, também sem custo. Para Signals, isso vale para temas que você solicita explicitamente; sem isso, você simplesmente recebe todos os temas do seu plano.
Os preços e créditos dos planos estão na página de preços.