사업자 정보 조회 API로 B2B 거래처 등록 자동화하기

B2B 서비스에서 거래처 등록은 입력칸을 채우는 일로 끝나지 않습니다. 운영팀은 상호와 사업자번호가 맞는지 확인하고, 개발팀은 잘못 입력된 번호 때문에 생기는 중복 거래처를 정리합니다. 사업자 조회를 등록 흐름 안에 넣으면 사람이 다시 확인해야 할 항목을 한 화면에 모을 수 있습니다.
APICK 사업자 정보 조회 API를 이용해 사업자번호를 받는 서버 함수를 만들고, 응답에서 어떤 값을 저장할지까지 살펴보겠습니다. 조회 결과를 근거로 계약·신용 판단을 자동 확정하는 기능은 이 예제의 범위에 포함하지 않습니다.
사업자번호 하나로 어떤 정보를 받나요?
POST https://apick.app/rest/biz_detail에 숫자 10자리 biz_no를 보냅니다. 주요 응답은 data 안의 회사명, 대표명, 사업자상태, 과세유형, 도로명주소입니다. 사업자상태코드와 통판_ 접두 필드는 출처에서 해당 정보를 확보했을 때만 나타날 수 있습니다. 기본 필드도 값이 빈 문자열일 수 있습니다. 필드 명세를 기준으로 누락을 허용하는 모델을 만드는 편이 안전합니다.
- 판매자 가입: 입력한 번호의 형식을 확인하고 조회한 상호를 사용자에게 보여주기
- 거래처 관리: 등록 시점의 기본 정보와 마지막 조회 시각을 함께 표시하기
- 운영 검수: 휴업·폐업·확인 불가 응답을 담당자가 확인하는 검토 목록으로 보내기
1. 서버에서 cURL로 요청 구조 확인하기
APICK_API_KEY와 BUSINESS_NUMBER는 서버 환경변수로 준비합니다. BUSINESS_NUMBER에는 조회 권한과 목적이 확인된 사업자번호를 넣으세요. 아래 코드는 변수가 비어 있으면 호출 전에 멈춥니다. 인증키를 Blogger 본문이나 브라우저 코드에 직접 넣으면 안 됩니다.
curl --fail-with-body --request POST 'https://apick.app/rest/biz_detail' \
--header "Authorization: Bearer ${APICK_API_KEY:?서버 환경변수가 필요합니다}" \
--form-string "biz_no=${BUSINESS_NUMBER:?숫자 10자리 사업자번호가 필요합니다}" \
--connect-timeout 10 --max-time 602. Node.js에서 최소 정보만 반환하기
서버용 Node.js 18 이상에서 사용할 수 있는 fetch 예제입니다. FormData가 multipart 경계를 만들므로 Content-Type을 수동으로 고정하지 않습니다. 입력 유효성, HTTP 성공, API 성공, 조회 성공을 각각 확인합니다. 조회 실패 응답을 빈 회사명으로 바꾸면 실제 미등록 업체와 시스템 장애를 구분하기 어려워집니다.
export async function lookupBusiness(input) {
const apiKey = process.env.APICK_API_KEY;
if (!apiKey) throw new Error("APICK_API_KEY가 필요합니다");
const bizNo = String(input).replace(/-/g, "").trim();
if (!/^\d{10}$/.test(bizNo)) throw new Error("사업자번호 형식을 확인하세요");
const form = new FormData();
form.set("biz_no", bizNo);
const response = await fetch("https://apick.app/rest/biz_detail", {
method: "POST",
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
signal: AbortSignal.timeout(60_000)
});
if (!response.ok) throw new Error(`사업자 조회 HTTP ${response.status}`);
const result = await response.json();
if (result.api?.success !== true || result.data?.success !== 1) {
throw new Error("사업자 조회가 완료되지 않았습니다");
}
const data = result.data;
return {
companyName: data["회사명"] || null,
status: data["사업자상태"] || null,
statusCode: data["사업자상태코드"] ?? null,
taxType: data["과세유형"] || null,
roadAddress: data["도로명주소"] || null,
checkedAt: new Date().toISOString(),
costPoints: result.api.cost,
paymentLogId: result.api.pl_id
};
}3. 조회 결과를 가입 화면에 연결하기
브라우저는 우리 서버에 번호만 보내고, 서버가 APICK을 호출하게 구성합니다. 응답을 받은 화면에서는 상호와 상태를 보여주고 사용자가 거래처 선택을 확인하도록 합니다. 서버에서 companyName이 null이면 “확인할 수 없는 항목”으로 표시하세요. 상태코드가 없다는 이유만으로 폐업 처리하는 로직은 두지 않습니다.
같은 사용자가 확인 버튼을 연속 클릭해도 서버에서 한 요청만 처리하도록 잠금을 두면 중복 호출을 줄일 수 있습니다. 기존 거래처는 등록 정보와 이번 조회 결과를 비교해 변경된 항목만 검수 대상으로 보냅니다. 재조회 주기와 보관 기간은 거래처 관리 목적에 맞게 정하고, 공개 조회 데이터의 저장·재사용 조건도 확인하세요.
비용: 건당 50P, 호출 횟수로 예산 계산하기
2026-10-11 공식 요금표 기준 기본 단가는 건당 50P입니다. 같은 단가로 과금되는 조회 1,000건이면 50,000P로 계산할 수 있습니다. 실제 사용량 집계에는 응답의 api.cost와 api.pl_id를 이용하세요. 포인트를 원화로 환산하거나 부가세 포함 금액으로 표현하려면 충전 화면의 현재 조건을 별도로 확인해야 합니다.
입력칸에서 숫자 한 자리를 입력할 때마다 호출할 필요는 없습니다. 형식 검사를 통과한 뒤 확인 버튼을 누른 시점에 요청하고, 통신 지연으로 결과를 놓쳤을 때는 사용 내역을 확인한 뒤 재시도 정책을 적용하세요. 이 API의 중복 방지 키 지원을 확인하지 않았으므로 재전송이 무료라고 가정하지 않습니다.
자주 묻는 질문
Q. 사업자번호의 하이픈을 넣어도 되나요?
직접 REST 예제에서는 하이픈을 제거한 10자리 문자열을 보냅니다. 공식 SDK의 businessDetails 메서드는 하이픈 제거를 지원합니다.
Q. 사업자상태가 정상이라면 거래를 자동 승인해도 되나요?
이 API는 조회 정보입니다. 서비스의 심사 기준, 계약 확인, 이상 거래 검토는 별도로 설계해야 합니다.
Q. 대표명이나 주소가 비어 있으면 실패인가요?
성공 응답에서도 확보하지 못한 값은 비어 있을 수 있습니다. api.success와 data.success를 먼저 보고, 각 필드의 빈 값은 따로 처리하세요.
공식 문서에서 다음 단계 확인하기
APICK 사업자 정보 조회 개발가이드에서 전체 필드와 최신 조건을 확인해 보세요. 먼저 비식별 테스트 입력으로 응답 분기를 검토한 뒤, 서버 연동과 사용량 집계를 붙이는 순서가 좋습니다.
문서·요금 확인일: 2026-10-11 (UTC). 공식 요금표 · 인증·연동 시작하기 · 공식 Node.js SDK 가이드. 이 글의 코드는 공개 명세를 바탕으로 만든 설명용 예제이며 실제 API 호출로 실행 검증하지 않았습니다. 실제 개인정보나 인증키를 예제에 넣지 않았습니다.
댓글
댓글 쓰기