De Germany Insolvencies-API levert elke officiële Duitse insolventiebekendmaking als gestructureerde data: dagelijks, filterbaar op soort melding, deelstaat en rechtbank, gekoppeld aan bedrijfsprofielen en gepubliceerde balansen. Gewoon HTTPS en JSON, CSV op aanvraag.
Laatst bijgewerkt: 2026-09-29
Sleutels worden handmatig verstrekt. Vertel ons kort wat u wilt bouwen en welk volume u verwacht. Meestal is de toegang binnen één werkdag actief.
Duitse insolventierechtbanken publiceren elke stap van een procedure op het officiële portaal insolvenzbekanntmachungen.de: Sicherungsmaßnahmen, de opening, afwijzingen wegens gebrek aan boedel, verdelingslijsten en de kwijtschelding van restschulden. Het portaal is gebouwd om afzonderlijke zaken op te zoeken, niet om data te verwerken. Het heeft geen interface en geen export, en het verwijdert bekendmakingen na wettelijke termijnen.
De API vult dat gat. Wij verzamelen elke nieuwe bekendmaking op de dag van publicatie, normaliseren rechtbank, deelstaat, registernummer en soort melding, koppelen die aan een bedrijfsprofiel en stellen alles beschikbaar als JSON of CSV. Kredietverzekeraars, incassobureaus, advocatenkantoren, debiteurenafdelingen en datajournalisten gebruiken de API om hun eigen systemen te voeden.
Alle verzoeken gaan naar https://germanyinsolvencies.com/api/v1. De API spreekt uitsluitend HTTPS, accepteert JSON en antwoordt met JSON. Een SDK is niet verplicht: elke taal die een HTTP-verzoek kan versturen volstaat. De voorbeelden op deze pagina gebruiken curl, Python en Node.
De API maakt deel uit van een Germany Insolvencies-abonnement met API-toegang. De voorwaarden hangen af van volume en toepassing en worden individueel overeengekomen.
Er is bewust geen zelfregistratie. Wij activeren sleutels handmatig, omdat insolventiedata persoonsgegevens bevat en wij willen weten waarvoor een integratie dient. In de praktijk komt dat neer op één kort bericht en één werkdag.
Gebruik het contactformulier of schrijf naar [email protected] en noem vier punten:
Vervolgens ontvangt u een persoonlijke sleutel die direct werkt op alle endpoints die uw contract dekt. Een account kan meerdere actieve sleutels hebben, zodat een sleutel zonder downtime kan worden vervangen.
Elk verzoek bevat de sleutel in de header X-API-Key. Als alternatief accepteert de API dezelfde sleutel als bearer-token in de header Authorization, handig voor tools die alleen die header kennen.
X-API-Key: YOUR_API_KEY
# equivalent
Authorization: Bearer YOUR_API_KEY
Zonder sleutel antwoordt de API met 401 missing_api_key. Een onbekende of gedeactiveerde sleutel levert 403 invalid_api_key op en een verlopen abonnement 403 subscription_expired. De reden staat altijd in het veld error van het antwoord.
Behandel de sleutel als een wachtwoord: gebruik hem alleen aan de serverkant, nooit in frontendcode en nooit in een openbare repository. Lekt een sleutel uit, laat het ons weten. Wij trekken hem dan direct in en geven u een nieuwe.
Het meest gebruikte verzoek is ook het eenvoudigste: alle openingen, beschermingsmaatregelen en afwijzingen van één dag. Eén aanroep, geen paginering, het antwoord komt binnen een seconde.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
"https://germanyinsolvencies.com/api/v1/filings?date=2026-09-28&types=eroeffnung,sicherung,abweisung"
Zonder datum geeft de API de vorige dag terug. Dat maakt een dagelijkse taak triviaal: een cron-regel kort na 6 uur haalt de meldingen van gisteren op en schrijft ze naar uw systeem. Rechtbanken publiceren op werkdagen, dus op zondagen en feestdagen is het resultaat meestal leeg of zeer kort.
Voor een historische aanvulling loopt u de periode door in vensters van maximaal 31 dagen:
import os, datetime, requests
API = "https://germanyinsolvencies.com/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 | Pad | Doel |
|---|---|---|
| GET | /v1/filings | Bekendmakingen van een dag of periode, filterbaar op soort, deelstaat, rechtbank en naam. |
| GET | /v1/filings/{id} | Eén bekendmaking met de volledige tekst. |
| GET | /v1/companies | Zoek bedrijven die in minstens één bekendmaking voorkomen. |
| GET | /v1/companies/{id} | Bedrijfsprofiel met de actuele status van de procedure. |
| GET | /v1/companies/{id}/filings | Alle bekendmakingen van een bedrijf in chronologische volgorde. |
| GET | /v1/companies/{id}/financials | Gepubliceerde balanscijfers van de laatste boekjaren. |
| POST | /v1/check | Controleer tot 500 debiteuren of leveranciers in één aanroep. |
| GET | /v1/watchlist | Overzicht van gevolgde bedrijven. |
| POST | /v1/watchlist | Een bedrijf aan de watchlist toevoegen. |
| DELETE | /v1/watchlist/{id} | Een bedrijf van de watchlist verwijderen. |
| POST | /v1/webhooks | Een endpoint registreren voor pushmeldingen. |
| GET | /v1/stats | Geaggregeerde aantallen per dag, maand, deelstaat, rechtbank of soort. |
| GET | /v1/types | Alle soorten meldingen met code, alias en officiële naam. |
| GET | /v1/courts | Alle insolventierechtbanken met deelstaat. |
| GET | /v1/account | Sleutel, contractomvang, limieten en actueel gebruik. |
Paden zijn relatief ten opzichte van https://germanyinsolvencies.com/api. Het volledige adres van het eerste endpoint is dus https://germanyinsolvencies.com/api/v1/filings.
GET /v1/filings is de kern van de API. Het geeft elke bekendmaking terug die in de gevraagde periode is gepubliceerd, gesorteerd op publicatiedatum en binnen een dag in volgorde van publicatie.
| Parameter | Formaat | Beschrijving |
|---|---|---|
| date | YYYY-MM-DD | Eén dag. Standaard gisteren, als noch date noch date_from/date_to is opgegeven. |
| date_from | YYYY-MM-DD | Begin van een periode (inclusief). Heeft voorrang op date. |
| date_to | YYYY-MM-DD | Einde van een periode (inclusief). Maximaal 31 dagen na date_from. Zijn de data omgedraaid, dan draait de API ze terug. |
| types | csv | Kommagescheiden lijst van type-aliassen of -codes, zie de volgende sectie. Weglaten voor alle soorten. |
| bundesland | csv | Kommagescheiden lijst van deelstaten, geschreven zoals in het antwoord, bijvoorbeeld Bayern,Hessen. |
| court | string | Naam van de insolventierechtbank, bijvoorbeeld Charlottenburg (Berlin). De lijst met geldige waarden komt van /v1/courts. |
| q | string | Volledige tekstzoekopdracht in de naam van de schuldenaar en de tekst van de bekendmaking, minstens drie tekens. |
| format | json | csv | json (standaard) of csv. |
Het antwoord bevat de effectieve periode, de gevraagde typecodes, het aantal treffers en de array met bekendmakingen. Een periode wordt altijd in één keer teruggegeven, dit endpoint kent geen paginering. Ook drukke dagen blijven ruim onder een 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 ..."
}
]
}
Hetzelfde verzoek in Node, gefilterd op Beieren:
const url = new URL("https://germanyinsolvencies.com/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");
Een afzonderlijke bekendmaking met volledige tekst levert GET /v1/filings/{id}. De ID blijft stabiel, dus u kunt hem opslaan en later gebruiken om te controleren of een bekendmaking al is verwerkt.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://germanyinsolvencies.com/api/v1/filings/fil_8Kq2Zp4RwT
Insolventierechtbanken delen hun bekendmakingen in negen rubrieken in. De API accepteert in de parameter types zowel de numerieke code als een leesbare alias. Ook meervoudsvormen en spellingen met umlauten worden geaccepteerd (eroeffnungen, eröffnung).
| Alias | Code | Betekenis |
|---|---|---|
| sicherung | 0 | Sicherungsmaßnahmen. Beschermingsmaatregelen, meestal de aanstelling van een voorlopige bewindvoerder. Het vroegste signaal, doorgaans enkele dagen na het verzoekschrift. |
| abweisung | 1 | Abweisungen mangels Masse. Verzoek afgewezen omdat de boedel niet eens de kosten van de procedure dekt. Het bedrijf wordt daarna meestal ontbonden. |
| eroeffnung | 2 | Eröffnungen. Opening van de insolventieprocedure. Vanaf nu worden vorderingen bij de bewindvoerder ingediend. |
| entscheidung | 3 | Entscheidungen im Verfahren. Beslissingen tijdens de procedure, bijvoorbeeld over de crediteurenvergadering of de verificatiedatum. |
| sonstiges | 4 | Sonstiges. Overige bekendmakingen die onder geen andere rubriek vallen. |
| entscheidung_aufhebung | 5 | Entscheidungen nach Aufhebung. Beslissingen nadat de procedure is opgeheven of beëindigd. |
| verteilungsverzeichnis | 6 | Verteilungsverzeichnisse. Verdelingslijsten op grond van § 188 van de Duitse Insolvenzordnung (Insolvency Code), relevant voor schuldeisers die een uitkering verwachten. |
| restschuldbefreiung | 7 | Restschuldbefreiung. Kwijtschelding van restschulden, vrijwel uitsluitend natuurlijke personen. |
| insolvenzplan | 8 | Überwachte Insolvenzpläne. Toezicht op een insolventieplan, het bedrijf blijft doorhandelen. |
De officiële naam van het type staat in het veld type in het Duits, precies zoals de rechtbank hem publiceert. Gebruik voor machinale verwerking type_code, die nooit verandert. Een onbekende waarde in types levert 400 bad_type op, samen met de lijst van toegestane codes.
| Veld | Type | Beschrijving |
|---|---|---|
| id | string | Stabiele ID van de bekendmaking, prefix fil_. |
| date | string | Publicatiedatum op het officiële portaal, YYYY-MM-DD. |
| type | string | Officiële naam van het soort melding, in het Duits. |
| type_code | string | Code 0 tot 8, zie soorten meldingen. |
| name | string | Naam van de schuldenaar zoals gepubliceerd, inclusief rechtsvorm. |
| sitz | string | Statutaire zetel of woonplaats. |
| court | string | Bevoegde insolventierechtbank. |
| aktenzeichen | string | Zaaknummer van de rechtbank, bijvoorbeeld 36a IN 4711/26. "IN" staat voor reguliere procedures, "IK" voor consumentenprocedures. |
| bundesland | string | Deelstaat van de rechtbank. |
| register | string | null | Vermelding in het handelsregister, als de bekendmaking er een noemt. Ontbreekt bij natuurlijke personen en veel eenmanszaken. |
| company_id | string | null | Koppeling naar het bedrijfsprofiel, als de schuldenaar aan een bedrijf kon worden gekoppeld. Anders null. |
| text | string | Volledige tekst van de bekendmaking, ongewijzigd. |
Alle tekstvelden zijn UTF-8. Namen en teksten worden doorgegeven zoals de rechtbank ze schreef, inclusief tikfouten. Genormaliseerde waarden vindt u alleen in de velden die uitdrukkelijk genormaliseerd zijn: type_code, bundesland en company_id.
De combinatie van rechtbank en zaaknummer identificeert een procedure. Een procedure levert doorgaans meerdere bekendmakingen op over maanden of jaren: beschermingsmaatregelen, opening, beslissingen, verdelingslijst, beëindiging. Wilt u een procedure volgen, groepeer dan op court plus aktenzeichen.
Met format=csv geeft de API dezelfde data terug als CSV-bestand in plaats van JSON: één regel per bekendmaking, kopregel, komma als scheidingsteken, UTF-8. Het bestand wordt geleverd met Content-Disposition: attachment en een bestandsnaam met de periode.
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
-o filings.csv \
"https://germanyinsolvencies.com/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 ..."
De volledige tekst in de kolom text bevat regeleinden en staat daarom tussen aanhalingstekens. Excel opent het bestand correct via "Gegevens, uit tekst/CSV" met UTF-8-codering. Gewoon dubbelklikken kan, afhankelijk van de systeeminstellingen, umlauten verminken.
Bekendmakingen gaan over procedures, maar de meeste toepassingen gaan over bedrijven. Daarom wordt elke bekendmaking waar mogelijk gekoppeld aan een bedrijfsprofiel, op basis van registernummer, naam en statutaire zetel. GET /v1/companies doorzoekt die profielen.
curl -G -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://germanyinsolvencies.com/api/v1/companies \
--data-urlencode "q=Musterbau" \
--data-urlencode "bundesland=Berlin" \
-d limit=20
Zoekparameters zijn q (naam, minstens drie tekens), register, city, bundesland, status en industry. Lijsten worden teruggegeven in pagina's van maximaal 100 items met een cursor:
{
"object": "list",
"data": [ { "id": "cmp_3n8Kd2ZpQv", "object": "company", "...": "..." } ],
"has_more": true,
"next_cursor": "eyJpZCI6ImNtcF8zbjhLZDJacFF2In0"
}
Zolang has_more true is, geeft u next_cursor mee als parameter cursor van het volgende verzoek. Een cursor blijft 24 uur geldig.
{
"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://germanyinsolvencies.com/company/musterbau-gmbh-berlin/"
}
| Veld | Type | Beschrijving |
|---|---|---|
| id | string | Stabiele ID, prefix cmp_. |
| name | string | Naam volgens de meest recente bekendmaking. |
| legal_form | string | Genormaliseerde rechtsvorm, bijvoorbeeld GmbH, UG, AG, KG, e.K. |
| register | string | null | Handelsregisternummer. Het registergerecht staat in register_court. |
| city | string | Statutaire zetel. |
| bundesland | string | Deelstaat van de statutaire zetel. |
| industry | string | null | Branche volgens onze indeling, indien vast te stellen. |
| status | string | Actueel stadium van de procedure, zie hieronder. |
| first_filing | string | Datum van de eerste bekende bekendmaking. |
| last_filing | string | Datum van de meest recente bekendmaking. |
| filings_count | integer | Aantal bekendmakingen dat aan dit bedrijf is gekoppeld. |
| url | string | Openbare bedrijfspagina op germanyinsolvencies.com. |
De status wordt afgeleid van de meest recente relevante bekendmaking van de procedure. Het is een praktische samenvatting, geen juridische beoordeling: bij twijfel geldt de volledige tekst van de bekendmaking.
| Status | Typecodes | Betekenis |
|---|---|---|
| preliminary | 0 | Voorlopige procedure, beschermingsmaatregelen bevolen. |
| dismissed | 1 | Verzoek afgewezen wegens gebrek aan boedel. |
| opened | 2 | Procedure geopend. |
| plan | 8 | Insolventieplan bevestigd, toezicht loopt. |
| closed | 3, 5, 6 | Procedure beëindigd of opgeheven. |
| discharged | 7 | Kwijtschelding van restschulden verleend. |
GET /v1/companies/{id}/filings geeft alle bekendmakingen van een bedrijf terug, oudste eerst. Zo hebt u de volledige geschiedenis van een procedure zonder zelf op zaaknummer te zoeken.
Voor kapitaalvennootschappen zijn de bij het handelsregister gedeponeerde jaarrekeningen vaak beschikbaar. GET /v1/companies/{id}/financials geeft de kerncijfers van de laatste boekjaren terug, nieuwste eerst. Bedragen staan in hele euro's.
{
"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 bedrijven hoeven slechts een verkorte balans te publiceren. Velden die niet in de deponering staan, zijn null en worden nooit geschat. Het jaarresultaat ontbreekt om die reden vaak.
Typisch gebruik: bij een kredietbeslissing zegt de ontwikkeling van het eigen vermogen over de laatste twee of drie boekjaren meer dan de insolventiebekendmaking alleen. Negatief eigen vermogen in combinatie met een beschermingsmaatregel is een duidelijk beeld.
POST /v1/check controleert een hele lijst klanten of leveranciers in één aanroep. U stuurt uw eigen referentie mee en wat u van het bedrijf weet: naam, plaats, registernummer. De API geeft per regel een overeenkomst en de status van de procedure terug.
curl https://germanyinsolvencies.com/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 | Betekenis |
|---|---|
| exact | Registernummer komt overeen, of naam en zetel komen ondubbelzinnig overeen. |
| probable | Naam komt overeen na normalisatie (rechtsvorm, spelling), zetel aannemelijk. Controleer voordat u erop handelt. |
| ambiguous | Meerdere bedrijven passen. Het antwoord bevat het aantal kandidaten; voeg plaats of registernummer toe. |
| none | Geen bekendmaking in de periode. Dat is goed nieuws, maar geen kredietbeoordeling. |
Een aanroep accepteert tot 500 regels. since beperkt de zoekopdracht tot bekendmakingen vanaf die datum, standaard drie jaar terug. Voor grotere portefeuilles raden wij de watchlist aan: eenmaal controleren, daarna alleen nog wijzigingen ontvangen.
De watchlist maakt van een eenmalige controle continue monitoring. U voegt bedrijven toe en zodra er een nieuwe bekendmaking verschijnt voor een van hen, ontvangt u via webhook een watchlist.match-event. Items kunnen worden aangeduid met company_id, met registernummer en rechtbank, of met naam en plaats.
curl https://germanyinsolvencies.com/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
}
Ook bedrijven die nooit insolvent zijn geweest kunnen worden gevolgd. Het item wacht dan tot de eerste bekendmaking verschijnt, en dat is precies de bedoeling. Uw eigen referentie in ref komt in elk event terug, zodat u een treffer zonder extra opzoeking aan uw klantnummer kunt koppelen.
GET /v1/watchlist toont alle items met de datum van de laatste treffer, DELETE /v1/watchlist/{id} verwijdert er een. Dezelfde watchlist is zichtbaar in uw Germany Insolvencies-dashboard, wijzigingen worden in beide richtingen gesynchroniseerd.
In plaats van te pollen kunt u events laten pushen. Registreer een HTTPS-endpoint en kies de events, eventueel met dezelfde filters als bij /v1/filings.
curl https://germanyinsolvencies.com/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"] }
}'
| Event | Wanneer |
|---|---|
| filing.published | Een nieuwe bekendmaking voldoet aan uw filter. Komt kort nadat wij haar hebben verzameld binnen, meestal 's ochtends. |
| watchlist.match | Een nieuwe bekendmaking betreft een bedrijf op uw watchlist. |
| stats.daily_ready | De dagcijfers van de vorige dag zijn compleet. |
{
"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"
}
}
}
Elke aanroep is ondertekend. De header X-Webhook-Signature bevat een tijdstempel en een HMAC-SHA256 over tijdstempel en ruwe body, berekend met het geheim dat u bij de registratie ontvangt.
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
Antwoord binnen tien seconden met een 2xx-status. Lukt dat niet, dan proberen wij het opnieuw met toenemende tussenpozen over 24 uur, in totaal acht keer. Events kunnen dubbel aankomen, gebruik daarom de id van het event om duplicaten te negeren.
GET /v1/stats geeft aantallen terug in plaats van afzonderlijke bekendmakingen. Dit is het endpoint voor dashboards, rapportages en journalistieke analyses, omdat u geen duizenden records hoeft te downloaden en te tellen.
curl -G -H "X-API-Key: $INSOLVENCY_API_KEY" \
https://germanyinsolvencies.com/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 accepteert day, week, month, bundesland, court, type en legal_form, maximaal twee tegelijk. Dezelfde filters als bij /v1/filings zijn van toepassing. Anders dan bij meldingen mag de periode hier tot 24 maanden beslaan.
Onze cijfers tellen bekendmakingen, geen procedures of bedrijven. Ze lopen enkele weken voor op de officiële statistieken van het Duitse Federale Bureau voor de Statistiek, maar zijn er niet identiek aan, omdat Destatis verzoekschriften en beslissingen telt.
Twee kleine endpoints geven de geldige waarden voor filters terug. Ze veranderen zelden en mogen een dag worden gecachet.
[
{ "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 geeft alle insolventierechtbanken terug met de exacte spelling die het filter court verwacht, plus de deelstaat. GET /v1/account toont uw contractomvang, de actieve limieten en het verbruik in de lopende maand.
Fouten komen terug als JSON met een passende HTTP-status. Het veld error is machineleesbaar en stabiel, message legt het probleem uit aan mensen en kan veranderen.
{
"error": "range_too_large",
"message": "Maximum range is 31 days per request."
}
| error | HTTP | Betekenis |
|---|---|---|
| bad_date | 400 | Een datum heeft niet het formaat YYYY-MM-DD. |
| bad_type | 400 | Onbekende waarde in types. Het antwoord bevat bovendien allowed. |
| range_too_large | 400 | Periode langer dan 31 dagen. |
| invalid_request | 400 | Andere ongeldige parameter of misvormde JSON-body. |
| missing_api_key | 401 | Geen sleutel meegestuurd. |
| invalid_api_key | 403 | Sleutel onbekend of API-toegang gedeactiveerd. |
| subscription_expired | 403 | Het abonnement achter de sleutel is verlopen. |
| insufficient_scope | 403 | De sleutel is niet geactiveerd voor dit endpoint. |
| not_found | 404 | ID onbekend, of de bekendmaking is na de bewaartermijn verwijderd. |
| rate_limited | 429 | Te veel verzoeken, zie limieten. |
| server_error | 500 | Fout aan onze kant. Probeer het na een korte pauze opnieuw en meld het ons als het aanhoudt. |
{
"error": "bad_type",
"message": "Unknown type 'eroffnung'.",
"allowed": ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
}
| Waarde | Limiet |
|---|---|
| 120 / min | Verzoeken per minuut en sleutel. Hoger op aanvraag. |
| 31 | Maximaal aantal dagen per verzoek op /v1/filings. /v1/stats staat 24 maanden toe. |
| 100 | Maximaal aantal items per pagina bij lijst-endpoints. |
| 500 | Maximaal aantal items per aanroep van /v1/check. |
| 10000 | Gevolgde bedrijven per account in het standaardcontract. |
| 5 | Geregistreerde webhook-endpoints per account. |
Elk antwoord bevat in zijn headers de actuele stand van de rate limit. Overschrijdt u die, dan ontvangt u 429 rate_limited en een header Retry-After in seconden.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1790661960
Retry-After: 12
De hoofdversie maakt deel uit van het pad (/v1/). Binnen een hoofdversie maken wij alleen aanvullende wijzigingen: nieuwe endpoints, nieuwe optionele parameters, nieuwe velden in antwoorden. Uw client moet onbekende velden daarom negeren in plaats van erop te falen.
Wijzigingen die bestaande integraties kunnen breken, gebeuren alleen in een nieuwe hoofdversie. De vorige versie blijft dan minstens twaalf maanden draaien en wij informeren elke sleutelhouder vooraf per e-mail. De versiedatum van het antwoord staat in de header X-API-Version.
X-API-Version: 2026-09-01
De enige bron voor bekendmakingen is het officiële gezamenlijke portaal van de deelstaten, insolvenzbekanntmachungen.de, waarop alle Duitse insolventierechtbanken publiceren op grond van § 9 van de Duitse Insolvenzordnung (Insolvency Code). Wij voegen geen bekendmakingen uit andere bronnen toe en wijzigen hun inhoud niet.
Rechtbanken publiceren op werkdagen, meestal 's nachts en 's ochtends. Nieuwe bekendmakingen zijn meestal de volgende ochtend vóór 7 uur beschikbaar in de API. Bedrijfsprofielen en registernummers worden verrijkt vanuit het handelsregister; balanscijfers komen uit de daar gepubliceerde jaarrekeningen.
De koppeling van bekendmakingen aan bedrijven is geautomatiseerd. Met een registernummer is die betrouwbaar; zonder (eenmanszaken, zeer gangbare namen) zijn fouten mogelijk. Daarom kan company_id null zijn en daarom maakt de tegenpartijcontrole onderscheid tussen exact en probable.
Insolventiebekendmakingen zijn openbaar, maar bevatten persoonsgegevens, vooral bij consumentenprocedures. Het gebruik ervan valt onder de AVG en onder de verwijdertermijnen van de Duitse verordening inzake insolventiebekendmakingen (Insolvenzbekanntmachungsverordnung). Wij verwijderen bekendmakingen daarom uiterlijk uit de API wanneer het officiële portaal ze moet verwijderen, en GET /v1/filings/{id} geeft dan 404 not_found terug.
Neem die verwijdering over in uw eigen systemen. Een regelmatige vergelijking aan de hand van de opgeslagen ID's volstaat: wat de API niet meer kent, hoort ook niet meer in uw database te staan.
Toegestaan gebruik is de beoordeling van bedrijfsrisico's, debiteurenbeheer, juridisch advies, onderzoek en journalistiek. Niet toegestaan: bekendmakingen over particulieren publiceren, de ruwe data doorverkopen en beslissingen over natuurlijke personen nemen die uitsluitend op deze data berusten. Verwerkt u namens ons persoonsgegevens, dan is een verwerkersovereenkomst beschikbaar.
Vragen over de integratie, hogere limieten of aanvullende velden: [email protected] of het contactformulier. Vermeld bij technische problemen het tijdstip van het verzoek en de eerste tekens van uw sleutel, dan vinden wij het verzoek meteen in de logs.
Wilt u AI-agents koppelen in plaats van HTTP-clients te schrijven, dan zijn dezelfde data beschikbaar via een Model Context Protocol-server, gedocumenteerd op MCP-server. Beide delen sleutels, limieten en contract.
Sleutels worden handmatig verstrekt. Vertel ons kort wat u wilt bouwen en welk volume u verwacht. Meestal is de toegang binnen één werkdag actief.