# 자동차 리콜 여부



차량번호 또는 차대번호 하나로 국내에 등록된 차량의 리콜 대상 여부와 리콜·무상수리 내역을 확인합니다. 제작사·차명·대상 부품·조치 방법까지 함께 제공합니다.



인증: Authorization: Bearer $APICK_API_KEY

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

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



## POST /rest/vehicle_recall 응답 필드

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

- `data.result` (object): 조회 결과 본문입니다. 서비스가 찾은 실제 데이터가 들어 있으며, 자료가 없거나 조회에 실패하면 null이거나 필드가 생략됩니다.

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

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

- `data.result.recall_target` (boolean): 'recall_target' 여부를 true/false로 나타냅니다. 값이 없으면 필드가 생략되거나 null일 수 있습니다. true = 이 필드가 나타내는 조건이 성립한 경우, false = 성립하지 않은 경우입니다. 두 값 모두 정상 응답에 올 수 있으며, 값이 없으면 필드가 생략되거나 null일 수 있습니다.

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

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

- `data.result.recalls` (array): 'recalls' 목록입니다. 각 항목의 구성은 서비스에 따라 다르며, 값이 없으면 빈 배열입니다.

- `data.result.recalls[].title` (string): 대상의 제목 또는 이름입니다. 서비스에 따라 상품명·영상 제목·페이지 제목을 뜻하며, 줄바꿈·이모지가 포함될 수 있습니다.

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

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

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

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

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

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

- `data.result.free_repairs` (array): 'free_repairs' 목록입니다. 각 항목의 구성은 서비스에 따라 다르며, 값이 없으면 빈 배열입니다.

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

- `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/vehicle_recall



### 입력



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "result": {
          "type": "object",
          "properties": {
            "car_no": {
              "type": "string"
            },
            "vin": {
              "type": "string"
            },
            "recall_target": {
              "type": "boolean"
            },
            "recall_count": {
              "type": "integer"
            },
            "free_repair_count": {
              "type": "integer"
            },
            "recalls": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string"
                  },
                  "notice_date": {
                    "type": "string"
                  },
                  "maker": {
                    "type": "string"
                  },
                  "vehicle": {
                    "type": "string"
                  },
                  "part": {
                    "type": "string"
                  },
                  "defect": {
                    "type": "string"
                  },
                  "fix": {
                    "type": "string"
                  }
                }
              }
            },
            "free_repairs": {
              "type": "array",
              "items": {}
            },
            "checked_at": {
              "type": "string"
            }
          }
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "cost": {
          "type": "integer"
        },
        "success": {
          "type": "boolean"
        },
        "ms": {
          "type": "integer"
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "result": {
      "car_no": "12가3456",
      "vin": "",
      "recall_target": true,
      "recall_count": 1,
      "free_repair_count": 0,
      "recalls": [
        {
          "title": "…",
          "notice_date": "2026-10-01",
          "maker": "…",
          "vehicle": "…",
          "part": "…",
          "defect": "…",
          "fix": "…"
        }
      ],
      "free_repairs": [],
      "checked_at": "2026-10-19T13:00:00.000Z"
    }
  },
  "api": {
    "cost": 60,
    "success": true,
    "ms": 2100
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/vehicle_recall' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'car_no=12가3456'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("car_no", "12가3456");
const response = await fetch("https://apick.app/rest/vehicle_recall", {
  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 = [
    ("car_no", (None, "12가3456")),
]
response = requests.request("POST", "https://apick.app/rest/vehicle_recall",
    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 = [
    'car_no' => '12가3456',
];
$curl = curl_init('https://apick.app/rest/vehicle_recall');
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에서 확인하세요. 차량번호와 차대번호 중 하나만 보냅니다. 둘 다 보내면 조회하지 않고 실패합니다. 리콜 대상이 아니면 recall_target=false, 건수 0으로 응답하며 과금되지 않습니다. 평일 09:00~18:00 외에는 조회가 제한될 수 있습니다. 잠시 후 다시 시도하세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/vehicle_recall 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data 입력car_no 차량번호 또는 vin 차대번호 17자 중 하나 요청 예시 차량번호로 리콜 여부를 확인하는 예입니다. 성공 시 과금되는 실제 요청입니다. form-data 전체 예제 보기 차대번호로 확인할 때는 car_no 대신 vin=17자리를 보냅니다.

## 상세 코드·정책

응답과 오류 복구 필드타입설명 data.result.recall_targetboolean리콜 또는 무상수리 대상이면 true 입니다. data.result.recall_countinteger리콜 건수입니다. data.result.free_repair_countinteger무상점검·수리 건수입니다. data.result.recalls[]array리콜 내역입니다. 제목·통보일·제작사·차명·대상부품·결함내용·조치방법·시정기간을 담습니다. data.result.free_repairs[]array무상점검·수리 내역입니다. 항목은 리콜 내역과 같습니다. data.result.checked_atstring조회 시각(ISO 8601)입니다. api.costinteger차감된 포인트입니다. 대상이 없거나 실패하면 0입니다. { "data": { "result": { "car_no": "12가3456", "vin": "", "recall_target": true, "recall_count": 1, "free_repair_count": 0, "recalls": [ { "title": "…", "notice_date": "2026-10-01", "maker": "…", "vehicle": "…", "part": "…", "defect": "…", "fix": "…" } ], "free_repairs": [], "checked_at": "2026-10-19T13:00:00.000Z" } }, "api": { "cost": 60, "success": true, "ms": 2100 } } 차량번호·차대번호 형식이 맞지 않으면 조회 전에 data.error로 실패하며 과금되지 않습니다. 상세 내역을 가져오지 못한 항목은 제목·통보일만 채워집니다.
