사업자등록정보 진위확인 및 상태조회 API
국세청이 제공하고 공공데이터포털에서 운영하는 사업자등록정보 진위확인 및 상태조회 서비스는 사업자등록번호가 실제로 존재하는지, 그리고 계속사업자/휴업자/폐업자 중 어떤 상태인지를 확인할 수 있는 REST API다. 신규 거래처 등록, 세금계산서 발행 전 확인 등에 유용하다.
개요
- 기본 URL:
https://api.odcloud.kr/api/nts-businessman/v1 - API 버전: 1.1.0
- 프로토콜: HTTPS (HTTP도 지원하나 HTTPS 권장)
- 응답 형식: JSON (기본값).
returnType=XML쿼리 파라미터로 XML 응답도 가능 - HTTP 메서드:
POST만 지원 (GET 불가) - 1회 요청 최대 건수: 100개
인증
공공데이터포털에서 발급받은 서비스키(serviceKey)를 URL 쿼리스트링으로 전달한다.
https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=발급받은_서비스키
서비스키는 포털에서 인코딩/디코딩 두 가지로 제공되는데, 쿼리스트링에 그대로 붙여 쓸 때는 인코딩된 키를 사용한다.
엔드포인트
두 개의 엔드포인트가 제공된다. 목적에 따라 선택해서 사용한다.
| 구분 | 경로 | 설명 |
|---|---|---|
| 진위확인 | /validate |
사업자번호, 개업일자, 대표자명이 서로 일치하는지 검증 |
| 상태조회 | /status |
사업자번호로 납세자 상태(계속/휴업/폐업)와 과세유형 조회 |
진위확인
입력한 사업자 정보가 국세청 데이터와 일치하는지 검증한다.
- 경로:
/validate - 메서드:
POST - Content-Type:
application/json
요청 본문
businesses 배열 안에 최대 100개의 사업자 정보 객체를 담아 보낸다.
필수 필드
| 필드 | 타입 | 설명 |
|---|---|---|
b_no |
string | 사업자등록번호 10자리 (하이픈 제거) |
start_dt |
string | 개업일자 (YYYYMMDD) |
p_nm |
string | 대표자성명 |
선택 필드
| 필드 | 타입 | 설명 |
|---|---|---|
p_nm2 |
string | 대표자성명2 (외국인 사업자의 한글명) |
b_nm |
string | 상호 |
corp_no |
string | 법인등록번호 13자리 (하이픈 제거) |
b_sector |
string | 주업태명 |
b_type |
string | 주종목명 |
b_adr |
string | 사업장주소 (v1.1에서 신규 추가) |
요청 예시:
{
"businesses": [
{
"b_no": "0000000000",
"start_dt": "20200101",
"p_nm": "홍길동",
"b_nm": "주식회사 예시"
}
]
}응답
응답에는 요청 건수와 매칭 건수, 그리고 각 사업자별 검증 결과가 포함된다.
| 필드 | 설명 |
|---|---|
match_cnt |
조회 매칭 수 |
request_cnt |
조회 요청 수 |
data[].b_no |
사업자등록번호 |
data[].valid |
01 = 유효, 02 = 무효 |
data[].valid_msg |
02인 경우 “확인할 수 없습니다” 메시지 |
data[].request_param |
요청 시 보낸 파라미터 에코 |
data[].status |
유효한 경우 상태조회와 동일한 BusinessStatus 객체 |
상태조회
사업자등록번호만으로 납세자 상태와 과세유형을 조회한다.
- 경로:
/status - 메서드:
POST - Content-Type:
application/json
요청 본문
| 필드 | 타입 | 설명 |
|---|---|---|
b_no |
string[] | 사업자등록번호 배열 (하이픈 제거, 최대 100개) |
요청 예시:
{
"b_no": ["0000000000", "1111111111"]
}응답
| 필드 | 설명 |
|---|---|
b_no |
사업자등록번호 |
b_stt |
납세자상태 명칭: 계속사업자, 휴업자, 폐업자 |
b_stt_cd |
납세자상태 코드: 01=계속, 02=휴업, 03=폐업 |
tax_type |
과세유형 명칭 (부가가치세 일반과세자 등) |
tax_type_cd |
과세유형 코드 |
end_dt |
폐업일 (YYYYMMDD) |
utcc_yn |
단위과세전환폐업여부 (Y/N) |
tax_type_change_dt |
최근 과세유형 전환일자 (YYYYMMDD) |
invoice_apply_dt |
세금계산서 적용일자 (YYYYMMDD) |
rbf_tax_type |
직전 과세유형 명칭 (v1.1 신규) |
rbf_tax_type_cd |
직전 과세유형 코드 (v1.1 신규) |
호출 예제
curl
상태조회 호출 예시.
curl -X POST \
"https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=${SERVICE_KEY}" \
-H "Content-Type: application/json" \
-d '{"b_no": ["0000000000"]}'Python (requests)
import os
import requests
SERVICE_KEY = os.environ["ODCLOUD_SERVICE_KEY"]
BASE_URL = "https://api.odcloud.kr/api/nts-businessman/v1"
def check_status(b_no_list: list[str]) -> dict:
resp = requests.post(
f"{BASE_URL}/status",
params={"serviceKey": SERVICE_KEY},
json={"b_no": b_no_list},
timeout=10,
)
resp.raise_for_status()
return resp.json()
def validate(businesses: list[dict]) -> dict:
resp = requests.post(
f"{BASE_URL}/validate",
params={"serviceKey": SERVICE_KEY},
json={"businesses": businesses},
timeout=10,
)
resp.raise_for_status()
return resp.json()
print(check_status(["0000000000"]))HTTP 상태 코드
| 코드 | 응답 | 설명 |
|---|---|---|
| 200 | OK |
정상 호출 |
| 400 | BAD_JSON_REQUEST |
JSON 포맷 오류 |
| 411 | REQUEST_DATA_MALFORMED |
필수 파라미터 누락 |
| 413 | TOO_LARGE_REQUEST |
100개 초과 요청 |
| 500 | INTERNAL_ERROR |
서버 오류 |