BTSDB 가이드 · 개발 — 상태조회·진위확인 API 실전
회원가입 때의 사업자 검증, 거래처 일괄 점검, ERP 연동은 국세청이 공공데이터포털에 개방한 「사업자등록정보 진위확인 및 상태조회 서비스」로 구현할 수 있습니다. BTSDB도 이 API를 씁니다. 신청부터 운영까지 실제로 부딪히는 지점을 정리했습니다.
| 상태조회 (status) | 진위확인 (validate) | |
|---|---|---|
| 보내는 값 | 사업자등록번호 | 사업자등록번호 + 개업일자 + 대표자 성명 (상호 등은 선택) |
| 돌려주는 값 | 계속·휴업·폐업, 과세유형, 폐업일 | 보낸 정보가 국세청 등록 내용과 일치하는지 여부 |
| 쓰임새 | 거래처 모니터링, 일괄 점검 | 회원가입 시 본인 사업자 확인 |
POST https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey={인코딩키}
Content-Type: application/json
{"b_no": ["1208800767", "1234567890"]}
번호는 하이픈 없이 10자리 문자열로 보냅니다. 응답의 data 배열에 번호별 결과가 들어 있습니다.
| 필드 | 내용 |
|---|---|
| b_stt / b_stt_cd | 계속사업자(01), 휴업자(02), 폐업자(03) |
| tax_type / tax_type_cd | 과세유형. 코드의 뜻은 과세유형 가이드 참고 |
| end_dt | 폐업일 (YYYYMMDD). 폐업자가 아니면 빈 값 |
| tax_type_change_dt | 최근 과세유형 전환일 |
| invoice_apply_dt | 세금계산서 적용일 |
| utcc_yn | 단위과세 전환 폐업 여부 |
등록되지 않은 번호는 오류가 아니라 정상 응답으로 옵니다.
b_stt_cd가 비어 있고 tax_type에 "국세청에 등록되지 않은 사업자등록번호입니다"라는 문구가 들어 있습니다.
상태 코드가 비어 있는지로 판별하세요.
import requests
URL = "https://api.odcloud.kr/api/nts-businessman/v1/status"
def fetch_status(b_no, decoding_key):
r = requests.post(URL, params={"serviceKey": decoding_key},
json={"b_no": [b_no]}, timeout=8)
r.raise_for_status()
items = r.json().get("data") or []
if not items:
return None # 응답 형식이 다르면 실패로 처리
item = items[0]
return {
"registered": bool(item.get("b_stt_cd")),
"status": item.get("b_stt"),
"tax_type": item.get("tax_type"),
"closed_on": item.get("end_dt") or None,
}
requests가 params를 인코딩하므로 여기서는 Decoding 키를 넘깁니다.
POST https://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey={인코딩키}
Content-Type: application/json
{"businesses": [{"b_no": "1208800767", "start_dt": "20130801", "p_nm": "홍길동"}]}
응답의 valid가 01이면 일치, 02이면 불일치입니다.
개업일자와 대표자 성명은 사업자등록증에 적힌 그대로 보내야 합니다. 공동대표나 외국인 대표는 표기 방식 때문에 불일치가 나기 쉬우니
사용자에게 등록증 기준으로 입력하도록 안내하세요.
한두 건 확인하는 정도라면 연동 없이 상단 검색창으로 충분합니다. 국세청 상태조회에 더해 고용·산재보험, 통신판매 등록, 국민연금 자료까지 한 페이지에서 볼 수 있습니다.
무료입니다. 공공데이터포털에서 활용신청을 하고 인증키를 발급받아 사용합니다.
상태조회와 진위확인 모두 한 번의 요청에 100건까지 배열로 보낼 수 있습니다.
받을 수 없습니다. 상태조회는 상태와 과세유형만 돌려주고, 진위확인은 보낸 정보가 맞는지만 알려줍니다. 상호는 다른 공공데이터에서 가져와야 합니다.
오류가 아니라 정상 응답으로 오며, 상태 코드가 비어 있고 과세유형 문구에 등록되지 않은 번호라는 안내가 들어 있습니다.
Encoding 키와 Decoding 키를 바꿔 쓴 경우가 가장 많습니다. HTTP 라이브러리가 파라미터를 인코딩한다면 Decoding 키를 넘겨야 합니다. 활용기간이 만료되지 않았는지도 확인하세요.
API 명세는 국세청과 공공데이터포털 사정에 따라 바뀔 수 있습니다. 연동할 때는 포털의 공식 문서를 기준으로 하세요.