개발자 문서
개발자 문서

기업 종합 프로필 (MCP 도구)

사업자등록번호 하나로 상태, 위험, 고용, 재무, 사업장 다섯 축의 공공데이터 열한 조회를 한 번의 MCP 호출로 묶어 받는 도구의 준비, 요청, 응답, 오류 안내입니다.

이 도구가 하는 일

사업자등록번호 하나로 공공데이터 열한 조회를 한 번의 호출로 실행해, 상태, 위험, 고용, 재무, 사업장 다섯 축으로 모아 돌려주는 MCP 도구입니다.

  • 상태 축은 사업자 상태와 진위확인, 위험 축은 공공조달 제재, 건설업 행정처분, 환경 제재입니다.
  • 고용 축은 고용보험과 산재보험 가입, 국민연금 가입이고, 재무 축은 기업개요와 재무 요약, 사업장 축은 사업장 건물과 건물 실거래입니다.
  • 사업자 상태 조회가 먼저 끝나기를 기다린 뒤 나머지 조회를 함께 실행합니다.
  • 모두 XBOSS 의 플랫폼 키로 돌아 고객의 기관 계정을 연동할 필요가 없습니다.

기업 리스크 브리프와 다른 점은, 조회가 더 많고 축으로 묶여 돌아온다는 것과, 기본 호출에서 사업자 상태 조회만 필수라는 것입니다.

도구 이름company_info_pack__profile_v1__generate
호출 방식tools/call (JSON-RPC 2.0)
엔드포인트POST https://api.xdata.kr/mcp
인증Authorization: Basic
환경 헤더X-MCP-Env-Scope (선택)
최대 대기조회 하나 60초, 호출 전체 90초

이 도구는 MCP 로 부를 수 있고, 주소, 인증, 환경 헤더는 MCP 연동 개요와 같습니다.

열한 조회(leg)

축leg원자 액션따로 부르는 MCP 도구개발자 문서
상태사업자 상태opendata.nts.statusopendata__nts__status조회 문서
상태사업자 진위확인opendata.nts.validateopendata__nts__validate조회 문서
위험공공조달 제재opendata.g2b.sanctionopendata__g2b__sanction조회 문서
위험건설업 행정처분opendata.kiscon.sanctionopendata__kiscon__sanction조회 문서
위험환경 제재opendata.env.waste_sanctionopendata__env__waste_sanction조회 문서
재무기업개요opendata.fsc.corp_outlineopendata__fsc__corp_outline조회 문서
고용고용보험 산재보험 가입opendata.comwel.workplaceopendata__comwel__workplace조회 문서
고용국민연금 가입opendata.nps.workplaceopendata__nps__workplace조회 문서
재무재무 요약opendata.fsc.financialsopendata__fsc__financials조회 문서
사업장사업장 건물opendata.bld.registeropendata__bld__register조회 문서
사업장사업장 건물 실거래opendata.nrg.tradesopendata__nrg__trades조회 문서

「따로 부르는 MCP 도구」는 같은 조회를 이 팩 없이 단독으로 부르고 싶을 때 쓰는 이름이고, 인자와 응답 모양은 이 팩과 다를 수 있습니다.

필수 조회와 선택 조회

기본 호출에서 필수인 조회는 사업자 상태 하나이고, 나머지 열 조회는 선택입니다. 선택 조회는 조회된 만큼 응답에 담기고, 빠진 조회는 이유와 함께 알려 줍니다.

  • 필수 조회가 하나라도 성공하지 못하면 partial 이 true 입니다.
  • 선택 조회가 빠지거나 실패해도 partial 은 false 로 오고, 대신 warnings 에 한국어 안내가 실리고 coverage.legs[] 에 그 조회의 결과가 분류됩니다.
  • 열한 조회 가운데 원천 자료가 아직 준비되지 않은 것이 있으면 그 조회는 실패로 오고, 선택 조회라 위와 같이 warnings 로 알려 줍니다.
  • axes 에 축 이름을 넣으면 그 축의 조회가 필수가 됩니다.
  • 사업자 진위확인은 start_dt 와 p_nm 을 함께 보낼 때만 포함됩니다.

부르기 전에 준비할 것

  1. MCP 서버를 연결합니다

    MCP 연동 개요의 순서대로 AI 앱이나 MCP 클라이언트에 XBOSS MCP 서버를 연결합니다.

요청

도구 이름과 arguments 를 담아 tools/call 을 보냅니다. 필수 칸은 bizno 하나뿐입니다.

  • bizno 는 열한 조회 모두의 기준이니 10자리 숫자인지 먼저 확인하고 보내세요.
  • axes 는 필수로 받을 축을 고릅니다.
  • start_dt, p_nm 은 사업자 진위확인이 씁니다.
  • sDate, eDate, corp_name 은 건설업 행정처분 조회가 씁니다.
  • address, endYm 은 사업장 건물과 건물 실거래 조회가 씁니다.
필드타입필수설명예시
biznostring필수조회할 사업자등록번호입니다(10자리, 하이픈 없이). 열한 조회 모두 이 번호를 기준으로 합니다.1248100998
axesarray선택필수로 받을 축의 목록입니다. 값은 status(상태), risk(위험), employment(고용), finance(재무), premises(사업장)입니다. 고른 축의 조회는 필수가 되어, 하나라도 성공하지 못하면 partial 이 true 입니다. 비우면 사업자 상태 조회만 필수이고 나머지는 조회된 만큼 담깁니다.—
start_dtstring선택사업자 진위확인에 쓰는 개업일입니다(YYYYMMDD). p_nm 과 함께 보낼 때만 진위확인이 포함됩니다.20200101
p_nmstring선택사업자 진위확인에 쓰는 대표자 이름입니다. 사업자등록증의 대표자명과 같아야 하고, start_dt 와 함께 보낼 때만 진위확인이 포함됩니다.홍길동
sDatestring선택건설업 행정처분 조회 기간의 시작일입니다(YYYYMMDD). 종료일과 함께 비우면 종료일 기준 1년 전부터 봅니다.—
eDatestring선택건설업 행정처분 조회 기간의 종료일입니다(YYYYMMDD). 시작일과 함께 비우면 오늘(한국 시각)까지 봅니다.—
corp_namestring선택건설업 행정처분 조회에서 이름을 맞춰 보는 선택 항목입니다(상호명). 생략할 수 있습니다.—
addressstring선택사업장 주소입니다(선택, 한글). 비우면 공개 자료의 소재지로 찾습니다. 찾지 못해 사업장 축이 비면 이 칸에 주소를 적어 다시 보내세요.—
endYmstring선택사업장 건물 실거래 조회의 마지막 달입니다(YYYYMM, 선택). 비우면 이번 달(한국 시각)부터 거슬러 올라간 최근 12개월을 봅니다.—
output_formatsarray선택이 결과를 PDF 파일로도 받으려면 적습니다. 예: ["pdf"]. 파일은 artifacts 에 함께 오고, 빼면 데이터만 옵니다.—
API_KEY-받지 않음account_link_id 의 다른 철자입니다. 서버가 같은 칸으로 보고 똑같이 처리합니다.—
accountLinkId-받지 않음account_link_id 의 다른 철자입니다. 서버가 같은 칸으로 보고 똑같이 처리합니다.—
account_link_id-받지 않음받지 않는 칸입니다. 보내도 무시됩니다. 조각 열하나가 모두 플랫폼 키로 도는 공공 조회라 고객의 기관 연동이 필요 없습니다.—
api_key-받지 않음account_link_id 의 다른 철자입니다. 서버가 같은 칸으로 보고 똑같이 처리합니다.—
idempotency_keystring선택이 실행의 멱등 키입니다(비어 있지 않은 문자열, 앞뒤 공백은 지우고 128자까지 씁니다). 같은 키와 같은 조회 조건으로 다시 부르면 새 작업을 만들지 않고 이전 작업을 그대로 돌려받아 같은 결과가 옵니다. 같은 키로 조회 조건을 바꾸면 조회를 하나도 시작하지 않고 호출이 오류 번호 -32602(error_code IDEMPOTENCY_KEY_CONFLICT)로 끝나니, 같은 요청을 다시 보내는 것이면 처음 보낸 인자 그대로 보내고 새 요청이면 새 키를 쓰세요. 넣지 않으면 서버가 호출마다 새 키를 만들어 매번 새 작업으로 처리합니다.profile-2026-11
bash
# 기업 종합 프로필 호출
# echo -n "<client_id>:<client_secret>" | base64
export MCP_URL="https://api.xdata.kr/mcp"
export MCP_AUTH_B64="<base64_결과_붙여넣기>"
curl -sS -X POST "$MCP_URL" \
  -H "Authorization: Basic $MCP_AUTH_B64" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "company_info_pack__profile_v1__generate",
      "arguments": {
        "bizno": "1248100998",
        "start_dt": "20200101",
        "p_nm": "홍길동",
        "idempotency_key": "profile-2026-11"
      }
    }
  }'

응답 읽기

호출이 성공하면 응답 본문이 result.content[0].text 에 JSON 문자열로 담겨 옵니다. JSON.parse 같은 함수로 풀어 씁니다.

사용 토큰을 세는 환경(데모, 그리고 하루 한도가 정해진 요금제의 정식 환경)에서는 남은 사용 토큰이 두 번째 content 블록과 _meta 에 함께 실립니다(MCP 연동 개요의 「응답에 실리는 _meta」).

필드타입있음설명
pack_run_idstring항상이 실행의 팩 실행 아이디입니다. 링크가 만료되면 MCP 도구 xdata__job__result 에 이 값을 pack_run_id 로 보내 같은 결과를 다시 읽습니다(새 조회를 만들지 않고 사용 토큰도 쓰지 않습니다).
compositeboolean항상항상 true 입니다. 일반 도구 결과와 이 칸으로 구분합니다.
tool_namestring항상호출한 MCP 도구 이름입니다.
providerstring항상팩의 provider 이름입니다.
actionstring항상팩의 action 이름입니다.
idempotency_keystring항상이 실행의 멱등 키입니다. arguments 에 idempotency_key 를 넣었으면 그 값(앞뒤 공백을 지우고 128자까지), 넣지 않았으면 서버가 만든 값입니다.
partialboolean항상보고가 완전하지 않으면 true 입니다. 필수 조회 중 하나라도 성공으로 끝나지 않았거나(일부만 모은 경우 포함) 계산을 하지 못했을 때입니다. 필수가 아닌 조회의 문제는 partial 이 아니라 warnings 로 알립니다. true 여도 받은 자료는 그대로 쓸 수 있습니다 - 무엇이 비었는지는 legs 와 coverage 와 computed 가 알려 줍니다.
legsarray항상조각 열하나(사업자 상태, 사업자 진위확인, 공공조달 제재, 건설업 행정처분, 환경 제재, 기업개요, 고용보험 산재보험 가입, 국민연금 가입, 재무 요약, 사업장 건물, 사업장 건물 실거래)의 원본 결과입니다. 정의 순서로 옵니다.
legs[].leg_indexnumber항상leg 의 순번입니다(0 부터, 정의 순서).
legs[].providerstring항상이 leg 이 부른 기관입니다.
legs[].actionstring항상이 leg 이 실행한 원자 액션입니다.
legs[].label_kostring항상이 leg 을 화면에 보일 한국어 이름입니다.
legs[].statusstring항상조각의 결과 상태입니다. SUCCEEDED, FAILED, SKIPPED 중 하나입니다. SKIPPED 는 사업자 진위확인 조각이 필수 바깥 인자(start_dt, p_nm)를 못 받았을 때 나옵니다.
legs[].job_idstring | null항상이 leg 이 실행한 개별 작업의 아이디입니다. 제출하지 못한 leg 은 null 입니다.
legs[].resultobject | null항상성공한 조각의 결과 본문입니다 - 그 원자 액션(opendata)이 돌려주는 값만 담고, 파일은 legs[].artifacts 에 따로 옵니다. 실패했거나 건너뛰었으면 null 입니다.
legs[].artifactsarray | null항상성공한 leg 의 작업이 낸 파일 목록입니다. 파일을 내지 않았으면 빈 목록이고, 실패했거나 건너뛴 leg 은 null 입니다. 파일은 legs[].result 와 섞이지 않고 이 칸에만 있습니다.
legs[].errorobject | null항상실패한 leg 의 오류입니다. 성공했으면 null 입니다.
legs[].error.codenumber조건부오류 번호입니다(JSON-RPC 코드).
legs[].error.messagestring조건부이 leg 의 오류 문장입니다. 프로그램의 분기에는 code 와 data.error_code 를 쓰고, 문장은 사람이 읽는 용도로만 쓰세요.
legs[].error.dataobject | null조건부오류 종류별 부가 정보입니다. 보통 error_code 가 들어 있고 종류에 따라 다른 칸이 더해집니다. 부가 정보가 없는 오류는 이 칸이 없거나 null 입니다. 시간 초과일 때의 칸은 이 페이지의 시간 초과 절 표에 있습니다.
succeeded_countnumber항상성공한 leg 수입니다.
failed_countnumber항상성공하지 못한 leg 수입니다.
warningsarray항상필수가 아닌 조회가 빠졌거나 불완전해서 알려야 할 것이 있을 때 그 사실을 알리는 한국어 안내 문장의 목록입니다. 알릴 것이 없으면 빈 목록입니다. 사람이 읽는 문장이니 프로그램의 분기에는 coverage 를 쓰세요.
coverageobject항상이 보고가 어떤 조회를 필수로 보고 partial 을 가렸는지 알려 줍니다. 조회마다 역할(필수 또는 선택)과 결과 분류가 있습니다.
coverage.required_basisstring항상필수 조회를 정한 기준입니다. declared(도구가 필수로 정해 둔 조회), requested(요청이 고른 조회), linked(연동이 확인된 조회 전부).
coverage.legsarray항상조회마다 한 줄입니다. legs 와 같은 순서입니다.
coverage.legs[].leg_indexnumber항상legs[].leg_index 와 같은 조회의 순번입니다.
coverage.legs[].providerstring항상그 조회가 부른 기관입니다.
coverage.legs[].actionstring항상그 조회가 실행한 원자 액션입니다.
coverage.legs[].label_kostring항상그 조회를 화면에 보일 한국어 이름입니다.
coverage.legs[].rolestring항상이 보고에서 그 조회가 필수(required)인지 선택(optional)인지입니다. 필수 조회가 하나라도 성공으로 끝나지 않으면 partial 이 true 입니다.
coverage.legs[].outcomestring항상그 조회의 결과 분류입니다. succeeded(성공했고 완전한 것), partial_collection(성공했지만 일부만 모은 것), not_linked(연동이 되어 있지 않아 실패한 것), unavailable(서버 사정으로 제출하지 않고 내린 것), failed(그 밖의 이유로 성공하지 못한 것).
computed_errorobject | null항상계산을 하지 못했을 때만 값이 있고(computed 는 null), 그 밖에는 null 입니다.
computed_error.reasonstring조건부계산하지 못한 이유입니다. 값마다 뜻과 결과(보고가 partial 로 오는지, 오류로 끝나는지)는 「시간 초과와 계산 실패」 절의 표에 있습니다.
computed_error.messagestring조건부이유를 설명하는 한국어 안내 문장입니다. 사람이 읽는 문장이니 프로그램의 분기에는 reason 을 쓰세요.
artifactsarray항상이 실행이 만든 파일 목록입니다. arguments 에 output_formats 로 형식을 청했을 때만 항목이 생기고, 청하지 않았으면 빈 목록입니다. 항목마다 download_url, name, size_bytes, sha256, expires_at 이 있습니다. 칸의 뜻과 내려받기 주소의 유효 시간은 작업 처리 흐름의 결과 조회(result.artifacts)와 같습니다. 링크가 만료되면 pack_run_id 로 xdata__job__result 를 다시 부릅니다.

computed 읽기

computed 는 열한 조회의 결과를 사업자 하나 기준으로 간추린 칸입니다. 읽는 곳이 축마다 조금 다릅니다.

  • 상태 축과 위험 축은 computed.flags 의 키로 읽습니다. 축의 flag_keys 가 어느 키를 보면 되는지 알려 줍니다.
  • 고용, 재무, 사업장 축은 축의 rows 로 읽습니다. rows 는 [이름, 값] 쌍의 목록이고 이름은 고객이 읽는 한국어입니다.
  • 축마다 state_ko 에 그 축의 판정 낱말이, notes_ko 에 읽을 때 알아야 할 안내 문장이 있습니다.
필드타입있음설명
computedobject | null항상조각 열하나를 사업자 하나 기준으로 요약한 칸입니다 - 상태, 위험 두 축은 flags 로, 고용, 재무, 사업장 세 축은 axes 의 rows 로 읽습니다. 계산을 하지 못했으면 null 이고 이유는 computed_error 에 있습니다.
computed.biznostring조건부요청한 사업자등록번호를 그대로 돌려줍니다.
computed.as_ofstring조건부이 요약을 만든 시각입니다(UTC).
computed.sDatestring조건부건설업 행정처분 조회 시작일입니다. 보내지 않았으면 실제로 본 기간(종료일 기준 1년 전)의 시작일입니다.
computed.eDatestring조건부건설업 행정처분 조회 종료일입니다. 보내지 않았으면 실제로 본 기간의 종료일(오늘, 한국 시각)입니다.
computed.legsarray조건부조각 열하나의 결과를 계산이 다시 간추린 칸입니다(leg_index, label_ko, provider, action, status, job_id, 기관 응답을 그대로 싣는 조회는 upstream_keys, 결과 맨 위에 matches 가 있는 조회는 match_count, 실패하거나 건너뛴 조각은 error).
computed.legs[].leg_indexnumber조건부봉투의 legs 와 같은 순번입니다.
computed.legs[].providerstring조건부이 leg 이 부른 기관입니다(opendata).
computed.legs[].actionstring조건부이 leg 이 실행한 원자 액션입니다.
computed.legs[].statusstring조건부이 leg 의 상태입니다. SUCCEEDED, FAILED, SKIPPED 중 하나입니다.
computed.legs[].job_idstring | null조건부이 leg 이 실행한 개별 작업의 아이디입니다. 제출하지 못했으면(SKIPPED) null 입니다.
computed.legs[].upstream_keysarray조건부성공한 leg 의 결과에 upstream 객체가 있으면 그 객체의 키 이름을 정렬한 목록입니다. 사업자상태, 진위확인, 나라장터제재, 건설행정처분 조회가 기관 응답을 result.upstream 에 그대로 싣습니다.
computed.legs[].label_kostring조건부조각의 고객 이름입니다(예: 사업자 상태, 재무 요약). 봉투 위쪽의 legs[].label_ko 와 같습니다.
computed.legs[].match_countnumber조건부성공한 leg 의 결과 맨 위에 matches 배열이 있을 때만 있고 그 길이입니다 - 폐기물행정처분 조회가 그렇습니다. 건설행정처분의 matches 는 result.upstream 안에 있어 여기에는 없고 computed.flags.kiscon_sanction.match_count 에서 읽습니다.
computed.legs[].errorobject조건부실패하거나 건너뛴 leg 의 오류입니다(code, message, data).
computed.legs[].error.codenumber조건부오류 번호입니다.
computed.legs[].error.messagestring조건부이 leg 의 오류 문장입니다. 프로그램의 분기에는 code 와 data 안의 error_code 를 쓰고, 문장은 사람이 읽는 용도로만 쓰세요.
computed.legs[].error.dataobject조건부오류 종류별 부가 정보입니다. 봉투 위쪽의 legs[].error.data 와 같은 값입니다(계산이 leg 오류를 그대로 옮깁니다) - 그 칸의 설명을 따릅니다.
computed.flagsobject조건부다섯 조회 각각을 한 낱말로 요약한 칸입니다 - 사업자상태, 진위확인, 나라장터제재, 건설행정처분, 폐기물행정처분 다섯 키가 늘 있습니다.
computed.flags.nts_statusobject조건부사업자상태 조회의 요약입니다(status, claim, 확인한 값이 있으면 observed_value_ko).
computed.flags.nts_status.statusstring조건부사업자상태 조회 leg 의 상태입니다 - SUCCEEDED 또는 FAILED 입니다.
computed.flags.nts_status.claimstring조건부결과를 어떻게 읽었는지입니다. 이 조회는 기관 응답을 result.upstream 에 그대로 싣고 그 응답에 matches 목록이 없어서, 성공하면 늘 payload_without_matches_list 입니다(개수를 세지 못했다는 뜻이고 조회가 잘못됐다는 뜻이 아닙니다 - 기관 응답은 legs[].result.upstream 에서 읽습니다). 성공하지 못했으면 unavailable 입니다.
computed.flags.nts_status.observed_value_kostring조건부사업자상태 조회에서 확인한 사업자 상태를 한국어로 적은 칸입니다 - 계속사업자, 휴업자, 폐업자 중 하나입니다. 조회가 성공했고 기관 응답의 status_code 가 OK 이며, 기관 응답에서 요청한 사업자등록번호의 행이 정확히 하나이고, 그 행의 상태 코드와 상태 이름이 서로 맞을 때만 있습니다. 하나라도 맞지 않으면 이 칸이 없습니다 - 예를 들어 등록되지 않은 사업자등록번호는 기관이 상태 코드와 상태 이름을 비워 돌려주므로 이 칸이 없습니다. 이 칸이 없으면 값을 확인하지 못한 것이니 기관 응답을 legs[].result.upstream 에서 직접 읽습니다.
computed.flags.nts_validateobject조건부진위확인 조회의 요약입니다(status, claim, 확인한 값이 있으면 observed_value_ko). 그 leg 이 SKIPPED 면 status 가 SKIPPED 이고 claim 은 unavailable 입니다.
computed.flags.nts_validate.statusstring조건부진위확인 조회 leg 의 상태입니다 - SUCCEEDED, FAILED, SKIPPED 중 하나입니다. 필수 바깥 인자(bizno, start_dt, p_nm)가 비면 SKIPPED 입니다.
computed.flags.nts_validate.claimstring조건부결과를 어떻게 읽었는지입니다. 사업자상태 조회와 같이 성공하면 늘 payload_without_matches_list 이고 기관 응답은 legs[].result.upstream 에서 읽습니다. 성공하지 못했거나 건너뛰었으면 unavailable 입니다.
computed.flags.nts_validate.observed_value_kostring조건부진위확인 조회에서 확인한 결과를 한국어로 적은 칸입니다 - 「입력한 사업자등록번호, 개업일, 대표자명 기준으로 확인됨」 또는 「입력한 사업자등록번호, 개업일, 대표자명으로 진위를 확인할 수 없음」 둘 중 하나입니다. 조회가 성공했고 기관 응답의 status_code 가 OK 이며, 기관 응답에서 요청한 사업자등록번호의 행이 정확히 하나이고, 그 행의 진위 결과 코드(valid)가 01 이나 02 이며, 그 행이 되돌려 준 요청 값(사업자등록번호, 개업일, 대표자명)이 보낸 값과 같을 때만 있습니다. 보낸 값 기준의 결과이고 사업자를 허위로 판정하거나 문제가 없다고 보증하는 말이 아닙니다.
computed.flags.g2b_sanctionobject조건부나라장터제재 조회의 요약입니다(status, claim, 확인한 값이 있으면 observed_value_ko).
computed.flags.g2b_sanction.statusstring조건부나라장터제재 조회 leg 의 상태입니다 - SUCCEEDED 또는 FAILED 입니다(이 leg 은 SKIPPED 되지 않습니다 - 바깥 인자 리셰이프가 없습니다).
computed.flags.g2b_sanction.claimstring조건부결과를 어떻게 읽었는지입니다. 이 조회도 기관 응답을 result.upstream 에 그대로 싣고 그 응답에 matches 목록이 없어서, 성공하면 늘 payload_without_matches_list 입니다. 기관 응답은 legs[].result.upstream 에서 읽습니다. 성공하지 못했으면 unavailable 입니다.
computed.flags.g2b_sanction.observed_value_kostring조건부나라장터제재 조회에서 확인한 기록 수를 한국어로 적은 칸입니다 - 「이번 사업자등록번호 조회에서 확인된 기록 0건」 하나뿐입니다. 기관 응답이 정상(resultCode 가 00)이고 전체 건수가 0이며 목록이 없거나 비어 있을 때만 있습니다. 기록이 있거나 응답이 정상이 아니거나 건수를 읽지 못했으면 이 칸이 없습니다. 제재 이력이 없다는 단정이 아니라 이번 조회에서 확인된 기록이 0건이라는 뜻입니다.
computed.flags.kiscon_sanctionobject조건부건설행정처분 조회의 요약입니다(status, claim, 성공했으면 match_count 도).
computed.flags.kiscon_sanction.statusstring조건부건설행정처분 조회 leg 의 상태입니다 - SUCCEEDED 또는 FAILED 입니다.
computed.flags.kiscon_sanction.match_countnumber조건부claim 이 matches_reported 일 때만 있습니다 - 그 조회의 matches 배열 길이입니다.
computed.flags.kiscon_sanction.claimstring조건부결과를 어떻게 읽었는지입니다. 성공하면 matches_reported 입니다 - result.upstream 안의 matches 목록을 읽었고 match_count 가 그 길이입니다. 성공하지 못했으면 unavailable 입니다.
computed.flags.waste_sanctionobject조건부폐기물행정처분 조회의 요약입니다(status, claim, 성공했으면 match_count 도).
computed.flags.waste_sanction.statusstring조건부폐기물행정처분 조회 leg 의 상태입니다 - SUCCEEDED 또는 FAILED 입니다.
computed.flags.waste_sanction.match_countnumber조건부claim 이 matches_reported 일 때만 있습니다 - 그 조회의 matches 배열 길이입니다.
computed.flags.waste_sanction.claimstring조건부결과를 어떻게 읽었는지입니다. 성공하면 matches_reported 입니다 - 결과 맨 위의 matches 목록을 읽었고 match_count 가 그 길이입니다. 성공하지 못했으면 unavailable 입니다.
computed.coverage_notesarray조건부조회 결과를 읽을 때 반드시 알아야 하는 한국어 안내 문장의 목록입니다. 빈 결과로 제재 이력이 없다고 단정하면 안 된다는 안내를 포함하고, 요청에 따라 문장이 달라집니다 - 건설업 행정처분 기간을 보내지 않았으면 기본 기간(최근 365일) 안내가 오고, 개업일과 대표자명을 보내지 않았으면 진위확인 문장이 빠집니다. 조회된 기업개요, 고용보험 산재보험, 국민연금, 재무 요약, 사업장 건물, 실거래 조각은 그 자료의 범위를 알리는 문장을 하나씩 더합니다.
computed.axesobject조건부축 다섯(status, risk, employment, finance, premises)의 요약 칸입니다. 계산을 하지 못했으면 computed 와 함께 없습니다.
computed.axes.statusobject조건부상태 축의 요약입니다.
computed.axes.status.label_kostring조건부축의 고객 이름입니다 - 「상태」 입니다.
computed.axes.status.state_kostring조건부축의 판정 낱말입니다 - 조회됨, 일부 조회됨, 해당 없음, 지금 못 봄, 준비 중 다섯 가운데 하나입니다. 조회됨은 이 축의 조각이 모두 조회됐다는 뜻이고, 일부 조회됨은 일부만 조회됐거나 실거래가 요청한 달 가운데 일부만 있다는 뜻입니다. 해당 없음은 조회는 됐으나 법인이 아니라서 보여 줄 자료가 없다는 뜻이고, 지금 못 봄은 조회된 조각이 하나도 없다는 뜻입니다. 준비 중은 조회된 조각이 없고 그 가운데 원천 자료의 연결이 아직 열리지 않은 조각이 있다는 뜻입니다.
computed.axes.status.flag_keysarray조건부이 축을 요약하는 computed.flags 의 키 이름 목록입니다 - 값은 computed.flags 에서 읽습니다. 상태 축은 nts_status 와 nts_validate, 위험 축은 g2b_sanction, kiscon_sanction, waste_sanction 입니다.
computed.axes.status.notes_koarray조건부이 축을 읽을 때 알아야 할 한국어 안내 문장의 목록입니다. 조회하지 못한 조각의 사유와 다음에 할 일, 자료가 가리키는 범위의 한계를 담습니다. 안내할 것이 없으면 빈 목록입니다.
computed.axes.riskobject조건부위험 축의 요약입니다.
computed.axes.risk.label_kostring조건부축의 고객 이름입니다 - 「위험」 입니다.
computed.axes.risk.state_kostring조건부축의 판정 낱말입니다 - 조회됨, 일부 조회됨, 해당 없음, 지금 못 봄, 준비 중 다섯 가운데 하나입니다. 조회됨은 이 축의 조각이 모두 조회됐다는 뜻이고, 일부 조회됨은 일부만 조회됐거나 실거래가 요청한 달 가운데 일부만 있다는 뜻입니다. 해당 없음은 조회는 됐으나 법인이 아니라서 보여 줄 자료가 없다는 뜻이고, 지금 못 봄은 조회된 조각이 하나도 없다는 뜻입니다. 준비 중은 조회된 조각이 없고 그 가운데 원천 자료의 연결이 아직 열리지 않은 조각이 있다는 뜻입니다.
computed.axes.risk.flag_keysarray조건부이 축을 요약하는 computed.flags 의 키 이름 목록입니다 - 값은 computed.flags 에서 읽습니다. 상태 축은 nts_status 와 nts_validate, 위험 축은 g2b_sanction, kiscon_sanction, waste_sanction 입니다.
computed.axes.risk.notes_koarray조건부이 축을 읽을 때 알아야 할 한국어 안내 문장의 목록입니다. 조회하지 못한 조각의 사유와 다음에 할 일, 자료가 가리키는 범위의 한계를 담습니다. 안내할 것이 없으면 빈 목록입니다.
computed.axes.employmentobject조건부고용 축의 요약입니다.
computed.axes.employment.label_kostring조건부축의 고객 이름입니다 - 「고용」 입니다.
computed.axes.employment.state_kostring조건부축의 판정 낱말입니다 - 조회됨, 일부 조회됨, 해당 없음, 지금 못 봄, 준비 중 다섯 가운데 하나입니다. 조회됨은 이 축의 조각이 모두 조회됐다는 뜻이고, 일부 조회됨은 일부만 조회됐거나 실거래가 요청한 달 가운데 일부만 있다는 뜻입니다. 해당 없음은 조회는 됐으나 법인이 아니라서 보여 줄 자료가 없다는 뜻이고, 지금 못 봄은 조회된 조각이 하나도 없다는 뜻입니다. 준비 중은 조회된 조각이 없고 그 가운데 원천 자료의 연결이 아직 열리지 않은 조각이 있다는 뜻입니다.
computed.axes.employment.rowsarray조건부이 축의 값을 [이름, 값] 쌍으로 늘어놓은 목록입니다. 이름은 고객이 읽는 한국어이고, 조회된 조각이 없으면 빈 목록입니다. 값이 없는 칸은 null 로 옵니다.
computed.axes.employment.notes_koarray조건부이 축을 읽을 때 알아야 할 한국어 안내 문장의 목록입니다. 조회하지 못한 조각의 사유와 다음에 할 일, 자료가 가리키는 범위의 한계를 담습니다. 안내할 것이 없으면 빈 목록입니다.
computed.axes.financeobject조건부재무 축의 요약입니다.
computed.axes.finance.label_kostring조건부축의 고객 이름입니다 - 「재무」 입니다.
computed.axes.finance.state_kostring조건부축의 판정 낱말입니다 - 조회됨, 일부 조회됨, 해당 없음, 지금 못 봄, 준비 중 다섯 가운데 하나입니다. 조회됨은 이 축의 조각이 모두 조회됐다는 뜻이고, 일부 조회됨은 일부만 조회됐거나 실거래가 요청한 달 가운데 일부만 있다는 뜻입니다. 해당 없음은 조회는 됐으나 법인이 아니라서 보여 줄 자료가 없다는 뜻이고, 지금 못 봄은 조회된 조각이 하나도 없다는 뜻입니다. 준비 중은 조회된 조각이 없고 그 가운데 원천 자료의 연결이 아직 열리지 않은 조각이 있다는 뜻입니다.
computed.axes.finance.rowsarray조건부이 축의 값을 [이름, 값] 쌍으로 늘어놓은 목록입니다. 이름은 고객이 읽는 한국어이고, 조회된 조각이 없으면 빈 목록입니다. 값이 없는 칸은 null 로 옵니다.
computed.axes.finance.notes_koarray조건부이 축을 읽을 때 알아야 할 한국어 안내 문장의 목록입니다. 조회하지 못한 조각의 사유와 다음에 할 일, 자료가 가리키는 범위의 한계를 담습니다. 안내할 것이 없으면 빈 목록입니다.
computed.axes.premisesobject조건부사업장 축의 요약입니다.
computed.axes.premises.label_kostring조건부축의 고객 이름입니다 - 「사업장」 입니다.
computed.axes.premises.state_kostring조건부축의 판정 낱말입니다 - 조회됨, 일부 조회됨, 해당 없음, 지금 못 봄, 준비 중 다섯 가운데 하나입니다. 조회됨은 이 축의 조각이 모두 조회됐다는 뜻이고, 일부 조회됨은 일부만 조회됐거나 실거래가 요청한 달 가운데 일부만 있다는 뜻입니다. 해당 없음은 조회는 됐으나 법인이 아니라서 보여 줄 자료가 없다는 뜻이고, 지금 못 봄은 조회된 조각이 하나도 없다는 뜻입니다. 준비 중은 조회된 조각이 없고 그 가운데 원천 자료의 연결이 아직 열리지 않은 조각이 있다는 뜻입니다.
computed.axes.premises.rowsarray조건부이 축의 값을 [이름, 값] 쌍으로 늘어놓은 목록입니다. 이름은 고객이 읽는 한국어이고, 조회된 조각이 없으면 빈 목록입니다. 값이 없는 칸은 null 로 옵니다.
computed.axes.premises.notes_koarray조건부이 축을 읽을 때 알아야 할 한국어 안내 문장의 목록입니다. 조회하지 못한 조각의 사유와 다음에 할 일, 자료가 가리키는 범위의 한계를 담습니다. 안내할 것이 없으면 빈 목록입니다.

아래는 열한 조회가 모두 성공했을 때의 응답 본문입니다.

json
{
  "pack_run_id": "prun_01JC8YH8R0E1ABCDEFGHJKMN0P",
  "composite": true,
  "tool_name": "company_info_pack__profile_v1__generate",
  "provider": "company_info_pack",
  "action": "company_info_pack.profile_v1.generate",
  "idempotency_key": "profile-2026-11",
  "partial": false,
  "legs": [
    {
      "leg_index": 0,
      "provider": "opendata",
      "action": "opendata.nts.status",
      "label_ko": "사업자 상태",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000",
      "result": {
        "...": "opendata.nts.status 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 1,
      "provider": "opendata",
      "action": "opendata.nts.validate",
      "label_ko": "사업자 진위확인",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM001",
      "result": {
        "...": "opendata.nts.validate 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 2,
      "provider": "opendata",
      "action": "opendata.g2b.sanction",
      "label_ko": "공공조달 제재",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM002",
      "result": {
        "...": "opendata.g2b.sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 3,
      "provider": "opendata",
      "action": "opendata.kiscon.sanction",
      "label_ko": "건설업 행정처분",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM003",
      "result": {
        "...": "opendata.kiscon.sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 4,
      "provider": "opendata",
      "action": "opendata.env.waste_sanction",
      "label_ko": "환경 제재",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM004",
      "result": {
        "...": "opendata.env.waste_sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 5,
      "provider": "opendata",
      "action": "opendata.fsc.corp_outline",
      "label_ko": "기업개요",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM005",
      "result": {
        "...": "opendata.fsc.corp_outline 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 6,
      "provider": "opendata",
      "action": "opendata.comwel.workplace",
      "label_ko": "고용보험 산재보험 가입",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM006",
      "result": {
        "...": "opendata.comwel.workplace 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 7,
      "provider": "opendata",
      "action": "opendata.nps.workplace",
      "label_ko": "국민연금 가입",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM007",
      "result": {
        "...": "opendata.nps.workplace 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 8,
      "provider": "opendata",
      "action": "opendata.fsc.financials",
      "label_ko": "재무 요약",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM008",
      "result": {
        "...": "opendata.fsc.financials 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 9,
      "provider": "opendata",
      "action": "opendata.bld.register",
      "label_ko": "사업장 건물",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM009",
      "result": {
        "...": "opendata.bld.register 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 10,
      "provider": "opendata",
      "action": "opendata.nrg.trades",
      "label_ko": "사업장 건물 실거래",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM010",
      "result": {
        "...": "opendata.nrg.trades 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    }
  ],
  "succeeded_count": 11,
  "failed_count": 0,
  "warnings": [],
  "coverage": {
    "required_basis": "declared",
    "legs": [
      {
        "leg_index": 0,
        "provider": "opendata",
        "action": "opendata.nts.status",
        "label_ko": "사업자 상태",
        "role": "required",
        "outcome": "succeeded"
      },
      {
        "leg_index": 1,
        "provider": "opendata",
        "action": "opendata.nts.validate",
        "label_ko": "사업자 진위확인",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 2,
        "provider": "opendata",
        "action": "opendata.g2b.sanction",
        "label_ko": "공공조달 제재",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 3,
        "provider": "opendata",
        "action": "opendata.kiscon.sanction",
        "label_ko": "건설업 행정처분",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 4,
        "provider": "opendata",
        "action": "opendata.env.waste_sanction",
        "label_ko": "환경 제재",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 5,
        "provider": "opendata",
        "action": "opendata.fsc.corp_outline",
        "label_ko": "기업개요",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 6,
        "provider": "opendata",
        "action": "opendata.comwel.workplace",
        "label_ko": "고용보험 산재보험 가입",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 7,
        "provider": "opendata",
        "action": "opendata.nps.workplace",
        "label_ko": "국민연금 가입",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 8,
        "provider": "opendata",
        "action": "opendata.fsc.financials",
        "label_ko": "재무 요약",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 9,
        "provider": "opendata",
        "action": "opendata.bld.register",
        "label_ko": "사업장 건물",
        "role": "optional",
        "outcome": "succeeded"
      },
      {
        "leg_index": 10,
        "provider": "opendata",
        "action": "opendata.nrg.trades",
        "label_ko": "사업장 건물 실거래",
        "role": "optional",
        "outcome": "succeeded"
      }
    ]
  },
  "computed": {
    "bizno": "1248100998",
    "as_of": "2026-11-08T00:00:00Z",
    "sDate": "20251108",
    "eDate": "20261108",
    "legs": [
      {
        "leg_index": 0,
        "provider": "opendata",
        "action": "opendata.nts.status",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000",
        "upstream_keys": [
          "data",
          "match_cnt",
          "request_cnt",
          "status_code"
        ],
        "label_ko": "사업자 상태"
      },
      {
        "leg_index": 1,
        "provider": "opendata",
        "action": "opendata.nts.validate",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM001",
        "upstream_keys": [
          "data",
          "request_cnt",
          "status_code",
          "valid_cnt"
        ],
        "label_ko": "사업자 진위확인"
      },
      {
        "leg_index": 2,
        "provider": "opendata",
        "action": "opendata.g2b.sanction",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM002",
        "upstream_keys": [
          "response"
        ],
        "label_ko": "공공조달 제재"
      },
      {
        "leg_index": 3,
        "provider": "opendata",
        "action": "opendata.kiscon.sanction",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM003",
        "upstream_keys": [
          "fallback_candidates",
          "match_mode",
          "matches",
          "scan"
        ],
        "label_ko": "건설업 행정처분"
      },
      {
        "leg_index": 4,
        "provider": "opendata",
        "action": "opendata.env.waste_sanction",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM004",
        "match_count": 0,
        "label_ko": "환경 제재"
      },
      {
        "leg_index": 5,
        "provider": "opendata",
        "action": "opendata.fsc.corp_outline",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM005",
        "upstream_keys": [
          "coverage_note",
          "current",
          "total_count"
        ],
        "label_ko": "기업개요"
      },
      {
        "leg_index": 6,
        "provider": "opendata",
        "action": "opendata.comwel.workplace",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM006",
        "upstream_keys": [
          "coverage_note",
          "summary",
          "total_count",
          "workplaces"
        ],
        "label_ko": "고용보험 산재보험 가입"
      },
      {
        "leg_index": 7,
        "provider": "opendata",
        "action": "opendata.nps.workplace",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM007",
        "upstream_keys": [
          "candidate_count",
          "coverage_note",
          "current",
          "exact_count",
          "match_mode",
          "match_note",
          "matched_truncated"
        ],
        "label_ko": "국민연금 가입"
      },
      {
        "leg_index": 8,
        "provider": "opendata",
        "action": "opendata.fsc.financials",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM008",
        "upstream_keys": [
          "coverage_note",
          "latest",
          "latest_year",
          "statements",
          "years"
        ],
        "label_ko": "재무 요약"
      },
      {
        "leg_index": 9,
        "provider": "opendata",
        "action": "opendata.bld.register",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM009",
        "upstream_keys": [
          "coverage_note",
          "lot",
          "primary",
          "summary"
        ],
        "label_ko": "사업장 건물"
      },
      {
        "leg_index": 10,
        "provider": "opendata",
        "action": "opendata.nrg.trades",
        "status": "SUCCEEDED",
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM010",
        "upstream_keys": [
          "coverage",
          "coverage_note",
          "lot",
          "period",
          "summary",
          "trades"
        ],
        "label_ko": "사업장 건물 실거래"
      }
    ],
    "flags": {
      "nts_status": {
        "status": "SUCCEEDED",
        "claim": "payload_without_matches_list",
        "observed_value_ko": "계속사업자"
      },
      "nts_validate": {
        "status": "SUCCEEDED",
        "claim": "payload_without_matches_list",
        "observed_value_ko": "입력한 사업자등록번호, 개업일, 대표자명 기준으로 확인됨"
      },
      "g2b_sanction": {
        "status": "SUCCEEDED",
        "claim": "payload_without_matches_list",
        "observed_value_ko": "이번 사업자등록번호 조회에서 확인된 기록 0건"
      },
      "kiscon_sanction": {
        "status": "SUCCEEDED",
        "match_count": 0,
        "claim": "matches_reported"
      },
      "waste_sanction": {
        "status": "SUCCEEDED",
        "match_count": 0,
        "claim": "matches_reported"
      }
    },
    "coverage_notes": [
      "조회 결과가 비어 있다고 해서 제재 이력이 없다고 단정하지 마세요. '확인된 제재 없음' 과 '제재가 없음' 은 다릅니다.",
      "건설업 행정처분은 조회 기간을 받지 않아 최근 365일(결과의 sDate 부터 eDate 까지)만 봤습니다. 기간 밖의 이력은 이 결과에 들어 있지 않습니다. 다른 기간은 sDate 와 eDate 를 적어 다시 요청해 주세요.",
      "(... 이하 조회된 자료마다 그 자료의 범위를 알리는 안내 9개가 이어집니다)"
    ],
    "axes": {
      "status": {
        "label_ko": "상태",
        "state_ko": "조회됨",
        "flag_keys": [
          "nts_status",
          "nts_validate"
        ],
        "notes_ko": []
      },
      "risk": {
        "label_ko": "위험",
        "state_ko": "조회됨",
        "flag_keys": [
          "g2b_sanction",
          "kiscon_sanction",
          "waste_sanction"
        ],
        "notes_ko": []
      },
      "employment": {
        "label_ko": "고용",
        "state_ko": "조회됨",
        "rows": [
          [
            "산재보험 가입 여부",
            "가입"
          ],
          [
            "산재보험 가입 사업장 수",
            "1"
          ],
          [
            "산재보험 상시 인원 합계",
            "120"
          ],
          [
            "고용보험 가입 여부",
            "가입"
          ],
          [
            "고용보험 가입 사업장 수",
            "1"
          ],
          [
            "고용보험 상시 인원 합계",
            "120"
          ],
          [
            "국민연금 가입자 수",
            "110"
          ],
          [
            "국민연금 당월 고지금액",
            "35,000,000"
          ],
          [
            "국민연금 적용일",
            "19990401"
          ],
          [
            "국민연금 자료 기준월",
            "202610"
          ]
        ],
        "notes_ko": [
          "상시 인원은 보험 적용 단위별 상시 인원의 합계입니다.",
          "사업자등록번호 앞 여섯 자리와 상호가 일치하는 사업장으로 맞췄습니다."
        ]
      },
      "finance": {
        "label_ko": "재무",
        "state_ko": "조회됨",
        "rows": [
          [
            "상호",
            "예시기업 주식회사"
          ],
          [
            "법인 구분",
            "주식회사"
          ],
          [
            "상장 시장",
            "코스피"
          ],
          [
            "설립일",
            "19690113"
          ],
          [
            "업종",
            "전자부품 제조업"
          ],
          [
            "주요 사업",
            "전자제품 제조"
          ],
          [
            "종업원 수",
            "1,200"
          ],
          [
            "중소기업 여부",
            "N"
          ],
          [
            "최근 사업연도",
            "2025"
          ],
          [
            "연결 매출액",
            "300,000,000,000"
          ],
          [
            "연결 영업이익",
            "30,000,000,000"
          ],
          [
            "연결 당기순이익",
            "25,000,000,000"
          ],
          [
            "연결 총자산",
            "450,000,000,000"
          ],
          [
            "연결 총부채",
            "120,000,000,000"
          ],
          [
            "연결 총자본",
            "330,000,000,000"
          ],
          [
            "연결 통화",
            "KRW"
          ]
        ],
        "notes_ko": []
      },
      "premises": {
        "label_ko": "사업장",
        "state_ko": "조회됨",
        "rows": [
          [
            "대표 건물명",
            "예시타워"
          ],
          [
            "주용도",
            "업무시설"
          ],
          [
            "구조",
            "철근콘크리트구조"
          ],
          [
            "연면적",
            12000.5
          ],
          [
            "대지면적",
            3000
          ],
          [
            "지상 층수",
            20
          ],
          [
            "지하 층수",
            4
          ],
          [
            "사용승인일",
            "20050101"
          ],
          [
            "같은 지번 건물 수",
            "2"
          ],
          [
            "실거래 조회 기간",
            "202511 ~ 202610"
          ],
          [
            "받아 둔 달 수",
            "12 / 12"
          ],
          [
            "실거래 건수",
            "2"
          ],
          [
            "해제 건수",
            "0"
          ],
          [
            "최근 거래 연월",
            "202602"
          ],
          [
            "거래금액 범위(만원)",
            "50,000 ~ 120,000"
          ]
        ],
        "notes_ko": [
          "대표 건물 1동과 같은 지번의 다른 건물 1동입니다."
        ]
      }
    }
  },
  "computed_error": null,
  "artifacts": []
}

축의 판정 낱말(state_ko)

state_ko뜻
조회됨이 축의 조회가 모두 조회됐습니다.
일부 조회됨일부 조회만 조회됐거나, 사업장 건물 실거래가 요청한 달 가운데 일부 달만 있습니다.
해당 없음조회는 됐으나 법인이 아니라서 보여 줄 자료가 없습니다.
지금 못 봄이 축에서 조회된 조회가 하나도 없습니다.
준비 중이 축에서 조회된 조회가 없고, 그 가운데 원천 자료의 연결이 아직 열리지 않은 조회가 있습니다.

조회 결과가 비어 있다고 해서 제재나 처분 이력이 없다고 단정하지 마세요.

고용 축과 재무 축, 사업장 축도 같습니다.

일부 조회가 빠졌을 때

선택 조회가 빠지면 partial 은 false 로 오고, 빠진 조회의 이유는 warnings 와 legs[] 에서 읽습니다.

  • warnings 의 안내 문장은 건너뛴 조회도 「조회에 실패해」 라는 같은 문구로 실립니다.
  • 실패한 조회의 legs[].error 에 오류 번호와 안내가 있고, 안내 문장은 사람이 읽는 말이라 프로그램의 분기에는 쓰지 마세요.
  • 선택 조회는 모두 읽기라 같은 요청을 다시 보내도 됩니다.
json
{
  "...": "봉투의 공통 칸(pack_run_id, tool_name, idempotency_key 등)은 줄였습니다",
  "partial": false,
  "succeeded_count": 9,
  "failed_count": 2,
  "warnings": [
    "사업자 진위확인 조회에 실패해 이번 보고에 포함되지 않았습니다. 잠시 뒤 다시 요청해 주세요.",
    "사업장 건물 실거래 조회에 실패해 이번 보고에 포함되지 않았습니다. 잠시 뒤 다시 요청해 주세요."
  ],
  "legs": [
    {
      "leg_index": 0,
      "provider": "opendata",
      "action": "opendata.nts.status",
      "label_ko": "사업자 상태",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000",
      "result": {
        "...": "opendata.nts.status 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 1,
      "provider": "opendata",
      "action": "opendata.nts.validate",
      "label_ko": "사업자 진위확인",
      "status": "SKIPPED",
      "job_id": null,
      "result": null,
      "artifacts": null,
      "error": {
        "code": -32004,
        "message": "이 작업에 필요한 앞 단계 결과를 쓸 수 없습니다. 앞 단계 조회 결과를 확인한 뒤 다시 시도해 주세요.",
        "data": {
          "error_code": "COMPOSITE_DEPENDENCY_UNAVAILABLE",
          "leg_index": 1,
          "detail": "start_dt is required for nts.validate"
        }
      }
    },
    {
      "leg_index": 2,
      "provider": "opendata",
      "action": "opendata.g2b.sanction",
      "label_ko": "공공조달 제재",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM002",
      "result": {
        "...": "opendata.g2b.sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 3,
      "provider": "opendata",
      "action": "opendata.kiscon.sanction",
      "label_ko": "건설업 행정처분",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM003",
      "result": {
        "...": "opendata.kiscon.sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 4,
      "provider": "opendata",
      "action": "opendata.env.waste_sanction",
      "label_ko": "환경 제재",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM004",
      "result": {
        "...": "opendata.env.waste_sanction 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 5,
      "provider": "opendata",
      "action": "opendata.fsc.corp_outline",
      "label_ko": "기업개요",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM005",
      "result": {
        "...": "opendata.fsc.corp_outline 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 6,
      "provider": "opendata",
      "action": "opendata.comwel.workplace",
      "label_ko": "고용보험 산재보험 가입",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM006",
      "result": {
        "...": "opendata.comwel.workplace 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 7,
      "provider": "opendata",
      "action": "opendata.nps.workplace",
      "label_ko": "국민연금 가입",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM007",
      "result": {
        "...": "opendata.nps.workplace 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 8,
      "provider": "opendata",
      "action": "opendata.fsc.financials",
      "label_ko": "재무 요약",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM008",
      "result": {
        "...": "opendata.fsc.financials 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 9,
      "provider": "opendata",
      "action": "opendata.bld.register",
      "label_ko": "사업장 건물",
      "status": "SUCCEEDED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM009",
      "result": {
        "...": "opendata.bld.register 조회가 돌려주는 값입니다"
      },
      "artifacts": [],
      "error": null
    },
    {
      "leg_index": 10,
      "provider": "opendata",
      "action": "opendata.nrg.trades",
      "label_ko": "사업장 건물 실거래",
      "status": "FAILED",
      "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM010",
      "result": null,
      "artifacts": null,
      "error": {
        "code": -32004,
        "message": "작업이 실패했습니다(오류 PROVIDER_UNAVAILABLE). 조회에 쓰는 자료를 아직 준비하고 있어 지금은 결과를 드릴 수 없습니다. 조회 결과가 없다는 뜻이 아닙니다. 잠시 뒤 다시 시도해 주세요. 같은 안내가 이어지면 문의해 주세요.",
        "data": {
          "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM010",
          "error_code": "PROVIDER_UNAVAILABLE",
          "safe_to_retry": true,
          "provider_error_ref": "opendata.data_not_ready.opendata.nrg.trades"
        }
      }
    }
  ],
  "computed": {
    "axes": {
      "status": {
        "label_ko": "상태",
        "state_ko": "일부 조회됨",
        "flag_keys": [
          "nts_status",
          "nts_validate"
        ],
        "notes_ko": [
          "개업일자(start_dt)와 대표자명(p_nm)을 함께 보내면 사업자 진위확인이 포함됩니다."
        ]
      },
      "premises": {
        "label_ko": "사업장",
        "state_ko": "일부 조회됨",
        "rows": [
          [
            "대표 건물명",
            "예시타워"
          ],
          [
            "주용도",
            "업무시설"
          ],
          [
            "구조",
            "철근콘크리트구조"
          ],
          [
            "연면적",
            12000.5
          ],
          [
            "대지면적",
            3000
          ],
          [
            "지상 층수",
            20
          ],
          [
            "지하 층수",
            4
          ],
          [
            "사용승인일",
            "20050101"
          ],
          [
            "같은 지번 건물 수",
            "2"
          ]
        ],
        "notes_ko": [
          "사업장 건물 실거래는 해당 시군구와 기간의 공개 자료를 아직 받아 두지 않아 이번 보고에 포함되지 않았습니다. 잠시 뒤 다시 요청해 주세요.",
          "대표 건물 1동과 같은 지번의 다른 건물 1동입니다."
        ]
      }
    },
    "...": "위험, 고용, 재무 축은 줄였습니다"
  }
}

자료가 아직 준비되지 않았을 때

사업장 건물 실거래 조회는 우리 쪽에서 미리 모아 둔 자료를 읽습니다.

  • 실패한 조회의 legs[].error.data.provider_error_ref 가 opendata.data_not_ready. 뒤에 조회 이름이 붙은 값으로 옵니다.
  • 안내 문장은 조회에 쓰는 자료를 아직 준비하고 있다는 것과, 조회 결과가 없다는 뜻이 아니라는 것을 알려 줍니다. 사업장에 건물이나 거래가 없다는 확인으로 읽지 마세요.
  • 이 조회는 읽기라 잠시 뒤 같은 요청을 다시 보내도 됩니다. 같은 안내가 이어지면 문의해 주세요.
  • 축 판정은 일부 조회됨 으로 오고 그 축의 notes_ko 에 같은 취지의 안내가 실립니다.

법인이 아닐 때

개인사업자는 기업개요와 재무 요약이 법인만 제공되는 공개 자료라 재무 축이 해당 없음 으로 옵니다.

json
{
  "computed": {
    "axes": {
      "finance": {
        "label_ko": "재무",
        "state_ko": "해당 없음",
        "rows": [],
        "notes_ko": [
          "기업개요와 재무 요약은 법인만 제공되는 공개 자료라 개인사업자는 해당 없음으로 둡니다."
        ]
      }
    }
  }
}

시간 초과와 계산 실패

조회 하나는 제출한 뒤 최대 60초까지 기다리고, 호출 전체는 최대 90초 안에 끝납니다.

  • 60초 안에 끝나지 않은 조회는 그 조회만 시간 초과로 실패하고, 나머지 결과는 그대로 옵니다.
  • 그 조회의 error.code 는 -32003 이고 error.data 에 다음 칸이 옵니다.
  • 열한 조회는 모두 읽기라 다시 불러도 됩니다.
error.data 의 칸뜻
job_id시간 안에 끝나지 않은 작업의 아이디입니다. 작업은 서버에서 계속 돌 수 있습니다.
timeout_seconds이 조회를 기다린 한도(초)입니다. 조회 하나의 최대 대기 시간이고, 호출 전체 마감까지 남은 시간이 그보다 짧으면 남은 시간이라 더 작습니다(소수일 수 있습니다).
safe_to_retry다시 불러도 되는지 알려 줍니다. 열한 조회는 모두 읽기라 true 입니다.
status_url그 작업의 결과를 GET 으로 읽을 수 있는 주소입니다(REST 로 연동한 서비스에서 같은 API 키를 씁니다).
result_tool_call그 작업의 결과를 읽는 MCP 도구 호출입니다(name 과 arguments 를 그대로 부르면 됩니다). 작업을 다시 돌리지 않고 사용 토큰도 쓰지 않으며, 아직 돌고 있으면 잠시 기다렸다가 알려 줍니다.
json
{
  "code": -32003,
  "message": "요청이 60초 안에 끝나지 않았습니다(작업 번호 job_01JC8YH8R0E1ABCDEFGHJKM000). 서버가 바쁠 수 있습니다. 결과는 xdata__job__result 도구에 이 job_id 를 넣어 읽을 수 있습니다(작업을 다시 돌리지 않고 사용 토큰도 쓰지 않습니다). 같은 API 키로 연동한 서비스는 GET https://api.xdata.kr/v1/jobs/job_01JC8YH8R0E1ABCDEFGHJKM000 로도 읽을 수 있습니다. 잠시 뒤 다시 시도하거나, 요청 범위를 줄일 수 있으면 줄이세요.",
  "data": {
    "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000",
    "timeout_seconds": 60,
    "safe_to_retry": true,
    "status_url": "https://api.xdata.kr/v1/jobs/job_01JC8YH8R0E1ABCDEFGHJKM000",
    "result_tool_call": {
      "name": "xdata__job__result",
      "arguments": {
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000"
      }
    }
  }
}

호출 전체 마감(90초)에 조회를 제출하거나 기다리기 시작하기 전이었다면 그 조회의 error.data.error_code 가 COMPOSITE_TIMEOUT 이고 error.data 에 다음 칸이 옵니다.

error.message 는 사람이 읽는 한국어 문장이라 분기에는 error.data.error_code 를 쓰세요.

error.data 의 칸뜻
error_code항상 COMPOSITE_TIMEOUT 입니다. 이 값으로 호출 전체 마감을 가려냅니다.
timeout_seconds호출 전체 대기 한도(초)입니다.
phase마감이 된 단계의 이름입니다(진단용 - 분기에 쓰지 않습니다).
job_id제출한 작업의 아이디입니다. 제출하지 못했으면 이 칸이 없습니다.
result_tool_call그 작업의 결과를 읽는 MCP 도구 호출입니다(name 과 arguments 를 그대로 부르면 됩니다). 작업을 다시 돌리지 않고 사용 토큰도 쓰지 않습니다. job_id 가 있을 때만 옵니다.
submitted그 조회의 작업을 이미 제출했는지 알려 줍니다. true 면 job_id 가 함께 옵니다.
json
{
  "code": -32003,
  "message": "요청이 90초 안에 끝나지 않았습니다. 일부 조회의 종료가 아직 확인되지 않았습니다. 결과는 xdata__job__result 도구에 이 job_id 를 넣어 읽을 수 있습니다(작업을 다시 돌리지 않고 사용 토큰도 쓰지 않습니다). 같은 API 키로 연동한 서비스는 GET https://api.xdata.kr/v1/jobs/job_01JC8YH8R0E1ABCDEFGHJKM000 로도 읽을 수 있습니다. 잠시 뒤 다시 시도해 주세요. 조회 기간이나 범위를 줄일 수 있으면 줄이면 더 빨리 끝납니다.",
  "data": {
    "error_code": "COMPOSITE_TIMEOUT",
    "timeout_seconds": 90,
    "phase": "result polling",
    "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000",
    "result_tool_call": {
      "name": "xdata__job__result",
      "arguments": {
        "job_id": "job_01JC8YH8R0E1ABCDEFGHJKM000"
      }
    },
    "submitted": true
  }
}

성공한 조회가 하나라도 있으면 결과를 합쳐 computed 를 만듭니다.

computed_error.reason결과뜻
deadline_exhausted보고가 오고 partial호출 전체 마감 시간이 다 돼 계산을 건너뛰었습니다. 받은 자료는 legs 에 있고 봉투는 partial 로 옵니다(computed 는 null).
validation_failed오류로 끝남계산 중 값 검증에서 실패했습니다(우리 쪽 결함). 봉투를 주지 않고 오류로 끝나며 받은 leg 결과는 오류의 data 에 실립니다.
builder_raised오류로 끝남계산 중 예외가 났습니다(우리 쪽 결함). 봉투를 주지 않고 오류로 끝나며 받은 leg 결과는 오류의 data 에 실립니다.

같은 요청을 다시 보낼 때

arguments 에 idempotency_key 를 문자열로 넣으면 그 값이 이 실행의 멱등 키가 됩니다. 앞뒤 공백은 지우고 128자까지 씁니다.

같은 키와 같은 조회 조건으로 다시 부르면 새 작업을 만들지 않고 이전 작업을 그대로 돌려받아 같은 결과가 옵니다.

  • 이전 작업이 실패했다면 실패한 결과가 그대로 옵니다.
  • 아직 진행 중이면 그 작업을 이어서 기다립니다.
  • 다시 시도하려면 새 키를 쓰세요.

같은 키로 조회 조건(인자)을 바꿔 부르면 조회를 하나도 시작하지 않고 호출이 JSON-RPC error(번호 -32602)로 끝납니다.

  • 오류의 data.error_code 는 IDEMPOTENCY_KEY_CONFLICT 입니다. 조회별 결과(legs)는 없습니다 - 시작한 조회가 없기 때문입니다.
  • 같은 요청을 다시 보내는 것이면 처음 보낸 인자 그대로 보내고, 새 요청이면 idempotency_key 를 새 값으로 바꾸거나 넣지 마세요(넣지 않으면 서버가 만듭니다).
  • 오류의 safe_to_retry 는 false 입니다. 같은 인자로 다시 불러도 같은 오류가 납니다.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "같은 idempotency_key 로 내용이 다른 요청이 이미 들어왔습니다. 같은 요청을 다시 보내는 것이면 처음 보낸 인자 그대로 보내고, 새 요청이면 idempotency_key 를 새 값으로 바꾸거나 아예 넣지 마세요(넣지 않으면 서버가 만듭니다).",
    "data": {
      "error_code": "IDEMPOTENCY_KEY_CONFLICT",
      "safe_to_retry": false
    }
  }
}

키를 넣지 않으면 서버가 호출마다 새 키를 만들어 매번 새 작업으로 처리합니다. 응답의 idempotency_key 에는 실제로 쓴 키가 실립니다.

사용 토큰

사용 토큰을 세는 환경(데모, 그리고 하루 한도가 정해진 요금제의 정식 환경)에서는 이 도구를 한 번 부를 때 새 작업이 만들어지면 사용 토큰을 씁니다.

  • 새 작업이 만들어지지 않은 호출은 세지 않습니다(제출 전에 모두 막혔거나 같은 멱등 키로 이전 작업을 돌려받은 경우).
  • 남은 사용 토큰은 응답의 remaining 으로 확인합니다.