企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全

企业全景信息查询 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 三个字段口径

  1. - 不等于 null,也不等于 0。它是工商数据里的「未公示 / 长期 / 无值」占位符,展示时写「---」即可。
  2. 缺失字符串是 "",缺失数组是 [] ,不用 null 表示,解析时按空值兜底即可。
  3. 上游内部 id 与法定代表人身份哈希 operPid 不对外返回,不要依赖。

四、调用示例

4.1 curl

bash 复制代码
curl -s -G "https://api.xujian.tech/openapi/enterprise/detail" \
  --data-urlencode "keyword=91500113MAABRA7D0H" \
  -H "X-API-Key: 你的APIKey"

4.2 Java(Hutool)

java 复制代码
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

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

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;
}

五、返回示例

json 复制代码
{
  "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
  }
}

查不到(不收费):

json 复制代码
{
  "code": 500,
  "msg": "未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费",
  "data": null
}

六、可直接复用的两段代码

6.1 准入初筛:状态 + 规模 + 股东

python 复制代码
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 变更记录里找敏感变动

python 复制代码
SENSITIVE = {"股东股权变更", "注册资金变更", "人员变更", "住所变更", "经营范围变更"}


def sensitive_changes(data: dict):
    """挑出需要人工复核的变更事项"""
    rows = data.get("changeRecords") or []
    return [r for r in rows if r.get("type") in SENSITIVE]

七、实践建议

  1. 关键词优先用信用代码。18 位信用代码唯一,名称要精确匹配全称,模糊查不到。
  2. 超时至少 15 秒 。接口要向多个维度取数,典型 1 ~ 3 秒,costMs 会告诉你真实耗时。
  3. 本地缓存结果。工商数据变动不频繁,按企业缓存 30 ~ 90 天,重复查询直接读库,省下 0.52 元/次。
  4. - 不要当空值处理成 0 。termEnd = - 是「长期」,转成 0 会算出「已过期」的错误结论。
  5. stockPercent 是小数 。1.0 表示 100%,展示时乘 100。
  6. 参保人数只作参考。很多企业选择不公示金额字段,参保人数是「3人」这种带单位的文本。
  7. 复用 creditNo 做主键 。企业名称可能变更(historyNames 会记录),信用代码不会变。
  8. 查不到不收费,可以放心重试。但重试前先确认名称是否准确,避免无效调用堆积。

八、错误码与排查

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 元/次,多年度工商年报)。按需组合,比一律查最贵的接口更划算。

相关推荐
2601_962885721 小时前
批量取数比循环单取快多少?用 AlphaFeed klines.batch给多股票取数提速
开发语言·php·batch
动词ing1 小时前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法
多弗朗皮卡丘1 小时前
C++多继承
开发语言·c++·多继承
她的男孩2 小时前
分片上传的大文件人人可下载:文件模块 isPrivate 在合并时被抹成 false,另有 4 个静默坑
java·后端·架构
lie..2 小时前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python
SWAGGY..2 小时前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
(Charon)2 小时前
【C++面试】堆内存与栈内存:string、vector和对象到底存在哪里
开发语言·c++·面试
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: Eureka 服务发现与服务名调用改造
java·spring cloud·eureka
夕除2 小时前
redis--OpenResty
java·redis