개발가이드

  • 개발가이드

주민등록표초본 조회

인증요청이 반환한 transactionId 로 발급된 문서를 확인합니다. 문서 원본과 문서확인번호를 반환합니다.

조회 자료 제공 기관은 행정안전부 입니다. 본인 인증은 한 번만 하면 되고, 담당 기관은 엔드포인트로 자동 선택됩니다.

인증요청 → 사용자 승인 → 정보조회 → 정보제공 4단계이며, 과금은 인증요청 발송 성공결과 최초 제공 두 번만 발생합니다. 그 사이 반복 조회는 무과금입니다.

/rest/req_resident_registration_cho
20P · 인증요청 5분 유효
/rest/get_resident_registration_cho
60P × 데이터셋 1 × 조회범위 단위 · 결과 24시간 보관

이름·생년월일·휴대전화번호와 간편인증 방식을 입력하면 사용자에게 간편인증 요청을 보내고, 결과 조회에 사용할 transactionId 를 즉시 반환합니다.

1단계 · 조회 인증 요청

Method
URL
POST
https://apick.app/rest/req_resident_registration_cho
인증요청과 결과조회는 완전히 분리되어 있습니다. 이 호출은 인증요청만 보내고 transactionId 를 즉시 반환합니다. 결과는 사용자가 승인한 뒤 /rest/get_resident_registration_cho 에 transactionId 를 넣어 확인합니다. 조회 항목마다 담당 기관이 다르지만, 인증기관은 엔드포인트로 자동 선택되므로 기관을 지정하는 파라미터는 없습니다. 이 응답의 expiresAt 까지만 승인할 수 있습니다. 남은 시간을 화면에 표시하고, 만료되면 사용자가 다시 요청할 수 있게 해 주세요.

요청

Header
이름
필수
설명
CL_AUTH_KEY
O
인증키(MD5)
요청 본문 (JSON 기준)
이름
타입
필수
설명
user.name
String
O
이름
user.birthDate
String
O
생년월일 8자리(YYYYMMDD)
user.phone
String
O
휴대전화 번호 (본인 명의, 숫자만)
authProvider
String
O
간편인증 방식 (아래 지원 목록 참고)
businessNo
String
X
사업자등록번호 10자리 (이 조회 항목에서는 사용하지 않습니다)
requestData.purposeCd
String
X
발급 용도 코드. 기본 01(본인확인용)
requestData.submitTarget
String
X
제출할 기관명. 기본 공란
requestData.includeAddressHistory
String
X
Y 이면 과거 주소 변동 이력을 포함한다. 기본 N
requestData.includePersonalHistory
String
X
Y 이면 개인 인적사항 변동 이력을 포함한다. 기본 N
이름·생년월일·휴대전화번호는 user 객체에 담아 보내는 것이 정본입니다. name·birthday·phone·provider 라는 평면 이름도 같은 값으로 인정되지만 신규 연동에는 권장하지 않습니다. 형식별 예시는 요청 본문 형식을 참고하세요. 조회 항목마다 필요한 추가 입력(requestData.*) 이 다릅니다. 값이 비어 있으면 인증을 보내지 않고 무과금으로 거절하며, 이때는 결과 단가도 발생하지 않습니다.
간편인증 방식(authProvider)
인증 방식
kakao
카카오톡
naver
네이버
toss
토스
pass
통신사 PASS
samsung
삼성패스
kb
KB국민은행
shinhan
신한은행
hana
하나은행
woori
우리은행
ibk
IBK기업은행
nh
NH농협은행
kakaobank
카카오뱅크
banksalad
뱅크샐러드

응답

Body
이름
타입
설명
data
Object
인증 요청 결과
schemaVersion
String
결과 스키마 버전 (고정값: "1.0")
transactionId
String
결과 조회에 사용하는 트랜잭션 ID
product
String
조회 항목 코드. 결과조회에도 같은 값이 오므로 어느 항목의 결과인지 대조할 수 있습니다.
status
String
처리 상태 (AUTH_REQUESTED: 인증 요청 완료)
message
String
상태 메시지 (고정값: "인증 대기중입니다.")
approvals
Integer
필요한 간편인증 승인 횟수. 조회 항목 하나당 1회입니다.
resultAvailable
Boolean
결과 데이터 포함 여부. 인증 요청 응답은 항상 false 입니다.
charged
Boolean
이번 호출의 과금 발생 여부. 실제 발송에 성공하면 true 입니다.
expiresAt
String
인증 유효 기한(ISO 8601). 이 시각까지 승인하지 못하면 인증 실패 처리됩니다.
success
Integer
과금 여부
0: 실패 또는 재사용(무과금)
1: 발송 성공(과금)
api
Object
API 호출 공통 데이터
success
Boolean
API 서버 정상 응답 여부
cost
Integer
API 호출 요금
ms
Integer
API 응답 시간
pl_id
Integer
API 결제 로그 ID

예시

요청 예시

curl -k -X POST "https://apick.app/rest/req_resident_registration_cho" \
-H "Content-Type: application/json" \
-H "CL_AUTH_KEY: $API_KEY" \
-d '{
    "user": {
        "name": "홍길동",
        "birthDate": "19900101",
        "phone": "01011112222"
    },
    "authProvider": "kakao",
    "requestData": { "purposeCd": "VALUE" },
    "requestData": { "submitTarget": "VALUE" },
    "requestData": { "includeAddressHistory": "VALUE" },
    "requestData": { "includePersonalHistory": "VALUE" }
}'
            
응답 예시

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "resident_registration_cho",
        "status": "AUTH_REQUESTED",
        "resultAvailable": false,
        "charged": true,
        "sources": [],
        "message": "인증 대기중입니다.",
        "expiresAt": "2026-09-20T05:24:07+09:00",
        "success": 1
    },
    "api": {
        "success": true,
        "cost": 20,
        "ms": 1284,
        "pl_id": 4902
    }
}
            
요청 예시 (form-urlencoded)

curl -k -X POST "https://apick.app/rest/req_resident_registration_cho" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "CL_AUTH_KEY: $API_KEY" \
--data-urlencode "user.name=홍길동" \
--data-urlencode "user.birthDate=19900101" \
--data-urlencode "user.phone=01011112222" \
--data-urlencode "authProvider=kakao" \
--data-urlencode "requestData.purposeCd=VALUE" \
--data-urlencode "requestData.submitTarget=VALUE" \
--data-urlencode "requestData.includeAddressHistory=VALUE" \
--data-urlencode "requestData.includePersonalHistory=VALUE"
            

2단계 · 결과조회 엔드포인트

Method
URL
POST
https://apick.app/rest/get_resident_registration_cho
이 API 는 polling 용도입니다. 호출 자체는 언제든 무료이며, 실제 결과가 최초로 반환되는 1회에만 과금됩니다. 같은 transactionId 로 다시 조회하면 charged=false 로 추가 과금이 없습니다. 인증 대기(AUTH_WAITING)·조회 중(COLLECTING)·실패(FAILED)·만료(AUTH_EXPIRED) 응답은 과금되지 않습니다. 결과를 받을 때까지 안심하고 반복 조회하세요. 결과가 준비된 뒤에는 조회 시각 기준 24시간 동안 재조회할 수 있습니다. 이 기간의 재조회는 무과금입니다. 응답에는 실제 정보를 확인한 시각이 checkedAt 으로 포함됩니다. 저장해 둔 값을 돌려주는 것이 아니라 그 시점에 확인한 값입니다. 폴링은 resultAvailable=true 를 받는 순간 멈추세요. 최대 시간은 expiresAt(인증 대기)까지이고, 그 뒤로는 결과가 나올 때까지입니다. 자세한 값은 호출 제한과 재시도를 참고하세요. 조회 항목이 여러 개인 상품은 일부만 성공하면 PARTIAL_SUCCESS 로 반환하며, 이때도 실제 조회된 데이터가 있으면 최초 1회 과금됩니다. 어느 항목이 성공·실패했는지는 sources 에 표시됩니다.

요청

Header
이름
필수
설명
CL_AUTH_KEY
O
인증키(MD5)
요청 본문 (JSON 기준)
이름
타입
필수
설명
transactionId
String
O
/rest/req_resident_registration_cho 가 반환한 트랜잭션 ID
본문은 transactionId 하나입니다. 결과조회 엔드포인트는 인증요청과 이 되는 /rest/get_resident_registration_cho 이며, 다른 항목의 엔드포인트로 조회하면 실패합니다. 조회 시각 기준 24시간이 지나면 RESULT_EXPIRED 가 반환됩니다. 이때는 인증요청부터 다시 시작해야 하며, 인증요청 단가(20P)가 다시 발생합니다.
요청 예시

curl -k -X POST "https://apick.app/rest/get_resident_registration_cho" \
-H "Content-Type: application/json" \
-H "CL_AUTH_KEY: $API_KEY" \
-d '{ "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a" }'
            

응답

처리 상태(status)
의미
과금
AUTH_REQUESTED
조회 인증 요청 (/rest/req_resident_registration_cho 응답)
인증요청 시 과금
AUTH_WAITING
사용자 인증 대기중
무과금
AUTH_COMPLETED
승인 완료, 조회 시작 전
무과금
COLLECTING
조회 결과를 준비하는 중
무과금
SUCCESS
모든 항목 조회 완료
최초 1회만
PARTIAL_SUCCESS
일부 항목만 조회 완료 (sources 참고)
최초 1회만
AUTH_REJECTED
사용자가 인증을 거부
무과금
AUTH_EXPIRED
제한 시간 안에 승인하지 않음
무과금
FAILED
조회 실패
무과금
Body
이름
타입
설명
data
Object
상태·결과
schemaVersion
String
결과 스키마 버전 (고정값: "1.0")
transactionId
String
트랜잭션 ID
product
String
조회 항목 코드. 인증요청 응답과 같은 값입니다.
status
String
처리 상태 (위 표 참고)
resultAvailable
Boolean
실제 결과 포함 여부. 과금 여부도 이 값으로 결정됩니다.
charged
Boolean
이번 호출의 과금 발생 여부. 최초 결과 반환에서만 true 입니다.
sources
Array
항상 포함됩니다. 값이 없으면 빈 배열 [] 입니다. 항목이 여러 개인 상품에서 어느 것이 성공·실패했는지 알려줍니다. 각 항목은 source(제공 기관명), type(데이터 종류), status(SUCCESS/FAILED). 수집이 끝나기 전에는 아직 확정되지 않은 기관이 FAILED 로 보일 수 있습니다.
progress
Object
진행률(COLLECTING 일 때). total(전체 항목), completed(완료 항목)
checkedAt
String
실제 정보를 확인한 시각. 한국시간(UTC+09:00) ISO 8601 이며 재조회 유효기간의 기준입니다.
resultExpiresAt
String
결과 재조회 만료 시각. 한국시간(UTC+09:00) ISO 8601 입니다.
errorCode
String
오류 구분. RESULT_EXPIRED(재조회 기간 만료) / AUTH_EXPIRED / AUTH_REJECTED / COLLECT_FAILED
result
Object
조회된 결과 묶음. 실제 데이터가 있을 때만 포함됩니다.
residentRegistrationCho
Object
이 조회 항목의 결과입니다. 항목은 결과 규격을 참고하세요.
message
String
상태 메시지
success
Integer
과금 여부
0: 결과 없음 또는 재조회(무과금)
1: 최초 결과 반환(과금)
api
Object
API 호출 공통 데이터
success
Boolean
API 서버 정상 응답 여부
cost
Integer
API 호출 요금
ms
Integer
API 응답 시간
pl_id
Integer
API 결제 로그 ID
결과 단가는 60P × 데이터셋 수(1) × 조회범위 단위 수입니다 (조회범위 옵션 없음 → 1단위). 조회범위는 인증 요청할 때 정하며, 좁히면 단가도 내려갑니다.

예시

인증 대기중 (무과금)

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "resident_registration_cho",
        "status": "AUTH_WAITING",
        "resultAvailable": false,
        "charged": false,
        "sources": [],
        "message": "인증 대기중입니다.",
        "expiresAt": "2026-09-20T05:24:07+09:00",
        "success": 0
    },
    "api": {
        "success": true,
        "cost": 0,
        "ms": 42,
        "pl_id": -1
    }
}
            
조회 중 (무과금)

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "resident_registration_cho",
        "status": "COLLECTING",
        "resultAvailable": false,
        "charged": false,
        "sources": [],
        "progress": { "total": 1, "completed": 0 },
        "message": "정보를 조회하고 있습니다.",
        "success": 0
    },
    "api": {
        "success": true,
        "cost": 0,
        "ms": 38,
        "pl_id": -1
    }
}
            
조회 완료 (과금)

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "resident_registration_cho",
        "status": "SUCCESS",
        "resultAvailable": true,
        "charged": true,
        "sources": [
            { "source": "행정안전부", "type": "RESIDENT_REGISTRATION_CHO", "status": "SUCCESS" }
        ],
        "checkedAt": "2026-09-20T04:47:33+09:00",
        "resultExpiresAt": "2026-09-21T04:47:33+09:00",
        "result": {
            "residentRegistrationCho": {
                "문서확인번호": "ABCD-EFGH-IJKL",
                "발급일자": "20250314",
                "성명": "홍길동",
                "발급문서": "255044462D312E34...",
                "문서파일명": "주민등록표초본.pdf"
            }
        },
        "message": "인증이 완료되었습니다.",
        "success": 1
    },
    "api": {
        "success": true,
        "cost": 60,
        "ms": 318,
        "pl_id": 4903
    }
}
            
위 값은 응답 구조를 보여주기 위한 예시입니다. 값은 가상이지만 필드 구성과 타입은 실제 응답과 같습니다. 전체 항목은 결과 규격을 참고하세요. expiresAt 은 SUCCESS 응답에 없습니다. 인증 대기 기한(AUTH_WAITING)에만 있고, 결과를 받은 뒤에는 resultExpiresAt 이 그 역할을 대신합니다. 둘 중 어느 것이 오는지로 "지금이 승인 대기인지 결과 보관 기간인지"를 구분할 수 있습니다.

결과 규격

result.residentRegistrationCho
경로
타입
값 존재
설명
예시
문서확인번호
String
O
발급된 초본의 문서확인번호. 정부24에서 진위확인에 쓴다.
ABCD-EFGH-IJKL
발급일자
String(YYYYMMDD)
O
발급일자
20250314
성명
String
O
발급 대상자 성명
홍길동
발급문서
String
O
발급된 문서 파일 원본(HEX 문자열). 그대로 디코딩하면 PDF 한 부가 된다.
255044462D312E34...
문서파일명
String
O
발급 문서의 원래 파일명
주민등록표초본.pdf
조회결과
String
조건부
발급이 거절되면 기관 안내 문구가 온다. 정상 발급이면 담기지 않는다.
발급 대상이 아닙니다.
타입 읽는 법String 은 문자열, Integer 는 소수점 없는 정수(원 단위 금액 포함), Boolean 은 true/false, Object 는 이름이 있는 하위 항목 묶음, Array<Object> 는 같은 구조가 여러 건 오는 목록, Array<String> 은 문자열 목록입니다. String(YYYY-MM-DD) 처럼 괄호가 붙으면 그 형식의 문자열이라는 뜻이고 날짜 타입이 아닙니다. 값 존재O 는 정상 응답에 항상 있는 항목, 조건부 는 값이 없으면 응답에서 빠지거나 빈 문자열이 되는 항목입니다. 없는 값을 0 이나 null 로 바꾸지 않으니 그대로 저장하지 말고 존재 여부를 먼저 확인하세요. 예시 — 응답에 들어오는 형태 그대로의 값입니다. 실제 조회 결과가 아니며 개인을 특정할 수 없는 가상의 값입니다. 이 열이 비어 있으면 하위 항목이 있는 묶음이거나 값이 빠질 수 있는 항목입니다. 들여쓰기된 항목은 바로 위 부모 안에 들어 있는 하위 항목입니다. 경로 표기에서 . 는 하위 항목, [ ] 를 붙인 항목은 그 안에 여러 건이 오는 목록이라는 뜻입니다.
현재 페이지 북마크