REST-API · x-api-key · OpenAPI 3.0.1

Libraries und SDKs

Für JavaScript und TypeScript gibt es einen offiziellen Client auf npm. Für alle anderen Sprachen ist die Firmenakte-API eine gewöhnliche REST-API mit dem Header x-api-key: Python und PHP sprechen sie direkt über ihre HTTP-Bibliothek an, und aus der OpenAPI-Spezifikation lässt sich ein typisierter Client für die meisten Sprachen generieren.

Was es je Sprache gibt

SpracheStandWomit gearbeitet wird
JavaScript / TypeScriptOffizielles Paket@firmenakte/api-client auf npm – typisierte Methoden für jeden Endpoint, Key im Konstruktor.
PythonKein Paket – direkt über HTTPEs gibt kein Firmenakte-Paket auf PyPI. Ein Aufruf mit requests und dem Header x-api-key ist vier Zeilen lang.
PHPKein Paket – direkt über HTTPEs gibt kein Firmenakte-Paket auf Packagist. cURL oder Guzzle mit dem Header x-api-key genügt.
Andere SprachenClient generierenDie OpenAPI-Spezifikation beschreibt alle 36 Endpoints; ein Generator baut daraus einen Client für Java, Go, C#, Rust und weitere.

TypeScript und JavaScript: @firmenakte/api-client

Der offizielle Client ist aus der OpenAPI-Spezifikation generiert und bildet jeden Endpoint als Methode ab – v1BusinessesDetail für ein Firmenprofil, v1BusinessesList für den Screener, dazu Personen, Gewerbe, Edikte, Dokumente und die Change-Feeds. Der API-Key geht in createApiClient({ apiKey }); den Header x-api-key setzt der Client selbst. Antworten sind typisiert, die Nutzdaten stehen unter .data.

npm install @firmenakte/api-client
# oder: pnpm add @firmenakte/api-client · bun add @firmenakte/api-client
import { createApiClient } from "@firmenakte/api-client";

const client = createApiClient({ apiKey: process.env.FIRMENAKTE_KEY! });

// Vollständiges Firmenprofil zu einer Firmenbuchnummer
const porr = await client.v1BusinessesDetail("34853f");
console.log(porr.data.name, porr.data.isActive);

// Screener: aktive GmbHs (Code GES) in Wien nach Umsatz
const treffer = await client.v1BusinessesList({
  city: ["Wien"],
  legalFormCode: ["GES"],
  active: true,
  orderBy: "guv.Umsatzerloese",
  orderByDescending: true,
  pageSize: 50,
});
for (const b of treffer.data.data ?? []) console.log(b.name);

Python: direkt über HTTP

Ein Firmenakte-Paket für Python gibt es heute nicht, und diese Seite sagt das, statt eines zu versprechen. Nötig ist es für den Anfang auch nicht: Die API ist eine gewöhnliche REST-API, der Key steht im Header x-api-key, und die Antwort ist JSON.

import os, requests

BASE = "https://api.firmenakte.at/api/v1"
headers = {"x-api-key": os.environ["FIRMENAKTE_KEY"]}

# Vollständiges Firmenprofil zu einer Firmenbuchnummer
profil = requests.get(f"{BASE}/businesses/34853f", headers=headers).json()
print(profil["name"], profil["isActive"])

# Screener: aktive GmbHs (Code GES) in Wien nach Umsatz
treffer = requests.get(
    f"{BASE}/businesses",
    headers=headers,
    params={"city": "Wien", "legalFormCode": "GES", "active": True,
            "orderBy": "guv.Umsatzerloese", "orderByDescending": True,
            "pageSize": 50},
).json()

PHP: direkt über HTTP

Für PHP gilt dasselbe: kein Paket auf Packagist, sondern ein Aufruf mit cURL oder Guzzle und demselben Header. Query-Parameter werden ganz normal an die URL gehängt; http_build_query kodiert sie richtig.

<?php
$base = "https://api.firmenakte.at/api/v1";
$headers = ["x-api-key: " . getenv("FIRMENAKTE_KEY"), "Accept: application/json"];

// Vollständiges Firmenprofil zu einer Firmenbuchnummer
$ch = curl_init("$base/businesses/34853f");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers]);
$profil = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $profil["name"], " ", var_export($profil["isActive"], true), "\n";

// Screener: aktive GmbHs (Code GES) in Wien nach Umsatz
$query = http_build_query([
    "city" => "Wien",
    "legalFormCode" => "GES",
    "active" => "true",
    "orderBy" => "guv.Umsatzerloese",
    "orderByDescending" => "true",
    "pageSize" => 50,
]);
$ch = curl_init("$base/businesses?$query");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers]);
$treffer = json_decode(curl_exec($ch), true);
curl_close($ch);

Eigenen Client generieren

Die OpenAPI-Spezifikation der Firmenakte-API beschreibt alle 36 Endpoints mit Parametern und Antwortfeldern. Daraus erzeugt ein Generator einen typisierten Client für die meisten Sprachen – der offizielle TypeScript-Client entsteht auf demselben Weg. Dieselbe Datei importieren auch Postman und Insomnia.

# Beispiel: Python-Client mit dem OpenAPI Generator
npx @openapitools/openapi-generator-cli generate \
  -i https://docs.firmenakte.at/openapi.json \
  -g python \
  -o ./firmenakte-client

Häufige Fragen

Gibt es ein offizielles Python- oder PHP-SDK?

Nein. Der einzige offizielle Client ist das TypeScript/JavaScript-Paket @firmenakte/api-client auf npm. Für Python und PHP gibt es kein Firmenakte-Paket; beide Sprachen sprechen die REST-API direkt über ihre HTTP-Bibliothek an, mit dem API-Key im Header x-api-key. Ein typisierter Client lässt sich aus der OpenAPI-Spezifikation generieren.

Wie authentifiziert sich ein Client?

Über den Header x-api-key mit dem API-Key aus dem Dashboard. Es gibt kein OAuth und keinen Token-Tausch. Der TypeScript-Client nimmt den Key im Konstruktor entgegen und setzt den Header selbst.

Wofür ist die OpenAPI-Spezifikation gut?

Sie beschreibt alle 36 Endpoints der Firmenakte-API samt Parametern und Antwortfeldern maschinenlesbar. Generatoren wie der OpenAPI Generator bauen daraus einen Client für Java, Go, C#, Rust und weitere Sprachen; Werkzeuge wie Postman oder Insomnia importieren sie direkt.

Braucht ein KI-Agent auch einen Client?

Nein. Für KI-Agenten gibt es den MCP-Server der Firmenakte, der die API-Endpoints als Werkzeuge bereitstellt. Ein Agent in Claude Desktop, Cursor oder n8n verbindet sich damit, ohne dass eine Zeile Client-Code geschrieben wird.

Key erstellen und loslegen

Der Key aus dem Dashboard funktioniert in jeder Sprache gleich: als Header x-api-key. Für KI-Agenten gibt es statt eines Clients den MCP-Server.