# 주소·필지(PNU) 조회



지번·도로명 주소를 좌표와 필지 정보로 바꿔 필지고유번호(PNU), 법정동코드, 지번, 좌표를 돌려줍니다. 공시가격·실거래가 조회에 필요한 식별자를 주소 하나로 얻을 때 씁니다.



인증: Authorization: Bearer $APICK_API_KEY

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

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



## POST /rest/geocode 응답 필드

- `data` (object): 아래 하위 항목을 확인하세요.

- `data.pnu` (string): 아래 하위 항목을 확인하세요.

- `data.jibun` (string): 아래 하위 항목을 확인하세요.

- `data.address` (string): 아래 하위 항목을 확인하세요.

- `data.refinedAddress` (string): 아래 하위 항목을 확인하세요.

- `data.point` (object): 아래 하위 항목을 확인하세요.

- `data.point.x` (number): 아래 하위 항목을 확인하세요.

- `data.point.y` (number): 아래 하위 항목을 확인하세요.

- `data.bjdongCode` (string): 아래 하위 항목을 확인하세요.

- `data.lawdCd` (string): 아래 하위 항목을 확인하세요.

- `data.jiga` (integer): 아래 하위 항목을 확인하세요.

- `data.gosiDate` (string): 아래 하위 항목을 확인하세요.

- `api` (object): 아래 하위 항목을 확인하세요.

- `api.cost` (integer): 아래 하위 항목을 확인하세요.

- `api.success` (boolean): 아래 하위 항목을 확인하세요.

- `api.ms` (integer): 아래 하위 항목을 확인하세요.

## API 요청: POST /rest/geocode



### 입력

- `address` (string, 선택): 지번 또는 도로명 주소 (예: 서울특별시 강남구 역삼동 808)

- `pnu` (string, 선택): PNU(19자리). 주면 좌표 조회 없이 바로 조회합니다.

- `addrType` (string, 선택): 주소 유형 (기본 auto) 허용값: auto, parcel, road



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "pnu": {
          "type": "string"
        },
        "jibun": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "refinedAddress": {
          "type": "string"
        },
        "point": {
          "type": "object",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            }
          }
        },
        "bjdongCode": {
          "type": "string"
        },
        "lawdCd": {
          "type": "string"
        },
        "jiga": {
          "type": "integer"
        },
        "gosiDate": {
          "type": "string"
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "cost": {
          "type": "integer"
        },
        "success": {
          "type": "boolean"
        },
        "ms": {
          "type": "integer"
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "pnu": "1168010100108080000",
    "jibun": "808 대",
    "address": "서울특별시 강남구 역삼동 808",
    "refinedAddress": "서울특별시 강남구 역삼동 808",
    "point": {
      "x": 127.0249287,
      "y": 37.5044445
    },
    "bjdongCode": "1168010100",
    "lawdCd": "11680",
    "jiga": 73680000,
    "gosiDate": "2021-11"
  },
  "api": {
    "cost": 60,
    "success": true,
    "ms": 480
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/geocode' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'address=서울특별시 강남구 역삼동 808' \
  --form-string 'addrType=parcel'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("address", "서울특별시 강남구 역삼동 808");
form.append("addrType", "parcel");
const response = await fetch("https://apick.app/rest/geocode", {
  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 = [
    ("address", (None, "서울특별시 강남구 역삼동 808")),
    ("addrType", (None, "parcel")),
]
response = requests.request("POST", "https://apick.app/rest/geocode",
    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 = [
    'address' => '서울특별시 강남구 역삼동 808',
    'addrType' => 'parcel',
];
$curl = curl_init('https://apick.app/rest/geocode');
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);

```

## 코드·오류

## 상세 기능·요금

이용 전 확인 성공한 조회 한 건당 60P가 차감됩니다. 주소를 찾지 못해 실패하면 api.cost는 0입니다. 실제 차감액은 응답의 api.cost에서 확인하세요. 결과는 조회 시점의 필지 정보입니다. 지번 변경·분할·합병 뒤에는 값이 달라질 수 있으므로 오래 보관한 값은 다시 조회하세요. 인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/geocode 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data 입력 항목address 지번 또는 도로명 주소. pnu를 19자리로 보내면 주소 없이 바로 조회합니다. 둘 중 하나는 필요합니다. 선택 항목addrType 주소 유형(auto 자동·parcel 지번·road 도로명, 기본 auto) 요청 예시 지번 주소로 필지를 찾는 예입니다. 성공 시 과금되는 실제 요청입니다. form-data 전체 예제 보기

## 상세 코드·정책

응답과 오류 복구 필드타입설명 data.pnustring필지고유번호 19자리입니다. 공시가격 조회의 입력값입니다. data.jibunstring지번입니다. 예: 808 대 data.addressstring지번 주소입니다. data.refinedAddressstring정제된 표준 주소입니다. 주소로 조회했을 때만 채워집니다. data.pointobject경위도 좌표입니다. PNU로 바로 조회하면 null입니다. data.bjdongCodestring법정동코드 10자리입니다. data.lawdCdstring법정동코드 앞 5자리입니다. 실거래가 조회의 lawdCd 입력값입니다. data.jigainteger공시지가(원/㎡)입니다. 없으면 null입니다. data.gosiDatestring공시지가 기준 연월입니다. 없으면 빈 문자열입니다. api.costinteger차감된 포인트입니다. 실패한 응답은 0입니다. api.msinteger처리 시간(밀리초)입니다. { "data": { "pnu": "1168010100108080000", "jibun": "808 대", "address": "서울특별시 강남구 역삼동 808", "refinedAddress": "서울특별시 강남구 역삼동 808", "point": { "x": 127.0249287, "y": 37.5044445 }, "bjdongCode": "1168010100", "lawdCd": "11680", "jiga": 73680000, "gosiDate": "2021-11" }, "api": { "cost": 60, "success": true, "ms": 480 } } 주소와 PNU가 모두 없거나 주소가 200자를 넘거나 주소 유형이 잘못되면 조회 전에 data.error로 실패합니다. 주소를 찾지 못하면 필지 안내 문구가 오고 api.cost는 0입니다. 받은 pnu는 공시가격 조회에, lawdCd는 실거래가 조회에 그대로 넣어 이어서 쓸 수 있습니다.
