Developer Reference

등기고 API

등기고 API를 통해 부동산 등기부등본 조회, 문서함 관리, 변동 알림을 자동화하고 외부 시스템과 연동할 수 있습니다.

개요

모든 API 엔드포인트의 Base URL은 다음과 같습니다.

Base URL
https://deunggigo.kr/api/v1

요청/응답 Body는 모두 application/json 형식입니다.

등기부등본 열람은 비동기로 처리됩니다. 요청 시 id가 반환되며, 이후 해당 id로 결과를 폴링합니다. 처리 완료까지 수 분이 소요될 수 있습니다.

인증

API 요청은 API 키 또는 로그인 세션 쿠키 중 하나로 인증합니다. 외부 서버에서 호출할 때는 API 키를 사용하세요.

API 키는 설정 페이지 또는 API 키 관리 페이지에서 발급받습니다.

헤더 형식 (둘 중 하나 사용)

Request Header
# 방법 1 - Authorization Bearer
Authorization: Bearer dgg_xxxxxxxxxxxxxxxx

# 방법 2 - X-Api-Key
X-Api-Key: dgg_xxxxxxxxxxxxxxxx

curl 예시

bash
curl -X GET "https://deunggigo.kr/api/v1/credits/balance" \
  -H "Authorization: Bearer dgg_xxxxxxxxxxxxxxxx"
API 키는 서버 측에서만 사용하고 외부에 노출하지 마세요. 키가 없거나 유효하지 않으면 401 Unauthorized가 반환됩니다.

크레딧

GET/api/v1/credits/balance잔액 조회

현재 계정의 크레딧 잔액을 조회합니다.

bash
curl -X GET "https://deunggigo.kr/api/v1/credits/balance" \
  -H "Authorization: Bearer dgg_xxx"

응답 200

json
{
  "creditBalance": 15000
}
GET/api/v1/credits/transactions거래 내역

크레딧 충전/사용 내역을 페이지네이션으로 조회합니다.

Query Parameters

파라미터타입기본값설명
pagenumber1페이지 번호
limitnumber20페이지당 항목 수
bash
curl -X GET "https://deunggigo.kr/api/v1/credits/transactions?page=1&limit=10" \
  -H "Authorization: Bearer dgg_xxx"

응답 200

json
{
  "items": [
    {
      "id": "tx_abc123",
      "type": "usage",
      "amount": -50,
      "balanceAfter": 14950,
      "description": "등기부등본 열람 (1341-2004-008457)",
      "referenceType": "inquiry",
      "createdAt": "2024-06-01T09:01:24.000Z"
    },
    {
      "id": "tx_abc124",
      "type": "charge",
      "amount": 10000,
      "balanceAfter": 15000,
      "description": "크레딧 충전",
      "referenceType": "payment",
      "createdAt": "2024-06-01T08:00:00.000Z"
    }
  ],
  "total": 42,
  "page": 1,
  "totalPages": 5
}

법인 검색·열람·발급

법인(상업)등기 API입니다. 흐름은 부동산과 동일합니다 — ①검색(corp-search) → ②법인 문서함에 담기(corp-inquiries) → ③문서함 열람/발급 실행(execute). 열람(issueType=1, 700원)과 제출용 발급(issueType=0, 1000원)을 지원합니다. 인증·과금 방식도 동일하며, 결과·PDF는 GET /api/v1/inquiries/{id}로 조회합니다.

POST/api/v1/corp-search법인 검색 (상호·법인등록번호)

상호 또는 법인등록번호로 법인을 검색합니다. 상세검색 필터(법인구분·등기부상태·본지점) 지원.

json - 요청
{
  "swrd": "당찬아이들",
  "srchCls": "PC01",
  "corpClsCd": "0",
  "crgbkStcd": "0",
  "hdbrcCls": "0"
}

파라미터

파라미터타입기본값설명
swrd*string—검색어. 상호 또는 법인등록번호(하이픈 포함 가능)
srchCls'PC01'|'PC03'자동검색구분. PC01=상호, PC03=법인등록번호. 미지정 시 숫자 13자리면 PC03 자동 판별
corpClsCdstring'0'법인구분. 0=전체, 11=주식회사, 14=유한회사, 21=사단법인 등
crgbkStcdstring'0'등기부상태. 0=전체, 12300=살아있는 등기, 12341=해산, 12343=청산종결, 12349=파산
hdbrcCls'0'~'2''0'본지점. 0=전체, 1=본점, 2=지점

응답 200

json
{
  "success": true,
  "totalCount": 1,
  "results": [
    {
      "conm": "당찬아이들",
      "romConm": "DangChan Co.,Ltd.",
      "drokno": "111111-1111111",
      "corpClsName": "주식회사",
      "crgbkStcdName": "살아있는 등기",
      "regtName": "수원지방법원 안양지원 안양등기소",
      "masterNo": 1111111,
      "crgNo": "1111111"
    }
  ]
}
POST/api/v1/corp-inquiries법인 문서함에 담기

검색한 법인을 법인 문서함에 담기만 합니다(status=cart, 과금 없음). 부동산 "열람 문서 추가"와 동일한 방식입니다. 실제 열람은 이어서 POST /api/v1/bulk-inquiries/{id}/execute로 진행합니다. 문서함(bulkId) 지정 또는 기본 '법인 조회' 문서함이 자동 생성됩니다.

json - 요청
{
  "rows": [
    { "drokno": "134111-0071315", "conm": "당찬아이들" }
  ],
  "boxName": "내 법인 문서함"
}

파라미터

파라미터타입기본값설명
rows*object[]—담을 법인 배열. 각 행은 최소 drokno(법인등록번호) 필수. corp-search 결과 행을 그대로 전달 권장 (단건은 row 하나만 전달도 가능)
rows[].drokno*string—법인등록번호 (문서함 열람 실행 시 이 번호로 정확검색 후 열람)
bulkIdstring—(선택) 담을 법인 문서함 id. 지정 시 해당 문서함에 추가
boxNamestring—(선택) 새 법인 문서함 이름. bulkId 없이 지정하면 그 이름으로 새 문서함 생성. 둘 다 없으면 날짜별 '법인 조회' 문서함 자동 생성

응답 200

json
{
  "message": "법인 문서함에 1건 추가되었습니다.",
  "bulkId": "…",
  "added": 1,
  "duplicated": 0
}
POST/api/v1/corp-inquiries법인 즉시 열람/발급 (execute: true)

문서함에 담지 않고 바로 열람(또는 발급)합니다(크레딧 차감 + 즉시 처리). 부동산 POST /api/v1/inquiries 단건열람과 동일한 방식입니다. 1건만 가능하며, 2건 이상 보내면 400 에러가 반환됩니다. issueType으로 열람/발급을 선택합니다(기본 열람). 문서함(bulkId) 지정 또는 기본 '법인 조회' 문서함에 수납됩니다.

json - 요청
{
  "row": { "drokno": "134111-0071315", "conm": "당찬아이들" },
  "execute": true,
  "issueType": "1"
}

파라미터

파라미터타입기본값설명
row*object—열람할 법인 1건. drokno(법인등록번호) 필수 — 담기 모드의 rows 와 달리 단건만 받습니다
row.drokno*string—법인등록번호 (이 번호로 정확검색 후 바로 열람)
execute*booleanfalsetrue로 고정 — 즉시 열람/발급 모드를 사용함을 명시
issueType'0'|'1''1'1=열람(700원+수수료), 0=발급(제출용, 1000원+수수료). 미지정 시 열람
bulkIdstring—(선택) 수납할 법인 문서함 id. 미지정 시 기본 '법인 조회' 문서함에 자동 수납
callbackUrlstring—(선택) 완료/실패 시 결과를 POST 받을 webhook URL(http/https).

응답 200

json
{
  "message": "법인등기 열람 요청이 접수되었습니다.",
  "inquiryId": "…",
  "inquiry": { "id": "…", "uniqueNumber": "134111-0071315", "status": "pending", "cost": 1700, "bulkId": "…" },
  "bulkId": "…"
}

결과·PDF는 GET /api/v1/inquiries/{inquiryId} 및 /pdf로 확인합니다.

POST/api/v1/bulk-inquiries/{id}/execute법인 문서함 열람/발급 실행 (일괄)

법인 문서함(위에서 담은 cart 항목들)을 일괄 열람(또는 발급)합니다. 건당 수수료가 크레딧에서 차감되고 처리가 시작됩니다. 부동산 문서함과 동일한 엔드포인트이며, issueType으로 열람/발급을 선택합니다(기본 열람). 법인 문서함은 그 외 옵션(부동산구분·등기기록상태 등) 없이 전부(현재 유효사항)로 처리됩니다.

json - 요청
{
  "inquiryIds": ["…"],
  "issueType": "1"
}

파라미터

파라미터타입기본값설명
inquiryIdsstring[]—(선택) 실행할 cart 항목 id 목록. 생략하면 해당 문서함의 cart 전체를 실행
issueType'0'|'1''1'1=열람(700원+수수료), 0=발급(제출용, 1000원+수수료). 미지정 시 열람

응답 200

json
{
  "success": true,
  "message": "법인등기 1건 열람을 시작했습니다.",
  "bulkId": "…",
  "paidCount": 1,
  "creditDeducted": 1700
}

처리 상태·PDF는 GET /api/v1/inquiries/{inquiryId} 및 GET /api/v1/inquiries/{inquiryId}/pdf로 확인합니다(단건 열람과 동일). 문서함 전체 상태는 GET /api/v1/bulk-inquiries/{id}.

문서함 관리

GET/api/v1/bulk-inquiries문서함 목록

생성된 문서함(대량조회) 목록을 조회합니다.

Query Parameters

파라미터타입기본값설명
pagenumber1페이지 번호
limitnumber10페이지당 항목 수
registryType'real_estate'|'corporate''real_estate'문서함 종류. corporate=법인 문서함
json - 응답
{
  "items": [
    {
      "id": "bulk_clxyz1234",
      "fileName": "강남구_조회.xlsx",
      "totalCount": 50,
      "completedCount": 48,
      "failedCount": 2,
      "status": "completed",
      "createdAt": "2024-06-01T09:00:00.000Z"
    }
  ],
  "total": 5,
  "page": 1,
  "totalPages": 1
}
POST/api/v1/inquiries/cart문서함 생성/항목 추가

문서함을 생성하거나 기존 문서함에 항목을 추가합니다. 등기번호(고유번호)로 직접 추가하거나, 주소 검색을 통해 추가할 수 있습니다.

등기번호로 추가

items 배열에 uniqueNo를 직접 지정합니다 (14자리 숫자 검증).

json - 요청
{
  "bulkId": "bulk_clxyz1234",
  "items": [
    { "uniqueNo": "13412004008457", "address": "경기도 성남시 ...", "kindCls": "1" },
    { "uniqueNo": "1168-2024-001234", "address": "서울특별시 강남구 ...", "kindCls": "1" }
  ]
}

새 문서함 생성과 동시에 추가

bulkId를 생략하면 새 문서함이 자동 생성됩니다. boxName으로 이름을 지정할 수 있습니다.

json - 요청
{
  "boxName": "강남구 조회",
  "items": [
    { "uniqueNo": "13412004008457", "address": "경기도 성남시 ...", "kindCls": "1" }
  ]
}

응답 200

json
{
  "success": true,
  "bulkId": "bulk_clxyz1234",
  "count": 2
}
GET/api/v1/bulk-inquiries/{id}문서함 상세

문서함의 상세 정보와 포함된 항목 목록을 조회합니다.

json - 응답
{
  "bulkInquiry": {
    "id": "bulk_clxyz1234",
    "fileName": "강남구_조회.xlsx",
    "totalCount": 50,
    "completedCount": 48,
    "failedCount": 2,
    "status": "completed",
    "totalCost": 4800
  },
  "items": [
    {
      "id": "clxyz1111",
      "uniqueNumber": "1341-2004-008457",
      "status": "completed",
      "cost": 100,
      "hasPdf": true,
      "createdAt": "2024-06-01T09:00:00.000Z"
    }
  ]
}
PATCH/api/v1/bulk-inquiries/{id}문서함 수정 (이름 변경)
json - 요청
{
  "name": "강남구 2024년 2분기"
}
json - 응답
{
  "message": "문서함이 수정되었습니다."
}
DELETE/api/v1/bulk-inquiries/{id}문서함 삭제
문서함과 포함된 열람 데이터가 삭제됩니다. 처리 대기·처리 중인 건은 크레딧이 환불됩니다. 되돌릴 수 없습니다.
json - 응답
{
  "message": "문서함이 삭제되었습니다."
}
POST/api/v1/bulk-inquiries/{id}/execute일괄 열람 실행

문서함에 포함된 모든 항목의 열람을 일괄 실행합니다. 항목별로 크레딧이 차감됩니다.

json - 응답
{
  "message": "일괄 열람이 시작되었습니다.",
  "totalCount": 50,
  "creditDeducted": 2500
}
GET/api/v1/bulk-inquiries/{id}/excel엑셀 다운로드

문서함의 열람 결과를 엑셀 파일로 다운로드합니다.

응답: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 바이너리

GET/api/v1/bulk-inquiries/{id}/downloadPDF ZIP 다운로드

문서함의 모든 PDF를 ZIP 파일로 다운로드합니다.

응답: application/zip 바이너리

단건 열람

POST/api/v1/inquiries열람 요청

등기부등본 열람을 요청합니다. 비동기로 처리되며 결과는 별도 조회합니다.

주요 파라미터

파라미터타입기본값설명
issueType*'0'|'1''1'0=발급, 1=열람
searchDiv*'1'|'2'|'3'|'4''1'1=고유번호, 2=간편검색, 3=소재지번, 4=도로명
uniqueNostring—14자리 고유번호 (searchDiv=1일 때 필수)
addressstring—주소 키워드 (searchDiv=2, 3, 4일 때 필수)
kindCls'0'|'1'|'2'|'3''0'부동산구분 (searchDiv=2, 3, 4 주소 조회에서 공통 사용). 0=전체, 1=집합건물, 2=토지, 3=건물. 한 주소에 토지/건물 등기부가 모두 있을 때 원하는 종류를 지정하지 않으면 검색 결과 중 항상 첫 번째 항목이 선택됩니다.
display'1'|'2''2'1=현재유효사항, 2=말소사항 포함
dupChk'Y'|'N''N'재열람 우선 시도 여부
bulkIdstring—(선택) 넣을 문서함 id. 미지정 시 날짜별 'API 조회 YYYY-MM-DD' 문서함에 자동 수납
cachebooleanfalse(선택) true면 기존 열람 이력(캐시)이 있을 때 재열람 없이 캐시가로 즉시 제공. 미지정 시 false(항상 신규 열람)
callbackUrlstring—(선택) 완료/실패 시 결과를 POST 받을 webhook URL(http/https).

주소로 조회(searchDiv=2,3,4)할 때 같은 주소에 토지등기부와 건물등기부가 모두 존재하는 경우,kindCls로 원하는 종류를 지정하지 않으면 검색 결과 목록의 첫 번째 항목이 자동으로 선택되어 의도와 다른 등기부가 열람될 수 있습니다. 토지/건물이 혼재할 수 있는 주소는 반드시 kindCls를 2(토지) 또는 3(건물)로 지정해주세요.

bulkId를 지정하면 해당 문서함에 수납되고, 생략하면 날짜별 문서함에 자동으로 모입니다. 응답의 inquiry.bulkId로 어느 문서함에 들어갔는지 확인할 수 있습니다.

callbackUrl을 지정하면 열람/발급이 완료(또는 실패)되는 즉시 해당 URL로 결과를 POST(webhook) 합니다. 상태를 계속 폴링하지 않아도 되며, 기존 폴링(GET /api/v1/inquiries/{id})도 그대로 사용 가능합니다. 전송 본문 예: { event: "inquiry.completed", inquiryId, uniqueNumber, issueType, registryType, status, hasPdf, errorMessage } — 수신 후 inquiryId로 결과·PDF를 조회하세요. 콜백 수신이 확실하지 않을 때는 아래 조회 API로 상태를 확인해 주세요.

cache: true로 보내면 같은 등기의 기존 열람 이력(캐시)이 있을 때 인터넷등기소 재열람 없이 캐시가로 즉시 결과를 제공합니다(응답 inquiry.cached: true, status: "completed"). 캐시가 없으면 신규 열람(정상 단가)으로 처리됩니다. 생략하거나 false면 항상 신규 열람이므로 기존 연동에는 영향이 없습니다.

json - 요청 예시
{
  "issueType": "1",
  "searchDiv": "1",
  "uniqueNo": "1341-2004-008457",
  "display": "2"
}

응답 200

json
{
  "message": "조회 요청이 접수되었습니다.",
  "inquiry": {
    "id": "clxyz1234abcd",
    "uniqueNumber": "1341-2004-008457",
    "issueType": "1",
    "status": "pending",
    "cost": 50,
    "bulkId": "b1a2c3d4-..."
  }
}

에러 응답

json - 크레딧 부족 (402)
{
  "error": "크레딧이 부족합니다. 필요: 50원, 현재: 0원"
}
json - 문서함 없음 (400)
{
  "error": "지정한 문서함을 찾을 수 없습니다. (bulkId 확인)"
}
json - 중복 요청 (409)
{
  "error": "동일한 등기부등본이 이미 처리 중입니다."
}
GET/api/v1/inquiries/{id}열람 결과

열람 요청의 처리 상태와 결과를 조회합니다.status가 completed 또는 failed가 될 때까지 폴링합니다.

status 값

pending

접수 완료

processing

처리 중

completed

성공

failed

실패

json - 성공 응답
{
  "inquiry": {
    "id": "clxyz1234abcd",
    "uniqueNumber": "1341-2004-008457",
    "propertyType": "building",
    "issueType": "1",
    "status": "completed",
    "cost": 50,
    "pdfPath": "/downloads/registry_clxyz1234abcd.pdf",
    "parsedData": {
      "title_section": [...],
      "exclusive_building": [...],
      "section_a": [...],
      "section_b": [...]
    },
    "createdAt": "2024-06-01T09:00:00.000Z",
    "completedAt": "2024-06-01T09:01:24.000Z"
  }
}
GET/api/v1/inquiries/{id}/pdfPDF 다운로드

열람 완료된 등기부등본을 PDF로 다운로드합니다.

응답: application/pdf 바이너리. 본인 소유 열람 건만 허용. PDF 미생성 또는 실패 시 404.

변동 알림

부동산 등기 변동(실거래, 등기신청사건)을 모니터링하고 SMS로 알림을 받습니다. 하루 1회 변동을 확인하며, 새 변동이 확인되면 등록된 수신자에게 문자(SMS)로 알림을 발송합니다.

GET/api/v1/alerts알림 목록

Query Parameters

파라미터타입기본값설명
pagenumber1페이지 번호
limitnumber20페이지당 항목 수
searchstring—고유번호/주소/연락처 검색
status'active'|'inactive'—활성 상태 필터
json - 응답
{
  "items": [
    {
      "id": "alert_abc123",
      "uniqueNumber": "1341-2004-008457",
      "address": "경기도 성남시 분당구 ...",
      "propertyType": "building",
      "ownerName": "홍길동",
      "isActive": true,
      "createdAt": "2024-06-01T09:00:00.000Z",
      "recipients": [
        { "name": "담당자", "phone": "010-1234-5678" }
      ]
    }
  ],
  "total": 10,
  "page": 1,
  "totalPages": 1
}
POST/api/v1/alerts알림 등록

부동산 변동 알림을 등록합니다. 등록 시 1건당 첫 달 요금이 크레딧에서 차감됩니다(금액은 요금표 참고).

json - 요청
{
  "uniqueNumber": "1341-2004-008457",
  "address": "경기도 성남시 분당구 ...",
  "propertyType": "building",
  "ownerName": "홍길동",
  "recipients": [
    { "name": "담당자", "phone": "010-1234-5678" }
  ]
}

파라미터

파라미터타입기본값설명
uniqueNumber*string—14자리 고유번호
recipients*array—수신자 배열 [{name, phone}]
ownerNamestring—소유자 이름 (미전달 시 최근 열람에서 자동 추출)
addressstring—주소
propertyTypestring'building'부동산 유형

응답 200

json
{
  "message": "알림이 등록되었습니다.",
  "alert": {
    "id": "alert_abc123",
    "uniqueNumber": "1341-2004-008457",
    "isActive": true,
    "recipients": [
      { "name": "담당자", "phone": "010-1234-5678" }
    ]
  }
}

에러 응답

json - 크레딧 부족 (400)
{
  "error": "크레딧이 부족합니다."
}
json - 중복 등록 (409)
{
  "error": "이미 등록된 부동산입니다."
}
PATCH/api/v1/alerts/{id}알림 수정

알림의 활성/비활성 토글, 수신자 연락처 업데이트 등을 수행합니다. 비활성 상태에서 다시 활성화할 때 월 과금이 적용될 수 있습니다.

활성/비활성 토글

json - 요청
{
  "isActive": true
}

수신자 업데이트

json - 요청
{
  "recipients": [
    { "name": "담당자A", "phone": "010-1111-2222" },
    { "name": "담당자B", "phone": "010-3333-4444" }
  ]
}

응답 200

json
{
  "id": "alert_abc123",
  "uniqueNumber": "1341-2004-008457",
  "isActive": true,
  "recipients": [
    { "name": "담당자A", "phone": "010-1111-2222" },
    { "name": "담당자B", "phone": "010-3333-4444" }
  ]
}
DELETE/api/v1/alerts/{id}알림 삭제

등록된 알림을 삭제합니다. 관련 수신자와 알림 로그도 함께 삭제됩니다.

json - 응답
{
  "message": "알림이 삭제되었습니다."
}
GET/api/v1/alerts/owner-name소유자 조회

고유번호에 대한 소유자 이름을 최근 열람 데이터에서 조회합니다.

Query Parameters

파라미터타입기본값설명
uniqueNumber*string—고유번호
bash
curl -X GET "https://deunggigo.kr/api/v1/alerts/owner-name?uniqueNumber=1341-2004-008457" \
  -H "Authorization: Bearer dgg_xxx"
json - 응답
{
  "ownerName": "홍길동"
}

웹훅 URL 알림

변동알림을 받을 URL을 등록·관리하는 API입니다. 현재는 등록과 테스트 발송(POST /api/v1/webhooks/{id}/test)을 지원하며, 변동 감지 이벤트 발송은 준비 중입니다.

POST/api/v1/webhooks웹훅 등록
파라미터타입설명
url*string—수신 URL (http/https, 내부·사설 IP 불가)
namestring—(선택) 식별용 이름
eventsstring[]['alert.detected']구독 이벤트. 현재 변동알림(alert.detected)만 지원
json - 응답
{
  "webhook": { "id": "wh_...", "url": "https://example.com/webhook", "events": ["alert.detected"], "isActive": true }
}
GET/api/v1/webhooks웹훅 목록

등록된 웹훅 목록을 반환합니다.

PATCH/api/v1/webhooks/{id}수정 (url / name / events / isActive)

전달한 필드만 수정됩니다. isActive: false로 일시 중지할 수 있습니다.

DELETE/api/v1/webhooks/{id}삭제

웹훅과 발송 로그를 함께 삭제합니다.

POST/api/v1/webhooks/{id}/test테스트 전송

샘플 payload를 즉시 전송하고 응답(HTTP 상태·본문)을 반환합니다. 결과는 발송 로그에도 기록됩니다.

GET/api/v1/webhooks/{id}/logs발송 로그 조회

최근 발송 결과(이벤트·응답 상태·시각)를 페이지네이션으로 조회합니다.

수신 payload

json
{
  "event": "alert.detected",
  "id": "<delivery id>",
  "created_at": "2026-10-14T12:00:00.000Z",
  "data": { "uniqueNumber": "1111-0000-000000", "address": "서울특별시 ○○구 ○○동", "changeSummary": "소유권 변동 감지(테스트)" }
}

식별용으로 X-Deunggigo-Event, X-Deunggigo-Delivery 헤더가 함께 전송됩니다.

에러 코드

공통 에러 응답 형식

json
{
  "error": "에러 메시지"
}

HTTP 상태 코드

상태 코드설명
400필수 파라미터 누락 또는 잘못된 값
401API 키가 없거나 유효하지 않음
402크레딧 부족 — 충전 후 재시도
404요청한 리소스를 찾을 수 없음
409중복 요청
500서버 오류 — 잠시 후 재시도