개발가이드국민연금 가입내역 조회 인증 요청

국민연금 가입내역 조회 인증 요청 API

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

국민연금 가입내역 자료를 조회하기 위한 인증 요청입니다. 사용자에게 간편인증을 요청하고, 결과 조회에 쓸 transactionId 를 바로 돌려줍니다.

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

알아둘 점

기능·제공 범위 전체 펼쳐 보기

한눈에 보는 진행 절차

조회는 인증요청 → 인증대기 → 사용자인증완료 → 정보조회 → 정보제공 5단계입니다. 과금은 1단계(인증요청 발송 성공) 와 5단계(결과 최초 제공) 두 번만 발생하고, 그 사이 조회는 몇 번을 호출해도 무과금입니다.

인증부터 정보조회까지 절차: 1 인증요청 API 호출, 2 인증대기중, 3 사용자인증완료, 4 정보조회, 5 정보제공
단계
무슨 일이 일어나는가
내 코드가 할 일 / 과금
1. 인증요청 API 호출
요청한 사용자에게 간편인증 요청이 발송되고, 결과 조회에 쓸 transactionId 가 즉시 반환됩니다. 인증요청은 1회만 발송됩니다.
반환된 transactionId 를 저장하세요. 발송에 성공하면 20P 과금, 실패하면 무과금으로 실패 응답이 옵니다.
2. 인증대기중
사용자가 아직 승인하지 않은 상태입니다. 조회하면 status AUTH_WAITING 과 "인증 대기중입니다." 메시지를 돌려줍니다.
결과조회 API 를 주기적으로 호출하세요. 이 구간은 무과금입니다.
3. 사용자인증완료
사용자가 간편인증을 승인하면 결과 준비가 시작됩니다.
별도 호출이 필요 없습니다. 다음 조회에서 status 가 AUTH_COMPLETED → COLLECTING 으로 바뀝니다.
4. 정보조회
요청한 항목의 최종 정보를 조회해 결과를 만듭니다.
계속 조회하세요. 이 구간도 무과금입니다.
5. 정보제공
status SUCCESS 로 표준화된 결과가 result 에 담겨 반환됩니다.
새 결과 제공의 과금 여부는 charged와 api.cost로 확인합니다. 결과 보관 기준은 조회 시각(checkedAt)입니다. 응답의 resultExpiresAt을 확인하고 받은 자료를 즉시 보관하세요.
인증요청 5분 · 결과 재조회 24시간은 서로 다른 기한입니다. 5분(AUTH_WAITING 중 expiresAt)은 "사용자가 승인해야 하는 시간"이고, 24시간(resultExpiresAt)은 "받은 결과를 다시 꺼내볼 수 있는 시간"입니다. 5분 안에 승인하지 못하면 그 요청은 AUTH_EXPIRED 로 끝나고 결과 단가는 발생하지 않습니다. 인증요청 단가 20P 는 발송이 성공한 시점에 이미 발생하므로 승인 실패·거부와 무관하게 환불되지 않습니다. 결과 보관 만료는 errorCode=RESULT_EXPIRED로 구분합니다. 새 인증·조회에는 각 단계의 과금 조건이 다시 적용됩니다. 동일 APICK 계정·같은 상품의 진행 중 요청 또는 최근 30초 내 요청이 있으면 인증을 재발송하지 않고 기존 transactionId 를 그대로 반환합니다. 이때는 success=0, charged=false 로 돌아오며 과금되지 않습니다. 중복 판정은 조회 대상자의 이름·전화번호가 아닌 계정·상품 기준입니다. 다른 대상자의 인증을 동시에 요청하지 마세요.

모든 조회 상품에 공통인 계약

항목
내용
비고
엔드포인트
조회 항목마다 전용 2개입니다. /rest/req_<항목> 으로 인증요청, /rest/get_<항목> 으로 결과조회를 합니다.
조회 항목을 지정하는 product 파라미터가 없습니다. 엔드포인트 자체가 항목입니다.
HTTP Method
POST 만 지원합니다. GET·PUT·DELETE 는 동작하지 않습니다.
본문은 form-data(Content-Type: multipart/form-data)로 보냅니다. 기존 레거시 API와 같은 규격입니다. 요청 본문 형식을 참고하세요.
인증키
Header Authorization: Bearer 에 발급받은 키를 넣습니다.
키가 없거나 틀리면 인증 없이 거절되며 과금되지 않습니다.
회신 형식
모든 응답이 data(상태·결과)와 api(호출 공통 정보) 두 덩어리로 고정됩니다.
api.success 는 API 서버 정상 응답 여부이고, 과금 여부는 data.success(0/1)입니다.
입력값
성명·생년월일·휴대전화번호는 인증받는 본인의 정보여야 합니다. 타인 명의로는 승인되지 않습니다.
휴대전화번호는 숫자만 넣으세요(하이픈 없이). 주민등록번호는 상품 요청 표에 그 입력이 있을 때만 보냅니다.
동시 호출
같은 사용자·같은 조회 항목의 동시 요청은 하나로 합쳐 처리됩니다. 두 번째 요청은 첫 요청의 transactionId 를 재사용하며 추가 과금되지 않습니다.
서버가 처리 중일 때는 잠시 후 다시 시도하라는 응답이 올 수 있습니다.
재시도
인증 대기·조회 중 구간은 무과금이므로 부담 없이 반복 호출할 수 있습니다. 같은 결과의 재조회는 charged 및 api.cost를 확인하세요. 잔액·이용 조건에 따라 요청이 거절될 수 있으므로 오류 응답도 처리해야 합니다.
과금은 인증요청 발송과 결과 최초 제공 두 지점에서만 발생합니다.
개인정보
조회 결과는 요청에 대한 응답으로만 쓰이며, 조회 시각 기준 24시간 뒤에는 재조회가 만료됩니다.
받은 결과는 이용하는 서비스의 개인정보 처리방침에 맞게 직접 보관·파기해야 합니다.
인증 대기중(AUTH_WAITING)과 조회 중(COLLECTING)은 실패가 아닙니다. 개발 중에 이 응답을 오류로 처리해 사용자에게 "실패"라고 보여주는 경우가 많습니다. resultAvailable=false 는 "아직 준비 중"이라는 뜻이고, resultAvailable=true 일 때만 결과를 사용하세요. 같은 transactionId 를 다른 조회 항목의 엔드포인트로 조회하면 실패합니다. 인증요청에 사용한 /rest/req_<항목> 과 같은 항목의 /rest/get_<항목> 을 짝으로 사용하세요.

개발 체크리스트

아래 순서대로 구현하면 조회 상품 하나를 연동할 수 있습니다.

단계
할 일
1
인증키를 발급받아 서버 환경변수에 넣습니다. 브라우저에서 직접 호출하면 키가 노출되므로 반드시 자체 백엔드에서 호출하세요.
2
사용자에게 이름·생년월일·휴대전화번호를 입력받고, 간편인증 방식(authProvider)을 고르게 합니다. 서버로는 숫자만 남긴 번호를 보내세요(하이픈 제거).
3
/rest/req_<항목> 을 호출하고 응답의 transactionId 를 보관합니다. 이 시점에 20P 가 과금됩니다.
4
사용자에게 간편인증 요청이 발송됐음을 안내하고, 인증 완료를 기다립니다. 남은 시간은 expiresAt 으로 안내하세요.
5
/rest/get_<항목> 로 상태를 확인합니다. resultAvailable 이 true 가 되면 폴링을 멈추고 결과를 사용하세요.
6
transactionId 로 결과물을 조회합니다. 정상 완료 결과는 조회 시각 기준 24시간을 기본 보관기간으로 사용합니다. resultExpiresAt과 응답 상태를 확인하고 부분 성공 결과도 즉시 저장하세요.
7
AUTH_EXPIRED · AUTH_REJECTED는 종료 상태이며 errorCode=RESULT_EXPIRED는 재조회 만료를 뜻하므로, 사용자에게 다시 시도할지 물어보는 흐름으로 처리하세요.
인증 승인은 사용자가 직접 해야 합니다. 승인 대행·자동 승인·인증 정보 저장은 지원하지 않으며, 사용자에게 승인 화면을 안내하는 흐름을 직접 만들어야 합니다. 승인 전 화면을 이탈한 사용자가 많다면 expiresAt 으로 남은 시간을 표시하고, 만료 후에는 재요청 버튼을 제공하세요. 만료된 transactionId 는 재사용할 수 없습니다.

연동 전에 확인하세요

실제 고객 연동에서 자주 나오는 질문입니다. 이 항목들을 먼저 정하면 시행착오를 줄일 수 있습니다.

확인 항목
내용
이유
인증키 발급·보관
인증키는 마이페이지에서 확인합니다(별도 신청 절차 없음). Header Authorization: Bearer 에 마이페이지에 표시된 인증키 값을 그대로 넣으세요. 서버 환경변수에 두고 브라우저·앱 클라이언트에는 넣지 마세요. 노출이 의심되면 마이페이지에서 재발급하면 기존 키는 즉시 무효가 됩니다.
인증키는 비밀번호와 같습니다. 앱에 심으면 누구나 추출해 과금을 발생시킬 수 있습니다.
사용자 동의
조회 전에 이용자가 본인 정보 조회에 동의한다는 사실을 서비스 약관·동의 화면에서 받아 두세요. 인증 승인은 그 동의를 확인하는 절차이지 동의를 대신하지 않습니다.
조회 결과를 서비스에 활용하려면 동의 근거가 필요합니다.
제3자 제공 동의는 따로
조회 결과를 이용자 본인에게 보여주거나 본인이 제출하는 용도로만 쓰면 별도 동의가 필요하지 않습니다. 반대로 금융사·렌탈사 등 제3자에게 제공하거나 대출·보증 심사에 쓰면 제3자 제공 동의를 별도로 받아야 합니다. 본인 조회 동의와 제3자 제공 동의는 서로 다른 동의입니다.
제3자 제공은 본인 조회와 법적 성격이 달라, 같은 조회라도 동의 근거가 하나 더 필요합니다.
이용목적 기록
이용목적은 요청 본문으로 받지 않습니다. 제3자 제공이나 심사 목적이면 transactionId 와 함께 이용목적을 귀사 시스템에 기록해 두세요.
제공 목적과 근거를 남겨 두면 사후 분쟁·감독 대응에서 사실 확인이 쉬워집니다.
보내는 개인정보
공통으로 보내는 값은 이름 · 생년월일 · 휴대전화번호이고, 상품에 따라 사업자등록번호·귀속연도 같은 추가 입력이 있습니다. 주민등록번호는 상품 요청 표에 그 입력이 있을 때만 받으세요. 그 밖의 화면에는 주민등록번호 입력칸을 만들지 마세요.
입력받는 항목을 최소로 줄이면 보관·파기 부담과 유출 위험이 함께 줄어듭니다.
테스트 방법
샌드박스·모의 승인은 없습니다. 테스트도 실제 사용자 승인이 필요하고 실제로 과금됩니다. 본인 또는 동의한 사용자의 정보로 소액 검증하세요.
승인 대행은 지원하지 않으므로 자동 테스트로는 끝까지 검증할 수 없습니다.
본문 형식
form-data(multipart/form-data)로 보내세요. 입력은 name·birthDate·phone 처럼 최상위 이름 그대로 보냅니다.
기존 레거시 API와 같은 규격입니다. 인증 요청과 결과 조회 모두 파라미터가 적어 form-data 하나로 충분합니다.
요청 ID
transactionId 는 인증요청 응답에서 받아 보관하고, 결과 조회·재조회에 그대로 쓰세요. 서버가 반환하는 값 외에 직접 만들지 마세요.
이 값이 없으면 결과를 다시 꺼낼 수 없고 인증요청부터 다시 해야 합니다.
요금 확인
인증요청과 결과조회 모두 요청을 보내기 전에 예상 포인트를 계산할 수 있습니다. 계산식과 상품별 예시는 요금과 포인트를 참고하세요.
포인트가 부족하면 HTTP 402 로 거절됩니다(api.cost=0). 이때는 과금되지 않습니다.
시간대
expiresAt · checkedAt · resultExpiresAt 을 포함한 응답의 모든 시각은 한국시간(UTC+09:00) 입니다. 2026-09-20T05:24:07+09:00 처럼 오프셋이 붙어 오므로 그대로 표시하면 됩니다.
UTC 로 저장해야 한다면 오프셋(+09:00)만 빼세요. 시각을 더하거나 빼서 맞추지 마세요.

요금과 포인트

조회는 인증요청 20P 와 결과 단가 두 번 과금됩니다. 포인트가 부족하면 거절되고 그 호출은 과금되지 않습니다(호출 전 잔액 확인은 HTTP 200 과 result.error, 결과 청구 시점은 HTTP 402 와 data.error).

구분
계산
설명
인증요청
20P 고정
인증요청이 사용자에게 발송된 시점에 발생합니다. 사용자가 승인을 거부하거나 5분 안에 승인하지 않아 AUTH_EXPIRED 가 되어도 환불되지 않습니다.
결과 단가
60P × 데이터셋 수 × 기간 배수
결과가 처음 제공된 응답에서만 발생합니다. 재조회·폴링은 무과금입니다.
발급 상품
건당 고정 단가
증명서·주민등록표처럼 문서를 발급하는 상품은 데이터셋·기간과 무관하게 상품 페이지에 적힌 건당 단가입니다(예: 소득금액증명 60P, 주민등록표등본 80P).
선택형 묶음
고른 조회 단가의 합
받을 조회를 요청마다 고르는 묶음(민원서류 통합조회)은 고른 조회의 결과 단가를 더한 값이며 묶음 할인이 없습니다. 인증 요청 단가는 1회입니다.
기간 배수
기본 1년, 추가 1년마다 +50%
1년 = 1배, 2년 = 1.5배, 3년 = 2배, 5년 = 3배입니다. 월 단위 상품은 12개월을 1년으로 올림 환산합니다(6개월 → 1년, 13개월 → 2년). 기간 배수 옵션이 없는 상품은 조회 기간과 무관하게 1배입니다.
묶음 할인
결과 단가 30% 할인
여러 항목을 한 번 인증으로 한 응답에 받는 묶음 상품은 개별 구매 합계에서 30% 깎습니다(선택형 묶음 제외). 일부 항목만 받는 부분 성공(PARTIAL_SUCCESS)은 기본적으로 묶음 결과 단가가 청구되지만, 선택형 묶음은 요청에서 고른 조회 중 실제 받은 항목의 단가만 합산하고, 발급형 증명은 문서를 받은 항목만 청구합니다. 받은 항목이 하나도 없으면 무과금입니다.
무과금 구간
0P
인증 대기·조회 중 폴링, 결과 재조회(24시간), 오류 응답(402·408 포함), 인증 거부·실패.
예상 금액 계산 예시
상황
계산
합계
개인소득 1년 조회 (기본, 데이터셋 1개)
20P + (60P × 1 × 1배)
80P
개인소득 3년 조회 (데이터셋 1개)
20P + (60P × 1 × 2배)
140P
지방세 납부내역 24개월 (월 단위, 데이터셋 4개)
20P + (60P × 4 × 1.5배)
380P
데이터셋 4개 상품을 5년 범위로 조회
20P + (60P × 4 × 3배)
740P
정확한 값은 상품 페이지의 요금 표에 있습니다. 데이터셋 수와 기간 옵션이 상품마다 다르므로, 화면에서 범위를 고르게 했다면 요청 전에 예상 포인트를 함께 표시해 주세요. 응답의 api.cost 는 이번 호출에서 실제로 발생한 포인트, data.charged 는 이번 응답에서 과금이 일어났는지 여부입니다. 두 값을 함께 기록해 두면 고객 문의에 대응하기 쉽습니다. 포인트는 마이페이지에서 잔액을 확인하고 충전합니다. 잔액 부족으로 실패한 요청은 충전 후 기존 transactionId의 상태와 과금 내역을 확인한 뒤 다시 진행하면 됩니다(transactionId 는 새로 발급됩니다).

호출 제한과 재시도

결과가 준비되지 않은 대기 조회에는 간격을 두세요. 실제 비용은 각 응답의 api.cost로 확인합니다. 결과를 받은 뒤에는 폴링을 멈추는 것이 가장 중요합니다.

항목
권장
비고
폴링 간격
5초 → 10초 → 20초 → 30초, 이후 30초 유지
간격 제한은 없습니다. 위 값은 권장 사항입니다.
폴링 최대 시간
클라이언트 최대 대기시간 지정
인증 승인 유효시간은 expiresAt(요청 후 5분)입니다. 자료 조회·결과 조회에는 별도의 클라이언트 최대 대기시간을 정하세요. expiresAt 이 지나면 AUTH_EXPIRED 로 끝나므로 폴링을 멈추고 재시작 여부를 물어보세요.
결과 수신 후
즉시 폴링 중단
resultAvailable=true 를 받은 순간 멈추세요. 같은 결과의 재조회 여부와 과금은 charged 및 api.cost를 확인하세요.
동시 처리
동일 APICK 계정·같은 상품은 기존 요청 확인
동일 계정·상품의 요청은 기존 transactionId가 반환될 수 있습니다. 다른 대상자의 인증 요청을 동시에 보내지 말고 기존 요청 상태를 먼저 확인하세요.
분당 호출 제한
없음
별도의 레이트 리밋이나 IP 제한을 두지 않습니다. 다만 과도한 호출은 서버 전체에 영향을 주므로 위 간격을 지켜주세요.
HTTP 424는 현재 요청 처리 중이거나 처리 잠금을 획득하지 못한 경우입니다. 인증 요청을 자동 재전송하지 마세요. 같은 transactionId 로 잠시 후 다시 조회하면 정상 흐름으로 이어집니다. HTTP 408 은 서버가 제한 시간 안에 끝내지 못한 경우입니다. 본문 오류와 기존 transactionId를 확인한 후 재조회 여부를 판단하세요. 인증 요청을 자동으로 다시 보내지 마세요. 결과 조회가 408 이면 transactionId 는 그대로 쓸 수 있습니다.

자주 묻는 질문

질문
답변
한 사용자가 여러 상품을 동시에 조회할 수 있나요?
가능합니다. 상품마다 별도의 transactionId 가 발급되며 각각 독립적으로 진행됩니다. 다만 상품별로 인증요청을 각각 해야 하고, 인증요청 단가(20P)도 상품마다 따로 발생합니다. 여러 상품을 한 번의 승인으로 처리하는 묶음 조회는 제공하지 않습니다.
같은 사람을 다시 조회하면 사용자가 매번 승인해야 하나요?
인증요청은 매번 필요합니다. 다만 동일 APICK 계정·같은 상품에 진행 중 요청 또는 최근 30초 내 요청이 있으면 인증을 재발송하지 않고 기존 transactionId 를 그대로 반환하며 과금되지 않습니다. 승인 후에는 기존 transactionId로 결과를 조회합니다. 재조회 시 과금은 charged와 api.cost로 확인하고 resultExpiresAt 이후에는 자동 조회를 중단하세요.
결과를 얼마나 보관할 수 있나요?
정상 완료 결과의 기본 보관기간은 조회 시각 기준 24시간입니다. 실제 응답의 resultExpiresAt을 확인하고, 부분 성공을 포함해 받은 자료를 즉시 보관하세요. 영구 보관이 필요하면 고객 서비스가 직접 결과를 저장하고, 이용자의 개인정보 처리방침에 따라 파기해야 합니다.
웹훅·콜백으로 결과를 받을 수 있나요?
지원하지 않습니다. 결과조회 API 를 폴링해 resultAvailable=true 를 확인하는 방식만 제공합니다.
인증키를 재발급하면 언제 무효가 되나요?
재발급 즉시 기존 키가 바로 무효가 됩니다(유예 기간 없음). 운영 중인 서버가 있으면 재발급 직후 키를 교체하고 재배포하세요. 키를 여러 곳에서 중복 사용하지 않는 편이 안전합니다.
조회 범위를 최대로 늘리면 응답이 매우 커지나요?
범위를 늘려도 응답은 기간별 합계·구간 목록으로 집계되어 항목당 행 수가 급증하지는 않습니다. 다만 상품에 따라 행이 수백 건까지 늘 수 있으므로, 화면 표시는 페이지 단위로 나누는 것을 권장합니다.
샌드박스나 테스트 키가 있나요?
없습니다. 모든 호출이 실제 인증과 실제 과금을 발생시킵니다. 개발 단계에서는 본인 또는 동의한 사용자의 정보로 가장 짧은 조회 범위를 선택해 검증하세요.
포인트 잔액은 어디서 확인하나요?
마이페이지에서 잔액 확인과 충전을 합니다. 잔액 부족은 HTTP 402 로 돌아오며 과금되지 않으므로, 충전 후 같은 요청을 다시 보내면 됩니다.

사용자는 간편인증을 한 번만 승인하면 됩니다. 인증 요청과 결과 조회 두 번의 호출로 끝납니다.

인증요청과 결과조회는 완전히 분리되어 있습니다. 이 호출은 인증요청만 보내고 transactionId 를 즉시 반환합니다. 결과는 사용자가 승인한 뒤 /rest/get_nps_join_history 에 transactionId 를 넣어 확인합니다. 조회 항목은 엔드포인트로 정해지므로 별도로 지정하는 파라미터가 없습니다. 이 응답의 expiresAt 까지만 승인할 수 있습니다. 남은 시간을 화면에 표시하고, 만료되면 사용자가 다시 요청할 수 있게 해 주세요.

요청과 응답

인증 요청
POST/rest/req_nps_join_history
  • Bearer 인증
  • multipart/form-data
  • JSON 응답
요청 파라미터 6개 · 필수 4
파라미터
설명
namestring필수
조회 대상의 이름입니다. 개인 조회에서는 성명, 기업 조회에서는 법인명·상호를 뜻합니다. 같은 요청의 생년월일·전화번호 또는 사업자등록번호와 함께 확인하세요.
최대 길이
40자
예시
홍길동
birthDatestring필수
대상자의 생년월일 8자리입니다. 예: 19900101. 하이픈 없이 숫자만 보내며, 인증 대상자와 정확히 일치해야 합니다.
형식
^[0-9]{8}$
예시
19900101
phonestring필수
본인 명의 휴대전화 번호입니다. 하이픈 없이 숫자만 입력하며, 인증 문자를 받을 수 있는 번호여야 합니다.
형식
^01[0-9]{8,9}$
예시
01011112222
authProviderstring필수
사용할 간편인증 수단의 식별자입니다. 예: kakao, naver, toss, pass. 지원 값은 이 문서의 간편인증 목록을 확인하세요. 가능한 값은 13가지입니다. kakao = kakao 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. naver = naver 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. toss = toss 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. pass = pass 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. samsung = samsung 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. kb = kb 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. shinhan = shinhan 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. hana = hana 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. woori = woori 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. ibk = ibk 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. nh = nh 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. kakaobank = kakaobank 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요. banksalad = banksalad 값을 뜻하며, 같은 응답의 다른 필드와 함께 해석하세요.
허용값
kakao naver toss pass samsung kb shinhan hana woori ibk nh kakaobank banksalad
예시
kakao
fromstring선택
조회 시작 연월입니다. YYYY-MM 형식(예: 1995-01)으로 보내며, 종료 연월보다 늦으면 빈 결과가 옵니다.
형식
^[0-9]{4}-(0[1-9]|1[0-2])$
예시
2025-01
tostring선택
조회 종료 연월입니다. YYYY-MM 형식(예: 2025-12)으로 보내며, 시작 연월보다 빠르면 빈 결과가 옵니다.
형식
^[0-9]{4}-(0[1-9]|1[0-2])$
예시
2025-12
응답 필드 17개
응답 필드
설명
dataobject
요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.
data.schemaVersionstring
응답 스키마의 버전입니다. 현재 "1.0"으로 고정되어 있으며, 필드 구조가 바뀌면 값이 올라갑니다. 클라이언트는 이 값을 저장해 두고 파싱 로직을 분기할 수 있습니다.
data.transactionIdstring
간편인증 요청에서 발급된 거래 ID입니다. 인증요청 응답의 transactionId와 같으며, 같은 거래의 결과를 조회하거나 문의할 때 사용합니다. 인증이 만료되면 새 거래를 만들어야 합니다.
data.productstring
조회한 상품 코드입니다. 인증요청 때 보낸 product와 같은 값이며, 응답의 result 구조를 해석할 때 기준이 됩니다.
data.statusstring
현재 처리 상태 코드입니다. 괄호 안 설명은 이 서비스에서의 상태 의미이며, 값별 다음 행동은 이 문서의 상태 표를 확인하세요. 상태가 바뀌면 같은 경로를 다시 조회합니다. 가능한 값은 9가지입니다. AUTH_REQUESTED = 인증 요청만 접수되어 사용자 승인을 기다리는 상태, AUTH_WAITING = 승인 전 대기, AUTH_COMPLETED = 승인은 끝났고 결과 준비 전, COLLECTING = 결과 준비 중, SUCCESS = 정상 완료되어 결과 사용 가능, PARTIAL_SUCCESS = 일부 자료만 준비되어 sources의 항목별 status 확인 필요, FAILED = 서버 처리 실패, AUTH_REJECTED = 사용자가 인증 거부, AUTH_EXPIRED = 승인 유효시간(300초) 만료입니다.
data.resultAvailableboolean
결과 데이터 포함 여부. 인증 요청 응답은 항상 false 입니다. true/false로 오며, 값이 없으면 필드가 생략되거나 null일 수 있습니다. true = 결과를 지금 사용할 수 있는 경우, false = 아직 처리 중이거나 실패·만료되어 결과가 없는 경우입니다. false면 data.status를 확인하세요.
data.chargedboolean
이번 호출의 과금 발생 여부. 실제 발송에 성공하면 true 입니다. true/false로 오며, 값이 없으면 필드가 생략되거나 null일 수 있습니다. true = 이번 조회에서 포인트가 실제로 차감된 경우(유료 결과를 처음 받은 때), false = 이미 차감된 결과를 다시 조회했거나 무료 응답인 경우입니다. api.cost가 0이면 false입니다.
data.sourcesarray
자료 항목별 처리 결과 목록입니다. 항목별 성공·실패를 구분하므로 일부만 성공한 응답을 판단할 때 사용합니다.
data.messagestring
상태 메시지 (고정값: "인증 대기중입니다."). 안내 문구입니다. 오류 원인과 다음 행동을 설명합니다.
data.approvalsinteger
사용자가 휴대폰에서 승인해야 하는 횟수. 같은 인증으로 처리되는 조회는 묶음이어도 1회입니다.
data.expiresAtstring
이 응답이나 인증 요청의 유효 만료 시각입니다. 한국시간(UTC+09:00) ISO 8601 형식이며, 이 시각을 넘기면 같은 요청을 다시 접수해야 합니다.
data.successinteger
업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.
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이거나 필드가 생략됩니다.
하위 필드 0개 더 보기

이 경로의 응답 형식은 오른쪽 응답 예시를 확인하세요.

입력 조건·전송 규칙

요청 본문 형식

인증요청·결과조회 모두 POST + form-data 입니다. 입력은 모두 최상위 이름으로 보내며, 아래 형식 하나만 씁니다.

형식
Content-Type
보내는 값 예시
form-data (정본)
multipart/form-data
name=홍길동&birthDate=19900101&phone=01012345678&authProvider=kakao
입력을 user·requestData·options 로 묶지 마세요. 조회 조건과 조회 기간도 docNo·customerNo·years 처럼 최상위 이름 그대로 보냅니다. 이름은 birthDate 대신 birthday, authProvider 대신 provider 로 보내도 같은 값으로 인정됩니다. 문서·코드·테스트는 birthDate·authProvider 로 통일합니다.

1단계 · 조회 인증 요청

모든 입력은 하위 객체 없이 최상위 이름 그대로 보냅니다. user·requestData·options 같은 묶음은 쓰지 않습니다. 형식별 예시는 요청 본문 형식을 참고하세요. 조회 항목마다 필요한 추가 입력 이 다릅니다. 값이 비어 있으면 인증을 보내지 않고 무과금으로 거절하며, 이때는 결과 단가도 발생하지 않습니다.
간편인증 방식(authProvider)
값
인증 방식
kakao
카카오톡
naver
네이버
toss
토스
pass
통신사 PASS
samsung
삼성패스
kb
KB국민은행
shinhan
신한은행
hana
하나은행
woori
우리은행
ibk
IBK기업은행
nh
NH농협은행
kakaobank
카카오뱅크
banksalad
뱅크샐러드

응답 처리

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

원문 응답 필드 표 보기
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

오류 코드

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

  1. HTTP 상태전송·인증·입력 오류
  2. api.successAPI 처리 여부
  3. data · result업무 결과와 오류 문구
  4. api.cost이번 요청의 과금
업무 실패 응답 data.error
  • 입력값이 맞지 않거나 대상 자료가 없거나 일시적으로 처리하지 못하면 data.error(사유 문구)와 data.success=0을 돌려줍니다. HTTP 상태는 사유에 따라 400·404·408·424 중 하나입니다.
  • 이때 api.cost는 0이며 과금되지 않습니다. data.error 문구를 그대로 기록하고 사용자에게 보여 주세요.
  • 입력 오류(400)는 값을 고친 뒤 다시 요청하세요. 408·424는 잠시 후 한 번 다시 시도하고, 같은 입력으로 짧은 간격의 자동 반복은 하지 마세요.
{
  "data": {
    "error": "입력값을 확인해 주세요.",
    "success": 0
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 5
  }
}
서비스 코드·조건

공통 오류 응답

아래 항목은 조회 항목과 무관하게 공통으로 발생합니다. 오류 응답은 과금되지 않습니다.

상황
확인할 값
대응
인증키 누락·오류
api.success=false
Header Authorization: Bearer 를 확인하세요. 과금되지 않습니다.
입력값 누락·형식 오류
오류 메시지에 어느 항목이 잘못됐는지 표시됩니다.
이름·생년월일·휴대전화번호·인증방식을 다시 확인하세요.
조회 항목에 필요한 추가 입력 누락
오류 메시지에 필요한 입력 이름이 표시됩니다.
아래 요청 표의 추가 입력 항목을 채우세요.
없는 transactionId · 만료된 요청
요청을 찾을 수 없다는 응답 또는 status AUTH_EXPIRED
인증요청부터 다시 하세요.
처리 중 재요청
HTTP 424 · 요청 처리 중 또는 처리 잠금 획득 실패 · api.cost=0
같은 사용자·같은 조회 항목의 접수는 서버가 한 건씩 처리합니다. 앞선 요청이 끝난 뒤 같은 transactionId 로 다시 조회하세요.
결과 재조회 기한 만료
errorCode=RESULT_EXPIRED
24시간이 지났습니다. 인증요청부터 다시 하세요.
사용자 인증 거부
errorCode=AUTH_REJECTED
사용자에게 다시 시도할지 안내하세요. 과금되지 않습니다.
정보 조회 실패
errorCode=COLLECT_FAILED · status FAILED
잠시 후 인증요청부터 다시 시도하세요. 결과 단가는 과금되지 않습니다.
기관 서비스 점검·중지
errorCode=SERVICE_MAINTENANCE · maintenance=true · status FAILED
요청 오류가 아니므로 입력값을 고칠 필요가 없습니다. 점검이 끝난 뒤 인증요청부터 다시 시도하세요. 결과 단가는 과금되지 않습니다.
보유 포인트 부족
호출 전 잔액 확인: HTTP 200 · result.error 에 사유 · api.cost=0
결과를 청구하는 순간: HTTP 402 · data.error 에 사유 · api.cost=0
이 호출은 과금되지 않습니다. 결과조회도 호출할 때마다 그 상품의 결과 단가만큼 잔액을 확인합니다. 요금과 포인트를 확인한 뒤 충전하고, 결과조회는 같은 transactionId 로 다시 요청하세요.
처리 시간 초과
HTTP 408 · data.success=3
서버가 제한 시간 안에 끝내지 못했습니다. 과금되지 않습니다. 잠시 후 같은 요청을 다시 보내세요.
정상 응답은 HTTP 200 입니다. 상태가 인증 대기중·조회 중 이어도 200 이며, data.success 만 0 입니다. HTTP 코드로 성공을 판단하지 말고 data.status 와 data.resultAvailable 을 보세요. api.success 는 "APICK 서버가 요청을 정상 처리했는가"만 뜻합니다. 포인트가 모자라 HTTP 402 로 거절돼도 api.success=true 입니다. 과금 여부는 api.cost 와 data.charged 로 판단하세요.

상태와 성공 판정

필드가 여러 곳에 흩어져 있어 "무엇으로 성공을 판단해야 하는가" 가 가장 많이 나오는 질문입니다. 결론은 data.status 와 data.resultAvailable 두 개입니다.

필드
의미
판단 기준
HTTP 상태 코드
전송 계층의 결과
200 이 정상, 402 는 포인트 부족, 408 은 처리 시간 초과, 424 는 동일 요청 처리 중. 성공 판정에 쓰지 마세요.
api.success
APICK 서버가 요청을 정상 처리했는지
포인트 부족(402)이나 시간 초과(408)에도 true 입니다. 업무 성공 판정에 쓰지 마세요.
data.status
조회 진행 상태
AUTH_WAITING(승인 대기) · AUTH_COMPLETED · COLLECTING(조회 중) · SUCCESS(완료) · FAILED · AUTH_EXPIRED · AUTH_REJECTED · PARTIAL_SUCCESS. resultAvailable=true이면 결과를 사용하세요. RESULT_EXPIRED는 errorCode입니다.
data.resultAvailable
지금 응답에 쓸 수 있는 결과가 들어 있는지
true 이면 폴링을 멈추고 result 를 사용하세요. false는 대기 또는 종료 상태일 수 있으므로 status를 함께 확인하세요.
data.success
이 응답이 결과 제공 응답인지 (1/0)
새 유료 결과 제공에서는 1, 무료 재조회에서는 0일 수 있습니다. 결과 유무는 resultAvailable로 판단하세요. 처리 시간 초과(408)에서는 3 이 오므로 "1 인지"로 비교하세요.
data.charged · api.cost
이번 호출의 과금 여부·금액
과금 회계 확인용입니다. 성공 판정에 쓰지 마세요.
성공 판정 정본: data.resultAvailable === true이고 상태가 SUCCESS 또는 PARTIAL_SUCCESS 이면 성공입니다. resultAvailable=false인 경우 진행 중이거나 종료이며, 종료 상태는 사용자에게 다시 시도할지 물어보세요.
인증·포인트 오류 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·파일 크기·필드 개수를 확인하세요. 서비스별 제한이 우선 적용됩니다.

요금·이용 조건

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

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

연동 팁

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

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

개발가이드 검색

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

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