接口概述
一句话说明
enterprise.dishonesty 是企业准入与风控环节最常用的一道免疫检查: 合作前查一次,能直接识别出已进入失信被执行人名单的合作方。 由于采用查得计费,查不到记录(即无失信)同样不收费, 因此可以放心把批量名单整体跑一遍。
| 请求地址 | https://api.xujian.tech/openapi/enterprise/dishonesty |
|---|---|
| 请求方式 | GET(keyword 放 Query String) |
| 鉴权方式 | 请求头 X-API-Key |
| 接口编码 | enterprise.dishonesty |
| 收费类型 | 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/dishonesty" \
--data-urlencode "keyword=重庆某某建筑工程有限公司" \
-H "X-API-Key: 你的APIKey"
判定建议
业务上请只看 disabled = 0 的记录:
0 表示当前仍有效的失信信息,1 表示已转为历史信息(如义务履行完毕后被屏蔽)。
仅凭历史记录做「一票否决」容易误伤。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
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[] 失信记录字段
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
province | String | 重庆 | 省份,反映案件管辖地域 |
date | String | 2023-05-18 | 立案时间 |
docNumber | String | (2023)渝0113执1234号 | 执行依据文号 |
finalDuty | String | 给付申请执行标的783,500.00元 | 生效法律文书确定的义务 |
executionStatus | String | 全部未履行 | 被执行人履行情况 |
caseNumber | String | (2023)渝0113执1234号 | 案号 |
amount | String | 783500.00 | 执行标的(金额) |
publishDate | String | 2023-11-20 | 发布日期 |
court | String | 重庆市巴南区人民法院 | 执行法院全称 |
executionDesc | String | 有履行能力而拒不履行生效法律文书确定义务 | 失信被执行人行为具体情形 |
disabled | String | 0 | 0-当前有效信息,1-历史信息 |
operName | String | 李伦智 | 法定代表人姓名 |
number | String | 91500113MAABRA7D0H | 组织机构号 / 企业标识号 |
exDepartment | String | 重庆市巴南区人民法院 | 做出执行依据单位 |
响应示例
成功(命中失信记录,code = 0)
{
"code": 0,
"msg": "success",
"data": {
"keyword": "重庆某某建筑工程有限公司",
"total": 1,
"list": [
{
"province": "重庆",
"date": "2023-05-18",
"docNumber": "(2023)渝0113民初1234号",
"finalDuty": "给付申请执行标的783500.00元",
"executionStatus": "全部未履行",
"caseNumber": "(2023)渝0113执1234号",
"amount": "783500.00",
"publishDate": "2023-11-20",
"court": "重庆市巴南区人民法院",
"executionDesc": "有履行能力而拒不履行生效法律文书确定义务",
"disabled": "0",
"operName": "李伦智",
"number": "91500113MAABRA7D0H",
"exDepartment": "重庆市巴南区人民法院"
}
],
"apiCode": "enterprise.dishonesty",
"apiName": "企业失信被执行人查询",
"chargeType": "PER_CALL",
"balance": 99.8000,
"costMs": 640
}
}
失败(无失信记录)—— 不收费
{
"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/dishonesty")
.form("keyword", "重庆某某建筑工程有限公司")
.header("X-API-Key", apiKey)
.timeout(15000)
.execute()
.body();
JSONObject json = JSONUtil.parseObj(body);
if (json.getInt("code") != 0) {
// 500 且 msg 含「未查询到」= 无失信记录,业务上按未命中处理
System.out.println("未命中或服务异常:" + json.getStr("msg"));
return;
}
JSONObject data = json.getJSONObject("data");
System.out.println("命中 " + data.getInt("total") + " 条失信记录");
data.getJSONArray("list").forEach(o -> {
JSONObject r = (JSONObject) o;
if ("0".equals(r.getStr("disabled"))) {
System.out.println(r.getStr("caseNumber") + " " + r.getStr("court") + " " + r.getStr("amount"));
}
});
Python
import requests
def query_dishonesty(api_key: str, keyword: str):
"""查询失信被执行人;无记录返回空列表且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/enterprise/dishonesty",
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 risk_hit(api_key: str, keyword: str) -> bool:
"""只看仍然生效的失信记录"""
return any(r.get("disabled") == "0" for r in query_dishonesty(api_key, keyword))
if __name__ == "__main__":
print("是否命中有效失信:", risk_hit("你的APIKey", "重庆某某建筑工程有限公司"))
JavaScript(浏览器 / Node 18+)
const resp = await fetch(
"https://api.xujian.tech/openapi/enterprise/dishonesty?keyword=" + encodeURIComponent("重庆某某建筑工程有限公司"),
{ headers: { "X-API-Key": API_KEY } }
);
const { code, msg, data } = await resp.json();
if (code === 0) {
const effective = data.list.filter((r) => r.disabled === "0");
console.log("有效失信记录:", effective.length);
} else {
console.info("未命中失信名单(不收费):", msg);
}
常见问题(FAQ)
enterprise.dishonesty 接口怎么收费?
enterprise.dishonesty 的收费类型为 PER_CALL(按次计费),当前单价 0.2000 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
查出来是空的,一定代表没有失信吗?
接口按「查得计费」设计:查不到记录时同样返回失败提示且不收费,
业务上通常可解读为「未命中失信名单」。但如果关键词不是工商登记全称,
可能只是没匹配上——建议先用 enterprise.query 校正全称后重查。
disabled 字段怎么用?
disabled 为 0 表示当前仍有效的失信信息,
1 表示已转为历史信息(如义务已履行后被屏蔽)。
做准入规则时重点看 disabled = 0 的记录,避免误伤已履约企业。
数据多久更新一次?
数据源最快当日更新、最晚七日内更新。对时效性要求高的准入场景, 建议在签署关键合同或放款前重查一次。
可以查自然人吗?
当前接口按企业名称匹配失信名单。若要核验法定代表人个人的失信情况,
建议结合 enterprise.detail 返回的法人信息做交叉判断,但对个人的失信查询请另行确认产品支持范围。
批量核验成本怎么控制?
因「查不到不收费」,干净名单的核验成本极低;建议本地缓存历史结论 (建议 7 天内复用),控制并发即可。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。