API 가이드
등기고 API를 통해 등기부등본 조회를 자동화하고 결과를 수신할 수 있습니다.
개요
모든 API 엔드포인트의 Base URL은 다음과 같습니다.
https://deunggigo.kr/api/v1요청·응답 Body는 모두 application/json 형식입니다.
조회는 비동기로 처리됩니다. POST /api/v1/inquiries 요청 시 id가 반환되며, 이후 GET /api/v1/inquiries/{id}로 결과를 확인합니다. 처리 완료까지 수 분이 소요될 수 있습니다.
인증
API 요청은 API 키 또는 로그인 세션 쿠키 중 하나로 인증합니다. 외부 서버에서 호출할 때는 API 키를 사용하세요. API 키는 아래 API 키 관리 섹션 또는 설정 페이지에서 발급받습니다.
헤더 형식 (둘 중 하나 사용)
# 방법 1 — Authorization Bearer
Authorization: Bearer dgg_xxxxxxxxxxxxxxxx
# 방법 2 — X-Api-Key
X-Api-Key: dgg_xxxxxxxxxxxxxxxx401 Unauthorized가 반환됩니다.API 키 관리
유저 계정당 API 키는 하나입니다. 재발급하면 기존 키는 즉시 무효화됩니다. API 키 관리 엔드포인트는 로그인 세션이 필요합니다.
/api/v1/api-keys현재 API 키 조회 (마스킹){
"items": [
{
"id": "user_id_here",
"name": "API 키",
"keyPrefix": "dgg_a1b2c3d4****…",
"createdAt": "2024-06-01T09:00:00.000Z"
}
]
}{ "items": [] }/api/v1/api-keysAPI 키 발급 / 재발급요청 Body 없음. 발급 직후 한 번만 전체 키가 반환됩니다.
{
"message": "API 키가 발급되었습니다. 지금만 전체 키가 표시됩니다.",
"key": "dgg_a1b2c3d4e5f6g7h8i9j0..."
}/api/v1/api-keysAPI 키 삭제{ "message": "API 키가 삭제되었습니다." }조회 요청 — POST /api/v1/inquiries
/api/v1/inquiries공통 파라미터
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| issueType* | '0'|'1' | '1' | 열람(1) 또는 발급(0) |
| searchDiv* | '1'|'2'|'3'|'4' | '1' | 검색 방식. 1=고유번호, 2=간편검색, 3=소재지번, 4=도로명주소 |
| display | '1'|'2' | '2' | 표시 구분. 1=현재유효사항, 2=말소사항 포함 |
| cmortCheck | 'Y'|'N' | 'N' | 공동담보/전세목록 포함 여부 |
| tradeCheck | 'Y'|'N' | 'N' | 매매목록 포함 여부 |
| dupChk | 'Y'|'N' | 'N' | 재열람 우선 시도 여부. Y이면 기존 결제 내역에서 무료 재열람을 먼저 시도하고, 없으면 일반 조회로 진행. |
| smryYn | 'Y'|'N' | 'Y' | 등기사항요약 페이지 포함 여부. Y이면 PDF 말미에 '주요 등기사항 요약' 페이지가 추가됨 (열람 전용, 비용 변동 없음). |
| excRegYn | 'Y'|'N' | 'N' | 과다등기 발생 시 계속 진행 여부. N이면 에러 반환. |
| closingYn | 'Y'|'N' | 'N' | 폐쇄등기 발생 시 계속 진행 여부. |
인증 계정 정보 (API 키 호출 시 선택)
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| irosId | string | — | 인터넷등기소 아이디. 미전달 시 설정 페이지 저장값 사용. |
| irosPw | string | — | 인터넷등기소 비밀번호. 미전달 시 설정 페이지 저장값 사용. |
| ecashNo | string | — | 전자민원캐시 번호. 미전달 시 설정 페이지 저장값 사용. |
| ecashPw | string | — | 전자민원캐시 비밀번호. 미전달 시 설정 페이지 저장값 사용. |
400이 반환됩니다.searchDiv별 추가 파라미터
searchDiv = "1" — 고유번호
| 파라미터 | 타입 | 설명 | |
|---|---|---|---|
| uniqueNo* | string | — | 14자리 고유번호. 하이픈 포함(1341-2004-008457) 또는 숫자만(13412004008457) 모두 허용. |
searchDiv = "2" — 간편검색
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| address* | string | — | 주소 키워드 (지번 또는 도로명) |
| addrSido | string | 전체 | 시/도 필터 (예: 서울특별시) |
| kindCls | '0'~'3' | '0' | 부동산구분. 0=전체, 1=집합건물, 2=토지, 3=건물 |
| recordStatus | '0'~'2' | '0' | 등기기록상태. 0=현행, 1=전산폐쇄, 2=현행+전산폐쇄 |
searchDiv = "3" — 소재지번
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| locAdminRegn1* | string | — | 시/도 (예: 경기도) |
| locAdminRegn3* | string | — | 읍/면/동 (예: 분당동) |
| locKindCls | '0'~'3' | '0' | 부동산구분. 0=토지+건물, 1=집합건물, 2=토지, 3=건물 |
| locInputSel | '0'|'1' | '0' | 입력구분. 0=지번, 1=건물명칭 (집합건물 전용) |
| locNo | string | — | 지번 (locInputSel=0일 때, 예: 123-45) |
| locBuldName | string | — | 건물명칭 (locInputSel=1일 때) |
| locDongRoomSel | '0'~'2' | '0' | 동/호선택. 0=동+호, 1=동, 2=호 (집합건물 전용) |
| locBuldNoBuld | string | — | 동 번호 (집합건물, 동 선택 시) |
| locBuldNoRoom | string | — | 호 번호 (집합건물, 호 선택 시) |
| recordStatus | '0'~'2' | '0' | 등기기록상태. 0=현행, 1=전산폐쇄, 2=현행+전산폐쇄 |
searchDiv = "4" — 도로명주소
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
| rdAdminRegn1* | string | — | 시/도 (예: 서울특별시) |
| rdAdminRegn2* | string | — | 시/군/구 (예: 강남구) |
| rdName* | string | — | 도로명 (예: 테헤란로) |
| rdBuldNo* | string | — | 건물번호 (예: 123) |
| rdKindCls | '0'~'3' | '0' | 부동산구분. 0=토지+건물, 1=집합건물, 2=토지, 3=건물 |
| rdInputSel | '0'~'2' | '0' | 동/호선택. 0=동+호, 1=동, 2=호 (집합건물 전용) |
| rdBuldNoBuld | string | — | 동 번호 (집합건물, 동 선택 시) |
| rdBuldNoRoom | string | — | 호 번호 (집합건물, 호 선택 시) |
| recordStatus | '0'~'2' | '0' | 등기기록상태. 0=현행, 1=전산폐쇄, 2=현행+전산폐쇄 |
요청 예시
POST /api/v1/inquiries
Authorization: Bearer dgg_xxxxxxxxxxxxxxxx
Content-Type: application/json
{
"issueType": "1",
"searchDiv": "1",
"uniqueNo": "1341-2004-008457",
"display": "2"
}POST /api/v1/inquiries
Authorization: Bearer dgg_xxxxxxxxxxxxxxxx
Content-Type: application/json
{
"issueType": "1",
"searchDiv": "1",
"uniqueNo": "1341-2004-008457",
"display": "2",
"irosId": "my_iros_id",
"irosPw": "my_iros_password",
"ecashNo": "123456789",
"ecashPw": "my_ecash_password"
}응답 200 OK
{
"message": "조회 요청이 접수되었습니다.",
"inquiry": {
"id": "clxyz1234abcd",
"uniqueNumber": "1341-2004-008457",
"issueType": "1",
"status": "pending",
"cost": 50
}
}실패 응답 예시
{
"error": "크레딧이 부족합니다. 필요: 50원, 현재: 0원"
}{
"error": "인터넷등기소 및 전자민원캐시 계정 정보가 필요합니다. 설정 페이지에서 등록하거나 요청 body에 irosId/irosPw/ecashNo/ecashPw를 포함해주세요."
}{ "error": "인증이 필요합니다." }{ "error": "동일한 등기부등본이 이미 처리 중입니다. 잠시 후 다시 시도해주세요." }결과 조회 — GET /api/v1/inquiries/{id}
/api/v1/inquiries/{id}조회 접수 후 status가 completed 또는 failed로 바뀔 때까지 일정 간격으로 요청하여 결과를 확인합니다. 처리 완료까지 수 분이 소요될 수 있습니다.
status 값
접수 완료, 대기 중
처리 중
성공
실패
성공 응답 completed
{
"inquiry": {
"id": "clxyz1234abcd",
"uniqueNumber": "1341-2004-008457",
"propertyType": "building",
"issueType": "1",
"status": "completed",
"cost": 50,
"pdfPath": "/downloads/registry_clxyz1234abcd.pdf",
"parsedData": {
"titleSection": [...],
"exclusiveSection": [...],
"rightSection": [...]
},
"errorMessage": null,
"createdAt": "2024-06-01T09:00:00.000Z",
"completedAt": "2024-06-01T09:01:24.000Z"
}
}실패 응답 failed
{
"inquiry": {
"id": "clxyz1234abcd",
"status": "failed",
"pdfPath": null,
"parsedData": null,
"errorMessage": "전자민원캐시 비밀번호가 잘못되었습니다",
"createdAt": "2024-06-01T09:00:00.000Z",
"completedAt": null
}
}실패 시 차감된 크레딧·쿼터는 자동으로 복구됩니다.
목록 조회 — GET /api/v1/inquiries
/api/v1/inquiries?page=1&limit=20{
"items": [
{
"id": "clxyz1234abcd",
"uniqueNumber": "1341-2004-008457",
"propertyType": "building",
"issueType": "1",
"status": "completed",
"cost": 50,
"createdAt": "2024-06-01T09:00:00.000Z"
}
],
"total": 142,
"page": 1,
"totalPages": 8
}대량 조회 — POST /api/v1/bulk-inquiries
여러 건의 등기부등본을 한 번에 요청합니다. 항목별 빌링은 단건 조회와 동일하게 구독 쿼터 → 구독 크레딧(쿼터 초과) → 구독 후불(active 한정) → 일반 크레딧 순으로 적용됩니다. 처리 자체는 비동기이며, 각 항목은 단건과 동일한 GET /api/v1/inquiries/{id}로 결과를 확인합니다.
400이 반환됩니다 (maxItems·received 필드 포함).unpaidOverageAmount > 0)이 있는 경우 402로 거절됩니다. 먼저 크레딧 페이지에서 정산해주세요./api/v1/bulk-inquiries요청 Body — JSON
items 배열의 각 원소는 단건 조회 요청의 body와 동일한 파라미터를 가집니다 (searchDiv, issueType, uniqueNo 또는 주소 필드 등). 인증 계정 정보(irosId·irosPw·ecashNo·ecashPw)는 요청 body의 최상위에 한 번만 전달하며 모든 항목에 공통 적용됩니다.
POST /api/v1/bulk-inquiries
Authorization: Bearer dgg_xxxxxxxxxxxxxxxx
Content-Type: application/json
{
"projectId": "proj_clxyz1234", // (선택) 프로젝트에 소속시킬 경우
"items": [
{
"searchDiv": "1",
"issueType": "1",
"uniqueNo": "1341-2004-008457",
"display": "2"
},
{
"searchDiv": "4",
"issueType": "0",
"rdAdminRegn1": "서울특별시",
"rdAdminRegn2": "강남구",
"rdName": "테헤란로",
"rdBuldNo": "123",
"rdKindCls": "1"
}
],
"irosId": "my_iros_id",
"irosPw": "my_iros_password",
"ecashNo": "123456789",
"ecashPw": "my_ecash_password"
}요청 Body — 엑셀 업로드
세션 쿠키 인증 시에는 multipart/form-data로 엑셀 파일을 직접 업로드할 수도 있습니다. 엑셀 첫 시트의 한글 컬럼명(예: 검색구분, 발급구분, 고유번호)이 자동으로 영문 키로 매핑됩니다. 템플릿은 아래에서 받을 수 있습니다.
POST /api/v1/bulk-inquiries
Cookie: <session>
Content-Type: multipart/form-data; boundary=----...
------...
Content-Disposition: form-data; name="file"; filename="bulk.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
(엑셀 바이너리)
------...--응답 200 OK
{
"message": "대량 조회가 시작되었습니다.",
"bulkInquiry": {
"id": "bulk_clxyz1234",
"totalCount": 2,
"skippedCount": 0,
"batchDuplicateCount": 0,
"creditDeducted": 0,
"quotaConsumed": { "view": 1, "print": 0 },
"postpaidIncrement": { "view": 0, "print": 1 }
},
"items": [
{
"id": "clxyz1111",
"uniqueNumber": "1341-2004-008457",
"issueType": "1",
"searchDiv": "1",
"billingType": "subscription_quota",
"cost": 0,
"status": "pending"
},
{
"id": "clxyz2222",
"uniqueNumber": "서울특별시 강남구 테헤란로 123",
"issueType": "0",
"searchDiv": "4",
"billingType": "subscription_postpaid",
"cost": 200,
"status": "pending"
}
]
}각 항목의 id를 GET /api/v1/inquiries/{id}로 폴링하여 결과를 확인합니다. billingType은 subscription_quota | subscription_credit | subscription_postpaid | credit 중 하나입니다.
실패 응답
{ "error": "요청 body에 items 배열이 필요합니다 (각 항목은 단건 조회 파라미터와 동일)." }{
"error": "한 번에 요청 가능한 최대 항목 수는 10,000건입니다. 현재: 12,500건",
"maxItems": 10000,
"received": 12500
}{ "error": "유효한 조회 항목이 없습니다. 필수 필드를 확인해주세요." }{
"error": "미정산된 초과 요금이 있어 서비스를 이용할 수 없습니다. 결제 후 다시 이용해주세요. 미정산 금액: 5,000원",
"unpaidOverageAmount": 5000
}{ "error": "해지된 구독은 쿼터 초과 후불이 불가합니다. 크레딧을 충전해주세요. 필요: 100원, 잔액: 0원" }{ "error": "모든 항목이 이미 처리 중입니다. 잠시 후 다시 시도해주세요." }목록 조회
/api/v1/bulk-inquiries?page=1&limit=10{
"items": [
{
"id": "bulk_clxyz1234",
"fileName": "bulk.xlsx",
"totalCount": 2,
"completedCount": 1,
"failedCount": 0,
"status": "processing",
"createdAt": "2024-06-01T09:00:00.000Z"
}
],
"total": 5,
"page": 1,
"totalPages": 1
}엑셀 템플릿 다운로드
/api/v1/bulk-inquiries/template모든 단건 조회 파라미터를 한글 컬럼명으로 포함하는 3-시트 워크북을 반환합니다.
- 조회목록 — 실제 입력 시트 (헤더 + 예시 2건)
- 작성안내 — 컬럼별 타입·필수여부·기본값·설명
- 검색구분별예시 — searchDiv 1~4 각각의 샘플
빌링 동작
- 구독자 + 쿼터 잔여 →
subscription_quota(cost 0, 쿼터 사용량 +1) - 구독자 + 쿼터 소진 + 크레딧 충분 →
subscription_credit(초과 단가 차감) - active 구독 + 크레딧 부족 →
subscription_postpaid(다음 청구에 합산) - cancelled 구독 + 크레딧 부족 →
402즉시 반환 (후불 불가) - 비구독자 →
credit(단건 단가 차감, 부족 시402)
실패한 항목의 차감분은 단건과 동일하게 자동 복구됩니다. 배치 내 동일 (uniqueNo+issueType+searchDiv) 항목과 이미 처리 중인 항목은 skippedCount·batchDuplicateCount로 집계되며 빌링되지 않습니다.
대량 조회 프로젝트
대량 조회를 카테고리(예: "안양시")로 묶어 관리할 수 있는 프로젝트 단위입니다. 프로젝트 안의 모든 조회 결과를 묶어서 ZIP으로 받거나, 개별 PDF만 받을 수 있습니다.
/api/v1/bulk-projects?page=1&limit=20{
"items": [
{
"id": "proj_clxyz1234",
"name": "안양시 2026Q2",
"description": "분기 단위 매물 조사",
"createdAt": "2026-04-01T09:00:00.000Z",
"updatedAt": "2026-04-15T12:30:00.000Z",
"bulkCount": 3,
"totalCount": 15000,
"completedCount": 14987,
"failedCount": 13,
"totalCost": 1499350
}
],
"total": 5,
"page": 1,
"totalPages": 1
}/api/v1/bulk-projects프로젝트 생성{ "name": "안양시 2026Q2", "description": "분기 단위 매물 조사" }{ "project": { "id": "proj_clxyz1234", "name": "안양시 2026Q2", "description": "...", "createdAt": "..." } }/api/v1/bulk-projects/{id}프로젝트 상세 + 소속 대량조회 목록{
"project": { "id": "proj_clxyz1234", "name": "...", "description": "...", "createdAt": "..." },
"bulkInquiries": [
{
"id": "bulk_clxyz",
"fileName": "anyang_q2.xlsx",
"totalCount": 5000,
"completedCount": 4998,
"failedCount": 2,
"status": "completed",
"createdAt": "...",
"completedAt": "...",
"totalCost": 499800
}
]
}/api/v1/bulk-projects/{id}이름·설명 수정{ "name": "안양시 2026Q2 (수정)", "description": null }/api/v1/bulk-projects/{id}프로젝트 + 소속 데이터 + PDF 일괄 삭제pending·processing)인 항목이 있으면 409로 거절됩니다.{ "message": "프로젝트가 삭제되었습니다.", "deletedPdfs": 4998 }{ "error": "처리 중인 항목이 N건 있어 삭제할 수 없습니다. 완료 후 다시 시도해주세요." }/api/v1/bulk-projects/{id}/download프로젝트 전체 ZIP응답: application/zip 바이너리. 구조 — {프로젝트명}_요약.xlsx + 대량조회별 폴더 안에 PDF.
/api/v1/bulk-inquiries/{id}단일 BulkInquiry 상세 (소속 inquiry 전체){
"bulkInquiry": {
"id": "bulk_clxyz",
"fileName": "anyang_q2.xlsx",
"totalCount": 5000, "completedCount": 4998, "failedCount": 2,
"status": "completed", "totalCost": 499800,
"project": { "id": "proj_clxyz1234", "name": "안양시 2026Q2" }
},
"items": [
{
"id": "clxyz1111", "uniqueNumber": "1341-2004-008457",
"address": null, "issueType": "1", "searchDiv": "1",
"searchData": { /* 엑셀 원본 row */ },
"status": "completed", "cost": 100,
"hasPdf": true, "pdfPath": "pdfs/.../1341-.../clxyz1111.pdf",
"errorMessage": null, "createdAt": "...", "completedAt": "..."
}
]
}/api/v1/inquiries/{id}/pdf개별 PDF 다운로드응답: application/pdf 바이너리. 본인 소유 inquiry만 허용. PDF 미생성 상태 또는 실패한 inquiry는 404 반환.
에러 코드
HTTP 응답 코드
| 상태 코드 | 원인 | 조치 |
|---|---|---|
| 401 Unauthorized | API 키 없음 또는 유효하지 않음 | Authorization 헤더 또는 X-Api-Key 헤더에 올바른 API 키를 포함하세요. |
| 400 Bad Request | 필수 파라미터 누락 (uniqueNo/address, IROS 계정 등) | 요청 body 또는 설정 페이지에서 필수 값을 확인하세요. |
| 402 Payment Required | 크레딧 부족 | 대시보드에서 크레딧을 충전하거나 구독을 활성화하세요. |
| 409 Conflict | 동일 고유번호 + 구분이 처리 중 | 이전 요청이 완료될 때까지 기다렸다가 재시도하세요. |
| 500 Internal Server Error | 서버 내부 오류 | 잠시 후 재시도하거나 support@deunggigo.kr로 문의하세요. |
처리 실패 메시지 (inquiry.errorMessage)
HTTP 200으로 접수된 후 처리 중 실패한 경우 inquiry.status가 failed로 바뀌며 아래 메시지가 inquiry.errorMessage에 기록됩니다.
| 에러 메시지 | 원인 | 조치 |
|---|---|---|
| 아이디 또는 비밀번호가 올바르지 않습니다. | 인터넷등기소 계정 오류 | 설정 페이지에서 IROS 계정 정보를 확인하세요. |
| 전자민원캐시 번호가 잘못되었습니다 | 전자민원캐시 번호 불일치 | 설정 페이지에서 전자민원캐시 번호를 재확인하세요. |
| 전자민원캐시 비밀번호가 잘못되었습니다 | 전자민원캐시 비밀번호 불일치 | 설정 페이지에서 전자민원캐시 비밀번호를 재입력하세요. |
| 잔액이 부족합니다 (전자민원캐시) | 인터넷등기소 내 전자민원캐시 잔액 부족 | 인터넷등기소(iros.go.kr)에서 전자민원캐시를 충전하세요. |
| 과다등기부 … 열람 불가 | 등기명의인 수 초과로 열람 제한 | 100명 초과: excRegYn="Y" 설정. 500명 초과: 열람 불가. |
| 폐쇄등기 진행 거부 | 폐쇄등기 발생 | closingYn="Y" 설정하면 계속 진행됩니다. |
사전 준비사항
인터넷등기소 계정
인터넷등기소(iros.go.kr) ID·비밀번호. 설정 페이지에서 등록합니다.
전자민원캐시 충전
인터넷등기소 내 전자민원캐시(선불전자지급수단)가 사전에 충전되어 있어야 합니다.
서비스 크레딧 또는 구독
열람 50원·발급 100원의 서비스 이용 요금이 크레딧 또는 구독 쿼터에서 차감됩니다.
API 키
설정 → API 키 메뉴에서 발급받은 키가 필요합니다.