개발자 문서
API 레퍼런스

국민연금 가입 사업장 - 공공데이터 기업 위험 조회

1. 국민연금 가입 사업장 조회opendata.nps.workplace

MCP 도구 이름 opendata__nps__workplace

POSThttps://api.xdata.kr/v1/jobsX-Env-Scope: real_test

현재 혜택은 요금제에서 확인해 주세요. 현재 데모 정책과 계정의 남은 양을 확인해 주세요.

사업자등록번호와 상호로 국민연금에 가입된 사업장(가입자 수, 당월 고지금액, 등록일, 업종)을 조회합니다.

Request

순번변수명필수설명
AuthorizationYAPI 자격증명입니다. client_id 와 client_secret 을 콜론으로 이어 Base64 로 인코딩해 보냅니다.

형식 : Basic base64("{client_id}:{client_secret}")

[참고] 인증

X-Env-ScopeY호출 환경입니다.
  • real_test데모 — 현재 데모 한도 확인 필요
  • production정식 — 현재 공개 요금제 전용

[참고] 환경

Idempotency-KeyY재시도 식별 키입니다. 같은 키와 같은 본문으로 다시 호출하면 기존 작업이 그대로 반환됩니다. ASCII 문자만 사용하며 UUID v4 를 권장합니다. 고객 정보는 넣지 않습니다.

[참고] 재시도

Content-TypeY요청 본문 형식입니다.
  • application/json고정값 (기본값)
X-Trace-IdN추적 아이디입니다. 지정하지 않으면 서버가 발급합니다.
순번변수명타입필수설명
providerstringY호출할 기관입니다.
  • opendata이 API 고정값 (기본값)

예시 : opendata

actionstringY호출할 작업입니다.
  • opendata.nps.workplace이 API 고정값 (기본값)

예시 : opendata.nps.workplace

paramsobjectY작업 파라미터입니다. 아래 params 파라미터 표의 필수 항목을 채워 보냅니다.
encrypted_fieldsobjectN민감한 params 값을 RSA-OAEP-256 으로 암호화해 담는 객체입니다. 서버가 복호화해 params 에 합칩니다. 같은 이름을 params 와 함께 쓰지 않습니다.

[참고] 암호화

순번변수명타입필수설명
biznostringY사업자등록번호 10자리(하이픈 허용). 앞 6자리로 후보를 찾습니다
wkplNmstringN사업장 상호(선택). 비우면 법인 상호를 기업개요에서 찾아 씁니다. 사업자등록증의 상호를 그대로 주면 가장 정확합니다
pageNonumberN후보 페이지 번호(선택, 기본 1)
numOfRowsnumberN후보 한 페이지 행 수(선택, 기본 100)
output_formatsarrayN이 결과를 엑셀(xlsx) 파일로도 받으려면 적습니다. 예: ["xlsx"]. 파일은 result.artifacts 에 함께 오고, 빼면 데이터만 옵니다
bash
curl --request POST \
  --url 'https://api.xdata.kr/v1/jobs' \
  --header 'Authorization: Basic {base64(client_id:client_secret)}' \
  --header 'X-Env-Scope: real_test' \
  --header 'Idempotency-Key: demo-workplace-001' \
  --header 'Content-Type: application/json' \
  --data '{
  "provider": "opendata",
  "action": "opendata.nps.workplace",
  "params": {
    "bizno": "<필수>"
  }
}'

Response

  • 아래 표의 칸은 작업이 SUCCEEDED 가 된 뒤 GET /v1/jobs/{job_id}/result 의 result.data 에 오고, 응답 예시는 작업을 제출했을 때(POST /v1/jobs)의 응답입니다.
  • 이 API 가 돌려주는 데이터: 사업장명, 사업장 형태, 가입 상태, 가입자수, 당월고지금액, 사업장등록일, 사업장탈퇴일, 업종명, 자료생성년월, 도로명 주소
순번변수명타입설명
source_idstring이 작업의 원천 데이터셋 번호입니다. 이 작업에서는 항상 3046071 입니다(공공데이터포털 data.go.kr 의 번호).
actionstring호출한 작업 이름입니다. 이 작업에서는 항상 opendata.nps.workplace 입니다.
job_idstring이 결과를 만든 작업의 ID 입니다.
sourceobject원천의 출처 정보입니다. 결과를 사용자에게 보여 줄 때 출처 표시에 씁니다.
source.idstring원천 데이터셋 번호입니다. source_id 와 같은 값입니다.
source.orgstring원천 데이터를 제공하는 기관 이름입니다. 이 작업에서는 항상 국민연금공단 입니다.
source.licensestring원천 데이터의 이용 허락 범위 표기입니다. 값은 원천마다 다르고, 결과를 보여 줄 때 출처 표시와 함께 씁니다.
license_notesarray출처 표시 문구, 이용 허락 표기, 결과 해석 안내가 이 순서로 담긴 문장 목록입니다. 첫 줄은 「출처: 국민연금공단 국민연금 가입 사업장 내역 / data.go.kr 3046071」 입니다.
upstreamobject국민연금 가입 사업장 정보를 사업자등록번호 앞 6자리와 상호로 찾은 결과입니다. 아래 칸은 우리가 정해 담습니다.
upstream.source_opsarray원천에서 부른 조회 이름 두 개입니다. 후보를 찾는 조회와 후보의 상세를 받는 조회가 이 순서로 항상 같은 값이 담깁니다.
upstream.queryobject조회에 쓴 조건입니다. bznoPrefix(사업자등록번호 앞 6자리)와, 상호가 있었으면 wkplNm(조회에 쓴 상호)이 담깁니다.
upstream.match_modestring조회 방식입니다. exact_name 은 상호가 정확히 일치하는 후보를 찾았다는 뜻, no_exact_match 는 상호는 있었지만 일치하는 후보가 없다는 뜻, no_name 은 상호를 알 수 없어 후보만 돌려준다는 뜻입니다.
upstream.candidatesarray사업자등록번호 앞 6자리(와 상호)로 찾은 후보 행의 목록입니다. 원천이 번호를 앞 6자리만 개방하므로 같은 앞자리의 다른 사업장이 섞일 수 있고, 같은 사업장이 자료생성년월마다 한 행씩 있을 수 있습니다. 후보 행에는 가입자 수와 고지금액 같은 상세 칸이 없어 null 입니다.
upstream.candidate_countnumbercandidates 에 담긴 행의 수입니다.
upstream.matchedarray상호가 정확히 일치해 상세까지 받은 사업장 행의 목록입니다. 사업장마다 가장 최근 달의 행 하나이고 가입자 수, 당월 고지금액, 등록일, 탈퇴일, 업종이 함께 옵니다. 상세는 등록 중이고 자료가 최근인 사업장부터 상한까지만 받습니다. 안쪽 칸은 원천이 정하므로 이 문서가 칸 하나하나를 보장하지 않습니다.
upstream.exact_countnumber상호가 정확히 일치한 사업장의 수입니다. 같은 사업장의 월별 행은 하나로 셉니다.
upstream.exact_row_countnumber상호가 정확히 일치한 후보 행의 수입니다. 월별 행을 그대로 세므로 exact_count 이상입니다.
upstream.matched_truncatedboolean상호가 일치한 사업장이 상세를 받는 상한보다 많아 일부만 matched 에 담았으면 true 입니다. 나머지는 candidates 에 상호, 사업장 형태, 가입 상태, 자료생성년월로만 있습니다.
upstream.currentobject | nullmatched 가운데 지금 기준으로 고른 행 하나입니다. 등록 상태인 행이 있으면 그중 자료생성년월이 가장 늦은 행이고, 없으면 matched 중 가장 늦은 행입니다. matched 가 비어 있으면 null 입니다.
upstream.total_countnumber | null조건에 맞는 전체 행 수입니다. 원천이 알려 준 값이라 이번 쪽에 담긴 행 수보다 클 수 있고, 알려 주지 않으면 null 입니다.
upstream.pageobject요청한 쪽 정보입니다.
upstream.page.pageNonumber요청한 쪽 번호입니다. 요청한 pageNo 와 같습니다.
upstream.page.numOfRowsnumber한 쪽에 요청한 행 수입니다. 요청한 numOfRows 와 같습니다.
upstream.coverage_notestring이 조회의 범위와 한계를 알리는 안내문입니다. 번호를 앞 6자리만 쓰므로 후보가 섞일 수 있다는 점, 상호가 일치한 사업장만 가입자 수를 돌려준다는 점, 가입자 수 기준(법인 3인 이상, 개인 10인 이상)으로 개방되어 비어 있어도 가입하지 않았다는 확인이 아니라는 점을 적습니다.
upstream.match_notestring이번 조회의 매칭 결과를 알리는 안내문입니다. 상호가 없거나 일치하는 사업장이 없을 때 무엇을 다시 해야 하는지, 일부만 상세를 받았을 때 나머지가 어디 있는지를 적습니다.
json
{
    "job_id": "job_01JC8YH8R0E1ABCDEFGHJKMNPQ",
    "status": "QUEUED",
    "env_scope": "real_test",
    "provider": "opendata",
    "action": "opendata.nps.workplace",
    "submitted_at": "2026-05-27T12:34:56+09:00"
}
순번오류 코드발생 조건
POLICY_QUOTA_EXCEEDED공공데이터 조회의 하루 한도를 모두 쓰면 작업이 이 오류로 끝납니다. error.message 는 「오늘 이 조직의 공공데이터 조회 한도를 모두 썼습니다. 한국시간 자정에 다시 열립니다. 한도 상향이 필요하면 서비스문의로 알려 주세요.」 꼴이고, 한도의 범위에 따라 「이 조직의」 대신 「무료 요금제 몫의」 나 「서비스 전체」 가 들어갑니다. 자정이 지난 뒤에 다시 요청합니다.
PROVIDER_UPSTREAM_ERROR공공데이터 제공처가 오류로 답하면 작업이 이 오류로 끝나고, error.message 는 응답 상태로 고릅니다. 429 이면 「요청이 잠시 제한되었습니다. 잠시 후 다시 시도해 주세요.」, 403 이면 「요청하신 자료를 조회할 권한이 없습니다. 연동한 계정에 그 권한이 있는지 확인해 주세요.」, 500번대이면 「일시적인 오류로 요청을 마치지 못했습니다. 잠시 후 다시 시도해 주세요.」, 그 밖의 400번대이면 「요청을 처리할 수 없습니다. 입력한 값을 다시 확인해 주세요.」 입니다. 응답은 받았는데 읽지 못했거나 상태를 알 수 없으면 「기관에서 받은 응답을 처리하지 못했습니다. 잠시 후 다시 시도해 주시고, 계속되면 서비스문의로 알려 주세요.」 가 오고, 상태가 400번대도 500번대도 아니면 「서버 내부 오류로 작업을 마치지 못했습니다. 잠시 후 다시 시도해 주세요.」 가 옵니다.
VALIDATION_INVALID_FIELD요청 값이 맞지 않으면 작업이 이 오류로 끝나고, 요청을 고쳐 다시 보냅니다. 값이 빠지면 error.message 는 「요청에 필요한 값이 빠졌습니다. 빠진 값: 칸 이름. 그 값을 넣어 다시 요청해 주세요.」 꼴이고, 값의 형식이 틀리면 「요청 값이 올바르지 않습니다. 확인할 값: 칸 이름. 값을 고쳐 다시 요청해 주세요.」 꼴입니다(칸 이름이 다섯을 넘으면 앞 다섯과 「외 N개」 를 적습니다). 사업자등록번호 칸이면 「사업자등록번호는 숫자 열 자리로 보내 주세요.」 가 옵니다. 지원하지 않는 작업을 부르면 「지원하지 않는 작업입니다.」 입니다.
INTERNAL_ERROR우리 쪽 설정이나 처리 결함으로 끝나면 이 오류가 나가고 error.message 는 「서버 내부 오류로 작업을 마치지 못했습니다. 잠시 후 다시 시도해 주세요.」 입니다. 고객이 고칠 값이 없으므로 잠시 뒤 다시 요청하고, 계속되면 서비스문의로 알려 주세요.