API 문서

Germany Insolvencies API는 독일의 모든 공식 도산 공고를 구조화된 데이터로 제공합니다. 매일 갱신되며 공고 유형, 연방주, 법원별로 필터링할 수 있고 기업 프로필 및 공시된 재무제표와 연결됩니다. 일반 HTTPS와 JSON을 사용하며 요청 시 CSV도 제공합니다.

최종 업데이트: 2026-09-29

접근 권한 요청

API 키는 수동으로 발급합니다. 무엇을 만들고 싶은지, 어느 정도의 호출량을 예상하는지 간단히 알려 주시면 보통 영업일 기준 하루 이내에 사용하실 수 있습니다.

접근 권한 요청

소개

독일의 도산 법원은 절차의 모든 단계를 공식 포털 insolvenzbekanntmachungen.de에 공고합니다. 보전처분, 개시 결정, 재산 부족으로 인한 기각, 배당표, 잔여 채무 면책 등이 여기에 해당합니다. 이 포털은 개별 사건을 조회하는 용도로 만들어졌으며 데이터 처리에는 적합하지 않습니다. 인터페이스도 내보내기 기능도 없고, 법정 기간이 지나면 공고를 삭제합니다.

API는 이 공백을 메웁니다. 새 공고를 게시 당일에 수집하고, 법원, 연방주, 등록번호, 공고 유형을 정규화한 뒤 기업 프로필에 연결하여 JSON 또는 CSV로 제공합니다. 신용보험사, 채권 추심 회사, 법무법인, 매출채권 관리 부서, 데이터 저널리스트가 이 데이터를 자사 시스템에 연동하여 사용합니다.

모든 요청은 https://germanyinsolvencies.com/api/v1로 보냅니다. API는 HTTPS만 지원하고 JSON을 받아 JSON으로 응답합니다. 필수 SDK는 없으며 HTTP 요청을 보낼 수 있는 언어라면 무엇이든 사용할 수 있습니다. 이 페이지의 예제는 curl, Python, Node를 사용합니다.

API는 API 접근이 활성화된 Germany Insolvencies 구독에 포함됩니다. 조건은 호출량과 사용 목적에 따라 개별적으로 협의합니다.

접근 권한

셀프 가입은 의도적으로 제공하지 않습니다. 도산 데이터에는 개인정보가 포함되어 있고, 연동의 목적을 파악하고자 하기 때문에 키를 수동으로 활성화합니다. 실제로는 짧은 메시지 한 통과 영업일 하루면 충분합니다.

문의 양식을 이용하시거나 [email protected]로 메일을 보내 다음 네 가지를 알려 주세요.

  • 무엇을 만들고 싶은지 두세 문장으로 설명해 주세요.
  • 어떤 공고 유형과 지역이 필요한지 알려 주세요.
  • 월간 요청 수 또는 확인할 기업 수가 대략 얼마인지 알려 주세요.
  • 웹훅을 수신할 수 있는지, 아니면 폴링을 선호하는지 알려 주세요.

이후 계약 범위에 포함된 모든 엔드포인트에서 바로 사용할 수 있는 개인 키를 받게 됩니다. 계정 하나에 활성 키를 여러 개 둘 수 있으므로 무중단으로 키를 교체할 수 있습니다.

인증

모든 요청은 X-API-Key 헤더에 키를 담아 보냅니다. 또는 같은 키를 Authorization 헤더에 Bearer 토큰으로 전달할 수도 있으며, 이 헤더만 지원하는 도구에서 유용합니다.

http 동일하게 동작하는 두 가지 헤더
X-API-Key: YOUR_API_KEY

# equivalent
Authorization: Bearer YOUR_API_KEY

키가 없으면 API는 401 missing_api_key로 응답합니다. 알 수 없거나 비활성화된 키는 403 invalid_api_key, 만료된 구독은 403 subscription_expired를 반환합니다. 이유는 항상 응답의 error 필드에 들어 있습니다.

키는 비밀번호처럼 다루세요. 서버 측에서만 사용하고 프런트엔드 코드나 공개 저장소에는 절대 넣지 마세요. 키가 유출되면 알려 주세요. 즉시 폐기하고 새 키를 발급해 드립니다.

퀵스타트

가장 흔한 요청이 가장 간단하기도 합니다. 하루 동안의 모든 개시 결정, 보전처분, 기각을 조회하는 것입니다. 호출은 한 번이고 페이지네이션이 없으며 1초 안에 응답이 옵니다.

bash 하루치 공고
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
  "https://germanyinsolvencies.com/api/v1/filings?date=2026-09-28&types=eroeffnung,sicherung,abweisung"

날짜를 지정하지 않으면 API는 전날의 공고를 반환합니다. 덕분에 일일 작업이 아주 단순해집니다. 오전 6시 직후에 cron 항목으로 전날 공고를 가져와 시스템에 저장하면 됩니다. 법원은 영업일에 공고하므로 일요일과 공휴일에는 결과가 보통 비어 있거나 매우 적습니다.

과거 데이터를 채우려면 최대 31일 단위의 구간으로 기간을 나누어 조회합니다.

python 31일 단위 구간으로 과거 데이터 채우기 (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)

엔드포인트 한눈에 보기

메서드경로용도
GET/v1/filings하루 또는 일정 기간의 공고. 유형, 연방주, 법원, 이름으로 필터링할 수 있습니다.
GET/v1/filings/{id}전문이 포함된 단일 공고.
GET/v1/companies공고에 한 번 이상 등장한 기업을 검색합니다.
GET/v1/companies/{id}현재 절차 상태가 포함된 기업 프로필.
GET/v1/companies/{id}/filings한 기업의 모든 공고를 시간순으로 조회합니다.
GET/v1/companies/{id}/financials최근 사업연도에 공시된 재무제표 수치.
POST/v1/check채무자 또는 공급업체를 한 번의 호출로 최대 500건까지 확인합니다.
GET/v1/watchlist모니터링 중인 기업 목록.
POST/v1/watchlist워치리스트에 기업을 추가합니다.
DELETE/v1/watchlist/{id}워치리스트에서 기업을 제거합니다.
POST/v1/webhooks푸시 알림을 받을 엔드포인트를 등록합니다.
GET/v1/stats일, 월, 연방주, 법원, 유형별 집계 건수.
GET/v1/types코드, 별칭, 공식 명칭이 포함된 모든 공고 유형.
GET/v1/courts연방주가 포함된 모든 도산 법원.
GET/v1/account키, 계약 범위, 한도, 현재 사용량.

경로는 https://germanyinsolvencies.com/api를 기준으로 한 상대 경로입니다. 따라서 첫 번째 엔드포인트의 전체 주소는 https://germanyinsolvencies.com/api/v1/filings입니다.

공고 조회

GET /v1/filings는 API의 핵심입니다. 요청한 기간에 게시된 모든 공고를 게시일 순으로, 같은 날 안에서는 게시된 순서대로 반환합니다.

파라미터형식설명
dateYYYY-MM-DD하루를 지정합니다. date도 date_from/date_to도 지정하지 않으면 기본값은 어제입니다.
date_fromYYYY-MM-DD기간의 시작일(포함). date보다 우선합니다.
date_toYYYY-MM-DD기간의 종료일(포함). date_from으로부터 최대 31일 뒤까지 가능합니다. 두 날짜의 순서가 바뀌어 있으면 API가 자동으로 바로잡습니다.
typescsv유형 별칭 또는 코드를 쉼표로 구분한 목록이며 다음 섹션을 참고하세요. 생략하면 모든 유형이 대상입니다.
bundeslandcsv응답에 표시되는 표기 그대로 연방주를 쉼표로 구분한 목록입니다. 예: Bayern,Hessen.
courtstring도산 법원의 이름입니다. 예: Charlottenburg (Berlin). 유효한 값의 목록은 /v1/courts에서 제공합니다.
qstring채무자 이름과 공고 본문에 대한 전문 검색이며 3자 이상이어야 합니다.
formatjson | csvjson(기본값) 또는 csv.

응답에는 실제 적용된 기간, 요청한 유형 코드, 결과 건수, 공고 배열이 들어 있습니다. 기간은 항상 한 번에 전부 반환되며 이 엔드포인트에는 페이지네이션이 없습니다. 공고가 많은 날에도 1메가바이트를 훨씬 밑돕니다.

json 응답
{
  "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 ..."
    }
  ]
}

같은 요청을 Node에서 바이에른으로 필터링한 예입니다.

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");

전문이 포함된 단일 공고는 GET /v1/filings/{id}로 조회합니다. ID는 변하지 않으므로 저장해 두었다가 나중에 해당 공고를 이미 처리했는지 확인하는 데 사용할 수 있습니다.

bash 단일 공고
curl -H "X-API-Key: $INSOLVENCY_API_KEY" \
  https://germanyinsolvencies.com/api/v1/filings/fil_8Kq2Zp4RwT

공고 유형

도산 법원은 공고를 아홉 가지 주제로 분류합니다. API는 types 파라미터에 숫자 코드와 읽기 쉬운 별칭을 모두 받습니다. 복수형과 움라우트가 들어간 표기(eroeffnungen, eröffnung)도 허용합니다.

별칭코드의미
sicherung0Sicherungsmaßnahmen. 보전처분으로, 대개 가관재인(예비 도산관재인)의 선임을 뜻합니다. 가장 이른 신호이며 보통 신청 후 며칠 이내에 나옵니다.
abweisung1Abweisungen mangels Masse. 재산이 절차 비용조차 충당하지 못해 신청이 기각된 경우입니다. 이후 회사는 보통 해산됩니다.
eroeffnung2Eröffnungen. 도산 절차의 개시입니다. 이때부터 채권은 도산관재인에게 신고합니다.
entscheidung3Entscheidungen im Verfahren. 절차 진행 중의 결정으로, 예를 들어 채권자집회나 조사기일에 관한 것입니다.
sonstiges4Sonstiges. 다른 어떤 주제에도 해당하지 않는 그 밖의 공고입니다.
entscheidung_aufhebung5Entscheidungen nach Aufhebung. 절차가 종결되거나 폐지된 이후의 결정입니다.
verteilungsverzeichnis6Verteilungsverzeichnisse. 독일 도산법 제188조에 따른 배당표로, 배당을 기대하는 채권자에게 중요합니다.
restschuldbefreiung7Restschuldbefreiung. 잔여 채무 면책이며 거의 전적으로 자연인에게 해당합니다.
insolvenzplan8Überwachte Insolvenzpläne. 도산 계획의 이행 감독으로, 회사는 영업을 계속합니다.

유형의 공식 명칭은 법원이 게시한 그대로 독일어로 type 필드에 반환됩니다. 기계적 처리에는 절대 바뀌지 않는 type_code를 사용하세요. types에 알 수 없는 값을 넣으면 허용되는 코드 목록과 함께 400 bad_type이 반환됩니다.

공고 객체

필드타입설명
idstring공고의 고정 ID이며 접두사는 fil_입니다.
datestring공식 포털의 게시일이며 형식은 YYYY-MM-DD입니다.
typestring공고 유형의 공식 명칭(독일어).
type_codestring0부터 8까지의 코드이며 공고 유형 섹션을 참고하세요.
namestring게시된 채무자 이름으로 법인 형태를 포함합니다.
sitzstring본점 소재지 또는 거주지.
courtstring관할 도산 법원.
aktenzeichenstring법원 사건번호. 예: 36a IN 4711/26. "IN"은 일반 절차, "IK"는 소비자 절차를 나타냅니다.
bundeslandstring법원이 속한 연방주.
registerstring | null공고에 기재되어 있는 경우 상업등기부 등록 정보. 자연인과 많은 개인사업자는 없습니다.
company_idstring | null채무자를 기업과 매칭할 수 있었던 경우 기업 프로필 링크. 그렇지 않으면 null입니다.
textstring공고의 전문으로, 변경 없이 그대로 제공됩니다.

모든 텍스트 필드는 UTF-8입니다. 이름과 본문은 오탈자를 포함해 법원이 작성한 그대로 전달됩니다. 정규화된 값은 명시적으로 정규화하는 필드에만 있습니다. type_code, bundesland, company_id가 그것입니다.

법원과 사건번호의 조합이 하나의 절차를 식별합니다. 하나의 절차는 보통 수개월에서 수년에 걸쳐 여러 건의 공고를 만들어 냅니다. 보전처분, 개시, 결정, 배당표, 종결이 그 예입니다. 절차를 추적하려면 court와 aktenzeichen으로 묶으세요.

CSV 내보내기

format=csv를 지정하면 API는 JSON 대신 같은 데이터를 CSV 파일로 반환합니다. 공고당 한 줄, 헤더 행 포함, 구분자는 쉼표, 인코딩은 UTF-8입니다. 파일은 Content-Disposition: attachment와 조회 기간이 들어간 파일명과 함께 전달됩니다.

bash 한 달치를 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 첫 몇 줄
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 ..."

text 열의 전문에는 줄바꿈이 포함되어 있으므로 따옴표로 감싸져 있습니다. Excel에서는 "데이터, 텍스트/CSV에서"를 통해 UTF-8 인코딩으로 열어야 올바르게 표시됩니다. 더블클릭으로 바로 열면 시스템 설정에 따라 움라우트가 깨질 수 있습니다.

기업

공고는 절차에 관한 것이지만 대부분의 활용 사례는 기업을 대상으로 합니다. 그래서 각 공고를 가능한 한 등록번호, 이름, 본점 소재지를 기준으로 기업 프로필과 매칭합니다. GET /v1/companies는 이 프로필을 검색합니다.

bash 이름과 연방주로 검색
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

검색 파라미터는 q(이름, 3자 이상), register, city, bundesland, status, industry입니다. 목록은 커서 방식으로 페이지당 최대 100건씩 반환됩니다.

json 목록 응답 구조
{
  "object": "list",
  "data": [ { "id": "cmp_3n8Kd2ZpQv", "object": "company", "...": "..." } ],
  "has_more": true,
  "next_cursor": "eyJpZCI6ImNtcF8zbjhLZDJacFF2In0"
}

has_more가 true인 동안에는 next_cursor를 다음 요청의 cursor 파라미터로 전달하세요. 커서는 24시간 동안 유효합니다.

기업 객체

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/"
}
필드타입설명
idstring고정 ID이며 접두사는 cmp_입니다.
namestring가장 최근 공고 기준의 이름.
legal_formstring정규화된 법인 형태. 예: GmbH, UG, AG, KG, e.K.
registerstring | null상업등기부 등록번호. 등기 법원은 register_court에 있습니다.
citystring본점 소재지.
bundeslandstring본점 소재지의 연방주.
industrystring | null확인 가능한 경우 자체 분류 기준의 업종.
statusstring절차의 현재 단계이며 아래를 참고하세요.
first_filingstring확인된 첫 공고의 날짜.
last_filingstring가장 최근 공고의 날짜.
filings_countinteger이 기업에 연결된 공고의 수.
urlstringgermanyinsolvencies.com의 공개 기업 페이지.

상태 값

상태는 절차에서 가장 최근의 관련 공고로부터 도출됩니다. 실무 편의를 위한 요약일 뿐 법적 판단이 아니며, 의심스러운 경우에는 공고 전문이 우선합니다.

상태유형 코드의미
preliminary0예비 절차이며 보전처분이 내려진 상태입니다.
dismissed1재산 부족으로 신청이 기각되었습니다.
opened2절차가 개시되었습니다.
plan8도산 계획이 확정되어 이행 감독이 진행 중입니다.
closed3, 5, 6절차가 종결되거나 폐지되었습니다.
discharged7잔여 채무 면책이 허가되었습니다.

GET /v1/companies/{id}/filings는 한 기업의 모든 공고를 오래된 순으로 반환합니다. 사건번호로 직접 검색하지 않고도 절차의 전체 이력을 얻을 수 있습니다.

재무제표 수치

자본회사의 경우 기업 등기부에 제출된 결산서를 확인할 수 있는 경우가 많습니다. GET /v1/companies/{id}/financials는 최근 사업연도의 주요 수치를 최신 순으로 반환합니다. 금액은 유로 단위의 정수입니다.

json 응답
{
  "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"
    }
  ]
}

소규모 회사는 요약 재무상태표만 공시하면 됩니다. 제출 서류에 포함되지 않은 필드는 null이며 추정값으로 채우지 않습니다. 이런 이유로 연간 순이익이 없는 경우가 많습니다.

전형적인 활용 방식은 이렇습니다. 여신 결정에서는 도산 공고 하나만 보는 것보다 최근 두세 사업연도의 자기자본 추이를 보는 편이 더 많은 것을 알려 줍니다. 자기자본이 마이너스이면서 보전처분이 내려졌다면 상황은 명확합니다.

거래처 확인

POST /v1/check는 고객이나 공급업체 목록 전체를 한 번의 호출로 확인합니다. 자체 참조값과 알고 있는 기업 정보(이름, 도시, 등록번호)를 보내면 API가 항목별로 매칭 결과와 절차 상태를 반환합니다.

bash 채무자 세 곳 확인
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 응답
{
  "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의미
exact등록번호가 일치하거나, 이름과 소재지가 모호하지 않게 일치합니다.
probable정규화(법인 형태, 표기)를 거친 이름이 일치하고 소재지도 타당합니다. 조치를 취하기 전에 확인해 주세요.
ambiguous여러 기업이 해당됩니다. 응답에 후보 수가 포함되며, city나 등록번호를 추가해 주세요.
none해당 기간에 공고가 없습니다. 좋은 소식이지만 신용등급은 아닙니다.

한 번의 호출로 최대 500개 항목을 처리할 수 있습니다. since는 검색 대상을 해당 날짜 이후의 공고로 제한하며 기본값은 3년 전입니다. 규모가 큰 포트폴리오에는 워치리스트를 권장합니다. 한 번 확인한 뒤에는 변경 사항만 받게 됩니다.

워치리스트

워치리스트는 일회성 확인을 지속적인 모니터링으로 바꿔 줍니다. 기업을 추가해 두면 그중 한 곳에 새 공고가 나오는 즉시 웹훅으로 watchlist.match 이벤트를 받습니다. 항목은 company_id, 등록번호와 법원, 또는 이름과 도시로 지정할 수 있습니다.

bash 기업 추가
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 응답
{
  "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
}

도산한 적이 없는 기업도 모니터링할 수 있습니다. 그러면 항목은 첫 공고가 나올 때까지 대기하며, 바로 그것이 목적입니다. ref에 넣은 자체 참조값은 모든 이벤트에 그대로 포함되어 돌아오므로 추가 조회 없이 결과를 고객 번호에 연결할 수 있습니다.

GET /v1/watchlist는 마지막 적중 날짜와 함께 모든 항목을 나열하고, DELETE /v1/watchlist/{id}는 항목 하나를 제거합니다. 같은 워치리스트가 Germany Insolvencies 대시보드에도 표시되며 변경 사항은 양방향으로 동기화됩니다.

웹훅

폴링 대신 이벤트를 푸시로 받을 수 있습니다. HTTPS 엔드포인트를 등록하고 이벤트를 선택하세요. 원하면 /v1/filings와 같은 필터도 지정할 수 있습니다.

bash 엔드포인트 등록
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"] }
  }' 
이벤트시점
filing.published새 공고가 필터와 일치합니다. 수집한 직후, 보통 오전 중에 도착합니다.
watchlist.match새 공고가 워치리스트에 있는 기업과 관련됩니다.
stats.daily_ready전날의 일일 수치 집계가 완료되었습니다.
json 이벤트 페이로드
{
  "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"
    }
  }
}

모든 호출에는 서명이 붙습니다. X-Webhook-Signature 헤더에는 타임스탬프와, 타임스탬프 및 원본 본문에 대한 HMAC-SHA256 값이 들어 있으며 등록할 때 받은 시크릿으로 계산됩니다.

http 서명 헤더
X-Webhook-Signature: t=1790661911,v1=7f2c1d9a4b6e8035c1f7a29d4e5b0c8371a6d2f94e8b3c07a15d9e2f6b4c8a01
python 서명 검증 (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

10초 이내에 2xx 상태로 응답해 주세요. 실패하면 간격을 늘려 가며 24시간에 걸쳐 총 8회 재시도합니다. 이벤트가 두 번 도착할 수 있으므로 이벤트의 id로 중복을 걸러 내세요.

통계

GET /v1/stats는 개별 공고 대신 집계 건수를 반환합니다. 수천 건의 레코드를 내려받아 직접 세지 않아도 되므로 대시보드, 보고서, 언론 분석에 적합한 엔드포인트입니다.

bash 월별, 연방주별 개시 결정 건수
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 응답
{
  "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에는 day, week, month, bundesland, court, type, legal_form을 최대 두 개까지 함께 지정할 수 있습니다. /v1/filings와 같은 필터가 적용됩니다. 공고 조회와 달리 이 경우 기간은 최대 24개월까지 가능합니다.

저희 수치는 절차나 기업이 아니라 공고를 집계합니다. 연방통계청의 공식 통계보다 몇 주 앞서지만 동일하지는 않습니다. Destatis는 신청 건수와 결정 건수를 집계하기 때문입니다.

참조 데이터

작은 엔드포인트 두 개가 필터에 쓸 수 있는 유효한 값을 반환합니다. 거의 바뀌지 않으므로 하루 동안 캐시해도 됩니다.

json GET /v1/types (발췌)
[
  { "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는 court 필터가 요구하는 정확한 표기와 연방주를 포함하여 모든 도산 법원을 반환합니다. GET /v1/account는 계약 범위, 적용 중인 한도, 이번 달 사용량을 보여 줍니다.

오류

오류는 해당하는 HTTP 상태와 함께 JSON으로 반환됩니다. error 필드는 기계가 읽을 수 있고 변하지 않으며, message는 사람을 위한 문제 설명이므로 바뀔 수 있습니다.

json 오류 응답
{
  "error": "range_too_large",
  "message": "Maximum range is 31 days per request."
}
errorHTTP의미
bad_date400날짜가 YYYY-MM-DD 형식이 아닙니다.
bad_type400types에 알 수 없는 값이 있습니다. 응답에 allowed가 추가로 포함됩니다.
range_too_large400기간이 31일을 초과합니다.
invalid_request400그 밖의 잘못된 파라미터 또는 형식이 올바르지 않은 JSON 본문입니다.
missing_api_key401키를 보내지 않았습니다.
invalid_api_key403알 수 없는 키이거나 API 접근이 비활성화되어 있습니다.
subscription_expired403키에 연결된 구독이 만료되었습니다.
insufficient_scope403이 키는 해당 엔드포인트에 대해 활성화되어 있지 않습니다.
not_found404알 수 없는 ID이거나, 보존 기간이 지나 공고가 삭제되었습니다.
rate_limited429요청이 너무 많습니다. 한도 섹션을 참고하세요.
server_error500저희 쪽 오류입니다. 잠시 기다린 후 다시 시도해 주시고, 계속되면 알려 주세요.
json 허용 값이 포함된 bad_type
{
  "error": "bad_type",
  "message": "Unknown type 'eroffnung'.",
  "allowed": ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
}

한도

값한도
120 / min키당 분당 요청 수. 요청 시 상향할 수 있습니다.
31/v1/filings의 요청당 최대 일수. /v1/stats는 24개월까지 허용합니다.
100목록 엔드포인트의 페이지당 최대 항목 수.
500/v1/check의 호출당 최대 항목 수.
10000표준 계약에서 계정당 모니터링할 수 있는 기업 수.
5계정당 등록할 수 있는 웹훅 엔드포인트 수.

모든 응답은 헤더에 현재 요청 한도 상태를 담고 있습니다. 한도를 초과하면 429 rate_limited와 초 단위의 Retry-After 헤더를 받게 됩니다.

http 요청 한도 헤더
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 1790661960
Retry-After: 12

버전 관리

메이저 버전은 경로의 일부입니다(/v1/). 하나의 메이저 버전 안에서는 새 엔드포인트, 새 선택 파라미터, 응답의 새 필드처럼 추가적인 변경만 합니다. 따라서 클라이언트는 알 수 없는 필드를 만나도 실패하지 말고 무시해야 합니다.

기존 연동을 깨뜨릴 수 있는 변경은 새 메이저 버전에서만 이루어집니다. 이전 버전은 최소 12개월 동안 계속 운영되며, 사전에 모든 키 보유자에게 이메일로 안내합니다. 응답의 버전 날짜는 X-API-Version 헤더에 있습니다.

http 응답 헤더
X-API-Version: 2026-09-01

데이터 출처와 최신성

공고의 유일한 출처는 연방주들의 공식 공동 포털 insolvenzbekanntmachungen.de이며, 독일의 모든 도산 법원이 독일 도산법 제9조에 따라 이곳에 공고합니다. 다른 출처의 공고는 추가하지 않으며 내용도 변경하지 않습니다.

법원은 영업일에, 주로 밤사이와 오전에 공고합니다. 새 공고는 보통 다음 날 오전 7시 이전에 API에서 확인할 수 있습니다. 기업 프로필과 등록번호는 기업 등기부에서 보강하며, 재무제표 수치는 그곳에 공시된 결산서에서 가져옵니다.

공고와 기업의 매칭은 자동으로 이루어집니다. 등록번호가 있으면 신뢰할 수 있지만, 없는 경우(개인사업자, 매우 흔한 이름)에는 오류가 생길 수 있습니다. 그래서 company_id가 null일 수 있고, 거래처 확인에서 exact와 probable을 구분하는 것도 이 때문입니다.

개인정보 보호와 허용되는 사용

도산 공고는 공개 정보이지만, 특히 소비자 절차에서는 개인정보를 포함합니다. 이를 사용할 때는 GDPR과 도산 공고 명령(Insolvency Announcement Ordinance)의 삭제 기간이 적용됩니다. 그래서 저희는 공식 포털이 삭제해야 하는 시점까지는 늦어도 API에서 공고를 삭제하며, 이후 GET /v1/filings/{id}는 404 not_found를 반환합니다.

이 삭제를 귀사의 시스템에도 반영해 주세요. 저장해 둔 ID를 기준으로 정기적으로 대조하면 충분합니다. API가 더 이상 알지 못하는 공고는 귀사의 데이터베이스에도 남아 있지 않아야 합니다.

허용되는 용도는 사업 리스크 평가, 채권 관리, 법률 자문, 연구, 언론 보도입니다. 허용되지 않는 것은 사인에 관한 공고의 게시, 원본 데이터의 재판매, 이 데이터만을 근거로 한 자연인에 대한 결정입니다. 저희를 대신하여 개인정보를 처리하시는 경우에는 데이터 처리 계약서를 제공해 드립니다.

지원

연동에 관한 질문, 더 높은 한도, 추가 필드에 대해서는 [email protected] 또는 문의 양식을 이용해 주세요. 기술적인 문제가 있을 때는 요청 시각과 키의 앞부분 몇 글자를 함께 알려 주시면 로그에서 해당 요청을 바로 찾을 수 있습니다.

HTTP 클라이언트를 작성하는 대신 AI 에이전트를 연결하고 싶다면, 같은 데이터를 Model Context Protocol 서버로도 이용할 수 있으며 MCP 서버 문서에 정리되어 있습니다. 두 방식은 키, 한도, 계약을 공유합니다.

접근 권한 요청

API 키는 수동으로 발급합니다. 무엇을 만들고 싶은지, 어느 정도의 호출량을 예상하는지 간단히 알려 주시면 보통 영업일 기준 하루 이내에 사용하실 수 있습니다.

접근 권한 요청