Die Automobil Insolvenzen-API liefert jede amtliche Insolvenzbekanntmachung aus Deutschland als strukturierte Daten: täglich, filterbar nach Verfahrensart, Bundesland und Gericht, verknüpft mit Firmenprofilen und veröffentlichten Bilanzen. Schlichtes HTTPS und JSON, auf Wunsch CSV.
Stand: 2026-09-29
Schlüssel vergeben wir von Hand. Schreiben Sie kurz, was Sie bauen möchten und mit welchem Volumen Sie rechnen, dann ist der Zugang meist innerhalb eines Werktags freigeschaltet.
Deutsche Insolvenzgerichte veröffentlichen jeden Verfahrensschritt auf dem amtlichen Portal insolvenzbekanntmachungen.de: Sicherungsmaßnahmen, Eröffnung, Abweisung mangels Masse, Verteilungsverzeichnis, Restschuldbefreiung. Das Portal ist für die Einzelrecherche gebaut, nicht für die Weiterverarbeitung. Es hat keine Schnittstelle, keinen Export und löscht Bekanntmachungen nach gesetzlichen Fristen.
Die API schließt diese Lücke. Wir erfassen jede neue Bekanntmachung am Tag der Veröffentlichung, vereinheitlichen Gericht, Bundesland, Registernummer und Verfahrensart, ordnen sie einem Firmenprofil zu und stellen sie als JSON oder CSV bereit. Kreditversicherer, Inkassounternehmen, Kanzleien, Kreditmanagement-Teams und Datenjournalisten speisen damit ihre eigenen Systeme.
Alle Anfragen gehen an https://automobilinsolvenzen.de/api/v1. Die API spricht ausschließlich HTTPS, nimmt JSON an und antwortet mit JSON. Ein SDK ist nicht nötig: Jede Sprache, die eine HTTP-Anfrage senden kann, genügt. Die Beispiele auf dieser Seite nutzen curl, Python und Node.
Die API ist Teil eines Automobil Insolvenzen-Abonnements mit freigeschaltetem API-Zugang. Konditionen richten sich nach Volumen und Einsatzzweck und werden individuell vereinbart.
Eine Selbstregistrierung gibt es bewusst nicht. Wir schalten Schlüssel von Hand frei, weil Insolvenzdaten personenbezogene Daten enthalten und wir wissen möchten, wofür eine Anbindung gedacht ist. In der Praxis ist das eine kurze Nachricht und ein Werktag.
Nutzen Sie das Kontaktformular oder schreiben Sie an [email protected] und nennen Sie vier Dinge:
Sie erhalten dann einen persönlichen Schlüssel, der sofort auf allen Endpunkten funktioniert, die Ihr Vertrag abdeckt. Ein Konto kann mehrere aktive Schlüssel haben, sodass sich ein Schlüssel ohne Ausfall austauschen lässt.
Jede Anfrage trägt den Schlüssel im Header X-API-Key. Alternativ akzeptiert die API denselben Schlüssel als Bearer-Token im Header Authorization, praktisch für Werkzeuge, die nur diesen Header kennen.
X-API-Key: YOUR_API_KEY
# equivalent
Authorization: Bearer YOUR_API_KEY
Ohne Schlüssel antwortet die API mit 401 missing_api_key. Ein unbekannter oder deaktivierter Schlüssel ergibt 403 invalid_api_key, ein abgelaufenes Abonnement 403 subscription_expired. Der Grund steht immer im Feld error der Antwort.
Behandeln Sie den Schlüssel wie ein Passwort: nur serverseitig verwenden, nie in Frontend-Code, nie in einem öffentlichen Repository. Ist ein Schlüssel nach außen gelangt, sagen Sie uns Bescheid, dann sperren wir ihn sofort und stellen einen neuen aus.
Die häufigste Anfrage ist zugleich die einfachste: alle Eröffnungen, Sicherungsmaßnahmen und Abweisungen eines Tages. Ein Aufruf, keine seitenweise Abfrage, die Antwort kommt in unter einer Sekunde.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
"https://automobilinsolvenzen.de/api/v1/filings?date=2026-09-28&types=eroeffnung,sicherung,abweisung"
Ohne Datum liefert die API den Vortag. Damit ist ein täglicher Abgleich trivial: Ein Cron-Eintrag kurz nach 6 Uhr holt die Meldungen von gestern und schreibt sie in Ihr System. Gerichte veröffentlichen an Werktagen, an Sonn- und Feiertagen ist das Ergebnis deshalb meist leer oder sehr kurz.
Für einen historischen Nachlauf gehen Sie den Zeitraum in Fenstern von höchstens 31 Tagen durch:
import os, datetime, requests
API = "https://automobilinsolvenzen.de/api/v1"
HEAD = {"X-API-Key": os.environ["INSOLVENCY_API_KEY"]}
# Backfill a quarter in 31-day windows, then keep running daily.
start, end = datetime.date(2026, 7, 1), datetime.date(2026, 9, 28)
day = start
while day <= end:
stop = min(day + datetime.timedelta(days=30), end)
r = requests.get(API + "/filings", headers=HEAD, params={
"date_from": day.isoformat(),
"date_to": stop.isoformat(),
"types": "eroeffnung,abweisung",
}, timeout=60)
r.raise_for_status()
for f in r.json()["filings"]:
print(f["date"], f["aktenzeichen"], f["name"])
day = stop + datetime.timedelta(days=1)
| Methode | Pfad | Zweck |
|---|---|---|
| GET | /v1/filings | Bekanntmachungen eines Tages oder Zeitraums, filterbar nach Art, Bundesland, Gericht und Name. |
| GET | /v1/filings/{id} | Eine einzelne Bekanntmachung mit Volltext. |
| GET | /v1/companies | Firmen suchen, die in mindestens einer Bekanntmachung vorkommen. |
| GET | /v1/companies/{id} | Firmenprofil mit aktuellem Verfahrensstand. |
| GET | /v1/companies/{id}/filings | Alle Bekanntmachungen einer Firma in zeitlicher Reihenfolge. |
| GET | /v1/companies/{id}/financials | Veröffentlichte Bilanzzahlen der letzten Geschäftsjahre. |
| POST | /v1/check | Bis zu 500 Schuldner oder Lieferanten in einem Aufruf prüfen. |
| GET | /v1/watchlist | Beobachtete Firmen auflisten. |
| POST | /v1/watchlist | Firma auf die Watchlist setzen. |
| DELETE | /v1/watchlist/{id} | Firma von der Watchlist nehmen. |
| POST | /v1/webhooks | Endpunkt für Push-Benachrichtigungen registrieren. |
| GET | /v1/stats | Aggregierte Zahlen nach Tag, Monat, Bundesland, Gericht oder Art. |
| GET | /v1/types | Alle Verfahrensarten mit Code, Alias und amtlicher Bezeichnung. |
| GET | /v1/courts | Alle Insolvenzgerichte mit Bundesland. |
| GET | /v1/account | Schlüssel, Vertragsumfang, Limits und aktueller Verbrauch. |
Pfade sind relativ zu https://automobilinsolvenzen.de/api. Die vollständige Adresse des ersten Endpunkts lautet also https://automobilinsolvenzen.de/api/v1/filings.
GET /v1/filings ist das Herzstück der API. Der Endpunkt liefert jede Bekanntmachung, die im angefragten Zeitraum veröffentlicht wurde, sortiert nach Veröffentlichungsdatum und innerhalb eines Tages in der Reihenfolge der Veröffentlichung.
| Parameter | Format | Beschreibung |
|---|---|---|
| date | YYYY-MM-DD | Ein einzelner Tag. Ohne date und ohne date_from/date_to gilt der Vortag. |
| date_from | YYYY-MM-DD | Beginn eines Zeitraums (einschließlich). Hat Vorrang vor date. |
| date_to | YYYY-MM-DD | Ende eines Zeitraums (einschließlich). Höchstens 31 Tage nach date_from. Sind die Daten vertauscht, dreht die API sie um. |
| types | csv | Kommagetrennte Liste von Aliasen oder Codes, siehe nächster Abschnitt. Weglassen für alle Arten. |
| bundesland | csv | Kommagetrennte Liste von Bundesländern, geschrieben wie in der Antwort, etwa Bayern,Hessen. |
| court | string | Name des Insolvenzgerichts, etwa Charlottenburg (Berlin). Gültige Werte liefert /v1/courts. |
| q | string | Volltextsuche in Schuldnername und Bekanntmachungstext, mindestens drei Zeichen. |
| format | json | csv | json (Standard) oder csv. |
Die Antwort enthält den tatsächlich verwendeten Zeitraum, die angefragten Codes, die Trefferzahl und das Array der Bekanntmachungen. Ein Zeitraum kommt immer vollständig zurück, dieser Endpunkt kennt keine seitenweise Abfrage. Auch starke Tage bleiben deutlich unter einem Megabyte.
{
"date_from": "2026-09-28",
"date_to": "2026-09-28",
"types": ["0", "1", "2"],
"count": 142,
"filings": [
{
"id": "fil_8Kq2Zp4RwT",
"date": "2026-09-28",
"type": "Eröffnungen",
"type_code": "2",
"name": "Musterbau GmbH",
"sitz": "Berlin",
"court": "Charlottenburg (Berlin)",
"aktenzeichen": "36a IN 4711/26",
"bundesland": "Berlin",
"register": "HRB 123456 B",
"company_id": "cmp_3n8Kd2ZpQv",
"text": "Amtsgericht Charlottenburg (Berlin), Aktenzeichen: 36a IN 4711/26 ..."
}
]
}
Dieselbe Anfrage in Node, gefiltert auf Bayern:
const url = new URL("https://automobilinsolvenzen.de/api/v1/filings");
url.searchParams.set("types", "eroeffnung");
url.searchParams.set("bundesland", "Bayern");
const res = await fetch(url, {
headers: { "X-API-Key": process.env.INSOLVENCY_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error);
const { count, filings } = await res.json();
console.log(count, "openings in Bavaria yesterday");
Eine einzelne Bekanntmachung mit Volltext liefert GET /v1/filings/{id}. Die ID bleibt stabil. Sie können sie speichern und später damit prüfen, ob eine Bekanntmachung schon verarbeitet wurde.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://automobilinsolvenzen.de/api/v1/filings/fil_8Kq2Zp4RwT
Insolvenzgerichte ordnen ihre Bekanntmachungen neun Gegenständen zu. Die API akzeptiert im Parameter types sowohl den Zahlencode als auch einen lesbaren Alias. Mehrzahl und Schreibweisen mit Umlaut gehen ebenfalls (eroeffnungen, eröffnung).
| Alias | Code | Bedeutung |
|---|---|---|
| sicherung | 0 | Sicherungsmaßnahmen. Meist die Bestellung eines vorläufigen Insolvenzverwalters. Das früheste Signal, typischerweise wenige Tage nach dem Antrag. |
| abweisung | 1 | Abweisungen mangels Masse. Der Antrag wird abgewiesen, weil das Vermögen nicht einmal die Verfahrenskosten deckt. Die Gesellschaft wird danach in der Regel aufgelöst. |
| eroeffnung | 2 | Eröffnungen. Das Insolvenzverfahren ist eröffnet. Ab jetzt werden Forderungen beim Verwalter angemeldet. |
| entscheidung | 3 | Entscheidungen im Verfahren. Beschlüsse während des Verfahrens, etwa zur Gläubigerversammlung oder zum Prüfungstermin. |
| sonstiges | 4 | Sonstiges. Bekanntmachungen, die in keinen anderen Gegenstand passen. |
| entscheidung_aufhebung | 5 | Entscheidungen nach Aufhebung. Beschlüsse, nachdem das Verfahren aufgehoben oder eingestellt wurde. |
| verteilungsverzeichnis | 6 | Verteilungsverzeichnisse. Verzeichnisse nach § 188 InsO, wichtig für Gläubiger, die eine Quote erwarten. |
| restschuldbefreiung | 7 | Restschuldbefreiung. Fast ausschließlich natürliche Personen. |
| insolvenzplan | 8 | Überwachte Insolvenzpläne. Die Erfüllung eines Insolvenzplans wird überwacht, das Unternehmen arbeitet weiter. |
Die amtliche Bezeichnung steht im Feld type, genau so, wie das Gericht sie veröffentlicht. Für die maschinelle Verarbeitung nutzen Sie type_code, der sich nie ändert. Ein unbekannter Wert in types ergibt 400 bad_type samt Liste der erlaubten Codes.
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Stabile ID der Bekanntmachung, Präfix fil_. |
| date | string | Veröffentlichungsdatum auf dem amtlichen Portal, YYYY-MM-DD. |
| type | string | Amtliche Bezeichnung der Verfahrensart. |
| type_code | string | Code 0 bis 8, siehe Verfahrensarten. |
| name | string | Name des Schuldners wie veröffentlicht, einschließlich Rechtsform. |
| sitz | string | Sitz oder Wohnort. |
| court | string | Zuständiges Insolvenzgericht. |
| aktenzeichen | string | Aktenzeichen des Gerichts, etwa 36a IN 4711/26. "IN" steht für Regelverfahren, "IK" für Verbraucherverfahren. |
| bundesland | string | Bundesland des Gerichts. |
| register | string | null | Handelsregistereintrag, sofern die Bekanntmachung einen nennt. Fehlt bei natürlichen Personen und vielen Einzelkaufleuten. |
| company_id | string | null | Verweis auf das Firmenprofil, wenn der Schuldner einer Firma zugeordnet werden konnte. Sonst null. |
| text | string | Volltext der Bekanntmachung, unverändert. |
Alle Textfelder sind UTF-8. Namen und Texte geben wir genau so weiter, wie das Gericht sie geschrieben hat, Tippfehler eingeschlossen. Vereinheitlichte Werte finden Sie nur in den Feldern, die ausdrücklich vereinheitlicht sind: type_code, bundesland und company_id.
Gericht und Aktenzeichen zusammen kennzeichnen ein Verfahren. Ein Verfahren erzeugt über Monate oder Jahre meist mehrere Bekanntmachungen: Sicherungsmaßnahmen, Eröffnung, Beschlüsse, Verteilungsverzeichnis, Aufhebung. Wer ein Verfahren verfolgen will, gruppiert nach court plus aktenzeichen.
Mit format=csv liefert die API dieselben Daten als CSV-Datei statt JSON: eine Zeile pro Bekanntmachung, Kopfzeile, Komma als Trennzeichen, UTF-8. Die Datei kommt mit Content-Disposition: attachment und einem Dateinamen, der den Zeitraum enthält.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
-o filings.csv \
"https://automobilinsolvenzen.de/api/v1/filings?date_from=2026-09-01&date_to=2026-09-28&format=csv"
date,type,type_code,name,sitz,court,aktenzeichen,bundesland,register,text
2026-09-28,Eröffnungen,2,Musterbau GmbH,Berlin,Charlottenburg (Berlin),36a IN 4711/26,Berlin,HRB 123456 B,"Amtsgericht Charlottenburg ..."
2026-09-28,Sicherungsmaßnahmen,0,Beispiel Logistik UG (haftungsbeschränkt),Hamburg,Hamburg,67c IN 812/26,Hamburg,HRB 98765,"Amtsgericht Hamburg ..."
Der Volltext in der Spalte text enthält Zeilenumbrüche und steht deshalb in Anführungszeichen. Excel öffnet die Datei korrekt über "Daten, aus Text/CSV" mit Kodierung UTF-8. Ein einfacher Doppelklick kann je nach Systemeinstellung die Umlaute verderben.
Bekanntmachungen beschreiben Verfahren, die meisten Anwendungsfälle drehen sich aber um Firmen. Deshalb ordnen wir jede Bekanntmachung nach Möglichkeit einem Firmenprofil zu, anhand von Registernummer, Name und Sitz. GET /v1/companies durchsucht diese Profile.
curl -G -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://automobilinsolvenzen.de/api/v1/companies \
--data-urlencode "q=Musterbau" \
--data-urlencode "bundesland=Berlin" \
-d limit=20
Suchparameter sind q (Name, mindestens drei Zeichen), register, city, bundesland, status und industry. Listen kommen in Seiten von höchstens 100 Einträgen mit einem Cursor:
{
"object": "list",
"data": [ { "id": "cmp_3n8Kd2ZpQv", "object": "company", "...": "..." } ],
"has_more": true,
"next_cursor": "eyJpZCI6ImNtcF8zbjhLZDJacFF2In0"
}
Solange has_more den Wert true hat, übergeben Sie next_cursor als Parameter cursor der nächsten Anfrage. Ein Cursor bleibt 24 Stunden gültig.
{
"id": "cmp_3n8Kd2ZpQv",
"object": "company",
"name": "Musterbau GmbH",
"legal_form": "GmbH",
"register": "HRB 123456 B",
"register_court": "Charlottenburg (Berlin)",
"city": "Berlin",
"bundesland": "Berlin",
"industry": "Hochbau",
"status": "opened",
"first_filing": "2026-08-14",
"last_filing": "2026-09-28",
"filings_count": 3,
"website": "https://musterbau.example",
"url": "https://automobilinsolvenzen.de/company/musterbau-gmbh-berlin/"
}
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Stabile ID, Präfix cmp_. |
| name | string | Name laut jüngster Bekanntmachung. |
| legal_form | string | Vereinheitlichte Rechtsform, etwa GmbH, UG, AG, KG, e.K. |
| register | string | null | Handelsregisternummer. Das Registergericht steht in register_court. |
| city | string | Sitz. |
| bundesland | string | Bundesland des Sitzes. |
| industry | string | null | Branche nach unserer Einordnung, sofern bestimmbar. |
| status | string | Aktueller Verfahrensstand, siehe unten. |
| first_filing | string | Datum der ersten bekannten Bekanntmachung. |
| last_filing | string | Datum der jüngsten Bekanntmachung. |
| filings_count | integer | Anzahl der mit dieser Firma verknüpften Bekanntmachungen. |
| url | string | Öffentliche Firmenseite auf automobilinsolvenzen.de. |
Der Status leitet sich aus der jüngsten maßgeblichen Bekanntmachung des Verfahrens ab. Er ist eine praktische Zusammenfassung, keine rechtliche Bewertung: Im Zweifel gilt der Volltext der Bekanntmachung.
| Status | Art-Codes | Bedeutung |
|---|---|---|
| preliminary | 0 | Vorläufiges Verfahren, Sicherungsmaßnahmen angeordnet. |
| dismissed | 1 | Antrag mangels Masse abgewiesen. |
| opened | 2 | Verfahren eröffnet. |
| plan | 8 | Insolvenzplan bestätigt, Überwachung läuft. |
| closed | 3, 5, 6 | Verfahren aufgehoben oder eingestellt. |
| discharged | 7 | Restschuldbefreiung erteilt. |
GET /v1/companies/{id}/filings liefert alle Bekanntmachungen einer Firma, die älteste zuerst. So erhalten Sie den ganzen Verlauf eines Verfahrens, ohne selbst nach Aktenzeichen zu suchen.
Für Kapitalgesellschaften liegen oft die beim Unternehmensregister eingereichten Jahresabschlüsse vor. GET /v1/companies/{id}/financials liefert die Kennzahlen der letzten Geschäftsjahre, das neueste zuerst. Beträge sind ganze Euro.
{
"company_id": "cmp_3n8Kd2ZpQv",
"currency": "EUR",
"statements": [
{
"fiscal_year_to": "2024-12-31",
"bilanzsumme": 4820000,
"eigenkapital": -310000,
"verbindlichkeiten": 5130000,
"jahresueberschuss": -1240000,
"source": "Unternehmensregister"
},
{
"fiscal_year_to": "2023-12-31",
"bilanzsumme": 5410000,
"eigenkapital": 930000,
"verbindlichkeiten": 4480000,
"jahresueberschuss": 85000,
"source": "Unternehmensregister"
}
]
}
Kleine Gesellschaften müssen nur eine verkürzte Bilanz offenlegen. Felder, die im Abschluss nicht enthalten sind, stehen auf null und werden nie geschätzt. Der Jahresüberschuss fehlt aus diesem Grund häufig.
Typischer Einsatz: Bei einer Kreditentscheidung sagt die Entwicklung des Eigenkapitals über zwei, drei Geschäftsjahre mehr als die Insolvenzbekanntmachung allein. Negatives Eigenkapital zusammen mit einer Sicherungsmaßnahme ergibt ein klares Bild.
POST /v1/check prüft eine ganze Liste von Kunden oder Lieferanten in einem Aufruf. Sie senden Ihre eigene Referenz und das, was Sie über die Firma wissen: Name, Ort, Registernummer. Die API liefert zu jedem Eintrag eine Zuordnung und den Verfahrensstand.
curl https://automobilinsolvenzen.de/api/v1/check \
-H "X-API-Key: $INSOLVENCY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"since": "2025-01-01",
"items": [
{ "ref": "D-10023", "name": "Musterbau GmbH", "city": "Berlin" },
{ "ref": "D-10024", "register": "HRB 98765", "register_court": "Hamburg" },
{ "ref": "D-10025", "name": "Nordlicht Handels GmbH" }
]
}'
{
"checked": 3,
"hits": 1,
"results": [
{
"ref": "D-10023",
"match": "exact",
"company_id": "cmp_3n8Kd2ZpQv",
"status": "opened",
"last_filing": { "id": "fil_8Kq2Zp4RwT", "date": "2026-09-28", "type_code": "2" }
},
{ "ref": "D-10024", "match": "none" },
{ "ref": "D-10025", "match": "ambiguous", "candidates": 2 }
]
}
| match | Bedeutung |
|---|---|
| exact | Registernummer stimmt, oder Name und Sitz passen eindeutig. |
| probable | Name stimmt nach Vereinheitlichung (Rechtsform, Schreibweise), Sitz plausibel. Bitte prüfen, bevor Sie danach handeln. |
| ambiguous | Mehrere Firmen kommen in Frage. Die Antwort nennt die Zahl der Kandidaten. Ergänzen Sie Ort oder Registernummer. |
| none | Keine Bekanntmachung im Zeitraum. Eine gute Nachricht, aber keine Bonitätsbewertung. |
Ein Aufruf nimmt bis zu 500 Einträge an. since begrenzt die Suche auf Bekanntmachungen ab diesem Datum, Standard sind drei Jahre rückwärts. Für größere Bestände empfehlen wir die Watchlist: einmal prüfen, danach nur noch Änderungen erhalten.
Die Watchlist macht aus einer einmaligen Prüfung eine laufende Überwachung. Sie setzen Firmen darauf, und sobald zu einer von ihnen eine neue Bekanntmachung erscheint, erhalten Sie ein Ereignis watchlist.match per Webhook. Einträge lassen sich über company_id, über Registernummer und Gericht oder über Name und Ort bestimmen.
curl https://automobilinsolvenzen.de/api/v1/watchlist \
-H "X-API-Key: $INSOLVENCY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "register": "HRB 123456 B", "register_court": "Charlottenburg (Berlin)", "ref": "D-10023" }'
{
"id": "wl_Q7m2Lx9Pd",
"object": "watchlist_entry",
"ref": "D-10023",
"company_id": "cmp_3n8Kd2ZpQv",
"name": "Musterbau GmbH",
"created_at": "2026-09-29T08:12:44Z",
"last_match": null
}
Auch Firmen, die nie insolvent waren, lassen sich beobachten. Der Eintrag wartet dann, bis die erste Bekanntmachung erscheint, und genau darum geht es. Ihre eigene Referenz in ref kommt in jedem Ereignis zurück, damit Sie einen Treffer ohne zusätzliche Suche Ihrer Kundennummer zuordnen.
GET /v1/watchlist listet alle Einträge mit dem Datum des letzten Treffers, DELETE /v1/watchlist/{id} entfernt einen. Dieselbe Watchlist sehen Sie in Ihrem Automobil Insolvenzen-Dashboard, Änderungen gleichen sich in beide Richtungen ab.
Statt regelmäßig abzufragen, können Sie sich Ereignisse zustellen lassen. Registrieren Sie einen HTTPS-Endpunkt und wählen Sie die Ereignisse, auf Wunsch mit denselben Filtern wie bei /v1/filings.
curl https://automobilinsolvenzen.de/api/v1/webhooks \
-H "X-API-Key: $INSOLVENCY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/insolvency",
"events": ["watchlist.match", "filing.published"],
"filter": { "types": ["eroeffnung", "sicherung"], "bundesland": ["Bayern", "Hessen"] }
}'
| Ereignis | Wann |
|---|---|
| filing.published | Eine neue Bekanntmachung passt zu Ihrem Filter. Kommt kurz nach unserer Erfassung, meist morgens. |
| watchlist.match | Eine neue Bekanntmachung betrifft eine Firma auf Ihrer Watchlist. |
| stats.daily_ready | Die Tageszahlen des Vortags sind vollständig. |
{
"id": "evt_5Tg8Nw2Ka",
"type": "watchlist.match",
"created_at": "2026-09-29T06:05:11Z",
"data": {
"watchlist_entry": { "id": "wl_Q7m2Lx9Pd", "ref": "D-10023" },
"filing": {
"id": "fil_8Kq2Zp4RwT",
"date": "2026-09-28",
"type": "Eröffnungen",
"type_code": "2",
"name": "Musterbau GmbH",
"court": "Charlottenburg (Berlin)",
"aktenzeichen": "36a IN 4711/26"
}
}
}
Jeder Aufruf ist signiert. Der Header X-Webhook-Signature enthält einen Zeitstempel und einen HMAC-SHA256 über Zeitstempel und Rohdaten, berechnet mit dem Geheimnis, das Sie bei der Registrierung erhalten.
X-Webhook-Signature: t=1790661911,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
import hashlib, hmac, os, time
from flask import Flask, request, abort
app = Flask(__name__)
SECRET = os.environ["INSOLVENCY_WEBHOOK_SECRET"].encode()
@app.post("/hooks/insolvency")
def hook():
header = request.headers.get("X-Webhook-Signature", "")
parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
signed = parts.get("t", "") + "." + request.get_data(as_text=True)
expected = hmac.new(SECRET, signed.encode(), hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, parts.get("v1", "")):
abort(400)
if abs(time.time() - int(parts["t"])) > 300:
abort(400) # replay protection
event = request.get_json()
if event["type"] == "watchlist.match":
ref = event["data"]["watchlist_entry"]["ref"]
print("Customer", ref, "has a new insolvency filing")
return "", 204
Antworten Sie innerhalb von zehn Sekunden mit einem 2xx-Status. Klappt das nicht, versuchen wir es mit wachsenden Abständen über 24 Stunden erneut, insgesamt achtmal. Ereignisse können doppelt ankommen, verwerfen Sie Dubletten deshalb anhand der id des Ereignisses.
GET /v1/stats liefert Zahlen statt einzelner Bekanntmachungen. Das ist der Endpunkt für Dashboards, Berichte und journalistische Auswertungen, weil niemand dafür Tausende Datensätze herunterladen und zählen muss.
curl -G -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://automobilinsolvenzen.de/api/v1/stats \
-d date_from=2026-07-01 -d date_to=2026-09-28 \
-d group_by=month,bundesland -d types=eroeffnung
{
"date_from": "2026-07-01",
"date_to": "2026-09-28",
"group_by": ["month", "bundesland"],
"rows": [
{ "month": "2026-07", "bundesland": "Bayern", "count": 318 },
{ "month": "2026-07", "bundesland": "Berlin", "count": 204 },
{ "month": "2026-08", "bundesland": "Bayern", "count": 297 }
],
"total": 8412
}
group_by akzeptiert day, week, month, bundesland, court, type und legal_form, bis zu zwei gleichzeitig. Es gelten dieselben Filter wie bei /v1/filings. Anders als dort darf der Zeitraum hier bis zu 24 Monate umfassen.
Unsere Zahlen zählen Bekanntmachungen, nicht Verfahren oder Firmen. Sie laufen der amtlichen Statistik des Statistischen Bundesamts um mehrere Wochen voraus, sind aber nicht identisch mit ihr, weil Destatis Anträge und Entscheidungen zählt.
Zwei kleine Endpunkte liefern die gültigen Werte für Filter. Sie ändern sich selten und dürfen einen Tag lang zwischengespeichert werden.
[
{ "code": "0", "alias": "sicherung", "name": "Sicherungsmaßnahmen" },
{ "code": "1", "alias": "abweisung", "name": "Abweisungen mangels Masse" },
{ "code": "2", "alias": "eroeffnung", "name": "Eröffnungen" }
]
GET /v1/courts liefert alle Insolvenzgerichte in genau der Schreibweise, die der Filter court erwartet, dazu das Bundesland. GET /v1/account zeigt Ihren Vertragsumfang, die geltenden Limits und den Verbrauch im laufenden Monat.
Fehler kommen als JSON mit passendem HTTP-Status zurück. Das Feld error ist maschinenlesbar und stabil, message erklärt das Problem für Menschen und kann sich ändern.
{
"error": "range_too_large",
"message": "Maximum range is 31 days per request."
}
| error | HTTP | Bedeutung |
|---|---|---|
| bad_date | 400 | Ein Datum hat nicht das Format YYYY-MM-DD. |
| bad_type | 400 | Unbekannter Wert in types. Die Antwort enthält zusätzlich allowed. |
| range_too_large | 400 | Zeitraum länger als 31 Tage. |
| invalid_request | 400 | Sonstiger ungültiger Parameter oder fehlerhafter JSON-Body. |
| missing_api_key | 401 | Kein Schlüssel mitgesendet. |
| invalid_api_key | 403 | Schlüssel unbekannt oder API-Zugang deaktiviert. |
| subscription_expired | 403 | Das Abonnement hinter dem Schlüssel ist abgelaufen. |
| insufficient_scope | 403 | Der Schlüssel ist für diesen Endpunkt nicht freigeschaltet. |
| not_found | 404 | ID unbekannt, oder die Bekanntmachung wurde nach Ablauf ihrer Frist gelöscht. |
| rate_limited | 429 | Zu viele Anfragen, siehe Limits. |
| server_error | 500 | Fehler auf unserer Seite. Nach kurzer Pause erneut versuchen und uns Bescheid geben, wenn es anhält. |
{
"error": "bad_type",
"message": "Unknown type 'eroffnung'.",
"allowed": ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
}
| Wert | Limit |
|---|---|
| 120 / min | Anfragen pro Minute und Schlüssel. Mehr auf Anfrage. |
| 31 | Höchstzahl an Tagen pro Anfrage auf /v1/filings. /v1/stats erlaubt 24 Monate. |
| 100 | Höchstzahl an Einträgen pro Seite auf Listen-Endpunkten. |
| 500 | Höchstzahl an Einträgen pro Aufruf auf /v1/check. |
| 10000 | Beobachtete Firmen pro Konto im Standardvertrag. |
| 5 | Registrierte Webhook-Endpunkte pro Konto. |
Jede Antwort trägt den aktuellen Stand des Rate Limits in ihren Headern. Wer es überschreitet, erhält 429 rate_limited und einen Header Retry-After in Sekunden.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1790661960
Retry-After: 12
Die Hauptversion ist Teil des Pfads (/v1/). Innerhalb einer Hauptversion ändern wir nur ergänzend: neue Endpunkte, neue optionale Parameter, neue Felder in Antworten. Ihr Client sollte unbekannte Felder deshalb ignorieren, statt an ihnen zu scheitern.
Änderungen, die bestehende Anbindungen brechen könnten, kommen nur mit einer neuen Hauptversion. Die bisherige Version läuft dann mindestens zwölf Monate weiter, und wir informieren jeden Schlüsselinhaber vorher per E-Mail. Das Versionsdatum der Antwort steht im Header X-API-Version.
X-API-Version: 2026-09-01
Einzige Quelle für Bekanntmachungen ist das amtliche gemeinsame Portal der Länder, insolvenzbekanntmachungen.de, auf dem alle deutschen Insolvenzgerichte nach § 9 InsO veröffentlichen. Wir ergänzen keine Bekanntmachungen aus anderen Quellen und verändern ihren Inhalt nicht.
Gerichte veröffentlichen an Werktagen, überwiegend nachts und am Vormittag. Neue Bekanntmachungen stehen in der Regel am folgenden Morgen vor 7 Uhr in der API. Firmenprofile und Registernummern ergänzen wir aus dem Handelsregister, Bilanzzahlen stammen aus den dort offengelegten Jahresabschlüssen.
Die Zuordnung von Bekanntmachungen zu Firmen ist automatisiert. Mit Registernummer ist sie zuverlässig, ohne (Einzelkaufleute, sehr häufige Namen) sind Fehler möglich. Deshalb kann company_id null sein, und deshalb unterscheidet die Kontrahentenprüfung zwischen exact und probable.
Insolvenzbekanntmachungen sind öffentlich, enthalten aber personenbezogene Daten, besonders in Verbraucherverfahren. Ihre Nutzung unterliegt der DSGVO und den Löschfristen der Insolvenzbekanntmachungsverordnung. Wir löschen Bekanntmachungen deshalb spätestens dann aus der API, wenn das amtliche Portal sie löschen muss. GET /v1/filings/{id} antwortet danach mit 404 not_found.
Bitte bilden Sie diese Löschung in Ihren eigenen Systemen nach. Ein regelmäßiger Abgleich über die gespeicherten IDs genügt: Was die API nicht mehr kennt, sollte auch in Ihrer Datenbank nicht mehr stehen.
Zulässig sind die Bewertung geschäftlicher Risiken, Forderungsmanagement, Rechtsberatung, Forschung und Journalismus. Nicht zulässig: Bekanntmachungen über Privatpersonen zu veröffentlichen, die Rohdaten weiterzuverkaufen und Entscheidungen über natürliche Personen, die allein auf diesen Daten beruhen. Wenn Sie personenbezogene Daten in unserem Auftrag verarbeiten lassen, steht ein Auftragsverarbeitungsvertrag bereit.
Fragen zur Anbindung, höhere Limits oder zusätzliche Felder: [email protected] oder das Kontaktformular. Bei technischen Problemen nennen Sie bitte den Zeitpunkt der Anfrage und die ersten Zeichen Ihres Schlüssels, dann finden wir die Anfrage sofort in den Logs.
Wer KI-Agenten anbinden möchte statt HTTP-Clients zu schreiben, findet dieselben Daten über einen Model-Context-Protocol-Server, dokumentiert unter MCP-Server. Beide teilen sich Schlüssel, Limits und Vertrag.
Schlüssel vergeben wir von Hand. Schreiben Sie kurz, was Sie bauen möchten und mit welchem Volumen Sie rechnen, dann ist der Zugang meist innerhalb eines Werktags freigeschaltet.