사업자등록정보 진위확인 및 상태조회 API

업데이트

2026년 4월 11일

국세청이 제공하고 공공데이터포털에서 운영하는 사업자등록정보 진위확인 및 상태조회 서비스는 사업자등록번호가 실제로 존재하는지, 그리고 계속사업자/휴업자/폐업자 중 어떤 상태인지를 확인할 수 있는 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 서버 오류

사용 시 주의사항

  • 사업자등록번호, 법인등록번호는 하이픈(-)을 제거한 숫자만 보내야 한다.
  • 상호, 업태명, 종목명, 주소 등의 공백은 무시되므로 띄어쓰기 차이로 매칭이 실패하지는 않는다.
  • 삭제된 사업자는 조회되지 않는다. 이 경우 진위확인에서 valid=02로 응답한다.
  • 1회 호출당 100건 제한이 있으므로 대량 조회 시에는 배치 단위로 분할해야 한다.
  • 진위확인은 개업일자와 대표자명이 정확해야 매칭된다. 이 두 값을 모르면 상태조회를 사용한다.

참고

맨 위로