接口概述
一句话说明
enterprise.abnormal 用于判断企业是否还在经营异常名录里。 列入原因中最常见的是「未按时公示年度报告」, 这类企业往往连基本的信息披露义务都没履行,是准入环节非常实用的一道低成本过滤。 采用查得计费,无异常记录同样不收费。
| 请求地址 | https://api.xujian.tech/openapi/enterprise/abnormal |
|---|---|
| 请求方式 | GET(keyword 放 Query String) |
| 鉴权方式 | 请求头 X-API-Key |
| 接口编码 | enterprise.abnormal |
| 收费类型 | PER_CALL(按次计费,0.2000 元/次) |
| 计费特殊规则 | 查得计费:关键词非法、上游不可用、无经营异常记录时返回失败且不扣费 |
| 响应格式 | JSON,Content-Type: application/json;charset=UTF-8 |
| 是否需要授权 | 否(无需授权,API Key 有效且余额充足即可调用) |
| 关键词长度 | 2 ~ 50 个字符 |
| 数据更新频率 | 数据源最快当日更新、最晚七日内更新 |
快速开始
curl -s -G "https://api.xujian.tech/openapi/enterprise/abnormal" \
--data-urlencode "keyword=重庆某某商贸有限公司" \
-H "X-API-Key: 你的APIKey"
如何判断「当前仍在异常名录中」
同时满足两个条件才算仍在名录中:disabled = 0(当前有效)
且 outDate 为空(尚未移出)。
已移出的记录会保留下来作为历史,可通过 outReason / outDate 还原整改过程。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key | String | 是 | 开发者 API Key |
| 参数名 | 类型 | 必填 | 示例 | 说明 |
|---|---|---|---|---|
keyword | String | 是 | 重庆某某商贸有限公司 | 企业全称或统一社会信用代码,长度 2 ~ 50 个字符;为空或超长返回失败且不计费 |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
keyword | String | 本次查询关键词 |
total | int | 经营异常记录条数 |
list | Array | 记录数组;字段见下表 |
apiCode | String | 接口编码 |
apiName | String | 接口名称 |
chargeType | String | 计费类型 |
balance | BigDecimal | 调用完成后(已扣费)的账户余额(元) |
costMs | Long | 本次调用耗时(毫秒) |
list[] 经营异常记录字段
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
name | String | 重庆某某商贸有限公司 | 企业完整名称 |
regNo | String | 500113014353471 | 企业注册号 / 统一社会信用代码 |
inReason | String | 未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告 | 列入经营异常名录原因 |
inDate | String | 2023-07-12 | 列入日期 |
outReason | String | 列入经营异常名录3年内且依照《经营异常名录管理办法》规定被列入后已经履行公示义务的,可以申请移出 | 移出经营异常名录原因(未移出时为空) |
outDate | String | 2023-09-05 | 移出日期(未移出时为空) |
department | String | 重庆市巴南区市场监督管理局 | 作出列入决定的行政机关 |
outDepartment | String | 重庆市巴南区市场监督管理局 | 作出移出决定的行政机关 |
province | String | CQ | 省份代码,如 TJ 天津、HE 河北、CQ 重庆 |
disabled | String | 1 | 0-当前有效信息,1-历史公示信息 |
响应示例
成功(命中共 1 条记录,code = 0)
{
"code": 0,
"msg": "success",
"data": {
"keyword": "重庆某某商贸有限公司",
"total": 1,
"list": [
{
"name": "重庆某某商贸有限公司",
"regNo": "500113014353471",
"inReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告",
"inDate": "2023-07-12",
"outReason": "列入经营异常名录3年内且依照《经营异常名录管理办法》规定被列入后已经履行公示义务的,可以申请移出",
"outDate": "2023-09-05",
"department": "重庆市巴南区市场监督管理局",
"outDepartment": "重庆市巴南区市场监督管理局",
"province": "CQ",
"disabled": "1"
}
],
"apiCode": "enterprise.abnormal",
"apiName": "企业经营异常查询",
"chargeType": "PER_CALL",
"balance": 99.8000,
"costMs": 520
}
}
失败(无经营异常记录)—— 不收费
{
"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 | 余额不足,请先充值。可联系微信xujian_cq | 充值后重试,余额不足不扣费 |
| 500 | keyword 不能为空 | 补充 keyword;不计费 |
| 500 | keyword 至少需要 2 个字符(建议使用企业全称或统一社会信用代码) | 换更准确的关键词;不计费 |
| 500 | keyword 长度不能超过 50 个字符 | 缩短关键词;不计费 |
| 500 | 未查询到该企业的经营异常记录(无记录也是一种结论),本次调用不计费 | 可作为「无经营异常」处理;不计费 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 稍后重试;不计费 |
多语言代码示例
Java(Hutool)
String body = HttpRequest.get("https://api.xujian.tech/openapi/enterprise/abnormal")
.form("keyword", "重庆某某商贸有限公司")
.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;
}
JSONArray list = json.getJSONObject("data").getJSONArray("list");
for (int i = 0; i < list.size(); i++) {
JSONObject r = list.getJSONObject(i);
boolean still = "0".equals(r.getStr("disabled")) && StrUtil.isBlank(r.getStr("outDate"));
System.out.println(r.getStr("inReason") + ",当前是否仍在名录:" + still);
}
Python
import requests
def query_abnormal(api_key: str, keyword: str):
"""查询经营异常名录;无记录返回空列表且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/enterprise/abnormal",
params={"keyword": keyword},
headers={"X-API-Key": api_key},
timeout=20,
)
result = resp.json()
if result.get("code") != 0:
return []
return result["data"]["list"]
def still_abnormal(api_key: str, keyword: str) -> bool:
"""当前是否仍在经营异常名录中"""
return any(
r.get("disabled") == "0" and not r.get("outDate")
for r in query_abnormal(api_key, keyword)
)
if __name__ == "__main__":
print("当前仍在名录:", still_abnormal("你的APIKey", "重庆某某商贸有限公司"))
JavaScript(浏览器 / Node 18+)
const resp = await fetch(
"https://api.xujian.tech/openapi/enterprise/abnormal?keyword=" + encodeURIComponent("重庆某某商贸有限公司"),
{ headers: { "X-API-Key": API_KEY } }
);
const { code, msg, data } = await resp.json();
if (code === 0) {
const still = data.list.filter((r) => r.disabled === "0" && !r.outDate);
console.log("当前仍在名录的条数:", still.length);
} else {
console.info("无经营异常(不收费):", msg);
}
常见问题(FAQ)
enterprise.abnormal 接口怎么收费?
enterprise.abnormal 的收费类型为 PER_CALL(按次计费),当前单价 0.2000 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
企业曾被列入但已移出,还算异常吗?
接口会把历史记录一并返回。判断规则:outDate 被填上 = 已移出;
disabled = 0 = 当前有效,1 = 历史公示信息。
只有 disabled = 0 且 outDate 为空,才是「现在仍在名录中」。
常见的列入原因有哪些?
最常见的是「未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告」, 其次是「通过登记的住所或者经营场所无法联系」与「公示企业信息隐瞒真实情况、弄虚作假」。
province 字段是什么格式?
两位字母的省份代码,如 TJ 天津、HE 河北、CQ 重庆,
便于做分区域统计;展示给用户时请自行映射成中文省份名。
查不到记录一定是清白企业吗?
通常可以这么解读,但请确认关键词是工商登记全称。
另外经营异常只反映工商侧状态,建议与
enterprise.dishonesty(失信被执行人)组合使用。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。