Documentation de l’API

L’API Germany Insolvencies fournit chaque annonce officielle d’insolvabilité en Allemagne sous forme de données structurées : au quotidien, filtrable par type d’annonce, Land et tribunal, reliée aux fiches d’entreprise et aux bilans publiés. HTTPS et JSON simples, CSV sur demande.

Dernière mise à jour: 2026-09-29

Demander un accès

Les clés sont attribuées à la main. Décrivez-nous brièvement ce que vous souhaitez construire et le volume attendu : l’accès est en général actif sous un jour ouvré.

Demander un accès

Introduction

Les tribunaux allemands de l’insolvabilité publient chaque étape d’une procédure sur le portail officiel insolvenzbekanntmachungen.de : mesures conservatoires, ouverture, rejets pour insuffisance d’actif, états de répartition, remise du solde de dettes. Le portail est conçu pour consulter des dossiers isolés, pas pour traiter des données. Il n’a pas d’interface programmatique, pas d’export, et supprime les annonces à l’expiration des délais légaux.

L’API comble cette lacune. Nous collectons chaque nouvelle annonce le jour de sa publication, normalisons le tribunal, le Land, le numéro de registre et le type d’annonce, la relions à une fiche d’entreprise et la mettons à disposition en JSON ou en CSV. Assureurs-crédit, sociétés de recouvrement, cabinets d’avocats, équipes de crédit clients et journalistes de données s’en servent pour alimenter leurs propres systèmes.

Toutes les requêtes vont à https://germanyinsolvencies.com/api/v1. L’API n’accepte que HTTPS, reçoit du JSON et répond en JSON. Aucun SDK n’est obligatoire : n’importe quel langage capable d’envoyer une requête HTTP suffit. Les exemples de cette page utilisent curl, Python et Node.

L’API fait partie d’un abonnement Germany Insolvencies avec accès API activé. Les conditions dépendent du volume et du cas d’usage et sont convenues individuellement.

Accès

Il n’existe volontairement pas d’inscription en libre-service. Nous activons les clés à la main, car les données d’insolvabilité contiennent des données personnelles et nous voulons savoir à quoi sert une intégration. En pratique, cela représente un court message et un jour ouvré.

Utilisez le formulaire de contact ou écrivez à [email protected] en indiquant quatre points :

  • Ce que vous voulez construire, en deux ou trois phrases.
  • Les types d’annonces et les régions dont vous avez besoin.
  • Le nombre approximatif de requêtes ou d’entreprises contrôlées par mois.
  • Si vous pouvez recevoir des webhooks ou préférez interroger l’API à intervalles réguliers.

Vous recevez ensuite une clé personnelle, immédiatement utilisable sur tous les endpoints couverts par votre contrat. Un compte peut détenir plusieurs clés actives, ce qui permet de faire tourner une clé sans interruption de service.

Authentification

Chaque requête transmet la clé dans l’en-tête X-API-Key. L’API accepte aussi la même clé comme jeton bearer dans l’en-tête Authorization, pratique pour les outils qui ne connaissent que cet en-tête.

http Deux en-têtes équivalents
X-API-Key: YOUR_API_KEY

# equivalent
Authorization: Bearer YOUR_API_KEY

Sans clé, l’API répond 401 missing_api_key. Une clé inconnue ou désactivée renvoie 403 invalid_api_key, un abonnement expiré renvoie 403 subscription_expired. La raison figure toujours dans le champ error de la réponse.

Traitez la clé comme un mot de passe : utilisez-la uniquement côté serveur, jamais dans du code frontend, jamais dans un dépôt public. Si une clé fuite, prévenez-nous : nous la révoquons aussitôt et en émettons une nouvelle.

Démarrage rapide

La requête la plus courante est aussi la plus simple : toutes les ouvertures, mesures conservatoires et rejets d’une journée. Un appel, pas de pagination, la réponse arrive en moins d’une seconde.

bash Annonces d’une journée
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
  "https://germanyinsolvencies.com/api/v1/filings?date=2026-09-28&types=eroeffnung,sicherung,abweisung"

Sans date, l’API renvoie la veille. Une tâche quotidienne devient triviale : une entrée cron peu après 6 h récupère les annonces de la veille et les écrit dans votre système. Les tribunaux publient les jours ouvrés ; les dimanches et jours fériés, le résultat est donc généralement vide ou très court.

Pour un rattrapage historique, parcourez la période par fenêtres de 31 jours au maximum :

python Rattrapage par fenêtres de 31 jours (Python)
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)

Vue d’ensemble des endpoints

MéthodeCheminFonction
GET/v1/filingsAnnonces d’un jour ou d’une période, filtrables par type, Land, tribunal et nom.
GET/v1/filings/{id}Une annonce isolée avec son texte intégral.
GET/v1/companiesRecherche des entreprises apparaissant dans au moins une annonce.
GET/v1/companies/{id}Fiche d’entreprise avec l’état actuel de la procédure.
GET/v1/companies/{id}/filingsToutes les annonces d’une entreprise, par ordre chronologique.
GET/v1/companies/{id}/financialsChiffres de bilan publiés des derniers exercices.
POST/v1/checkContrôle jusqu’à 500 débiteurs ou fournisseurs en un seul appel.
GET/v1/watchlistListe les entreprises suivies.
POST/v1/watchlistAjoute une entreprise à la liste de suivi.
DELETE/v1/watchlist/{id}Retire une entreprise de la liste de suivi.
POST/v1/webhooksEnregistre un endpoint pour les notifications push.
GET/v1/statsDécomptes agrégés par jour, mois, Land, tribunal ou type.
GET/v1/typesTous les types d’annonces avec code, alias et dénomination officielle.
GET/v1/courtsTous les tribunaux de l’insolvabilité avec leur Land.
GET/v1/accountClé, périmètre du contrat, limites et consommation actuelle.

Les chemins sont relatifs à https://germanyinsolvencies.com/api. L’adresse complète du premier endpoint est donc https://germanyinsolvencies.com/api/v1/filings.

Récupérer les annonces

GET /v1/filings est le cœur de l’API. Il renvoie chaque annonce publiée sur la période demandée, triée par date de publication et, au sein d’une journée, dans l’ordre de publication.

ParamètreFormatDescription
dateYYYY-MM-DDUn jour précis. Par défaut la veille si ni date ni date_from/date_to n’est indiqué.
date_fromYYYY-MM-DDDébut d’une période (inclus). Prioritaire sur date.
date_toYYYY-MM-DDFin d’une période (incluse). 31 jours au plus après date_from. Si les dates sont inversées, l’API les remet dans l’ordre.
typescsvListe d’alias ou de codes de type séparés par des virgules, voir la section suivante. À omettre pour tous les types.
bundeslandcsvListe de Länder séparés par des virgules, écrits comme dans la réponse, par exemple Bayern,Hessen.
courtstringNom du tribunal de l’insolvabilité, par exemple Charlottenburg (Berlin). La liste des valeurs valides provient de /v1/courts.
qstringRecherche plein texte dans le nom du débiteur et le texte de l’annonce, au moins trois caractères.
formatjson | csvjson (par défaut) ou csv.

La réponse contient la période effective, les codes de type demandés, le nombre de résultats et le tableau des annonces. Une période est toujours renvoyée d’un bloc, ce endpoint n’a pas de pagination. Même les jours chargés restent bien en dessous d’un mégaoctet.

json Réponse
{
  "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 ..."
    }
  ]
}

La même requête en Node, filtrée sur la Bavière :

javascript Node.js
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");

Une annonce isolée avec son texte intégral est renvoyée par GET /v1/filings/{id}. L’ID reste stable : vous pouvez le stocker et vous en servir plus tard pour vérifier si une annonce a déjà été traitée.

bash Annonce isolée
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
  https://germanyinsolvencies.com/api/v1/filings/fil_8Kq2Zp4RwT

Types d’annonces

Les tribunaux de l’insolvabilité classent leurs annonces en neuf rubriques. Le paramètre types accepte aussi bien le code numérique qu’un alias lisible. Les pluriels et les graphies avec trémas sont également acceptés (eroeffnungen, eröffnung).

AliasCodeSignification
sicherung0Sicherungsmaßnahmen. Mesures conservatoires, en général la désignation d’un administrateur provisoire. Le signal le plus précoce, typiquement quelques jours après la requête.
abweisung1Abweisungen mangels Masse. Requête rejetée parce que l’actif ne couvre même pas les frais de la procédure. L’entreprise est en général dissoute ensuite.
eroeffnung2Eröffnungen. Ouverture de la procédure d’insolvabilité. Dès lors, les créances sont déclarées auprès de l’administrateur.
entscheidung3Entscheidungen im Verfahren. Décisions en cours de procédure, par exemple sur l’assemblée des créanciers ou la date de vérification.
sonstiges4Sonstiges. Autres annonces qui ne relèvent d’aucune autre rubrique.
entscheidung_aufhebung5Entscheidungen nach Aufhebung. Décisions après la clôture ou l’arrêt de la procédure.
verteilungsverzeichnis6Verteilungsverzeichnisse. États de répartition au sens du § 188 du Code allemand de l’insolvabilité, pertinents pour les créanciers qui attendent un dividende.
restschuldbefreiung7Restschuldbefreiung. Remise du solde de dettes, presque exclusivement pour des personnes physiques.
insolvenzplan8Überwachte Insolvenzpläne. Surveillance d’un plan d’insolvabilité, l’entreprise poursuit son activité.

La dénomination officielle du type est renvoyée en allemand dans le champ type, exactement comme le tribunal la publie. Pour le traitement automatique, utilisez type_code, qui ne change jamais. Une valeur inconnue dans types renvoie 400 bad_type avec la liste des codes autorisés.

L’objet annonce

ChampTypeDescription
idstringID stable de l’annonce, préfixe fil_.
datestringDate de publication sur le portail officiel, YYYY-MM-DD.
typestringDénomination officielle du type d’annonce, en allemand.
type_codestringCode de 0 à 8, voir les types d’annonces.
namestringNom du débiteur tel que publié, forme juridique comprise.
sitzstringSiège social ou lieu de résidence.
courtstringTribunal de l’insolvabilité compétent.
aktenzeichenstringNuméro de dossier du tribunal, par exemple 36a IN 4711/26. « IN » désigne les procédures ordinaires, « IK » les procédures de consommateurs.
bundeslandstringLand du tribunal.
registerstring | nullInscription au registre du commerce, si l’annonce en mentionne une. Absente pour les personnes physiques et de nombreux entrepreneurs individuels.
company_idstring | nullLien vers la fiche d’entreprise, si le débiteur a pu être rapproché d’une entreprise. Sinon null.
textstringTexte intégral de l’annonce, inchangé.

Tous les champs texte sont en UTF-8. Les noms et les textes sont transmis exactement comme le tribunal les a rédigés, fautes de frappe comprises. Les valeurs normalisées ne se trouvent que dans les champs explicitement normalisés : type_code, bundesland et company_id.

La combinaison du tribunal et du numéro de dossier identifie une procédure. Une procédure produit typiquement plusieurs annonces sur des mois ou des années : mesures conservatoires, ouverture, décisions, état de répartition, clôture. Pour suivre une procédure, regroupez par court et aktenzeichen.

Export CSV

Avec format=csv, l’API renvoie les mêmes données sous forme de fichier CSV au lieu de JSON : une ligne par annonce, ligne d’en-tête, virgule comme séparateur, UTF-8. Le fichier est livré avec Content-Disposition: attachment et un nom de fichier contenant la période.

bash Télécharger un mois en CSV
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"
csv Premières lignes
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 ..."

Le texte intégral de la colonne text contient des retours à la ligne et est donc placé entre guillemets. Excel ouvre correctement le fichier via « Données, À partir d’un fichier texte/CSV » avec l’encodage UTF-8 ; un simple double-clic peut altérer les caractères accentués selon les réglages du système.

Entreprises

Les annonces portent sur des procédures, mais la plupart des cas d’usage portent sur des entreprises. C’est pourquoi chaque annonce est, si possible, rapprochée d’une fiche d’entreprise à l’aide du numéro de registre, du nom et du siège. GET /v1/companies recherche dans ces fiches.

bash Recherche par nom et Land
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

Les paramètres de recherche sont q (nom, au moins trois caractères), register, city, bundesland, status et industry. Les listes sont renvoyées par pages de 100 entrées au plus, avec un curseur :

json Enveloppe de liste
{
  "object": "list",
  "data": [ { "id": "cmp_3n8Kd2ZpQv", "object": "company", "...": "..." } ],
  "has_more": true,
  "next_cursor": "eyJpZCI6ImNtcF8zbjhLZDJacFF2In0"
}

Tant que has_more vaut true, passez next_cursor comme paramètre cursor de la requête suivante. Un curseur reste valable 24 heures.

L’objet entreprise

json GET /v1/companies/cmp_3n8Kd2ZpQv
{
  "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/"
}
ChampTypeDescription
idstringID stable, préfixe cmp_.
namestringNom d’après l’annonce la plus récente.
legal_formstringForme juridique normalisée, par exemple GmbH, UG, AG, KG, e.K.
registerstring | nullNuméro du registre du commerce. Le tribunal du registre figure dans register_court.
citystringSiège social.
bundeslandstringLand du siège social.
industrystring | nullSecteur selon notre classification, s’il peut être déterminé.
statusstringStade actuel de la procédure, voir ci-dessous.
first_filingstringDate de la première annonce connue.
last_filingstringDate de l’annonce la plus récente.
filings_countintegerNombre d’annonces rattachées à cette entreprise.
urlstringPage publique de l’entreprise sur germanyinsolvencies.com.

Valeurs de statut

Le statut est déduit de la dernière annonce pertinente de la procédure. C’est un résumé pratique, pas une appréciation juridique : en cas de doute, le texte intégral de l’annonce fait foi.

StatutCodes de typeSignification
preliminary0Procédure préliminaire, mesures conservatoires ordonnées.
dismissed1Requête rejetée pour insuffisance d’actif.
opened2Procédure ouverte.
plan8Plan d’insolvabilité confirmé, surveillance en cours.
closed3, 5, 6Procédure clôturée ou arrêtée.
discharged7Remise du solde de dettes accordée.

GET /v1/companies/{id}/filings renvoie toutes les annonces d’une entreprise, les plus anciennes d’abord. Vous obtenez ainsi l’historique complet d’une procédure sans chercher vous-même par numéro de dossier.

Chiffres de bilan

Pour les sociétés de capitaux, les comptes annuels déposés au registre du commerce sont souvent disponibles. GET /v1/companies/{id}/financials renvoie les chiffres clés des derniers exercices, du plus récent au plus ancien. Les montants sont en euros entiers.

json Réponse
{
  "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"
    }
  ]
}

Les petites entreprises n’ont à publier qu’un bilan abrégé. Les champs absents du dépôt valent null et ne sont jamais estimés. Le résultat net annuel manque souvent pour cette raison.

Usage typique : dans une décision de crédit, l’évolution des capitaux propres sur les deux ou trois derniers exercices en dit plus que la seule annonce d’insolvabilité. Des capitaux propres négatifs associés à une mesure conservatoire donnent un tableau sans ambiguïté.

Contrôle de contreparties

POST /v1/check contrôle toute une liste de clients ou de fournisseurs en un seul appel. Vous envoyez votre propre référence et ce que vous savez de l’entreprise : nom, ville, numéro de registre. L’API renvoie pour chaque entrée une correspondance et le statut de la procédure.

bash Contrôler trois débiteurs
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" }
    ]
  }' 
json Réponse
{
  "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 }
  ]
}
matchSignification
exactLe numéro de registre correspond, ou le nom et le siège concordent sans ambiguïté.
probableLe nom correspond après normalisation (forme juridique, orthographe), siège plausible. À vérifier avant d’agir.
ambiguousPlusieurs entreprises conviennent. La réponse contient le nombre de candidats ; ajoutez la ville ou le numéro de registre.
noneAucune annonce sur la période. C’est une bonne nouvelle, mais pas une notation de crédit.

Un appel accepte jusqu’à 500 entrées. since limite la recherche aux annonces à partir de cette date, par défaut trois ans en arrière. Pour les portefeuilles plus importants, nous recommandons la liste de suivi : contrôler une fois, puis ne recevoir que les changements.

Liste de suivi

La liste de suivi transforme un contrôle ponctuel en surveillance continue. Vous ajoutez des entreprises et, dès qu’une nouvelle annonce paraît pour l’une d’elles, vous recevez un événement watchlist.match par webhook. Les entrées peuvent être identifiées par company_id, par numéro de registre et tribunal, ou par nom et ville.

bash Ajouter une entreprise
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" }' 
json Réponse
{
  "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
}

On peut aussi suivre des entreprises qui n’ont jamais été en difficulté. L’entrée attend alors la première annonce, et c’est précisément le but. Votre propre référence dans ref revient dans chaque événement : vous rattachez un résultat à votre numéro de client sans recherche supplémentaire.

GET /v1/watchlist liste toutes les entrées avec la date du dernier résultat, DELETE /v1/watchlist/{id} en supprime une. La même liste de suivi est visible dans votre tableau de bord Germany Insolvencies, les modifications sont synchronisées dans les deux sens.

Webhooks

Au lieu d’interroger l’API, vous pouvez faire pousser les événements. Enregistrez un endpoint HTTPS et choisissez les événements, éventuellement avec les mêmes filtres que pour /v1/filings.

bash Enregistrer un endpoint
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"] }
  }' 
ÉvénementQuand
filing.publishedUne nouvelle annonce correspond à votre filtre. Arrive peu après sa collecte, en général le matin.
watchlist.matchUne nouvelle annonce concerne une entreprise de votre liste de suivi.
stats.daily_readyLes chiffres quotidiens de la veille sont complets.
json Charge utile d’un événement
{
  "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"
    }
  }
}

Chaque appel est signé. L’en-tête X-Webhook-Signature contient un horodatage et un HMAC-SHA256 calculé sur l’horodatage et le corps brut, avec le secret que vous recevez lors de l’enregistrement.

http En-tête de signature
X-Webhook-Signature: t=1790661911,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
python Vérifier la signature (Python, Flask)
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

Répondez par un statut 2xx dans les dix secondes. En cas d’échec, nous réessayons à intervalles croissants sur 24 heures, huit fois au total. Les événements peuvent arriver en double : utilisez l’id de l’événement pour écarter les doublons.

Statistiques

GET /v1/stats renvoie des décomptes plutôt que des annonces individuelles. C’est le endpoint des tableaux de bord, des rapports et des analyses journalistiques, car il évite de télécharger et de compter des milliers d’enregistrements.

bash Ouvertures par mois et par Land
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
json Réponse
{
  "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 accepte day, week, month, bundesland, court, type et legal_form, jusqu’à deux à la fois. Les mêmes filtres que pour /v1/filings s’appliquent. Contrairement aux annonces, la période peut ici couvrir jusqu’à 24 mois.

Nos chiffres comptent des annonces, pas des procédures ni des entreprises. Ils devancent de plusieurs semaines les statistiques officielles de l’Office fédéral de la statistique, sans leur être identiques, car Destatis compte les requêtes et les décisions.

Données de référence

Deux petits endpoints renvoient les valeurs valides pour les filtres. Elles changent rarement et peuvent être mises en cache pendant une journée.

json GET /v1/types (extrait)
[
  { "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 renvoie tous les tribunaux de l’insolvabilité avec l’orthographe exacte attendue par le filtre court et le Land. GET /v1/account affiche le périmètre de votre contrat, les limites actives et la consommation du mois en cours.

Erreurs

Les erreurs reviennent en JSON avec le statut HTTP correspondant. Le champ error est lisible par machine et stable ; message explique le problème à un humain et peut changer.

json Réponse d’erreur
{
  "error": "range_too_large",
  "message": "Maximum range is 31 days per request."
}
errorHTTPSignification
bad_date400Une date n’est pas au format YYYY-MM-DD.
bad_type400Valeur inconnue dans types. La réponse contient en plus allowed.
range_too_large400Période supérieure à 31 jours.
invalid_request400Autre paramètre invalide ou corps JSON mal formé.
missing_api_key401Aucune clé envoyée.
invalid_api_key403Clé inconnue ou accès API désactivé.
subscription_expired403L’abonnement associé à la clé a expiré.
insufficient_scope403La clé n’est pas autorisée pour ce endpoint.
not_found404ID inconnu, ou annonce supprimée après son délai de conservation.
rate_limited429Trop de requêtes, voir les limites.
server_error500Erreur de notre côté. Réessayez après une courte pause et prévenez-nous si elle persiste.
json bad_type avec les valeurs autorisées
{
  "error": "bad_type",
  "message": "Unknown type 'eroffnung'.",
  "allowed": ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
}

Limites

ValeurLimite
120 / minRequêtes par minute et par clé. Plus élevé sur demande.
31Nombre maximal de jours par requête sur /v1/filings. /v1/stats autorise 24 mois.
100Nombre maximal d’entrées par page sur les endpoints de liste.
500Nombre maximal d’entrées par appel sur /v1/check.
10000Entreprises suivies par compte dans le contrat standard.
5Endpoints webhook enregistrés par compte.

Chaque réponse porte dans ses en-têtes l’état actuel de la limite de débit. Si vous la dépassez, vous recevez 429 rate_limited et un en-tête Retry-After en secondes.

http En-têtes de limite de débit
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1790661960
Retry-After: 12

Gestion des versions

La version majeure fait partie du chemin (/v1/). Au sein d’une version majeure, nous n’apportons que des changements additifs : nouveaux endpoints, nouveaux paramètres optionnels, nouveaux champs dans les réponses. Votre client doit donc ignorer les champs inconnus plutôt que d’échouer.

Les changements susceptibles de casser des intégrations existantes n’interviennent que dans une nouvelle version majeure. La version précédente reste alors en service au moins douze mois, et nous prévenons auparavant chaque titulaire de clé par e-mail. La date de version de la réponse figure dans l’en-tête X-API-Version.

http En-tête de réponse
X-API-Version: 2026-09-01

Sources de données et actualité

L’unique source des annonces est le portail officiel commun des Länder, insolvenzbekanntmachungen.de, sur lequel tous les tribunaux allemands de l’insolvabilité publient en application du § 9 du Code allemand de l’insolvabilité. Nous n’ajoutons aucune annonce issue d’autres sources et ne modifions pas leur contenu.

Les tribunaux publient les jours ouvrés, surtout la nuit et le matin. Les nouvelles annonces sont en général disponibles dans l’API avant 7 h le lendemain matin. Les fiches d’entreprise et les numéros de registre sont enrichis à partir du registre du commerce ; les chiffres de bilan proviennent des comptes annuels qui y sont publiés.

Le rapprochement des annonces et des entreprises est automatisé. Avec un numéro de registre, il est fiable ; sans (entrepreneurs individuels, noms très courants), des erreurs sont possibles. C’est pourquoi company_id peut valoir null, et pourquoi le contrôle de contreparties distingue exact et probable.

Protection des données et usage autorisé

Les annonces d’insolvabilité sont publiques, mais elles contiennent des données personnelles, surtout dans les procédures de consommateurs. Leur utilisation est soumise au RGPD et aux délais de suppression de l’ordonnance allemande sur les publications d’insolvabilité. Nous supprimons donc les annonces de l’API au plus tard lorsque le portail officiel doit les supprimer, et GET /v1/filings/{id} renvoie alors 404 not_found.

Merci de répercuter cette suppression dans vos propres systèmes. Une comparaison régulière à partir des ID que vous avez stockés suffit : ce que l’API ne connaît plus ne doit plus figurer dans votre base non plus.

Sont autorisés : l’évaluation des risques commerciaux, la gestion des créances, le conseil juridique, la recherche et le journalisme. Ne sont pas autorisés : la publication d’annonces concernant des particuliers, la revente des données brutes et les décisions sur des personnes physiques fondées uniquement sur ces données. Si vous traitez des données personnelles pour notre compte, un contrat de sous-traitance est disponible.

Assistance

Questions sur l’intégration, limites plus élevées ou champs supplémentaires : [email protected] ou le formulaire de contact. En cas de problème technique, indiquez l’heure de la requête et les premiers caractères de votre clé : nous retrouvons alors la requête dans les journaux immédiatement.

Si vous souhaitez connecter des agents IA plutôt qu’écrire des clients HTTP, les mêmes données sont disponibles via un serveur Model Context Protocol, documenté sur la page Serveur MCP. Les deux partagent clés, limites et contrat.

Demander un accès

Les clés sont attribuées à la main. Décrivez-nous brièvement ce que vous souhaitez construire et le volume attendu : l’accès est en général actif sous un jour ouvré.

Demander un accès