개발가이드진위 확인여권 개인정보 마스킹

여권 개인정보 마스킹 API

명세 내보내기
OpenAPI 3.0.3Postman 컬렉션Markdown

여권의 지정 정보를 추출하고 여권번호 및 MRZ 영역을 마스킹합니다.

POSThttps://apick.app/rest/identity_document_passport
인증
Bearer 키
요청 형식
form-data
응답
JSON
경로
1개

알아둘 점

업로드 용량 제한: 50MB
첨부 이미지는 최대 50MB이며 PNG 또는 JPEG 형식만 지원합니다.
제한을 초과하면 HTTP 413과 REQUEST_TOO_LARGE 오류가 반환되며 과금되지 않습니다.

제공 정보

여권 인적사항면(사진이 있는 면) 이미지 하나를 보내면, 한 번의 호출로 발행국·영문 성/이름·한글 성명·생년월일·성별·국적을 읽어 주고, 여권번호와 맨 아래 두 줄 코드(MRZ)를 가린 PNG 이미지(Base64)를 함께 돌려줍니다. 여권 사본을 여권번호를 가린 채 보관해야 하는 예약·가입·계약 절차에서 사용합니다. 응답에는 여권번호가 들어 있지 않습니다. 필요한 항목을 모두 읽고 가릴 위치까지 확정해야 성공합니다. 하나라도 확정하지 못하면 가린 이미지와 일부 값도 돌려주지 않고 실패하며, 요금이 차감되지 않습니다. 정보주체의 동의 등 적법한 처리 근거가 있을 때만 호출하세요.

요청과 응답

API 요청
POST/rest/identity_document_passport
  • Bearer 인증
  • multipart/form-data
  • JSON 응답
요청 파라미터 1개 · 필수 1
파라미터
설명
imagefile필수
여권 인적사항면 이미지 하나입니다. 맨 아래 두 줄 코드(MRZ)가 잘리지 않게 촬영해야 합니다. PNG 또는 JPEG만 받으며 50MB 이하입니다.
응답 필드 22개
응답 필드
설명
dataobject
요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.
data.resultobject
조회 결과 본문입니다. 서비스가 찾은 실제 데이터가 들어 있으며, 자료가 없거나 조회에 실패하면 null이거나 필드가 생략됩니다.
data.successinteger
업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.
data.errorstring
오류 원인을 설명하는 문구입니다. 성공 응답에는 없거나 빈 문자열입니다.
data.error_codestring
실패 원인 코드입니다. 아래 오류 표의 코드로 분기하세요. 성공 응답에는 없습니다.
apiobject
API 호출 메타데이터입니다. 이번 요청의 서버 처리 성공 여부(api.success), 실제 차감 포인트(api.cost), 결제 기록 ID(api.pl_id)를 담습니다. 처리 시간(api.ms)은 응답에 포함된 경우에만 제공됩니다. 업무 결과는 data에서 확인합니다.
api.successboolean
API 서버가 이번 요청을 정상 처리했는지 여부입니다. true여도 업무 결과가 실패일 수 있으므로 data.success·data.status와 함께 판단합니다. 인증 실패·잘못된 입력·서버 오류 응답에서는 false입니다.
api.costinteger
이번 호출에서 실제로 차감된 포인트입니다. 유료 성공 응답에서만 단가만큼 차감되며, 실패·무료 조회·같은 요청의 멱등 재전송은 0입니다. 화면의 표시 단가와 실제 차감액이 다를 수 있으므로 정산은 이 값을 기준으로 합니다.
api.msinteger
서버가 요청을 받아 응답 본문을 만들기까지 걸린 처리 시간(밀리초)입니다. 네트워크 왕복 시간과 클라이언트 대기 시간은 포함되지 않습니다.
api.pl_idinteger
포인트 차감 기록 ID입니다. 차감이 발생한 호출에만 값이 있으며, 과금 내역을 문의할 때 이 번호를 사용합니다. 무과금 응답은 -1·null이거나 필드가 생략됩니다.
하위 필드 12개 더 보기
응답 필드
설명
data.result.document_typestring
판독한 문서의 종류입니다. 예: id_card(주민등록증), passport(여권), residence_card(외국인등록증). 요청한 문서와 같은지 먼저 확인하세요.
data.result.fieldsobject
문서에서 추출한 항목별 값 묶음입니다. 문서 종류마다 키가 다르며, 읽지 못한 항목은 빈 문자열이거나 생략됩니다.
data.result.fields.country_codestring
발행국 코드(영문 3자리)입니다. 예: KOR 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.fields.surnamestring
여권의 성(Surname)입니다. 영문 표기 그대로 오며, 복합 성은 공백으로 구분될 수 있습니다.
data.result.fields.given_namesstring
여권의 이름(Given names)입니다. 영문 표기 그대로 오며, 여러 이름은 공백으로 구분됩니다.
data.result.fields.korean_namestring
여권에 함께 표기된 한글 성명입니다. 영문 이름과 대조해 동일 인물인지 확인하세요.
data.result.fields.date_of_birthstring
여권에 표기된 생년월일(YYYYMMDD)입니다. 주민등록번호의 생년월일과 다를 수 있습니다.
data.result.fields.sexstring
여권에 표기된 성별 코드입니다. M(남), F(여), X(미상) 중 하나로 옵니다.
data.result.fields.nationalitystring
여권에 표기된 국적입니다. 국가명 또는 ISO 코드로 오며, 문서 판독 상태에 따라 표기가 달라질 수 있습니다.
data.result.masked_imagestring
개인정보를 가린 뒤 만든 이미지의 Base64 데이터입니다. data URI 접두어 없이 순수 Base64만 오므로 image/png로 디코딩해 저장하세요.
data.result.image_mimestring
마스킹 이미지의 MIME 형식입니다. 현재 image/png로 고정되어 있으며, 저장 파일 확장자와 맞춰야 합니다.
data.result.elapsed_msinteger
OCR·항목 추출·마스킹을 마치는 데 걸린 서버 처리 시간(밀리초)입니다. 네트워크 전송 시간은 포함되지 않습니다.
입력 조건·전송 규칙
맨 아래 두 줄 코드가 없거나 흐리면 실패합니다. 면 전체가 화면에 들어오고 빛 반사가 없도록 촬영하세요.

사용 예시

상황별로 보내는 값과 응답에서 확인할 값을 모았습니다. 언어 탭에서 그대로 복사해 쓸 수 있습니다.

예시 1. 여권 항목 읽기와 가림

여권 인적사항면 사진으로 영문 성명·생년월일·국적을 받고, 여권번호와 하단 코드를 가린 사본을 보관합니다.

요청POST/rest/identity_document_passport
curl --fail-with-body --request POST 'https://apick.app/rest/identity_document_passport' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'image=@./passport.jpg'
  • data.result.fields.surname·given_names를 예약 시스템의 영문 성명으로 씁니다.
  • 응답에는 여권번호가 없으므로 여권번호가 필요하면 고객에게 따로 입력받습니다.
예시 2. 하단 코드가 잘린 사진

맨 아래 두 줄 코드가 잘린 사진을 보낸 경우의 처리입니다.

요청POST/rest/identity_document_passport
curl --fail-with-body --request POST 'https://apick.app/rest/identity_document_passport' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'image=@./passport_cropped.jpg'
  • data.error_code가 IDENTITY_TEXT_UNREADABLE(HTTP 422)이면 하단 두 줄이 모두 보이도록 다시 촬영을 요청합니다.

응답 처리

HTTP 성공과 업무 결과를 구분하세요. 경로별 응답 필드와 예시는 위 요청과 응답에 함께 있습니다.

응답 예시

{
    "data": {
        "result": {
            "document_type": "passport",
            "fields": {
                "country_code": "KOR",
                "surname": "HONG",
                "given_names": "GILDONG",
                "korean_name": "홍길동",
                "date_of_birth": "19900101",
                "sex": "M",
                "nationality": "REPUBLIC OF KOREA"
            },
            "masked_image": "iVBORw0KGgoAAAANSUhEUgAA...(생략)",
            "image_mime": "image/png",
            "elapsed_ms": 458
        },
        "success": 1
    },
    "api": {
        "success": true,
        "cost": 30,
        "ms": 610,
        "pl_id": 1595642
    }
}
            
원문 응답 필드 표 보기
Body
필드
타입
설명
data
Object
처리 결과 묶음입니다. 성공하면 result가, 실패하면 error·error_code가 들어 있습니다.
result
Object
읽은 항목과 가린 이미지입니다. 실패 응답에는 없습니다.
document_type
String
문서 종류입니다. 이 API는 항상 passport입니다.
fields
Object
이미지에서 읽은 항목입니다. 성공 응답에서는 아래 일곱 항목이 모두 채워져 있습니다.
country_code
String
발행국 코드(영문 3자리)입니다. 예: KOR
surname
String
영문 성입니다. 예: HONG
given_names
String
영문 이름입니다. 예: GILDONG
korean_name
String
여권에 적힌 한글 성명입니다. 예: 홍길동
date_of_birth
String
생년월일입니다. 숫자 8자리(YYYYMMDD)입니다. 예: 19900101
sex
String
성별입니다. M, F, X 중 하나입니다.
nationality
String
여권에 적힌 국적입니다. 예: REPUBLIC OF KOREA
masked_image
String
여권번호와 맨 아래 두 줄 코드를 가린 PNG 이미지의 Base64 문자열입니다. 디코딩해 .png 파일로 저장하세요.
image_mime
String
masked_image의 형식입니다. 항상 image/png입니다.
elapsed_ms
Integer
항목 인식과 가림 처리에 걸린 시간(밀리초)입니다. 네트워크 전송 시간은 포함되지 않습니다.
error
String
실패 사유 문구입니다. 성공 응답에는 없습니다.
error_code
String
실패 원인 코드입니다. 아래 오류 표의 코드로 분기하세요. 성공 응답에는 없습니다.
success
Integer
처리 상태입니다. 1이면 성공(요금 차감), 0이면 실패(차감 없음)입니다.
api
Object
호출 공통 정보입니다. 처리 여부·차감 포인트·처리 시간·차감 기록 번호가 들어 있습니다.
success
Boolean
요청을 정상적으로 받아 처리했는지 여부입니다. 인식 성공 여부는 data.success로 확인하세요.
cost
Integer
이번 호출에서 차감된 포인트입니다. 실패 응답은 0입니다.
ms
Integer
요청을 받아 응답을 만들기까지 걸린 시간(밀리초)입니다. 네트워크 왕복 시간은 포함되지 않습니다.
pl_id
Integer
포인트 차감 기록 번호입니다. 차감이 있었던 호출에만 값이 있으며 과금 문의 때 사용합니다.

오류 코드

응답을 아래 순서로 확인하세요. 결과 유무와 과금 여부는 서로 다릅니다.

  1. HTTP 상태전송·인증·입력 오류
  2. api.successAPI 처리 여부
  3. data · result업무 결과와 오류 문구
  4. api.cost이번 요청의 과금
이 API의 오류 코드 6개
코드
HTTP
의미·조치
OCR_IMAGE_MISSING
400
이미지 파일을 첨부하세요.
OCR_UNSUPPORTED_IMAGE
400
지원하는 이미지 형식을 사용하세요.
OCR_IMAGE_TOO_LARGE
413
서비스의 파일 크기 제한을 확인하세요.
IDENTITY_TEXT_UNREADABLE
422
판독할 수 있는 문서 이미지를 첨부하세요.
IDENTITY_DOCUMENT_MISMATCH
400
요청한 종류와 일치하는 문서를 첨부하세요.
IDENTITY_PROCESSING_FAILED
424
문서 처리에 실패했습니다. 다시 시도하거나 문의하세요.
서비스 코드·조건

입력 오류

HTTP / 오류 코드
data.error
조치
400
OCR_IMAGE_MISSING
첨부파일이 없습니다.
image 항목에 파일 하나를 multipart/form-data로 첨부하세요.
400
OCR_UNSUPPORTED_IMAGE
PNG 또는 JPEG 이미지 파일만 허용됩니다.
PNG·JPEG로 바꿔 다시 보내세요. 손상된 파일이면 "지원되지 않거나 손상된 이미지입니다."가 옵니다.
413
OCR_IMAGE_TOO_LARGE
이미지 파일은 50MB 이하여야 합니다.
해상도를 줄이거나 JPEG로 압축해 50MB 이하로 보내세요.

오류 응답

실패 응답은 data.success: 0, api.cost: 0을 유지하며 data.error_code로 원인을 구분합니다.

HTTP / 오류 코드
설명
422
IDENTITY_TEXT_UNREADABLE
글자가 일부 가려졌거나 선명하지 않아 필요한 정보를 정확히 인식할 수 없습니다. 문서 전체와 글자가 선명하게 보이는 이미지를 업로드해 주세요.
400
IDENTITY_DOCUMENT_MISMATCH
요청한 신분증 종류와 이미지가 일치하지 않습니다. 올바른 신분증 이미지를 업로드해 주세요.
424
IDENTITY_PROCESSING_FAILED
이미지 처리 중 오류가 발생했습니다. 잠시 후 다시 시도해 주세요.
인증·포인트 오류 result.error 문구
코드
HTTP
의미·조치
유효하지 않은 API키 입니다.
401
Authorization: Bearer 헤더의 인증키를 확인하세요.
허용되지 않은 IP주소 입니다.
401
마이페이지의 허용 IP 설정과 요청 서버 IP를 확인하세요.
비활성화된 계정입니다.
401
계정 이용 상태를 고객지원으로 문의하세요.
사용 가능한 포인트이 부족합니다.
200
HTTP 200이어도 result.error가 있으면 실패입니다. 포인트를 충전한 뒤 다시 요청하세요. 이 응답은 과금되지 않습니다.
무료 포인트로 사용할 수 없는 서비스입니다.
200
최소 1회 결제 후 이용할 수 있습니다. result.error 전체 문구를 그대로 표시하세요.
인증 정보를 확인할 수 없습니다.
424
일시적인 확인 실패입니다. 잠시 후 다시 시도하세요.
폼 입력 오류 error.code
코드
HTTP
의미·조치
FORM_DATA_INVALID
400
필드 이름·값의 타입·배열 인덱스를 확인하세요. 인덱스는 0부터 연속으로 사용합니다.
FORM_DATA_FIELD_CONFLICT
400
같은 값과 중첩 경로를 동시에 지정하지 마세요.
MULTIPART_LIMIT_OR_PARSE_ERROR
400·413
boundary·파일 크기·필드 개수를 확인하세요. 서비스별 제한이 우선 적용됩니다.

요금·이용 조건

기본 요금기본 단가 30P · 건당무료 포인트로는 이용할 수 없으며 최소 1회 결제 후 이용할 수 있습니다.

실제 차감 금액은 응답의 api.cost로 확인하세요. 상세 요금은 요금정책에서 볼 수 있습니다.

연동 팁

  • 요청 예제의 오류 처리 포함 모드는 시간 제한과 업무 실패 판정을 함께 보여줍니다.
  • 인증키는 서버 환경변수에 두고 브라우저·앱에 넣지 마세요.
  • HTTP 성공과 업무 결과를 구분하고, 실패 응답의 오류 문구를 그대로 기록하세요.
추가 예제·서비스별 연동 안내

마스킹 이미지 저장 (Python)

호출 예시

같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다.

JavaScript 예시
// <input type="file" id="file"> 에서 고른 파일을 그대로 전송합니다.
const fileInput = document.querySelector("#file");
const extra = {};

const form = new FormData();
Object.keys(extra).forEach(function (key) {
  form.append(key, extra[key]);
});
form.append("image", fileInput.files[0]);

const response = await fetch("https://apick.app/rest/identity_document_passport", {
  method: "POST",
  headers: { "Authorization": "Bearer " + process.env.APICK_API_KEY },
  body: form
});

const result = await response.json();

if (!result.data || result.data.error) {
  console.error("실패:", (result.data && result.data.error) || "응답 없음", "차감:", result.api && result.api.cost);
} else {
  console.log(result.data, "차감:", result.api.cost);
}
Python 예시
import os
import requests

extra = {}

with open("passport.jpg", "rb") as file_obj:
    response = requests.post(
        "https://apick.app/rest/identity_document_passport",
        headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
        files={"image": file_obj},
        data=extra,
        timeout=180,
    )

result = response.json()
data = result.get("data") or {}

if data.get("error"):
    print("실패:", data["error"], "차감:", (result.get("api") or {}).get("cost"))
else:
    print(data, "차감:", (result.get("api") or {}).get("cost"))
현재 페이지 북마크

개발가이드 검색

API 이름·경로·파라미터·오류 코드로 찾을 수 있습니다.

표시 가격은 기본 단가입니다. 상세 과금 조건은 각 가이드에서 확인하세요.