Firmenatlas API-Dokumentation
Österreichische Unternehmens-, Finanz-, Beteiligungs- und Personendaten strukturiert abrufen. Hier findest du konkrete Abläufe, Parameter und kopierbare Beispiele.
Erste Anfrage
Schnellstart
Erstelle oder rotiere deinen Key in der Accountverwaltung. Der vollständige Key wird nur einmal angezeigt. Trage ihn in Swagger unter Authorize ohne das Wort Bearer ein; in eigenen Requests wird er als Bearer-Token gesendet.
export FIRMENATLAS_API_KEY="fa_api_DEIN_VOLLSTAENDIGER_KEY"
curl "https://api.firmenatlas.com/v1/companies?query=Firmenatlas&limit=10" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY"Eine erfolgreiche Antwort enthält die Nutzdaten unter data und technische Metadaten unter meta. Alle erfolgreichen V1-Endpunkte liefern HTTP 200, auch POST-Operationen.
{
"data": {
"unternehmen": [
{
"firmenbuchnummer": "123456a",
"name": "Beispiel GmbH",
"sitz": "Wien",
"rechtsform": "Gesellschaft mit beschränkter Haftung",
"status": "Aktiv"
}
]
},
"meta": {
"requestId": "req_...",
"generatedAt": "2026-08-19T10:15:30.000Z",
"limit": 10,
"nextCursor": null,
"hasMore": false
}
}Konventionen
Grundlagen
Basis-URL
https://api.firmenatlas.comIDs und Schlüssel
| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| firmenbuchnummer | string | – | Österreichische Firmenbuchnummer ohne Leerzeichen, zum Beispiel 123456a. Sie kommt aus der Firmen- oder erweiterten Suche. |
| personId | string | – | Undurchsichtige Referenz aus GET /v1/people. Für Profil und Netzwerk genau diese ID verwenden; Personenreferenzen in Unternehmensprofilen können anders aufgebaut sein. |
| documentKey | string | – | Kommt aus der Dokumentliste. Als URL-Pfadsegment URL-encodieren und nicht selbst zusammensetzen. |
| listId / itemId | string | – | Werden von den Listen-Endpunkten zurückgegeben und anschließend unverändert verwendet. |
Pagination
Bei der ersten Anfrage lässt du cursor weg. Wenn meta.hasMore den Wert true hat, übergibst du meta.nextCursor unverändert an die nächste Anfrage. Der Cursor darf nicht interpretiert oder verändert werden.
GET /v1/companies?query=Beispiel&limit=10
GET /v1/companies?query=Beispiel&limit=10&cursor=eyJvZmZzZXQiOjEwfQAlle Endpunkte
/v1/companiesUnternehmen suchen/v1/companies/{firmenbuchnummer}Unternehmensprofil/v1/companies/{firmenbuchnummer}/financial-statementsFinanzdaten/v1/companies/{firmenbuchnummer}/documentsDokumente/v1/documents/{documentKey}/download-linkDownload-Link/v1/companies/{firmenbuchnummer}/ownershipDirekte Beziehungen/v1/companies/{firmenbuchnummer}/ownership-graphEigentümergraph/v1/companies/searchErweiterte Suche/v1/company-search/fieldsVerfügbare Suchfelder/v1/company-search/facetsFacetten und Verteilungen/v1/peoplePersonen suchen/v1/people/{personId}Personenprofil/v1/people/{personId}/relationship-graphPersonennetzwerk/v1/listsListen abrufen/v1/listsListe anlegen/v1/lists/{listId}Liste mit Einträgen/v1/lists/{listId}/itemsUnternehmen hinzufügen/v1/lists/{listId}/items/{itemId}Eintrag entfernen/v1/usageKontingent abrufenUnternehmen
Suchen und Profil abrufen
/v1/companiesDie einfache Suche ist für Namens- und Firmenbuchnummern-Lookups gedacht. Sie liefert kompakte Treffer, aber noch kein vollständiges Unternehmensprofil, und zählt nicht zum Monatskontingent.
| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| query | string | erforderlich | Firmenname, früherer Name oder Firmenbuchnummer; 1 bis 120 Zeichen. |
| limit | integer | 10 | Treffer pro Seite; zulässig sind 1 bis 20. |
| cursor | string | – | Beim ersten Aufruf leer lassen, danach meta.nextCursor übernehmen. |
/v1/companies/{firmenbuchnummer}Lädt Registerdaten, die letzten Finanzkennzahlen und kompakte Beziehungskennzahlen. Vollständige Abschlüsse und Eigentümerdaten haben eigene Endpunkte.
curl "https://api.firmenatlas.com/v1/companies/123456a" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY"Jahresabschlüsse
Finanzdaten abrufen
/v1/companies/{firmenbuchnummer}/financial-statements| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| years | string | – | Kommagetrennte Geschäftsjahre, zum Beispiel 2025,2024; maximal zwölf Jahre. |
| limit | integer | 1 | Maximale Zahl ausgelieferter Abschlüsse; zulässig sind 1 bis 12. |
| cursor | string | – | Cursor für weitere ältere Abschlüsse. |
curl "https://api.firmenatlas.com/v1/companies/123456a/financial-statements?years=2025,2024&limit=2" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY"verfuegbareGeschaeftsjahre nennt alle bekannten Jahre; ausgelieferteGeschaeftsjahre die aktuelle Antwort und fehlendeGeschaeftsjahre explizit angeforderte Jahre ohne Daten. Jeder Abschluss enthält Währung, Bilanz, Gewinn- und Verlustrechnung, Kennzahlen, Mitarbeiterwerte und Quelle.
bilanzsummeGesamtsumme der Aktiv- bzw. Passivseite
eigenkapitalBilanzielles Eigenkapital
eigenkapitalquoteEigenkapital im Verhältnis zur Bilanzsumme
jahresueberschussErgebnis des Geschäftsjahres
workingCapitalUmlaufvermögen abzüglich kurzfristiger Verpflichtungen
gesamtkapitalrentabilitaetErtrag im Verhältnis zum eingesetzten Gesamtkapital
Firmenbuchdokumente
Dokument finden und herunterladen
Der Download besteht bewusst aus zwei Schritten: zuerst den Dokument-Key finden, danach einen kurzlebigen signierten Link erzeugen.
/v1/companies/{firmenbuchnummer}/documents?limit=20/v1/documents/{documentKey}/download-link# 1. Dokumente auflisten
curl "https://api.firmenatlas.com/v1/companies/123456a/documents?limit=20" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY"
# 2. dokumentKey aus der Antwort URL-encodiert einsetzen
curl -X POST "https://api.firmenatlas.com/v1/documents/DOKUMENT_KEY/download-link" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY"downloadUrl ist standardmäßig fünf Minuten gültig. Er enthält bereits die Download-Autorisierung und sollte weder dauerhaft gespeichert noch protokolliert werden. In V1 kann derselbe Link innerhalb dieser Zeit mehrfach verwendet werden. Die Link-Erstellung zählt als Nutzung, die einzelnen Downloads werden nicht zusätzlich auf das Monatskontingent angerechnet.Analytics
Erweiterte Unternehmenssuche
/v1/companies/searchVerwende diesen Endpunkt für Filterkombinationen, ausgewählte Ergebnisfelder und Sortierung. Die gültigen öffentlichen Feldpfade kommen aus GET /v1/company-search/fields. Verfügbare Kategorien und Verteilungen liefert POST /v1/company-search/facets.
curl -X POST "https://api.firmenatlas.com/v1/companies/search" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filters": {
"rechtsformen": ["Gesellschaft mit beschränkter Haftung"],
"bundeslaender": ["Wien"],
"bilanzsumme": { "min": 1000000 }
},
"fields": [
"firmenbuchnummer",
"name",
"letztesGeschaeftsjahr.bilanzsumme"
],
"sort": {
"field": "letztesGeschaeftsjahr.bilanzsumme",
"order": "desc"
},
"page": 1,
"pageSize": 50
}'| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| filters | object | – | Filter mit deutschen öffentlichen Feldnamen. Zulässige Werte und Operatoren stehen im Felder-Endpunkt. |
| fields | string[] | – | Gewünschte Ergebnisfelder; maximal 64. Unbekannte Felder erscheinen unter ignorierteFelder. |
| sort | object | – | Sortierbares öffentliches Feld und Reihenfolge asc oder desc. |
| page | integer | 1 | Seitennummer, beginnend bei 1. |
| pageSize | integer | 50 | Ergebnisse je Seite; maximal 100. |
400 INVALID_REQUEST.Eigentum
Direkte Beziehungen und Graph
/v1/companies/{firmenbuchnummer}/ownership| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| direction | enum | both | owners: Eigentümer des Unternehmens; holdings: Beteiligungen des Unternehmens; both: beide Gruppen. |
| status | enum | current | current liefert nur aktuelle, all zusätzlich historische Beziehungen. |
| limit | integer | 50 | Beziehungen je Seite; 1 bis 100. |
| cursor | string | – | Cursor für die nächste Seite. |
/v1/companies/{firmenbuchnummer}/ownership-graph| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| direction | enum | both | upstream verfolgt Eigentümer nach oben, downstream Beteiligungen nach unten, both beide Richtungen. |
| depth | integer | 3 | Automatische Expansionstiefe ab der Wurzel; zulässig sind 1 bis 3. |
| status | enum | current | current liefert den aktuellen Graphen, all bezieht historische Beziehungen ein. |
Eine Kante zeigt immer vom Eigentümer zum Beteiligungsziel. Der Wurzelknoten hat Tiefe 0. Personen werden nicht rekursiv expandiert; eindeutig identifizierte Unternehmen schon. Zyklen werden gemeldet und nicht weiterverfolgt.
abgeschnitten sowie abbruchgruendeerklären den Abbruch.Personen
Suchen, Profil und Netzwerk
/v1/people| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| query | string | erforderlich | Name der gesuchten Person; 2 bis 120 Zeichen. |
| birthYear | integer | – | Optionales Geburtsjahr zur Unterscheidung gleichnamiger Personen. |
| limit | integer | 10 | Treffer pro Seite; 1 bis 20. |
| cursor | string | – | Cursor für die nächste Seite. |
GET /v1/people?query=Max%20Mustermann&birthYear=1975&limit=10Die Suche liefert eine personId. Verwende genau diese ID anschließend für Profil und Netzwerk. Sie ist eine undurchsichtige Routenreferenz und keine dauerhaft garantierte Stammdaten-ID. Eine Personenreferenz aus einem Unternehmensprofil kann anders aufgebaut sein und soll nicht allein anhand der ID mit Suchtreffern dedupliziert werden.
/v1/people/{personId}?status=current&limit=50Das Profil enthält Name, Geburtsdaten soweit verfügbar, Aliasnamen, Funktionen, persönliche Beteiligungen, verbundene Unternehmen und exakte Kennzahlen. Mit status=all werden auch historische Beziehungen geliefert. Die Pagination begrenzt nur die ausgelieferte Funktionsliste; Kennzahlen, verbundene Unternehmen, verbundene Personen und der Personengraph bleiben unabhängig von limit und cursor.
/v1/people/{personId}/relationship-graph?limit=100Das Netzwerk beginnt bei der Person, ergänzt direkt verbundene Unternehmen und dort verbundene Personen. Weitere Personen werden innerhalb derselben Antwort nicht rekursiv expandiert. Für weitere Tiefe rufst du deren personId als neue Wurzel auf.
Accountweite Daten
Listen verwalten
Listen gehören dem Account und stehen damit allen entsprechend berechtigten Account-Nutzern zur Verfügung. Der typische Ablauf ist: Listen abrufen oder anlegen, Unternehmen hinzufügen, Liste mit Einträgen laden.
# Liste anlegen
curl -X POST "https://api.firmenatlas.com/v1/lists" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Wiener Zielkunden" }'
# Unternehmen hinzufügen
curl -X POST "https://api.firmenatlas.com/v1/lists/LISTEN_ID/items" \
-H "Authorization: Bearer $FIRMENATLAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"firmenbuchnummer": "123456a",
"kommentar": "Im nächsten Quartal kontaktieren"
}'/v1/lists/v1/lists/v1/lists/{listId}/v1/lists/{listId}/items/v1/lists/{listId}/items/{itemId}Kontingent
Nutzung und Limits
/v1/usageREST und MCP teilen das monatliche Account-Kontingent. api_access steuert nur die REST-API-Key-Freischaltung; MCP bleibt unabhängig davon per OAuth erreichbar und seine erfolgreichen Tool-Aufrufe werden trotzdem erfasst. Einfache Firmen- und Personensuchen sowie Lookup-Metadaten zählen nicht. Erweiterte Suchen und erfolgreiche Datenabrufe zählen grundsätzlich einmal. Fehlgeschlagene Aufrufe werden nicht gezählt.
{
"data": {
"monatlichesLimit": null,
"diesenMonatVerbraucht": 27,
"diesenMonatVerbleibend": null,
"einfacheSuchenZaehlen": false,
"erweiterteSuchenZaehlen": true,
"zurueckgesetztAm": "2026-09-01T00:00:00.000Z"
}
}monatlichesLimit und diesenMonatVerbleibend null. Das kurzfristige Rate-Limit gilt trotzdem. Für MCP gelten standardmäßig zusätzlich 60 HTTP-Anfragen pro Account und Minute.Fehlerbehandlung
Fehler maschinell verarbeiten
Verlasse dich auf HTTP-Status und error.code. Die Nachricht ist für Menschen gedacht. Gib bei Support-Anfragen immer die requestId an.
{
"error": {
"code": "INVALID_REQUEST",
"message": "Die Anfrage ist ungültig.",
"details": {},
"requestId": "req_..."
}
}| Parameter | Typ | Vorgabe | Bedeutung |
|---|---|---|---|
| 400 INVALID_REQUEST | Client | – | Parameter, Filter oder Request-Body sind ungültig. |
| 401 UNAUTHENTICATED | Auth | – | API-Key fehlt, ist ungültig, abgelaufen oder gesperrt. |
| 403 INSUFFICIENT_SCOPE | Auth | – | Dem Key oder Account fehlt die erforderliche Berechtigung. |
| 404 *_NOT_FOUND | Daten | – | Unternehmen, Person, Liste oder andere Ressource wurde nicht gefunden. |
| 429 RATE_LIMITED | Limit | – | Kurzfristiges Rate-Limit erreicht; später erneut versuchen. |
| 429 MONTHLY_LIMIT_REACHED | Limit | – | Monatliches Account-Kontingent ist ausgeschöpft. |
| 500 INTERNAL_ERROR | Server | – | Unerwarteter Fehler; requestId für Support aufbewahren. |