# 건축물대장 조회



필지고유번호(PNU) 또는 시군구·법정동·번지로 건축물대장을 조회합니다. 표제부·총괄표제부·기본개요·층별개요·전유부·전유공용면적·주택가격·오수정화시설·부속지번·지역지구구역 10종을 같은 주소로 조회할 수 있습니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/bldrgst 응답 필드

- `data` (object): 요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.

- `data.type` (string): 조회한 대장 종류입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.params` (object): 실제로 적용된 조회 조건입니다. 보낸 값이 정규화된 결과를 확인할 때 씁니다.

- `data.params.sigunguCd` (string): 'sigunguCd' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.bjdongCd` (string): 'bjdongCd' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.platGbCd` (string): 'platGbCd' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.bun` (string): 'bun' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.ji` (string): 'ji' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.hoNm` (string): 'hoNm' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.params.numOfRows` (integer): 'numOfRows' 수치 값입니다. 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.params.pageNo` (integer): 'pageNo' 수치 값입니다. 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items` (array): 조회 결과 항목 목록입니다. 항목이 없으면 빈 배열이며, 각 항목의 필드 구성은 서비스마다 다릅니다.

- `data.items[].platPlc` (string): 지번 주소입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].newPlatPlc` (string): 도로명 주소입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].bldNm` (string): 건물 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].dongNm` (string): 동 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].hoNm` (string): 호 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].flrNo` (integer): 층 번호입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items[].flrNoNm` (string): 'flrNoNm' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.items[].exposPubuseGbCdNm` (string): 'exposPubuseGbCdNm' 문자열 값입니다. 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.items[].mainPurpsCdNm` (string): 주용도 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].strctCdNm` (string): 구조 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.items[].area` (number): 면적(㎡)입니다. 전유공용면적·층별개요에서 씁니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items[].crtnDay` (string): 대장 생성일입니다. startDate·endDate는 이 값을 기준으로 거릅니다.

- `data.items[].platArea` (number): 대지면적(㎡)입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items[].archArea` (number): 건축면적(㎡)입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items[].totArea` (number): 연면적(㎡)입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.items[].useAprDay` (string): 사용승인일입니다. YYYYMMDD 형식입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.count` (integer): 이번 응답에 담긴 건수입니다. 건수입니다. 0이면 해당 항목이 없습니다.

- `data.totalCount` (integer): 조건에 맞는 전체 건수입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.pageNo` (integer): 이번 쪽 번호입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.numOfRows` (integer): 한 쪽에 요청한 건수입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `api` (object): API 호출 메타데이터입니다. 이번 요청의 서버 처리 성공 여부(api.success), 실제 차감 포인트(api.cost), 결제 기록 ID(api.pl_id)를 담습니다. 처리 시간(api.ms)은 응답에 포함된 경우에만 제공됩니다. 업무 결과는 data에서 확인합니다.

- `api.cost` (integer): 이번 호출에서 실제로 차감된 포인트입니다. 유료 성공 응답에서만 단가만큼 차감되며, 실패·무료 조회·같은 요청의 멱등 재전송은 0입니다. 화면의 표시 단가와 실제 차감액이 다를 수 있으므로 정산은 이 값을 기준으로 합니다.

- `api.success` (boolean): API 서버가 이번 요청을 정상 처리했는지 여부입니다. true여도 업무 결과가 실패일 수 있으므로 data.success·data.status와 함께 판단합니다. 인증 실패·잘못된 입력·서버 오류 응답에서는 false입니다.

- `api.ms` (integer): 서버가 요청을 받아 응답 본문을 만들기까지 걸린 처리 시간(밀리초)입니다. 네트워크 왕복 시간과 클라이언트 대기 시간은 포함되지 않습니다.

## API 요청: POST /rest/bldrgst



### 입력

- `pnu` (string, 조건부): 필지고유번호 19자리. 주면 번지 항목은 무시합니다. 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `sigunguCd` (string, 조건부): 시군구코드 5자리 (pnu 가 없을 때) 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `bjdongCd` (string, 조건부): 법정동코드 5자리 (pnu 가 없을 때) 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `platGbCd` (string, 선택): 0 대지(기본), 1 산. 대지·산·임야 표기도 받습니다. 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다. 가능한 값은 2가지입니다. 0 = 0 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. 1 = 1 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. 허용값: 0, 1

- `bun` (string, 선택): 본번. 숫자만 보내면 4자리로 채웁니다. 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `ji` (string, 선택): 부번 (기본 0000) 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `type` (string, 선택): 대장 종류 (기본 title) 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다. 가능한 값은 10가지입니다. title = title 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. recap = recap 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. basis = basis 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. floor = floor 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. expos = expos 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. area = area 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. price = price 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. wclf = wclf 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. jibun = jibun 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. district = district 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. 허용값: title, recap, basis, floor, expos, area, price, wclf, jibun, district

- `startDate` (string, 선택): 대장 생성일 범위 시작. title·recap 전용. 2024 / 2024-06 / 20240101

- `endDate` (string, 선택): 대장 생성일 범위 끝. title·recap 전용. 연·월만 보내면 그 달 마지막 날로 맞춥니다.

- `dongNm` (string, 선택): 동 이름. floor·expos·area·price 전용 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `hoNm` (string, 선택): 호 이름. floor·expos·area·price 전용 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.

- `flrNo` (integer, 선택): 층 번호. area 전용. 지하는 음수 숫자로 보내며, 허용 범위를 벗어나면 요청이 거부됩니다.

- `pageNo` (integer, 선택): 쪽 번호 (기본 1) 숫자로 보내며, 허용 범위를 벗어나면 요청이 거부됩니다.

- `numOfRows` (integer, 선택): 한 쪽 건수 (기본 20, 최대 100) 숫자로 보내며, 허용 범위를 벗어나면 요청이 거부됩니다.



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "조회한 대장 종류입니다."
        },
        "params": {
          "type": "object",
          "properties": {
            "sigunguCd": {
              "type": "string"
            },
            "bjdongCd": {
              "type": "string"
            },
            "platGbCd": {
              "type": "string"
            },
            "bun": {
              "type": "string"
            },
            "ji": {
              "type": "string"
            },
            "hoNm": {
              "type": "string"
            },
            "numOfRows": {
              "type": "integer"
            },
            "pageNo": {
              "type": "integer"
            }
          },
          "description": "실제로 적용된 조회 조건입니다. 보낸 값이 정규화된 결과를 확인할 때 씁니다."
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "platPlc": {
                "type": "string",
                "description": "지번 주소입니다."
              },
              "newPlatPlc": {
                "type": "string",
                "description": "도로명 주소입니다."
              },
              "bldNm": {
                "type": "string",
                "description": "건물 이름입니다."
              },
              "dongNm": {
                "type": "string",
                "description": "동 이름입니다."
              },
              "hoNm": {
                "type": "string",
                "description": "호 이름입니다."
              },
              "flrNo": {
                "type": "integer",
                "description": "층 번호입니다."
              },
              "flrNoNm": {
                "type": "string"
              },
              "exposPubuseGbCdNm": {
                "type": "string"
              },
              "mainPurpsCdNm": {
                "type": "string",
                "description": "주용도 이름입니다."
              },
              "strctCdNm": {
                "type": "string",
                "description": "구조 이름입니다."
              },
              "area": {
                "type": "number",
                "description": "면적(㎡)입니다. 전유공용면적·층별개요에서 씁니다."
              },
              "crtnDay": {
                "type": "string",
                "description": "대장 생성일입니다. startDate·endDate는 이 값을 기준으로 거릅니다."
              },
              "platArea": {
                "type": "number",
                "description": "대지면적(㎡)입니다."
              },
              "archArea": {
                "type": "number",
                "description": "건축면적(㎡)입니다."
              },
              "totArea": {
                "type": "number",
                "description": "연면적(㎡)입니다."
              },
              "useAprDay": {
                "type": "string",
                "description": "사용승인일입니다. YYYYMMDD 형식입니다."
              }
            }
          },
          "description": "대장 항목 목록입니다. totalCount가 0이면 빈 배열입니다."
        },
        "count": {
          "type": "integer",
          "description": "이번 응답에 담긴 건수입니다."
        },
        "totalCount": {
          "type": "integer",
          "description": "조건에 맞는 전체 건수입니다."
        },
        "pageNo": {
          "type": "integer",
          "description": "이번 쪽 번호입니다."
        },
        "numOfRows": {
          "type": "integer",
          "description": "한 쪽에 요청한 건수입니다."
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "cost": {
          "type": "integer",
          "description": "차감된 포인트입니다. 실패한 응답은 0입니다."
        },
        "success": {
          "type": "boolean",
          "description": "서버가 응답을 만들었는지 여부입니다."
        },
        "ms": {
          "type": "integer",
          "description": "처리 시간(밀리초)입니다."
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "type": "area",
    "params": {
      "sigunguCd": "11680",
      "bjdongCd": "10100",
      "platGbCd": "0",
      "bun": "0825",
      "ji": "0000",
      "hoNm": "2101호",
      "numOfRows": 20,
      "pageNo": 1
    },
    "items": [
      {
        "platPlc": "서울특별시 강남구 역삼동 825번지",
        "newPlatPlc": "서울특별시 강남구 강남대로 390 (역삼동)",
        "bldNm": "미진프라자",
        "dongNm": " ",
        "hoNm": "2101호",
        "flrNo": 21,
        "flrNoNm": "21층",
        "exposPubuseGbCdNm": "전유",
        "mainPurpsCdNm": "제2종근린생활시설",
        "strctCdNm": "철근콘크리트구조",
        "area": 120.35,
        "crtnDay": "20220813"
      }
    ],
    "count": 1,
    "totalCount": 7,
    "pageNo": 1,
    "numOfRows": 20
  },
  "api": {
    "cost": 60,
    "success": true,
    "ms": 640
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/bldrgst' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'pnu=1168010100108250000' \
  --form-string 'type=area' \
  --form-string 'hoNm=2101호' \
  --form-string 'numOfRows=20'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("pnu", "1168010100108250000");
form.append("type", "area");
form.append("hoNm", "2101호");
form.append("numOfRows", "20");
const response = await fetch("https://apick.app/rest/bldrgst", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);

```

### python

```python

import os
import requests
parts = [
    ("pnu", (None, "1168010100108250000")),
    ("type", (None, "area")),
    ("hoNm", (None, "2101호")),
    ("numOfRows", (None, "20")),
]
response = requests.request("POST", "https://apick.app/rest/bldrgst",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'pnu' => '1168010100108250000',
    'type' => 'area',
    'hoNm' => '2101호',
    'numOfRows' => '20',
];
$curl = curl_init('https://apick.app/rest/bldrgst');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);

```

## 코드·오류

### 업무 실패 응답

입력 오류·대상 없음·일시 실패는 data.error(사유)와 data.success=0으로 오며 api.cost는 0(과금 없음)입니다. HTTP 상태는 400·404·408·424 중 하나입니다. 입력 오류는 값을 고쳐 다시 요청하고, 408·424는 잠시 후 한 번 다시 시도하세요.

```json

{
  "data": {
    "error": "입력값을 확인해 주세요.",
    "success": 0
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 5
  }
}

```

## 상세 기능·요금

이용 전 확인 성공한 조회 한 건당 30P가 차감됩니다. 실제 차감액은 응답의 api.cost에서 확인하세요. 같은 필지라도 type마다 결과 건수가 다릅니다. 예를 들어 표제부는 건물 한 건, 전유공용면적은 호·층 단위로 수백 건일 수 있습니다. numOfRows로 한 번에 받을 건수를 정하고 pageNo로 다음 쪽을 조회하세요. 결과는 조회 시점의 대장 기록입니다. 이후 변경·정정된 내용은 반영되지 않으므로 오래 보관한 값은 다시 조회하세요. 인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/bldrgst 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data type 허용값 값조회 내용 title표제부 — 건물 한 건의 개요·면적·구조·용도·층수·주차·승강기 (기본값) recap총괄표제부 — 단지 전체를 묶은 표제부 basis기본개요 — 대장 기재 사항의 기본 정보 floor층별개요 — 층마다의 구조·용도·면적 expos전유부 — 동·호별 전유 부분 area전유공용면적 — 전유·공용 면적 배분 price주택가격 — 공동주택 가격 공시 정보 wclf오수정화시설 — 정화조 용량·형식 jibun부속지번 — 건물에 딸린 다른 필지 district지역지구구역 — 대지가 속한 지역·지구·구역 각 종류가 받지 않는 항목을 보내면 결과가 비는 대신 data.error로 바로 알려줍니다. 예를 들어 basis에 dongNm을 보내면 사용할 수 있는 항목 목록과 함께 실패합니다. 날짜 형식이 잘못됐거나 startDate가 endDate보다 늦어도 조회 전에 실패합니다. 요청 예시 form-data 전체 예제 보기

## 상세 응답

필드타입설명 data.typestring조회한 대장 종류입니다. data.paramsobject실제로 적용된 조회 조건입니다. 보낸 값이 정규화된 결과를 확인할 때 씁니다. data.countinteger이번 응답에 담긴 건수입니다. data.totalCountinteger조건에 맞는 전체 건수입니다. data.pageNointeger이번 쪽 번호입니다. data.numOfRowsinteger한 쪽에 요청한 건수입니다. data.itemsarray대장 항목 목록입니다. totalCount가 0이면 빈 배열입니다. data.items[].platPlcstring지번 주소입니다. data.items[].newPlatPlcstring도로명 주소입니다. data.items[].bldNmstring건물 이름입니다. data.items[].dongNmstring동 이름입니다. data.items[].hoNmstring호 이름입니다. data.items[].flrNointeger층 번호입니다. data.items[].mainPurpsCdNmstring주용도 이름입니다. data.items[].strctCdNmstring구조 이름입니다. data.items[].platAreanumber대지면적(㎡)입니다. data.items[].archAreanumber건축면적(㎡)입니다. data.items[].totAreanumber연면적(㎡)입니다. data.items[].useAprDaystring사용승인일입니다. YYYYMMDD 형식입니다. data.items[].crtnDaystring대장 생성일입니다. startDate·endDate는 이 값을 기준으로 거릅니다. data.items[].areanumber면적(㎡)입니다. 전유공용면적·층별개요에서 씁니다. api.costinteger차감된 포인트입니다. 실패한 응답은 0입니다. api.msinteger처리 시간(밀리초)입니다. api.successboolean서버가 응답을 만들었는지 여부입니다. 항목에는 위에 적은 대표 필드 외에 대장 종류별 필드가 함께 옵니다. 이름은 공부(公簿) 항목 이름을 그대로 쓰므로 받은 그대로 저장하면 됩니다. { "data": { "type": "area", "params": { "sigunguCd": "11680", "bjdongCd": "10100", "platGbCd": "0", "bun": "0825", "ji": "0000", "hoNm": "2101호", "numOfRows": 20, "pageNo": 1 }, "items": [ { "platPlc": "서울특별시 강남구 역삼동 825번지", "newPlatPlc": "서울특별시 강남구 강남대로 390 (역삼동)", "bldNm": "미진프라자", "dongNm": " ", "hoNm": "2101호", "flrNo": 21, "flrNoNm": "21층", "exposPubuseGbCdNm": "전유", "mainPurpsCdNm": "제2종근린생활시설", "strctCdNm": "철근콘크리트구조", "area": 120.35, "crtnDay": "20220813" } ], "count": 1, "totalCount": 7, "pageNo": 1, "numOfRows": 20 }, "api": { "cost": 60, "success": true, "ms": 640 } } totalCount가 0이면 조건에 맞는 대장이 없는 것이며 오류가 아닙니다. 그 필지에 총괄표제부나 주택가격이 없는 경우가 대표적입니다. 조건이 맞는지 확인하려면 응답의 params를 보세요.

## 상세 예제

호출 예시 같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
