개발가이드국세전자세금계산서 거래처 목록 조회

전자세금계산서 거래처 목록 조회 API

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

본인 간편인증 후 전자세금계산서 거래처 목록 조회 자료를 확인합니다. 사업자등록번호: 조회한 사업자등록번호 10자리 검색어: 거래처 이름으로 걸러 본 값. 없으면 빈 문자열 거래처수: 조회된 거래처 수 거래처: 거래처 목록. 없으면 빈 배열이다.

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

알아둘 점

  1. 인증 요청transactionId 저장
  2. 사용자 승인인증 앱에서 진행
  3. 결과 준비COLLECTING이면 잠시 후 다시 조회
  4. 결과 조회같은 transactionId 사용

실제 API 호출은 인증 요청·결과 조회 두 종류입니다. 사용자 승인과 결과 준비는 중간 상태이며 별도 호출이 아닙니다. 공통 인증 흐름과 오류 처리도 함께 확인하세요.

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

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

/rest/req_etax_client_list
20P · 인증요청 5분 유효
/rest/get_etax_client_list
60P · 결과 24시간 보관

이용 전 확인

인증 요청이 사용자에게 발송되면 20P, 결과가 처음 반환될 때 결과 단가 60P가 차감됩니다. 입력 오류로 거절된 요청, 인증 거부·만료, 조회 실패는 결과 단가가 차감되지 않고, 결과를 받은 뒤 24시간 안의 재조회는 무료입니다.

사용자는 인증 요청 후 5분 안에 휴대폰에서 승인해야 합니다. 같은 계정·같은 상품으로 진행 중이거나 30초 안에 접수한 요청이 있으면 인증을 다시 보내지 않고 기존 transactionId를 돌려주며 과금하지 않습니다.

사업자 상품이라 접수 전에 대표자 본인 확인을 합니다. 처음에는 business_no(10자리)와 agreed=true 를 함께 보내세요. 승인할 사람은 그 사업자의 대표자 본인이어야 합니다.

승인 뒤 결과가 준비되는 동안 COLLECTING 이 이어집니다. 결과조회는 5초 → 10초 → 20초 → 30초 간격으로 반복하고 resultAvailable=true 를 받으면 멈추세요.

인증키는 서버 환경변수에 보관하고 브라우저·앱에 넣지 마세요. 공통 규칙은 연동 전에 확인하세요를 참고하세요.

전자세금계산서 거래처 목록 자료를 조회하기 위한 인증 요청입니다. 사용자에게 간편인증을 요청하고, 결과 조회에 쓸 transactionId 를 바로 돌려줍니다.

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

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인증 요청
POST/rest/req_etax_client_list
  • Bearer 인증
  • multipart/form-data
  • JSON 응답
요청 파라미터 12개 · 필수 6
파라미터
설명
namestring필수
조회 대상의 이름입니다. 간편인증·개인 조회에서는 성명, 기업 조회에서는 법인명·상호를 뜻합니다. 생년월일·전화번호 같은 보조 식별자와 함께 확인하세요.
예시
홍길동
birthDatestring필수
대상자의 생년월일 8자리입니다. 예: 19900101. 주민등록상 생년월일과 같아야 하며, 하이픈·공백은 넣지 않습니다.
예시
19900101
phonestring필수
본인 명의 휴대전화 번호입니다. 하이픈 없이 숫자만 입력하며(예: 01012341234), 인증 문자를 받을 수 있는 번호여야 합니다.
예시
01011112222
authProviderstring필수
사용할 간편인증 수단의 식별자입니다. 예: kakao, naver, toss, pass. 지원 값과 표시 이름은 이 문서의 간편인증 목록을 확인하세요.
예시
kakao
business_nostring필수
사업자등록번호 10자리(숫자만). 대표자 본인 확인에 쓰므로 반드시 보냅니다.
예시
1234567890
businessNostring필수
??????? 10?? 문자열로 보내며, 빼거나 빈 값으로 보내면 요청이 거부됩니다.
keywordstring선택
??? ?? ??? ?? ? ? ??(40? ??) 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.
business_typestring선택
사업자 구분. corporate(법인)는 공동인증서가 필수, personal(개인)은 간편인증·공동인증서 모두 가능. 없으면 personal
certificate_idstring선택
등록한 공동인증서 ID. 없으면 기본 인증서를 쓴다 문자열로 보내며, 생략하면 서버 기본값이 적용되거나 해당 조건이 해제됩니다.
auth_typestring선택
인증 방식. certificate(공동인증서) 또는 simple(간편인증). 없으면 business_type·certificate_id 로 정한다
agreedboolean조건부
대표자 본인 확인 동의. bind_id 가 없으면 true 로 보내야 접수됩니다. 빠지면 인증을 보내지 않고 무과금으로 거절합니다. 결과에 대표자명이 있으면 응답의 bind_id 로 다음 조회에 다시 쓸 수 있습니다. true = 이 필드가 나타내는 조건이 성립한 경우, false = 성립하지 않은 경우입니다. 두 값 모두 정상 응답에 올 수 있으며, 값이 없으면 필드가 생략되거나 null일 수 있습니다.
예시
true
bind_idstring선택
이전 사업자 조회 결과에서 받은 bind_id. 같은 계정·같은 사업자등록번호이고 유효기간(90일) 안이면 agreed 없이 접수합니다.
응답 필드 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개 더 보기

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

성공 판정 접수되면 transactionId를 저장하고 사용자에게 인증 앱 승인을 안내하세요. 이 응답은 자료 조회 완료를 뜻하지 않습니다.

2결과 조회
POST/rest/get_etax_client_list
  • Bearer 인증
  • multipart/form-data
  • JSON 응답
요청 파라미터 1개 · 필수 1
파라미터
설명
transactionIdstring필수
/rest/req_etax_client_list 가 반환한 트랜잭션 ID
예시
9f2c4a7b1d8e35c60a4f7b2d1e9c803a
응답 필드 40개
응답 필드
설명
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 가능한 값은 4가지입니다. RESULT_EXPIRED = 결과 재조회 기간이 지난 경우(새로 인증해야 함), AUTH_EXPIRED = 승인 유효시간이 지난 경우, AUTH_REJECTED = 사용자가 인증을 거부한 경우, COLLECT_FAILED = 승인 뒤 결과 준비가 실패한 경우입니다. 오류가 없으면 null입니다.
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이거나 필드가 생략됩니다.
하위 필드 19개 더 보기
응답 필드
설명
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.etaxClientListobject
이 조회 항목의 결과입니다. 항목은 결과 규격을 참고하세요. 하위 필드에 코드·이름·상태 같은 세부 값이 들어 있으며, 자료가 없으면 빈 객체이거나 생략됩니다.
data.result.etaxClientList.사업자등록번호string
조회한 사업자등록번호 10자리 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.검색어string
거래처 이름으로 걸러 본 값. 없으면 빈 문자열 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처수integer
조회된 거래처 수 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.
data.result.etaxClientList.거래처array
거래처 목록. 없으면 빈 배열이다. 각 항목의 구성은 서비스에 따라 다르며, 값이 없으면 빈 배열입니다. 항목 수와 순서를 함께 확인하세요.
data.result.etaxClientList.거래처[].사업자등록번호string
거래처 사업자등록번호. 주민등록번호 수취분은 가린 표시값 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처[].상호string
거래처 상호 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처[].대표자string
대표자 성명 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처[].주소string
도로명·지번 기준 주소입니다. 상세 주소가 생략될 수 있으므로 우편번호와 함께 확인하세요.
data.result.etaxClientList.거래처[].업태string
사업자가 신고한 업태입니다. 업종보다 구체적인 사업 형태를 문장으로 보여 줍니다.
data.result.etaxClientList.거래처[].종목string
사업자가 신고한 종목입니다. 실제 취급 품목·서비스를 적으며, 없으면 빈 문자열입니다.
data.result.etaxClientList.거래처[].수취구분string
수취구분(사업자등록번호·주민등록번호) 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처[].등록일string
거래처 최초 등록일 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.result.etaxClientList.거래처[].변경일string
거래처 정보 최종 변경일 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

성공 판정 resultAvailable이 true이면 결과를 사용하고 폴링을 멈춥니다. SUCCESS와 PARTIAL_SUCCESS를 구분하고, charged와 api.cost는 이번 요청의 과금 판단에만 사용하세요.

입력 조건·전송 규칙

1단계 · 조회 인증 요청

모든 입력은 하위 객체 없이 최상위 이름 그대로 보냅니다. user·requestData·options 같은 묶음은 쓰지 않습니다. 형식별 예시는 요청 본문 형식을 참고하세요. 조회 항목마다 필요한 추가 입력 이 다릅니다. 값이 비어 있으면 인증을 보내지 않고 무과금으로 거절하며, 이때는 결과 단가도 발생하지 않습니다. 필수 칸이 조건부인 값은 설명에 적힌 조건에 해당할 때만 필수입니다. 예: delivery=04(팩스)이면 fax_no, delivery=12(전자문서지갑)이면 wallet_address. 대표자 본인 확인이 필요한 사업자 상품입니다. 처음 접수할 때는 business_no(10자리)와 agreed=true 를 함께 보냅니다. 같은 계정·같은 사업자등록번호의 bind_id(90일 유효)가 있으면 agreed 없이 접수할 수 있습니다. 둘 다 없으면 인증을 보내지 않고 무과금으로 거절합니다.
간편인증 방식(authProvider)
값
인증 방식
kakao
카카오톡
naver
네이버
toss
토스
pass
통신사 PASS
samsung
삼성패스
kb
KB국민은행
shinhan
신한은행
hana
하나은행
woori
우리은행
ibk
IBK기업은행
nh
NH농협은행
kakaobank
카카오뱅크
banksalad
뱅크샐러드
본문은 transactionId 하나입니다. 결과조회 엔드포인트는 인증요청과 짝이 되는 /rest/get_etax_client_list 이며, 다른 항목의 엔드포인트로 조회하면 실패합니다. 조회 시각 기준 24시간이 지나면 RESULT_EXPIRED 가 반환됩니다. 이때는 인증요청부터 다시 시작해야 하며, 인증요청 단가(20P)가 다시 발생합니다.

응답 처리

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

처리 상태(status)
값
의미
과금
AUTH_REQUESTED
조회 인증 요청 (/rest/req_etax_client_list 응답)
인증요청 시 과금
AUTH_WAITING
사용자 인증 대기중
무과금
AUTH_COMPLETED
승인 완료, 조회 시작 전
무과금
COLLECTING
조회 결과를 준비하는 중
무과금
SUCCESS
모든 항목 조회 완료
최초 1회만
PARTIAL_SUCCESS
일부 항목만 조회 완료 (sources 참고)
최초 1회 — 선택형 묶음·발급형은 받은 항목 단가만, 받은 항목이 없으면 무과금
AUTH_REJECTED
사용자가 인증을 거부
무과금
AUTH_EXPIRED
제한 시간 안에 승인하지 않음
무과금
FAILED
조회 실패
무과금

결과 규격

result.etaxClientList
경로
타입
값 존재
설명
예시
사업자등록번호
String
O
조회한 사업자등록번호 10자리
1234567890
검색어
String
O
거래처 이름으로 걸러 본 값. 없으면 빈 문자열
거래처수
Integer
O
조회된 거래처 수
68
거래처
Array<Object>
O
거래처 목록. 없으면 빈 배열이다.
사업자등록번호
String
O
거래처 사업자등록번호. 주민등록번호 수취분은 가린 표시값
220-81-01733
상호
String
O
거래처 상호
주식회사 예시
대표자
String
O
대표자 성명
홍길동
주소
String
O
사업장 주소
서울특별시 마포구 독막로 311
업태
String
O
업태
서비스
종목
String
O
종목
소프트웨어 개발
수취구분
String
O
수취구분(사업자등록번호·주민등록번호)
사업자등록번호
등록일
String(YYYYMMDD)
O
거래처 최초 등록일
20250826
변경일
String(YYYYMMDD)
O
거래처 정보 최종 변경일
20250826
타입 읽는 법 — 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
처리 상태 (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
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
조회된 결과 묶음. 실제 데이터가 있을 때만 포함됩니다.
etaxClientList
Object
이 조회 항목의 결과입니다. 항목은 결과 규격을 참고하세요.
message
String
상태 메시지
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이번 요청의 과금
대기

AUTH_REQUESTED · AUTH_WAITING · AUTH_COMPLETED · COLLECTING — 결과가 없으면 간격을 두고 같은 transactionId로 조회합니다.

완료

SUCCESS · PARTIAL_SUCCESS — resultAvailable=true이면 결과를 저장하고 중단합니다. 부분 성공은 sources의 항목별 결과도 확인하세요.

종료

FAILED · AUTH_REJECTED · AUTH_EXPIRED — 자동 반복을 멈추고 사용자에게 상태를 안내하세요. RESULT_EXPIRED는 status가 아닌 errorCode입니다.

HTTP 424

요청 처리·잠금·결제 기록 등 여러 원인이 있을 수 있습니다. 응답 본문의 오류를 함께 확인하고 인증 요청을 자동 반복하지 마세요.

간편인증 승인 유효시간은 300초입니다. 결과 준비 시간·클라이언트 대기시간·결과 보관시간과 구분하세요. 결과의 resultExpiresAt을 확인하고, 부분 성공 자료도 받는 즉시 보관하세요.

서비스 코드·조건

오류와 복구

입력 오류와 처리 중 거절은 data.error 에 안내 문구가 오고 과금되지 않습니다(api.cost 0). 실패 응답은 표의 HTTP 상태 코드와 함께 옵니다. 인증 거부·만료·조회 실패처럼 진행이 끝난 상태는 HTTP 200 으로 오며 data.status·data.errorCode 로 구분합니다.

상황
HTTP
data.error
해결
이름·생년월일·휴대전화 번호가 비었거나 형식이 틀림
400
입력 항목이 잘못됐습니다.(이름) — 괄호 안에 항목 이름(생년월일 8자리·휴대전화 번호)이 표시됩니다.
값을 고쳐 인증 요청을 다시 보냅니다. 인증이 발송되지 않아 과금되지 않습니다.
authProvider 가 허용값이 아니거나 지금 쓸 수 없는 인증방식
400
입력 항목이 잘못됐습니다.(인증방식)
간편인증 방식 표의 값(예: kakao)으로 보냅니다.
business_no 가 없거나 10자리가 아님
400
입력 항목이 잘못됐습니다.(사업자등록번호 10자리)
사업자등록번호 10자리를 숫자로 보냅니다.
bind_id 없이 agreed 를 빠뜨림
400
입력 항목이 잘못됐습니다.(agreed)
agreed=true 를 함께 보냅니다.
bind_id 유효기간이 지났거나 폐기됨
410
사업자 인증 유효기간이 지났습니다. 다시 인증해 주세요.
bind_id 를 빼고 agreed=true 로 다시 접수합니다.
없는 bind_id
404
사업자 인증 정보를 찾을 수 없습니다.
bind_id 를 빼고 agreed=true 로 다시 접수합니다.
bind_id 의 사업자등록번호와 business_no 가 다름
400
입력한 사업자등록번호가 인증된 번호와 다릅니다.
bind_id 를 만든 사업자등록번호로 보내거나, bind_id 없이 agreed=true 로 접수합니다.
같은 상품의 앞선 요청을 처리하는 중
429
앞선 요청을 처리하고 있습니다. 잠시 후 다시 시도해 주세요.
인증 요청을 다시 보내지 말고 잠시 뒤 받은 transactionId 로 결과를 조회합니다.
보유 포인트가 이번 호출 단가보다 적음
200
data 대신 result.error 에 사용 가능한 포인트이 부족합니다.
충전한 뒤 다시 호출합니다. 결과조회는 같은 transactionId 를 그대로 씁니다.
결과를 청구하는 순간 포인트가 부족함
402
결제 금액보다 보유 포인트이 부족합니다.
충전한 뒤 같은 transactionId 로 다시 조회합니다. 결과는 24시간 보관됩니다.
결과조회에 transactionId 가 없음
400
입력 항목이 잘못됐습니다.(transactionId)
인증 요청 응답의 transactionId 를 보냅니다.
없는 transactionId 또는 다른 상품의 결과조회 경로
404
요청을 찾을 수 없습니다.
인증 요청한 상품의 /rest/get_etax_client_list 로 조회합니다.
사용자가 승인을 거부함
200
없음 — status=AUTH_REJECTED, errorCode=AUTH_REJECTED
다시 시도할지 사용자에게 묻고 인증 요청부터 다시 합니다(인증 요청 단가가 다시 발생).
5분 안에 승인하지 않음
200
없음 — status=AUTH_EXPIRED, errorCode=AUTH_EXPIRED
인증 요청부터 다시 합니다. 결과 단가는 발생하지 않습니다.
조회하지 못함(대상이 아니거나 일시적으로 처리하지 못함)
200
없음 — status=FAILED, errorCode=COLLECT_FAILED
결과 단가는 발생하지 않습니다. 입력값과 대표자 본인 여부를 확인한 뒤 잠시 후 인증 요청부터 다시 합니다.
결과 재조회 기간(24시간)이 지남
200
없음 — errorCode=RESULT_EXPIRED
받은 결과는 바로 저장해 두세요. 다시 받으려면 인증 요청부터 합니다.

HTTP 상태만으로 성공을 판단하지 말고 data.resultAvailable 과 data.status 를 함께 보세요. 공통 규칙은 공통 오류 응답에 있습니다.

인증·포인트 오류 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 / 결과 60P무료 포인트로는 이용할 수 없으며 최소 1회 결제 후 이용할 수 있습니다.
  • 인증 요청과 결과 제공에 각각 과금 조건이 있습니다. charged와 api.cost로 이번 호출의 비용을 확인하세요. 대기·무료 재조회 응답은 결과 성공 여부와 별개입니다.
  • 동일 계정·동일 상품의 인증 요청은 기존 transactionId를 재사용할 수 있습니다. 다른 대상자의 요청을 동시에 보내지 말고 기존 요청 상태를 먼저 확인하세요.

연동 팁

  • 결과 조회는 한 번씩 순서대로 기다리며 호출하세요. 권장 대기 간격은 5 → 10 → 20 → 30초이며 이후 30초를 유지합니다. 서버 제한이 아닌 클라이언트 권장값입니다.
  • 최대 대기시간과 요청별 시간 제한을 정하고, 결과·종료 상태·사용자 취소 시 멈추세요. 폴링 루프에서 인증 요청을 다시 보내지 마세요.
추가 예제·서비스별 연동 안내
응답 예시

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "etax_client_list",
        "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
    }
}
            
인증 대기중 (무과금)

{
    "data": {
        "schemaVersion": "1.0",
        "transactionId": "9f2c4a7b1d8e35c60a4f7b2d1e9c803a",
        "product": "etax_client_list",
        "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": "etax_client_list",
        "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": "etax_client_list",
        "status": "SUCCESS",
        "resultAvailable": true,
        "charged": true,
        "sources": [

            { "source": "??????? ??? ?? ??","type": "ETAX_CLIENT_LIST", "status": "SUCCESS" }

        ],
        "checkedAt": "2026-09-20T04:47:33+09:00",
        "resultExpiresAt": "2026-09-21T04:47:33+09:00",
        "result": {
            "etaxClientList": {
                "사업자등록번호": "1234567890",
                "검색어": "",
                "거래처수": 68,
                "거래처": [
                    {
                        "사업자등록번호": "220-81-01733",
                        "상호": "주식회사 예시",
                        "대표자": "홍길동",
                        "주소": "서울특별시 마포구 독막로 311",
                        "업태": "서비스",
                        "종목": "소프트웨어 개발",
                        "수취구분": "사업자등록번호",
                        "등록일": "20250826",
                        "변경일": "20250826"
                    }
                ]
            }
        },
        "message": "인증이 완료되었습니다.",
        "success": 1
    },
    "api": {
        "success": true,
        "cost": 60,
        "ms": 318,
        "pl_id": 4903
    }
}
            
위 값은 응답 구조를 보여주기 위한 예시입니다. 값은 가상이지만 필드 구성과 타입은 실제 응답과 같습니다. 전체 항목은 결과 규격을 참고하세요. expiresAt 은 SUCCESS 응답에 없습니다. 인증 대기 기한(AUTH_WAITING)에만 있고, 결과를 받은 뒤에는 resultExpiresAt 이 그 역할을 대신합니다. 둘 중 어느 것이 오는지로 "지금이 승인 대기인지 결과 보관 기간인지"를 구분할 수 있습니다.

이 API로 조회되는 데이터

응답 필드
설명
사업자등록번호String
조회한 사업자등록번호 10자리
검색어String
거래처 이름으로 걸러 본 값. 없으면 빈 문자열
거래처수Integer
조회된 거래처 수
거래처Array<Object>
거래처 목록. 없으면 빈 배열이다.

활용 사례

  • 전자세금계산서 발급용 거래처 주소록 정리하기
  • 거래처 사업자등록번호와 업태·종목 확인하기
  • 거래처 목록을 사내 장부와 대조하기

조회 가능한 본인 자료와 응답 범위 안에서 활용하세요. 조회 결과는 심사·진단·거래 안전을 보장하지 않습니다.

자주 묻는 질문

전자세금계산서 거래처 목록 조회에서 어떤 자료를 받나요?

사업자등록번호, 검색어, 거래처수, 거래처 등을 제공합니다. 전체 항목과 빈 값·선택 항목의 조건은 아래 응답 명세를 확인하세요.

전자세금계산서 거래처 목록 조회의 조회 비용은 어떻게 확인하나요?

현재 기본 단가는 인증 요청 20P, 결과 조회 60P입니다. 조회 기간·구성에 따른 조건과 실제 charged·api.cost는 요금 안내 및 응답에서 확인하세요.

전자세금계산서 거래처 목록 조회 자료가 비어 있으면 어떻게 처리하나요?

응답 상태와 각 필드의 빈 배열·null·선택 항목 조건을 확인하세요. 자료 없음만으로 전자세금계산서 거래처 목록 조회 대상의 상태를 단정하지 말고 오류 응답과 구분해 표시하세요.

개발가이드 검색

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

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