企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全
做供应商准入、客户尽职调查、授信风控时,需要的信息往往不止「这家公司存不存在」:经营状态是否正常、注册资本与实缴、股东结构与出资明细、历史上改过什么、参保人数有没有异常——这些信息分散在工商公示的不同板块里,逐个去查要调好几个接口、拼好几套字段。
enterprise.detail 把四个维度合并成一次查询:工商照面 33 项 + 股东及认缴 / 实缴出资 + 工商变更记录 + 分年度社保参保,一次 GET 请求全部返回,并且查不到该企业不收费。
接口速览
| 关键事实 | 说明 |
|---|---|
| 接口地址 | https://api.xujian.tech/openapi/enterprise/detail |
| 接口编码 | enterprise.detail |
| 请求方式 | GET(keyword 放 Query String) |
| 鉴权方式 | 请求头 X-API-Key,不做签名、时间戳或加密 |
| 唯一业务参数 | keyword,企业工商登记全称或统一社会信用代码,去空格后 2 ~ 50 个字符 |
| 返回四大块 | basicInfo / partners / changeRecords / socialSecurity |
| 计费方式 | 按次计费,0.52 元/次,先预鉴权、查到企业后再扣费 |
| 不计费场景 | 关键词非法、服务不可用、未查询到该企业 |
| 典型耗时 | 通常 1 ~ 3 秒,建议客户端超时至少 15 秒 |
| 条数限制 | 无 limit、无分页,按上游实际结果完整返回 |
一、哪些业务需要这一步
| 场景 | 具体用法 |
|---|---|
| 供应商准入 | 一次拿到状态、注册资本、股东与参保规模,判断是否为壳公司 |
| 客户尽职调查 | 核对统一社会信用代码与注册地址,配合变更记录看历史沿革 |
| 授信与风控 | 用经营状态、吊销 / 注销信息、变更频率做风险打分 |
| 企业档案补全 | CRM 里只有企业名,批量补全信用代码、法人、经营范围 |
| 股东穿透 | 从 partners 拿到股东名单与持股比例,继续向上穿透 |
| 合同评审 | 签合同前核对企业名称、法人、经营期限是否异常 |
| 招投标资格审核 | 校验经营范围是否覆盖招标内容、状态是否正常 |
| 招商与获客 | 按行业代码 domain 与地区筛选目标企业 |
| 贷后监控 | 定期复查状态与变更记录,发现法人 / 股东变动及时预警 |
| 企业画像标签 | 用 tags(高新企业 / 上市等)与参保人数打标签 |
二、请求参数
2.1 请求头
| 参数名 | 必填 | 说明 |
|---|---|---|
X-API-Key | 是 | 开发者 API Key,缺失或无效直接返回失败 |
2.2 查询参数
| 参数名 | 必填 | 类型 | 示例 | 说明 |
|---|---|---|---|---|
keyword | 是 | String | 91500113MAABRA7D0H | 企业工商登记全称或统一社会信用代码;去首尾空白后 2 ~ 50 个字符 |
2.3 关键词怎么填才查得准
- 优先用统一社会信用代码:18 位,唯一且不会重名,准确率最高。
- 用名称时必须是登记全称。接口不做模糊匹配,传简称大概率查不到。
- 拿不准全称时,先用企业信息模糊查询(
enterprise.query,0.01 元/次)校正全称,再查本接口,比反复猜更省钱。
三、返回字段
3.1 顶层与 data
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 0 成功,非 0 失败(统一为 500) |
msg | String | 成功为 success,失败为具体原因 |
data | Object | 业务数据,失败时为 null |
data 字段:
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
keyword | String | 91500113MAABRA7D0H | 去首尾空白后的查询关键词 |
basicInfo | Object | {…} | 工商照面 33 项 |
partners | Array | […] | 股东及认缴 / 实缴出资明细 |
changeRecords | Array | […] | 工商变更记录 |
socialSecurity | Array | […] | 分年度社保参保信息 |
apiCode | String | enterprise.detail | 接口编码 |
apiName | String | 企业详细信息综合查询 | 接口名称 |
chargeType | String | PER_CALL | 本次计费方式 |
balance | BigDecimal | 99.4800 | 成功结算后的账户余额(元) |
costMs | Long | 1860 | 本次调用总耗时(毫秒) |
3.2 basicInfo:工商照面 33 项
| 字段 | 示例 | 含义 |
|---|---|---|
name | 重庆可乐家装饰工程有限公司 | 企业名称 |
formatName | 重庆可乐家装饰工程有限公司 | 清洗后的标准名称 |
creditNo | 91500113MAABRA7D0H | 统一社会信用代码 |
regNo | 500113014353471 | 企业注册号 |
orgNo | 91500113MAABRA7D0H | 组织机构号 |
status | 存续(在营、开业、在册) | 工商公示经营状态原文 |
newStatus | 存续 | 清洗后状态:存续 / 注销 / 吊销 / 撤销 / 迁出 / 设立中 / 清算中 / 停业 / 其他 / 歇业 / 责令关闭 |
operName | 李伦智 | 法定代表人姓名 |
title | 法定代表人 | 代表人职务 |
operType | P | P 个人,C 公司 |
registCapi | 100 万人民币 | 注册资本 |
actualCapi | - | 实缴资本 |
currencyUnit | CNY | 货币单位 |
startDate | 2021-06-02 | 成立日期 |
termStart | 2021-06-02 | 营业开始日期 |
termEnd | - | 营业结束日期;- 表示长期 |
endDate | - | 注销日期 |
checkDate | 2021-06-02 | 最近一次核准日期 |
revokeDate | - | 吊销日期 |
revokeReason | - | 吊销原因 |
logoutReason | - | 注销原因 |
econKind | 有限责任公司 | 企业类型 |
econKindCode | 1100 | 企业类型代码 |
typeNew | 01 | 01 大陆企业 / 02 社会组织 / 03 机关及事业单位 / 04 港澳台及国外 / 05 律所及其他 |
categoryNew | 0115601 | 0115601 企业 / 0115602 个体 / 0115603 农民专业合作社 |
domain | D4511 | 国民经济行业四级代码 |
address | 重庆市巴南区…… | 注册地址 |
belongOrg | 重庆市巴南区市场监督管理局 | 登记机关 |
districtCode | 500110 | 所属行政区划代码 |
scope | 许可项目:住宅室内装饰装修…… | 完整经营范围 |
tags | [] | 企业标签:1 新三板 / 6 主板上市 / 9 香港上市 / 17 高新企业 / 40 暂停上市 / 41 终止上市 |
historyNames | [] | 历史名称 |
fenname | - | 企业英文名 |
3.3 partners[]:股东与出资
| 字段 | 示例 | 含义 |
|---|---|---|
name | 李伦智 | 股东名称 |
stockType | 自然人股东 | 股东类型 |
identifyType | - | 证件类型;- 表示未公示 |
identifyNo | - | 证件号码;- 表示未公示 |
stockPercent | 1.0 | 持股比例,小数形式(1.0 = 100%) |
totalRealCapi | - | 实缴出资总额 |
totalShouldCapi | 100 万人民币 | 认缴出资总额 |
startDate | 2021-06-02 | 出资 / 首次认缴日期 |
shouldCapiItems | [{date, capi, type}] | 认缴明细 |
realCapiItems | [] | 实缴明细 |
shouldCapiItems[] / realCapiItems[] 元素:date(出资日期)、capi(金额,如 100 万人民币)、type(出资方式,如 货币)。
3.4 changeRecords[]:工商变更
| 字段 | 示例 | 含义 |
|---|---|---|
changeItem | 章程备案 | 变更事项 |
changeDate | 2021-07-15 | 变更日期 |
beforeContent | - | 变更前内容 |
afterContent | 同意启用新章程 | 变更后内容 |
tag | 非历史信息 | 非历史信息 / 历史信息 |
type | 章程备案变更 | 章程备案 / 注册资金 / 住所 / 股东股权 / 人员 / 地址 / 经营范围 / 其他 变更 |
3.5 socialSecurity[]:分年度社保参保
| 字段 | 示例 | 含义 |
|---|---|---|
reportYear | 2024 | 年报所属年份 |
reportDate | 2025-03-18 | 年报公示日期 |
name | 重庆可乐家装饰工程有限公司 | 企业名称 |
dwJeDisplay / bqJeDisplay / dwJsDisplay | 企业选择不公示 | 缴费基数 / 实际缴费 / 累计欠缴是否公示 |
insuranceNum | 3人 | 城镇职工基本养老保险参保人数 |
basicEndownmentNum | 3人 | 基本养老保险参保人数 |
unenploymentNum | 3人 | 失业保险参保人数 |
injuryInsuranceNum | 3人 | 工伤保险参保人数 |
birthNum / birthInsuranceCount | 0人 | 生育保险参保人数 |
basicMedicalAmount / actualMedicalAmount / baseMedicalDownBalance | - | 医疗保险缴费基数 / 实缴 / 欠缴 |
unenploymentInsurance / actualLostAmount / unenploymentDownBalance | - | 失业保险相关金额 |
endownmentInsuranceAmount / endownmentBaseAmount / actualEndownmentAmount | - | 养老保险相关金额 |
injuryInsuranceAmount / actualInjuryAmount / companyInjuryDownBalance | - | 工伤保险相关金额 |
birthAmount / birthActualAmount | - | 生育保险相关金额 |
3.6 三个字段口径
-不等于null,也不等于 0。它是工商数据里的「未公示 / 长期 / 无值」占位符,展示时写「—」即可。- 缺失字符串是
"",缺失数组是[],不用null表示,解析时按空值兜底即可。 - 上游内部
id与法定代表人身份哈希operPid不对外返回,不要依赖。
四、调用示例
4.1 curl
curl -s -G "https://api.xujian.tech/openapi/enterprise/detail" \
--data-urlencode "keyword=91500113MAABRA7D0H" \
-H "X-API-Key: 你的APIKey"
4.2 Java(Hutool)
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
public class EnterpriseDetailClient {
private static final String API_URL = "https://api.xujian.tech/openapi/enterprise/detail";
/**
* 查询企业详细信息
*
* @param apiKey 开发者 API Key
* @param keyword 企业全称或统一社会信用代码
* @return data 节点;查不到或失败返回 null,且不扣费
*/
public static JSONObject detail(String apiKey, String keyword) {
JSONObject json = JSONUtil.parseObj(
HttpRequest.get(API_URL)
.header("X-API-Key", apiKey)
.form("keyword", keyword)
.timeout(20000)
.execute().body());
if (json.getInt("code") == null || json.getInt("code") != 0) {
System.out.println("查询失败(不收费):" + json.getStr("msg"));
return null;
}
return json.getJSONObject("data");
}
public static void main(String[] args) {
JSONObject data = detail("你的APIKey", "91500113MAABRA7D0H");
if (data == null) {
return;
}
JSONObject basic = data.getJSONObject("basicInfo");
System.out.printf("%s | %s | 法人 %s | 注册资本 %s | 股东 %d 人%n",
basic.getStr("name"), basic.getStr("newStatus"), basic.getStr("operName"),
basic.getStr("registCapi"), data.getJSONArray("partners").size());
}
}
4.3 Python
import requests
def enterprise_detail(api_key: str, keyword: str):
"""返回 data 节点;查不到或失败返回 None,且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/enterprise/detail",
params={"keyword": keyword},
headers={"X-API-Key": api_key},
timeout=20,
)
result = resp.json()
if result.get("code") != 0:
print("查询失败(不收费):", result.get("msg"))
return None
return result["data"]
if __name__ == "__main__":
data = enterprise_detail("你的APIKey", "91500113MAABRA7D0H")
if data:
print(data["basicInfo"]["name"], data["basicInfo"]["newStatus"])
4.4 JavaScript
async function enterpriseDetail(apiKey, keyword) {
const qs = new URLSearchParams({ keyword }).toString();
const resp = await fetch(
`https://api.xujian.tech/openapi/enterprise/detail?${qs}`,
{ headers: { "X-API-Key": apiKey } }
);
const result = await resp.json();
if (result.code !== 0) {
throw new Error(result.msg);
}
return result.data;
}
五、返回示例
{
"code": 0,
"msg": "success",
"data": {
"keyword": "91500113MAABRA7D0H",
"basicInfo": {
"name": "重庆可乐家装饰工程有限公司",
"creditNo": "91500113MAABRA7D0H",
"regNo": "500113014353471",
"status": "存续(在营、开业、在册)",
"newStatus": "存续",
"operName": "李伦智",
"registCapi": "100 万人民币",
"actualCapi": "-",
"startDate": "2021-06-02",
"termEnd": "-",
"econKind": "有限责任公司",
"domain": "D4511",
"address": "重庆市巴南区龙洲湾街道龙洲大道255号17-1",
"belongOrg": "重庆市巴南区市场监督管理局",
"districtCode": "500110",
"scope": "许可项目:住宅室内装饰装修(依法须经批准的项目,经相关部门批准后方可开展经营活动)",
"tags": [],
"historyNames": []
},
"partners": [
{
"name": "李伦智",
"stockType": "自然人股东",
"stockPercent": "1.0",
"totalShouldCapi": "100 万人民币",
"shouldCapiItems": [{"date": "2021-06-02", "capi": "100 万人民币", "type": "货币"}],
"realCapiItems": []
}
],
"changeRecords": [
{
"changeItem": "章程备案",
"changeDate": "2021-07-15",
"beforeContent": "-",
"afterContent": "同意启用新章程",
"tag": "非历史信息",
"type": "章程备案变更"
}
],
"socialSecurity": [
{
"reportYear": "2024",
"reportDate": "2025-03-18",
"insuranceNum": "3人",
"basicEndownmentNum": "3人",
"unenploymentNum": "3人",
"injuryInsuranceNum": "3人",
"birthNum": "0人"
}
],
"apiCode": "enterprise.detail",
"apiName": "企业详细信息综合查询",
"chargeType": "PER_CALL",
"balance": 99.4800,
"costMs": 1860
}
}
查不到(不收费):
{
"code": 500,
"msg": "未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费",
"data": null
}
六、可直接复用的两段代码
6.1 准入初筛:状态 + 规模 + 股东
def pre_check(data: dict) -> dict:
"""返回一份可读的准入结论"""
basic = data["basicInfo"]
partners = data.get("partners") or []
social = data.get("socialSecurity") or []
latest = social[0] if social else {}
return {
"name": basic.get("name"),
"credit_no": basic.get("creditNo"),
"status": basic.get("newStatus"),
"alive": basic.get("newStatus") == "存续",
"regist_capi": basic.get("registCapi"),
"legal_person": basic.get("operName"),
"partner_count": len(partners),
"staff_hint": latest.get("insuranceNum"),
"risk": [] if basic.get("newStatus") == "存续" else ["经营状态异常"],
}
6.2 变更记录里找敏感变动
SENSITIVE = {"股东股权变更", "注册资金变更", "人员变更", "住所变更", "经营范围变更"}
def sensitive_changes(data: dict):
"""挑出需要人工复核的变更事项"""
rows = data.get("changeRecords") or []
return [r for r in rows if r.get("type") in SENSITIVE]
七、实践建议
- 关键词优先用信用代码。18 位信用代码唯一,名称要精确匹配全称,模糊查不到。
- 超时至少 15 秒。接口要向多个维度取数,典型 1 ~ 3 秒,
costMs会告诉你真实耗时。 - 本地缓存结果。工商数据变动不频繁,按企业缓存 30 ~ 90 天,重复查询直接读库,省下 0.52 元/次。
-不要当空值处理成 0。termEnd = -是「长期」,转成 0 会算出「已过期」的错误结论。stockPercent是小数。1.0表示 100%,展示时乘 100。- 参保人数只作参考。很多企业选择不公示金额字段,参保人数是「3人」这种带单位的文本。
- 复用
creditNo做主键。企业名称可能变更(historyNames会记录),信用代码不会变。 - 查不到不收费,可以放心重试。但重试前先确认名称是否准确,避免无效调用堆积。
八、错误码与排查
| code | msg | 是否扣费 |
|---|---|---|
| 0 | success | 扣费(查到企业后结算) |
| 500 | 缺少请求头 X-API-Key | 否 |
| 500 | API Key 无效 / API Key 已停用 | 否 |
| 500 | 客户不存在或已停用 | 否 |
| 500 | 接口不存在或已停用 | 否 |
| 500 | 余额不足,请先充值 | 否 |
| 500 | keyword 不能为空 | 否 |
| 500 | keyword 至少需要 2 个字符(建议使用企业全称或统一社会信用代码) | 否 |
| 500 | keyword 长度不能超过 50 个字符 | 否 |
| 500 | 数据服务未启用 / 数据服务未配置(上游凭证缺失) | 否 |
| 500 | 未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费 | 否 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 否 |
结算判定很简单:只有
basicInfo.name有值时才扣费。其余所有失败分支都不产生费用。
九、计费与接入
| 项目 | 说明 |
|---|---|
| 单价 | 0.52 元/次 |
| 计费方式 | 按次计费;preAuthorize 预校验 → 查询 → 查到企业后 settle 扣费 |
| 不计费场景 | 关键词为空 / 少于 2 字符 / 超过 50 字符、服务未启用或凭证缺失、上游超时或返回异常、未查询到该企业、Key / 客户 / 接口校验失败、余额不足 |
| 返回条数 | 无 limit、无分页,四个维度按上游实际结果完整返回 |
接入流程:注册开发者账号 → 控制台创建 API Key → 请求头带上 X-API-Key 即可调用,无需签名或加密。控制台可查看调用量、扣费流水与余额。
服务站点:
api.xujian.tech(纯文本域名,不做跳转)。接口试用、数据与充值咨询可在控制台提交工单,或联系 Vxujian_cq。
十、小结
一个关键词换回四个维度的结构化数据,省掉的是「查四遍、拼四套、口径还要自己对齐」的工作量。几个取舍值得记住:
- 查不到不收费:先校正名称再查,试错成本是 0;
-是业务占位:表示未公示 / 长期 / 无值,别当成 0 参与计算;- 信用代码是最佳主键:名称会变,代码不变;
- 缓存价值高:工商数据低频变动,缓存一次能省下不少调用成本。
同系列还有:enterprise.query(0.01 元/次,名称模糊查询,适合先校正全称)、enterprise.profile(0.2 元/次,只要 33 项照面)、enterprise.abnormal 与 enterprise.dishonesty(各 0.2 元/次,经营异常与失信记录)、enterprise.report(0.3 元/次,多年度工商年报)。按需组合,比一律查最贵的接口更划算。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/xujianflying/article/details/167173490




