接口概述
一句话说明
enterprise.detail 是一次性拿到企业全景数据的接口:
工商照面(33 项)+ 股东出资明细 + 工商变更记录 + 分年度社保参保四个维度一次返回。
平台侧完成上游数据源对接与凭证管理,调用方只需要一个关键词 + 一个 X-API-Key,
并按查得计费付费:查不到对应企业不产生费用。
| 请求地址 | https://api.xujian.tech/openapi/enterprise/detail |
|---|---|
| 请求方式 | GET(keyword 放 Query String) |
| 鉴权方式 | 请求头 X-API-Key(不做签名与加密) |
| 接口编码 | enterprise.detail |
| 收费类型 | PER_CALL(按次计费,0.5200 元/次) |
| 计费特殊规则 | 查得计费:关键词为空 / 超长、上游服务不可用、 查不到该企业的工商照面时返回失败且不扣费、不写扣费流水 |
| 响应格式 | JSON,Content-Type: application/json;charset=UTF-8 |
| 是否需要授权 | 否(无需授权,API Key 有效且余额充足即可调用) |
| 关键词长度 | 2 ~ 50 个字符(建议使用工商登记全称或统一社会信用代码) |
| 典型用途 | 供应商准入尽调、金融风控 KYC 与反欺诈、股权投资标的画像、招商 DU、企业 ERP 主数据初始化 |
快速开始
把 你的APIKey 换成控制台获取的 API Key:
curl -s -G "https://api.xujian.tech/openapi/enterprise/detail" \
--data-urlencode "keyword=重庆可乐家装饰工程有限公司" \
-H "X-API-Key: 你的APIKey"
返回结构速览
一次拿到四个维度:
basicInfo—— 工商照面 33 项(名称、统一社会信用代码、法定代表人、注册资本等)partners—— 股东名单与认缴 / 实缴出资明细changeRecords—— 工商变更记录(事项、前后内容、日期)socialSecurity—— 分年度社保参保(五险参保人数与缴费基数)
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key |
String | 是 | 开发者 API Key,缺失或无效返回失败 |
| 参数名 | 类型 | 必填 | 示例 | 说明 |
|---|---|---|---|---|
keyword |
String | 是 | 91500113MAABRA7D0H |
企业工商登记全称或统一社会信用代码,
长度 2 ~ 50 个字符。为空或超长时返回失败,不计费。
名称不准确时建议先用 enterprise.query 模糊查询校正全称
|
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
code |
int | 状态码,0 成功,非 0 失败 |
msg |
String | 结果描述,成功为 success,失败为具体原因 |
data |
Object | 业务数据,失败时为 null |
| 字段 | 类型 | 说明 |
|---|---|---|
keyword |
String | 本次查询关键词原文(已去空格) |
basicInfo |
Object | 工商照面信息 33 项(见下表) |
partners |
Array | 股东 / 出资人列表 |
changeRecords |
Array | 工商变更记录列表 |
socialSecurity |
Array | 社保参保信息列表(按年度倒序) |
apiCode |
String | 接口编码 enterprise.detail |
apiName |
String | 接口名称 |
chargeType |
String | 计费类型:FREE / PER_CALL / MONTHLY / YEARLY |
balance |
BigDecimal | 调用完成后(已扣费)的账户余额(元) |
costMs |
Long | 本次调用耗时(毫秒) |
basicInfo(工商照面,33 项)
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
name | String | 重庆可乐家装饰工程有限公司 | 企业名称 |
formatName | String | 重庆可乐家装饰工程有限公司 | 标准企业名称(清洗后) |
creditNo | String | 91500113MAABRA7D0H | 统一社会信用代码 |
regNo | String | 500113014353471 | 企业注册号 |
orgNo | String | 91500113MAABRA7D0H | 组织机构号 |
status | String | 存续(在营、开业、在册) | 经营状态(工商公示原文) |
newStatus | String | 存续 | 经营状态(清洗后):存续 / 注销 / 吊销 / 撤销 / 迁出 / 设立中 / 清算中 / 停业 / 其他 / 歇业 / 责令关闭 |
operName | String | 李伦智 | 法定代表人姓名 |
title | String | 法定代表人 | 公司代表人职务 |
operType | String | P | 法定代表人类型:P-个人,C-公司 |
registCapi | String | 100 万人民币 | 注册资本(金额 + 空格 + 万 + 货币单位) |
actualCapi | String | - | 实缴资本 |
currencyUnit | String | CNY | 货币单位 |
startDate | String | 2021-06-02 | 成立日期 |
termStart | String | 2021-06-02 | 营业开始日期 |
termEnd | String | - | 营业结束日期,「-」表示长期 |
endDate | String | - | 注销日期 |
checkDate | String | 2021-06-02 | 核准日期(最近一次工商变更核准) |
revokeDate | String | - | 吊销日期 |
revokeReason | String | - | 吊销原因 |
logoutReason | String | - | 注销原因 |
econKind | String | 有限责任公司 | 企业类型 |
econKindCode | String | 1100 | 企业类型代码 |
typeNew | String | 01 | 企业大类:01 大陆企业 / 02 社会组织 / 03 机关及事业单位 / 04 港澳台及国外企业 / 05 律所及其他 |
categoryNew | String | 0115601 | 二级分类:0115601 企业 / 0115602 个体 / 0115603 农民专业合作社 |
domain | String | D4511 | 四级行业代码(国民经济行业分类) |
address | String | 重庆市巴南区…… | 企业注册地址 |
belongOrg | String | 重庆市巴南区市场监督管理局 | 登记机关 / 所属工商局 |
districtCode | String | 500110 | 所属行政区划代码 |
scope | String | 许可项目:住宅室内装饰装修…… | 经营范围(工商登记完整文本) |
tags | Array | [] | 企业标签:1 新三板 / 6 主板上市 / 9 香港上市 / 17 高新企业 / 40 暂停上市 / 41 终止上市 |
historyNames | Array | [] | 历史名称变更记录 |
fenname | String | - | 企业英文名 |
partners[](股东 / 出资人)
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
name | String | 李伦智 | 股东名称 |
stockType | String | 自然人股东 | 股东类型 |
identifyType | String | - | 证件类型,「-」表示未公示 |
identifyNo | String | - | 证件号码,「-」表示未公示 |
stockPercent | String | 1.0 | 持股比例(小数形式,1.0 = 100%) |
totalRealCapi | String | - | 实缴出资总额 |
totalShouldCapi | String | 100 万人民币 | 认缴出资总额 |
startDate | String | 2021-06-02 | 出资 / 首次认缴日期 |
shouldCapiItems | Array | [{"date":"2021-06-02","capi":"100 万人民币","type":"货币"}] | 认缴明细 |
realCapiItems | Array | [] | 实缴明细 |
出资明细项(shouldCapiItems[] / realCapiItems[]):
| 字段 | 类型 | 说明 |
|---|---|---|
date | String | 出资日期 / 认缴期限 |
capi | String | 金额,如「180 万人民币」 |
type | String | 出资方式,如「货币」 |
changeRecords[](工商变更记录)
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
changeItem | String | 章程备案 | 变更事项名称 |
changeDate | String | 2021-07-15 | 变更日期 |
beforeContent | String | - | 变更前内容 |
afterContent | String | 同意启用新章程 | 变更后内容 |
tag | String | 非历史信息 | 「非历史信息」或「历史信息」 |
type | String | 章程备案变更 | 变更类型:章程备案变更 / 注册资金变更 / 住所变更 / 股东股权变更 / 人员变更 / 地址变更 / 其他变更 / 经营范围变更 |
socialSecurity[](社保参保,按年度)
| 字段 | 类型 | 说明 |
|---|---|---|
reportYear | String | 年报所属年份 |
reportDate | String | 年报公示日期 |
name | String | 企业名称 |
dwJeDisplay | String | 单位缴费基数是否公示 |
bqJeDisplay | String | 本期实际缴费金额是否公示 |
dwJsDisplay | String | 单位累计欠缴金额是否公示 |
insuranceNum | String | 城镇职工基本养老保险参保人数 |
basicEndownmentNum | String | 基本养老保险参保人数 |
basicMedicalAmount | String | 基本医疗保险缴费基数 |
actualMedicalAmount | String | 基本医疗保险实际缴费金额 |
baseMedicalDownBalance | String | 基本医疗保险单位累计欠缴金额 |
unenploymentNum | String | 失业保险参保人数 |
unenploymentInsurance | String | 失业保险缴费基数 |
actualLostAmount | String | 失业保险实际缴费金额 |
unenploymentDownBalance | String | 失业保险单位累计欠缴金额 |
endownmentInsuranceAmount | String | 养老保险缴费基数 |
endownmentBaseAmount | String | 养老保险缴费基数(汇总) |
actualEndownmentAmount | String | 养老保险实际缴费金额 |
injuryInsuranceNum | String | 工伤保险参保人数 |
injuryInsuranceAmount | String | 工伤保险缴费基数 |
actualInjuryAmount | String | 工伤保险实际缴费金额 |
companyInjuryDownBalance | String | 工伤保险单位累计欠缴金额 |
birthNum | String | 生育保险参保人数 |
birthAmount | String | 生育保险缴费基数 |
birthInsuranceCount | String | 生育保险参保人数(汇总) |
birthActualAmount | String | 生育保险实际缴费金额 |
响应示例
成功(code = 0)
{
"code": 0,
"msg": "success",
"data": {
"keyword": "91500113MAABRA7D0H",
"basicInfo": {
"name": "重庆可乐家装饰工程有限公司",
"formatName": "重庆可乐家装饰工程有限公司",
"creditNo": "91500113MAABRA7D0H",
"regNo": "500113014353471",
"orgNo": "91500113MAABRA7D0H",
"status": "存续(在营、开业、在册)",
"newStatus": "存续",
"operName": "李伦智",
"title": "法定代表人",
"operType": "P",
"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",
"categoryNew": "0115601",
"domain": "D4511",
"address": "重庆市巴南区龙洲湾街道龙洲大道255号17-1",
"belongOrg": "重庆市巴南区市场监督管理局",
"districtCode": "500110",
"scope": "许可项目:住宅室内装饰装修(依法须经批准的项目,经相关部门批准后方可开展经营活动)",
"tags": [],
"historyNames": [],
"fenname": "-"
},
"partners": [
{
"name": "李伦智",
"stockType": "自然人股东",
"identifyType": "-",
"identifyNo": "-",
"stockPercent": "1.0",
"totalRealCapi": "-",
"totalShouldCapi": "100 万人民币",
"startDate": "2021-06-02",
"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",
"name": "重庆可乐家装饰工程有限公司",
"dwJeDisplay": "企业选择不公示",
"bqJeDisplay": "企业选择不公示",
"dwJsDisplay": "企业选择不公示",
"insuranceNum": "3人",
"basicEndownmentNum": "3人",
"basicMedicalAmount": "-",
"actualMedicalAmount": "-",
"baseMedicalDownBalance": "-",
"unenploymentNum": "3人",
"unenploymentInsurance": "-",
"actualLostAmount": "-",
"unenploymentDownBalance": "-",
"endownmentInsuranceAmount": "-",
"endownmentBaseAmount": "-",
"actualEndownmentAmount": "-",
"injuryInsuranceNum": "3人",
"injuryInsuranceAmount": "-",
"actualInjuryAmount": "-",
"companyInjuryDownBalance": "-",
"birthNum": "0人",
"birthAmount": "-",
"birthInsuranceCount": "0人",
"birthActualAmount": "-"
}
],
"apiCode": "enterprise.detail",
"apiName": "企业详细信息综合查询",
"chargeType": "PER_CALL",
"balance": 99.4800,
"costMs": 1860
}
}
失败(查不到该企业)—— 不收费
{
"code": 500,
"msg": "未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费",
"data": null
}
错误码与常见失败原因
| code | msg(示例) | 处理建议 |
|---|---|---|
| 0 | success | 调用成功 |
| 500 | 缺少请求头 X-API-Key | 在请求头中补充 X-API-Key |
| 500 | API Key 无效 / API Key 已停用 | 检查 Key,或在控制台重新启用 |
| 500 | 客户不存在或已停用 | 联系平台确认账号状态(可联系微信xujian_cq) |
| 500 | 接口不存在或已停用 | 确认 enterprise.detail 当前是否维护中 |
| 500 | 余额不足,请先充值。可联系微信xujian_cq | 调用前校验余额,余额不足不扣费,充值后重试(可联系微信xujian_cq) |
| 500 | keyword 不能为空 | 补充 keyword 参数;不计费 |
| 500 | keyword 至少需要 2 个字符(建议使用企业全称或统一社会信用代码) | 换用更准确的关键词;不计费 |
| 500 | keyword 长度不能超过 50 个字符 | 缩短关键词;不计费 |
| 500 | 未查询到该企业的详细信息…… | 先用 enterprise.query 校正工商登记全称;不计费 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 稍后重试;不计费 |
多语言代码示例
Java(Hutool)
String body = HttpRequest.get("https://api.xujian.tech/openapi/enterprise/detail")
.form("keyword", "91500113MAABRA7D0H")
.header("X-API-Key", apiKey)
.timeout(15000)
.execute()
.body();
JSONObject json = JSONUtil.parseObj(body);
if (json.getInt("code") != 0) {
System.out.println("查询失败(不收费):" + json.getStr("msg"));
return;
}
JSONObject data = json.getJSONObject("data");
JSONObject basic = data.getJSONObject("basicInfo");
System.out.println(basic.getStr("name") + " / " + basic.getStr("newStatus"));
data.getJSONArray("partners")
.forEach(p -> System.out.println(((JSONObject) p).getStr("name")
+ " 持股 " + ((JSONObject) p).getStr("stockPercent")));
Python
import requests
def query_detail(api_key: str, keyword: str):
"""查询企业全景数据;查不到返回 None 且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/enterprise/detail",
params={"keyword": keyword},
headers={"X-API-Key": api_key},
timeout=30,
)
result = resp.json()
if result.get("code") != 0:
print("查询失败(不收费):", result.get("msg"))
return None
return result["data"]
if __name__ == "__main__":
detail = query_detail("你的APIKey", "91500113MAABRA7D0H")
if not detail:
raise SystemExit
basic = detail["basicInfo"]
print(basic["name"], basic["newStatus"], basic["registCapi"])
print("股东数:", len(detail["partners"]))
print("变更记录数:", len(detail["changeRecords"]))
print("社保年度数:", len(detail["socialSecurity"]))
JavaScript(浏览器 / Node 18+)
const resp = await fetch(
"https://api.xujian.tech/openapi/enterprise/detail?keyword=" + encodeURIComponent("91500113MAABRA7D0H"),
{ headers: { "X-API-Key": API_KEY } }
);
const { code, msg, data } = await resp.json();
if (code === 0) {
const { basicInfo, partners, changeRecords, socialSecurity } = data;
console.log(basicInfo.name, basicInfo.newStatus, partners.length, changeRecords.length, socialSecurity.length);
} else {
console.warn("查询失败(不收费):", msg);
}
常见问题(FAQ)
enterprise.detail 接口怎么收费?
enterprise.detail 的收费类型为 PER_CALL(按次计费),当前单价 0.5200 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
和 enterprise.profile(工商照面)有什么区别?
enterprise.profile 只返回工商照面 33 项,价格更低;
enterprise.detail 在一次请求里额外返回股东出资、工商变更记录与分年度社保数据。
只需要核实企业身份、补开票信息时用 profile 更划算;做尽调 / 风控画像时用 detail。
查不到企业会扣费吗?
不会。采用「先预鉴权、查询到有效工商照面后再扣费」的两段式流程:
关键词为空 / 超长、上游不可用、查不到对应企业时直接返回失败,不扣费、不写扣费流水。
判定标准是 basicInfo.name 是否有值。
为什么没有返回 id 字段?
上游的企业唯一标识与法定代表人身份哈希属数据源内部主键,跨批次不稳定也不可解读,
因此不返回。建议用 creditNo(统一社会信用代码)作为本系统内的业务主键。
注册资本怎么解析成数字?
registCapi 是「金额 + 空格 + 万 + 货币单位」的字符串(如「1200 万人民币」),
actualCapi 同口径。做数值比较时先提取数字,并注意单位一般为万元,
币种看 currencyUnit(通常是 CNY)。
历史变更记录能返回多少条?
以工商公示的实际记录为准,通常从企业设立至今全部返回。建议在入库时按
changeDate + changeItem + afterContent 做去重,避免重复入库。
接口耗时大概多少?
需要一次性汇总四个维度的数据,通常在 1 ~ 3 秒(响应体 costMs 为真实耗时)。
建议客户端超时设到 15 秒以上,批量场景配合异步与本地缓存。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。