POSThttps://insolvenzmonitor.online/api/v1/match

Kundenbestand mit Insolvenzen abgleichen

Übermitteln Sie eine Liste Ihrer Kunden — Firmenname, optional PLZ, Handelsregisternummer oder Aktenzeichen — und erhalten Sie die Insolvenzbekanntmachungen zurück, die zu diesen Kunden passen. Bewertet mit derselben Matching-Engine, die auch das Insolvenzmonitor-Monitoring nutzt.

Gedacht für den Aufruf aus einem CRM oder ERP: eine breite Rückschau, wenn ein Kunde neu angelegt wird, danach ein kurzer täglicher Abgleich.

Zugang und Limits

Jede Anfrage braucht einen API-Schlüssel im Authorization-Header. Schlüssel erzeugen Sie im Dashboard unter API-Zugang; er wird nur einmal angezeigt — behandeln Sie ihn wie ein Passwort.

HTTP-Header
Authorization: Bearer imk_<ihr-api-schlüssel>
Content-Type: application/json
API TrialAPI Standard
Kunden je Anfrage550
Historieletzte 24 Monateab 01.01.2019
Anfragen1.000 insgesamt, 10/Minute (hart)unbegrenzt, 30/Minute (Soft-Limit)

Jeder Aufruf zählt als eine Anfrage, unabhängig davon, wie viele Kunden er enthält. Auf API Standard wird bei Überschreiten des Minutenlimits nichts blockiert, nur der Header X-RateLimit-Burst: limited gesetzt.

Anfrage

Request-Body
{
  "since": "2026-01-01",          // optional
  "min_confidence": 0.85,          // optional
  "customers": [                  // Pflicht
    {
      "ref": "crm-1001",          // optional, wird zurückgegeben
      "name": "Muster Bau GmbH",  // Pflicht
      "zip": "50667",             // optional, 5-stellige PLZ
      "hr": "HRB 12345",          // optional
      "court": "Amtsgericht Köln",// optional
      "case_number": "71 IN 123/26" // optional
    }
  ]
}
FeldTypBeschreibung
customersArrayPflicht. 1 bis 50 Kunden (API Trial: 5). Größere Bestände in mehreren Anfragen nacheinander senden.
customers[].nameStringPflicht. Firmen- oder Personenname, so wie er bei Ihnen geführt wird.
customers[].refStringOptional. Ihre eigene Kennung, z. B. die CRM-ID. Kommt im Ergebnis unverändert zurück; ohne Angabe die Position im Array.
customers[].zipStringOptional. Fünfstellige PLZ. Ist sie angegeben, muss sie im Text eines Namenstreffers vorkommen, sonst wird der Treffer verworfen (Stufe 4). Grenzt außerdem die Kandidaten ein.
customers[].hrStringOptional. Handelsregisternummer in der Form „HRB 12345“ oder „HRA 12345“. Findet einen Schuldner nicht allein — name immer mitsenden (siehe Handelsregisternummern).
customers[].courtStringOptional. Insolvenzgericht, zusammen mit case_number oder hr für exakte Treffer.
customers[].case_numberStringOptional. Aktenzeichen des Verfahrens.
sinceYYYY-MM-DDOptional. Frühestes Veröffentlichungsdatum. Standard: heute − 30 Tage. Wird auf frühestens 01.01.2019 begrenzt (API Trial: letzte 24 Monate). Datumsangaben in der Zukunft werden abgelehnt.
min_confidenceZahlOptional. Mindestsicherheit eines Namenstreffers, 0,50 bis 1,00. Standard: 0,85.

Antwort

Status 200 OK. results steht in derselben Reihenfolge wie customers.

Response-Body
{
  "since": "2026-01-01",
  "results": [
    {
      "ref": "crm-1001",
      "status": "match",
      "matches": [
        {
          "confidence": 0.972,
          "match_basis": "fuzzy_name",
          "debtor_name": "Muster Bau GmbH",
          "location": "Köln",
          "court": "Amtsgericht Köln",
          "case_number": "71 IN 123/26",
          "category": "Eröffnungen",
          "publication_date": "2026-03-14",
          "notice_text": "Amtsgericht Köln, Aktenzeichen 71 IN 123/26 ...",
          "bundesland": "Nordrhein-Westfalen",
          "branche": "Baugewerbe & Handwerk (Inkl. Baunebengewerbe)",
          "insolvency_id": 1839201,
          "company_page_url": "https://insolvenzmonitor.online/insolvenz/muster-bau-gmbh-koeln-hrb-12345"
        }
      ]
    },
    { "ref": "crm-1002", "status": "no_match", "matches": [] }
  ]
}
FeldTypBeschreibung
sinceStringDas tatsächlich angewandte Datum (nach Begrenzung auf 01.01.2019 bzw. die Trial-Historie).
results[].refStringIhre Kennung, oder die Position im Array.
results[].status"match" | "no_match"Ob mindestens ein Treffer ≥ min_confidence gefunden wurde.
results[].matchesArrayAlle Treffer ≥ min_confidence, bester zuerst, je Bekanntmachung nur einmal. Bei no_match leer.
matches[].confidenceZahl 0–1Trefferquote, auf drei Nachkommastellen gerundet.
matches[].match_basisStringAuf welcher Stufe der Treffer entstand: exact_case_court, exact_registration_court, exact_registration oder fuzzy_name.
matches[].debtor_nameStringSchuldner laut Bekanntmachung.
matches[].locationStringWohnsitz bzw. Sitz laut Bekanntmachung.
matches[].courtStringInsolvenzgericht.
matches[].case_numberStringAktenzeichen.
matches[].categoryStringKategorie, z. B. Eröffnungen, Abweisungen mangels Masse, Sicherungsmaßnahmen.
matches[].publication_dateStringVeröffentlichungsdatum (YYYY-MM-DD).
matches[].notice_textStringVollständiger Bekanntmachungstext (siehe Datenschutz).
matches[].bundeslandString | nullBundesland, falls bekannt.
matches[].brancheString | nullBranche, falls bekannt.
matches[].insolvency_idZahlID der Bekanntmachung, auch für GET /api/v1/insolvencies/:id.
matches[].company_page_urlString | nullLink zur öffentlichen Firmenseite, falls es eine gibt (siehe unten).

Kein Kategoriefilter

Es kommen Treffer aller Kategorien zurück — Eröffnungen, Abweisungen, Sicherungsmaßnahmen, Verteilungsverzeichnisse, Aufhebungen. Filtern Sie bei Bedarf über category.

company_page_url

Gesetzt, wenn es zur Firma eine öffentliche Firmenseite gibt: Firmen mit Handelsregistereintrag und Verfahren seit 2024. Für Privatpersonen, Einzelunternehmen ohne Registereintrag und ältere Fälle ist der Wert null — das ist normal.

Datenschutz

notice_text enthält bei Privatpersonen Name, Anschrift und oft das Geburtsdatum — bitte DSGVO-konform verarbeiten. Ihre übermittelten Kundendaten verwenden wir nur für den Abgleich und speichern sie nicht.

So funktioniert der Abgleich

Für jeden Kunden wird zuerst eine Kandidatenmenge aus rund vier Millionen Bekanntmachungen gezogen, dann wird jeder Kandidat bewertet. Die Bewertung ist eine Kaskade; die erste zutreffende Stufe gewinnt.

Kandidatenauswahl

Kandidaten sind Bekanntmachungen ab since, deren Schuldnername mit einem Wort Ihres Kundennamens beginnt (Umlaute und ihre Schreibweise mit ae/oe/ue werden beide berücksichtigt), und — falls eine zip übergeben wurde — in deren Text diese PLZ vorkommt. Neueste zuerst, einige hundert je Kunde.

Das führende Wort zählt. „Müller Bau GmbH“ findet „Müller Bau GmbH & Co. KG“. Ein Kunde, der bei Ihnen als „Bau Müller“ geführt wird oder nur über ein sehr kurzes oder häufiges Wort übereinstimmt, kann hier übersehen werden. hr und case_number steuern die exakten Stufen, ersetzen die Namenssuche aber nicht.

Normalisierung

  • Namen: Umlaute und ß aufgelöst (ä→ae, ö→oe, ü→ue, ß→ss), Akzente entfernt, kleingeschrieben. „Müller“ und „Mueller“ sind gleich.
  • Aktenzeichen und Handelsregisternummern: alle Leerzeichen entfernt, kleingeschrieben — „HRB 12345“ wird „hrb12345“.
  • Gerichte: Leerzeichen zusammengefasst, kleingeschrieben; Umlaute werden hier nicht aufgelöst.

Die Kaskade

  1. 1
    Aktenzeichen und Gericht

    Beide stimmen nach Normalisierung exakt überein.

    1,00 · exact_case_court
  2. 2
    Handelsregisternummer

    Die Nummer stimmt überein; stimmt zusätzlich das Gericht, steigt die Sicherheit auf 1,00.

    0,95 · exact_registration → 1,00 · exact_registration_court
  3. 3
    Unscharfer Namensabgleich

    Der Namensscore erreicht mindestens min_confidence und wird selbst zur Trefferquote.

    Score · fuzzy_name
  4. 4
    PLZ-Prüfung

    Nur für Namenstreffer: Wurde eine zip übergeben, muss sie als eigenständige fünfstellige Zahl im Text stehen, sonst wird der Treffer verworfen. Kein Bonus, nur bestanden oder nicht. Stufen 1–2 werden nie gefiltert.

    Filter

Stufe 3 im Detail

Firma mit Firma. Rechtsformen werden entfernt (GmbH, mbH, UG, AG, KG, OHG, GbR, e.V., e.K., Ltd. und weitere); Einzelbuchstaben werden zusammengezogen („A T U“ → „atu“), und eine exakt passende Abkürzung („A.T.U.“ = „ATU“) ergibt 1,00. Sonst müssen die Wörter Ihres Namens in dieser Reihenfolge im Schuldnernamen vorkommen: „Muster Bau“ passt zu „Muster Bau und Sanierung GmbH“, nicht aber zu „Musterbau GmbH“. Ein Wort gilt als gleich ab einer Ähnlichkeit von 88 von 100 und gleichem Anfangsbuchstaben (bis vier Zeichen exakt). Gleiche Rechtsformklasse auf beiden Seiten gibt +0,03.

Person mit Person. Die Nachnamen müssen übereinstimmen (Ähnlichkeit ab 90, gleicher Anfangsbuchstabe), jeder Vorname der kürzeren Seite muss auf der anderen vorkommen (Initialen über den Anfangsbuchstaben, längere Vornamen ab 95 — „Martina“ ist nicht „Martin“). Fehlt auf einer Seite der Vorname, zählt der Nachname mit Faktor 0,85.

Firma mit Person passt nie. Als Firma gilt ein Schuldner mit Rechtsform im Namen oder mit „HRA/HRB <Nummer>“ im Text.

Ähnlichkeit bedeutet: normalisierte Indel-Ähnlichkeit (rapidfuzz fuzz.ratio), also 200 · LCS(a, b) / (len(a) + len(b)) mit LCS als längster gemeinsamer Teilfolge.

Handelsregisternummern

Die Suche läuft über den Namen; eine HR-Nummer allein bringt keinen Schuldner in die Kandidaten. Unter den gefundenen Kandidaten vergleicht Stufe 2 Ihre hr mit dem gespeicherten Registereintrag. Der ist oft mit dem Gericht davor gespeichert („Dortmund, HRB 29750“) — senden Sie die schlichte Form „HRB 29750“.

Beispiel

Anfrage · curl
curl -sS -X POST "https://insolvenzmonitor.online/api/v1/match" \
  -H "Authorization: Bearer imk_ihr_schluessel" \
  -H "Content-Type: application/json" \
  -d '{
    "since": "2026-01-01",
    "customers": [
      { "ref": "crm-1001", "name": "Muster Bau GmbH", "zip": "50667", "hr": "HRB 12345" },
      { "ref": "crm-1002", "name": "Beispiel Handel GmbH", "zip": "80331" }
    ]
  }'

Die Antwort hat die oben gezeigte Form: ein Eintrag je Kunde in results, mit status und den Treffern.

Fehler

Fehler haben die Form { "error": { "code": "…", "message": "…" } }.

HTTPCodeBedeutung
401MISSING_KEYKein API-Schlüssel im Authorization-Header
401INVALID_KEYSchlüssel unbekannt oder widerrufen
403PLAN_EXPIREDKein aktiver Plan — Trial abgelaufen oder Abo beendet
400INVALID_REQUESTUngültiges JSON, customers fehlt oder ist leer, Kunde ohne name, PLZ nicht fünfstellig, since ungültig oder in der Zukunft, min_confidence außerhalb des Bereichs
400BATCH_TOO_LARGEMehr Kunden, als der Plan erlaubt (API Trial 5, API Standard 50)
429QUOTA_EXCEEDEDAnfragekontingent aufgebraucht (nur API Trial)
429RATE_LIMITEDMinutenlimit überschritten (nur API Trial)
500INTERNAL_ERRORDatenbankfehler — bitte später erneut versuchen

Empfehlungen für die Praxis

  • Neuer Kunde: ein einzelner Kunde, since etwa ein Jahr zurück.
  • Täglicher Lauf: den aktiven Bestand in Paketen zu 50 senden, since = heute − 5 Tage. Die Überlappung erfasst spät veröffentlichte Bekanntmachungen.
  • PLZ mitsenden: Ohne zip erfolgt der Abgleich nur über den Namen, und gleichnamige Firmen aus anderen Orten kommen mit. hr und case_number zusätzlich, wann immer vorhanden.
  • Treffer prüfen: Vor einer automatischen Reaktion debtor_name, location und category ansehen — die Trefferquote ist eine Wahrscheinlichkeit, keine Gewissheit.
  • Liste soll im Haus bleiben? Dann laden Sie die Rohdaten über GET /api/v1/insolvencies und gleichen selbst ab.