사용자가 아직 승인하지 않은 상태입니다. 조회하면 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 로 돌아오며 과금되지 않으므로, 충전 후 같은 요청을 다시 보내면 됩니다.
2단계 · 결과조회 엔드포인트
이 API 는 polling 용도입니다. 호출 자체는 언제든 무료이며, 실제 결과가 최초로 반환되는 1회에만 과금됩니다. 같은 transactionId 로 다시 조회하면 charged=false 로 추가 과금이 없습니다.
인증 대기(AUTH_WAITING)·조회 중(COLLECTING)·실패(FAILED)·만료(AUTH_EXPIRED) 응답은 과금되지 않습니다. 결과를 받을 때까지 안심하고 반복 조회하세요.
결과가 준비된 뒤에는 조회 시각 기준 24시간 동안 재조회할 수 있습니다. 이 기간의 재조회는 무과금입니다.
응답에는 실제 정보를 확인한 시각이 checkedAt 으로 포함됩니다. 저장해 둔 값을 돌려주는 것이 아니라 그 시점에 확인한 값입니다.
폴링은 resultAvailable=true 를 받는 순간 멈추세요. 최대 시간은 expiresAt(인증 대기)까지이고, 그 뒤로는 결과가 나올 때까지입니다. 자세한 값은 호출 제한과 재시도를 참고하세요.
조회 항목이 여러 개인 상품은 일부만 성공하면 PARTIAL_SUCCESS 로 반환하며, 이때도 실제 조회된 데이터가 있으면 최초 1회 과금됩니다. 기본은 결과 단가 전액이지만, 선택형 묶음은 요청에서 고른 조회 중 실제 받은 항목의 단가만 합산하고, 발급형 증명은 문서를 받은 항목만 청구합니다. 문서 미수신·기관 거절·PDF 파싱 실패는 무과금이며, 받은 항목이 하나도 없으면 charged=false·cost 0 으로 응답합니다. 어느 항목이 성공·실패했는지는 sources 에 표시됩니다.
결과조회를 호출할 때마다 보유 포인트가 이 상품의 결과 단가 이상인지 먼저 확인합니다. 모자라면 인증 대기 중이어도 HTTP 200 과 result.error(사용 가능한 포인트이 부족합니다.)로 거절되고 과금되지 않으므로, 충전한 뒤 같은 transactionId 로 다시 조회하세요.
결과 단가는 60P × 데이터셋 수(1) × 기간 배수입니다 (기간 incomeYears, 기본 1년). 기간 배수는 상품의 기간 입력 조건에 따라 적용됩니다.
요청과 응답
API 요청
POST/rest/get_income_data_check
Bearer 인증
multipart/form-data
JSON 응답
요청 파라미터 1개 · 필수 1
파라미터
설명
transactionIdstring필수
/rest/req_income_data_check 가 반환한 트랜잭션 ID
예시
9f2c4a7b1d8e35c60a4f7b2d1e9c803a
응답 필드 60개
응답 필드
설명
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
실제 결과 포함 여부. 과금 여부도 이 값으로 결정됩니다. 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.expiresAtstring
이 응답이나 인증 요청의 유효 만료 시각입니다. 한국시간(UTC+09:00) ISO 8601 형식이며, 이 시각을 넘기면 같은 요청을 다시 접수해야 합니다.
data.successinteger
업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.
data.progressobject
결과 준비 진행 상태 묶음입니다. 전체 자료 수와 완료된 자료 수를 담습니다.
data.checkedAtstring
실제 정보를 확인한 시각. 한국시간(UTC+09:00) ISO 8601 이며 재조회 유효기간의 기준입니다.
data.resultExpiresAtstring
결과 재조회 만료 시각. 한국시간(UTC+09:00) ISO 8601 입니다.
data.resultobject
조회 결과 본문입니다. 서비스가 찾은 실제 데이터가 들어 있으며, 자료가 없거나 조회에 실패하면 null이거나 필드가 생략됩니다.
data.errorCodestring
오류 구분. RESULT_EXPIRED(재조회 기간 만료) / AUTH_EXPIRED / AUTH_REJECTED / COLLECT_FAILED / SERVICE_MAINTENANCE(기관이 서비스 점검·중지 중) 가능한 값은 5가지입니다. RESULT_EXPIRED = 결과 재조회 기간이 지난 경우(새로 인증해야 함), AUTH_EXPIRED = 승인 유효시간이 지난 경우, AUTH_REJECTED = 사용자가 인증을 거부한 경우, COLLECT_FAILED = 승인 뒤 결과 준비가 실패한 경우, SERVICE_MAINTENANCE = 기관이 서비스 점검(중지) 중이라 결과를 만들지 못한 경우입니다. SERVICE_MAINTENANCE 는 요청 오류가 아니므로 입력값을 고칠 필요가 없습니다. 오류가 없으면 null입니다.
data.maintenanceboolean
기관이 서비스 점검(중지) 중이라 결과를 만들지 못한 경우에만 true 입니다. 요청 오류가 아니므로 입력값을 고칠 필요가 없고, 점검 시간이 끝난 뒤 다시 요청하세요. 값이 없거나 false 면 점검 때문이 아닙니다. 이때는 message 에 같은 안내가 들어옵니다.
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이거나 필드가 생략됩니다.
하위 필드 38개 더 보기
응답 필드
설명
data.sources[].sourcestring
자료 항목의 표시 이름입니다. type과 함께 어떤 자료인지 구분할 때 사용합니다.
data.sources[].typestring
자료 유형 구분자입니다. 같은 상품 안에서 여러 종류의 자료를 묶어 받을 때 종류를 구분합니다.
data.sources[].statusstring
해당 자료 항목의 처리 상태입니다. SUCCESS는 정상, 그 외 값은 그 항목만 실패했거나 자료가 없음을 뜻합니다. 가능한 값은 2가지입니다. SUCCESS = 해당 자료 항목을 정상적으로 받은 경우, FAILED = 그 항목만 실패해 result에 그 자료가 빠진 경우입니다. 전체 status가 SUCCESS여도 항목별 FAILED가 있을 수 있습니다.
data.progress.totalinteger
이번 조회에서 준비할 전체 자료 항목 수입니다. 여러 자료를 묶은 상품에서 진행률 계산의 분모로 사용합니다.
data.progress.completedinteger
현재까지 준비를 마친 자료 항목 수입니다. total과 같아지면 모든 항목의 처리가 끝난 것입니다.
data.result.incomeDataCheckobject
이 조회 항목의 결과입니다. 항목은 결과 규격을 참고하세요. 하위 필드에 코드·이름·상태 같은 세부 값이 들어 있으며, 자료가 없으면 빈 객체이거나 생략됩니다.
data.result.incomeDataCheck.조회연도array
실제로 조회된 귀속연도 목록(4자리 문자열)입니다. 요청한 조회 연수보다 자료가 적으면 항목 수가 줄어들 수 있습니다.
data.result.incomeDataCheck.연도별object
귀속연도별 소득자료 합계. 자료가 없는 연도는 담기지 않으며 확인되지 않은 금액 필드는 생략될 수 있다.
data.result.incomeDataCheck.연도별.귀속연도string
해당 금액이 귀속되는 연도(4자리)입니다. 연도별 합계를 비교하거나 같은 연도의 다른 소득 자료와 맞출 때 기준 키로 사용합니다.
data.result.incomeDataCheck.연도별.연간소득총액integer
해당 연도의 모든 소득을 합산한 금액(원)입니다. 근로·사업·금융·연금·기타소득이 포함되며, 각 항목의 합과 일치하는지 확인하세요.
data.result.incomeDataCheck.연도별.근로소득integer
상용·일용 근로소득을 합한 금액(원)입니다. 간이지급명세서 금액과 다를 수 있으므로 두 값을 함께 확인하세요.
data.result.incomeDataCheck.연도별.근로소득(간이)integer
간이지급명세서로 제출된 근로소득(원)입니다. 정식 연말정산 자료와 차이가 있을 수 있습니다.
data.result.incomeDataCheck.연도별.사업소득(간이)integer
간이지급명세서로 제출된 사업소득(원)입니다. 필요경비 반영 전 금액일 수 있습니다.
data.result.incomeDataCheck.연도별.원천징수 사업소득integer
원천징수된 사업소득(원)입니다. 지급자가 세금을 미리 떼고 지급한 금액을 나타냅니다.
data.result.incomeDataCheck.연도별.사업장 사업소득integer
사업장에서 발생한 사업소득(원)입니다. 원천징수 사업소득과 구분해 합산합니다.
data.result.incomeDataCheck.연도별.금융소득integer
이자·배당 등 금융소득(원)입니다. 연간 금융소득이 기준을 넘으면 종합과세 대상이 될 수 있습니다.
data.result.incomeDataCheck.연도별.연금소득integer
공적·사적 연금에서 발생한 소득(원)입니다. 연금 종류에 따라 과세 방식이 다릅니다.
data.result.incomeDataCheck.연도별.기타소득integer
강연·원고·상금 등 기타소득(원)입니다. 필요경비를 차감한 금액일 수 있습니다.
data.result.incomeDataCheck.연도별.종교인소득integer
종교인으로서 받은 소득(원)입니다. 종교인 소득 신고 대상 금액이며, 일반 근로소득과 구분됩니다.
data.result.incomeDataCheck.근로소득상세object
조회 시점의 반기 기준 근로소득 상세. 키는 항상 존재하며 조회 기간이 아니면 null이다. null 허용.
data.result.incomeDataCheck.근로소득상세.귀속연도string
해당 금액이 귀속되는 연도(4자리)입니다. 연도별 합계를 비교하거나 같은 연도의 다른 소득 자료와 맞출 때 기준 키로 사용합니다.
data.result.incomeDataCheck.근로소득상세.신청 구분string
소득 자료의 신청 구분입니다. 상반기분·하반기분 등 조회 범위를 나타내며, 근로소득상세의 기준이 됩니다.
입력을 user·requestData·options 로 묶지 마세요. 조회 조건과 조회 기간도 docNo·customerNo·years 처럼 최상위 이름 그대로 보냅니다.
이름은 birthDate 대신 birthday, authProvider 대신 provider 로 보내도 같은 값으로 인정됩니다. 문서·코드·테스트는 birthDate·authProvider 로 통일합니다.
본문은 transactionId 하나입니다. 결과조회 엔드포인트는 인증요청과 짝이 되는 /rest/get_income_data_check 이며, 다른 항목의 엔드포인트로 조회하면 실패합니다.
조회 시각 기준 24시간이 지나면 RESULT_EXPIRED 가 반환됩니다. 이때는 인증요청부터 다시 시작해야 하며, 인증요청 단가(20P)가 다시 발생합니다.
HTTP 성공과 업무 결과를 구분하세요. 경로별 응답 필드와 예시는 위 요청과 응답에 함께 있습니다.
처리 상태(status)
값
의미
과금
AUTH_REQUESTED
조회 인증 요청 (/rest/req_income_data_check 응답)
인증요청 시 과금
AUTH_WAITING
사용자 인증 대기중
무과금
AUTH_COMPLETED
승인 완료, 조회 시작 전
무과금
COLLECTING
조회 결과를 준비하는 중
무과금
SUCCESS
모든 항목 조회 완료
최초 1회만
PARTIAL_SUCCESS
일부 항목만 조회 완료 (sources 참고)
최초 1회 — 선택형 묶음·발급형은 받은 항목 단가만, 받은 항목이 없으면 무과금
AUTH_REJECTED
사용자가 인증을 거부
무과금
AUTH_EXPIRED
제한 시간 안에 승인하지 않음
무과금
FAILED
조회 실패 (기관 서비스 점검·중지 포함)
무과금
결과 규격
result.incomeDataCheck
경로
타입
값 존재
설명
예시
조회연도
Array<String>
O
실제로 조회된 귀속연도 목록(4자리 문자열).
["2025"]
연도별
Array<Object>
O
귀속연도별 소득자료 합계. 자료가 없는 연도는 담기지 않으며 확인되지 않은 금액 필드는 생략될 수 있다.
귀속연도
String
O
귀속연도 4자리
2025
연간소득총액
Integer
조건부
연간 소득 총액(원)
242634500
근로소득
Integer
O
상용·일용 근로소득 합계(원)
104469506
근로소득(간이)
Integer
조건부
간이지급명세서로 제출된 근로소득(원)
0
사업소득(간이)
Integer
조건부
간이지급명세서로 제출된 사업소득(원)
0
원천징수 사업소득
Integer
조건부
원천징수된 사업소득(원)
0
사업장 사업소득
Integer
조건부
사업장에서 발생한 사업소득(원)
0
금융소득
Integer
조건부
이자·배당 등 금융소득(원)
33695488
연금소득
Integer
조건부
연금소득(원)
0
기타소득
Integer
조건부
기타소득(원)
0
종교인소득
Integer
조건부
종교인소득(원)
0
근로소득상세
Object | null
O
조회 시점의 반기 기준 근로소득 상세. 키는 항상 존재하며 조회 기간이 아니면 null이다.
귀속연도
String
O
귀속연도 4자리
2026
신청 구분
String
O
상반기분 또는 하반기분
상반기분
근로소득 합계
Integer
조건부
상용·일용 근로소득 합계(원)
40666665
상반기 근로소득
Integer
조건부
상반기 근로소득(원)
40666665
하반기 근로소득
Integer
조건부
하반기 근로소득(원)
0
상용근로소득
Integer
조건부
상용근로소득 합계(원)
40666665
상반기 상용근로소득
Integer
조건부
상반기 상용근로소득(원)
40666665
하반기 상용근로소득
Integer
조건부
하반기 상용근로소득(원)
0
일용근로소득
Integer
조건부
일용근로소득 합계(원)
0
상반기 일용근로소득
Integer
조건부
상반기 일용근로소득(원)
0
하반기 일용근로소득
Integer
조건부
하반기 일용근로소득(원)
0
지급자별
Array<Object>
O
지급자별 소득자료. 자료가 없으면 빈 배열이며 하위 필드는 값이 있을 때만 포함된다.
자료출처
String
조건부
소득자료 종류 표기
지급명세서(사업소득)
지급자 상호(법인명)
String
조건부
지급자 상호 또는 법인명
예시주식회사
지급자 사업자등록번호
String
조건부
지급자 사업자등록번호. 하이픈 없이 10자리로 온다.
1234567890
수입금액
Integer
조건부
수입금액(원)
1280000
업종
String
조건부
업종 표기
서비스업
업종코드
String
조건부
업종코드
940909
타입 읽는 법 — String 은 문자열, Integer 는 소수점 없는 정수(원 단위 금액 포함), Boolean 은 true/false, Object 는 이름이 있는 하위 항목 묶음, Array<Object> 는 같은 구조가 여러 건 오는 목록, Array<String> 은 문자열 목록입니다. String(YYYY-MM-DD) 처럼 괄호가 붙으면 그 형식의 문자열이라는 뜻이고 날짜 타입이 아닙니다.
값 존재 — O는 정상 결과에 있는 항목, 조건부는 해당 정보가 있을 때 제공하는 항목입니다. 누락·빈 문자열·빈 배열·0·null의 의미는 항목별 설명을 따릅니다. 부모 항목이 없으면 그 하위 항목도 없습니다.
예시 — 응답에 들어오는 형태 그대로의 값입니다. 실제 조회 결과가 아니며 개인을 특정할 수 없는 가상의 값입니다. 이 열이 비어 있으면 하위 항목이 있는 묶음이거나 값이 빠질 수 있는 항목입니다.
들여쓰기된 항목은 바로 위 부모 안에 들어 있는 하위 항목입니다. 경로 표기에서 . 는 하위 항목, [ ] 를 붙인 항목은 그 안에 여러 건이 오는 목록이라는 뜻입니다.
원문 응답 필드 표 보기
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 / SERVICE_MAINTENANCE(기관이 서비스 점검·중지 중)
maintenance
Boolean
기관이 서비스 점검(중지) 중이라 결과를 만들지 못한 경우에만 true 입니다. 요청 오류가 아니므로 입력값을 고칠 필요가 없고, 점검 시간이 끝난 뒤 다시 요청하세요. 값이 없거나 false 면 점검 때문이 아닙니다. 이때는 message 에 같은 안내가 들어옵니다.
같은 사용자·같은 조회 항목의 접수는 서버가 한 건씩 처리합니다. 앞선 요청이 끝난 뒤 같은 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 입니다. 업무 성공 판정에 쓰지 마세요.
위 값은 응답 구조를 보여주기 위한 예시입니다. 값은 가상이지만 필드 구성과 타입은 실제 응답과 같습니다. 전체 항목은 결과 규격을 참고하세요.
expiresAt 은 SUCCESS 응답에 없습니다. 인증 대기 기한(AUTH_WAITING)에만 있고, 결과를 받은 뒤에는 resultExpiresAt 이 그 역할을 대신합니다. 둘 중 어느 것이 오는지로 "지금이 승인 대기인지 결과 보관 기간인지"를 구분할 수 있습니다.