接口概述
一句话说明
usedcar.detail 是「给一辆车取全部展示数据」的接口:
先用 usedcar.list 拿到车辆的 dataId,再调本接口,
一次返回车型、车况、配置、图片集与车辆档案,够直接渲染一个车源详情页——
不必再为图片、首付、过户次数分别拼接口。
| 请求地址 | https://api.xujian.tech/openapi/usedcar/detail |
|---|---|
| 请求方式 | GET(dataId 放 Query String;也可用别名 infoid) |
| 鉴权方式 | 请求头 X-API-Key |
| 接口编码 | usedcar.detail |
| 收费类型 | PER_CALL(按次计费,0.2000 元/次) |
| 计费特殊规则 | 查得计费:dataId 缺失、上游不可用、未查询到该车辆详情时,
返回失败且不扣费 |
| 响应格式 | JSON,Content-Type: application/json;charset=UTF-8 |
| 是否需要授权 | 否(无需授权,API Key 有效且余额充足即可调用) |
| 典型用途 | 车源详情页一次渲染、车源同步入库、图片转存、车况筛选与行情统计 |
快速开始
# 用 usedcar.list 返回的车辆 dataId 拉取该车辆完整详情(含图片集)
curl -s -G "https://api.xujian.tech/openapi/usedcar/detail" \
--data-urlencode "dataId=60323428" \
-H "X-API-Key: 你的APIKey"
dataId 从哪里来
dataId 是 usedcar.list
车源列表每条车源都带的车辆数据 ID,必填;也可用别名 infoid 传入。
若传的不是列表返回的 dataId,或该车没有可查询的详情,接口会返回失败且不计费。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key | String | 是 | 开发者 API Key |
| 参数名 | 类型 | 必填 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|---|
dataId | String | 是 | — | 60323428 | 车辆数据 ID,取 usedcar.list 返回的 dataId;
缺失或查不到该车辆详情时返回失败且不计费 |
infoid | String | 否 | — | 60323428 | dataId 的历史别名,口径完全一致;仅当 dataId 为空时生效 |
响应参数
车型与地区
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
dataId | String | 60323428 | 本次查询使用的车辆数据 ID(原样回显) |
infoid | Long | 60323428 | 上游车辆信息 ID,通常与 dataId 一致 |
carname | String | 大众迈腾 2021款 330TSI DSG 豪华型 | 车型名称(含品牌、年款、配置版本) |
brandname | String | 大众 | 品牌名称 |
seriesname | String | 大众迈腾 | 车系名称 |
specname | String | 2021款 330TSI DSG 豪华型 | 年款 + 配置版本名称 |
cid | Long | 500100 | 城市 ID |
cname | String | 重庆 | 城市名称 |
pid | Long | 500000 | 省份 ID |
countyname | String | (空) | 区县名称;多数车源为空字符串 |
车况与手续
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
mileage | BigDecimal | 3.20 | 表显里程,单位:万公里 |
price | BigDecimal | 12.80 | 车辆售价,单位:万元 |
downpayment | BigDecimal | 3.80 | 首付价格,单位:万元;isloan = 0 时可能为 0 或缺失 |
isloan | Integer | 1 | 是否支持贷款:1 支持 0 不支持 |
transfercount | Integer | 0 | 过户次数 |
firstregshortdate | String | 2021-06-01 | 首次上牌时间(完整日期) |
firstregdate | String | 2021-06 | 首次上牌时间(年月) |
firstregyear | String | 2021年 | 首次上牌年份 |
firstregstr | String | 4年 | 车龄描述 |
environmental | String | 国VI | 环保标准 |
examine | String | 2027-6 | 年审到期时间(年月) |
insurance | String | 2026-6 | 交强险到期时间(年月) |
colorname | String | 黑色 | 车身颜色 |
carusename | String | 家用 | 车辆用途 |
配置参数
| 字段 | 类型 | 示例 | 说明 |
|---|---|---|---|
engine | String | 2.0T | 发动机描述 |
gearbox | String | 自动 | 变速箱描述 |
fuelname | String | 汽油 | 燃料类型(混动车型可能含「+48V轻混系统」等后缀) |
drivingmode | String | 前置前驱 | 驱动方式 |
levelname | String | 中型车 | 车辆级别 |
flowmode | String | 涡轮增压 | 进气形式 |
marketrelative | String | 低于市场价3.50% | 与市场价对比描述;上游未给出时为空 |
车商、描述与图片
| 字段 | 类型 | 说明 |
|---|---|---|
dealerid | Long | 经销商 ID,可配合 usedcar.sellerinfo 查询车商主体信息 |
remark | String | 车辆描述(车商自行发布,长度不固定,可能含门店信息与服务承诺) |
videourl | String | 视频地址;无视频时为空字符串 |
imageurl | String | 封面图地址,可直接用于 <img src> |
piclist | Array<String> | 全部车辆图片地址列表 |
catepiclist | Array<Object> | 分类图集:title(外观 / 内饰 / 细节 等)+ list(该分组图片地址);
分组标题与数量随车源变化,请按实际返回动态渲染 |
车辆档案与公共字段
| 字段 | 类型 | 说明 |
|---|---|---|
archivelist | Array<Object> | 车辆档案:name + value 键值对,常见为上牌时间 / 表显里程 / 过户次数 / 所在地区 |
archivebottomlistexp1 | Array<Object> | 档案补充项:同为 name + value,常见为驱动方式 / 变速箱 / 综合油耗 / 发动机 |
apiCode | String | 接口编码 usedcar.detail |
apiName | String | 接口名称 |
chargeType | String | 计费类型 |
balance | BigDecimal | 调用完成后(已扣费)的账户余额(元) |
costMs | Long | 本次调用耗时(毫秒) |
口径与边界提示
① 金额统一单位:mileage 万公里、price 与 downpayment 万元,
均为可直接 parse 的数值,与 usedcar.list 口径一致;
② 上游的部分平台内部字段(如 fromtype / linktype / particularactivityurl)
不返回,调用方不要依赖;
③ 图片地址为上游图床直链,长期展示建议转存到自己的对象存储;
④ remark 由车商自行发布,展示前请做富文本净化与长度截断。
响应示例
成功(code = 0)
{
"code": 0,
"msg": "success",
"data": {
"dataId": "60323428",
"infoid": 60323428,
"carname": "大众迈腾 2021款 330TSI DSG 豪华型",
"brandname": "大众",
"seriesname": "大众迈腾",
"specname": "2021款 330TSI DSG 豪华型",
"cid": 500100,
"cname": "重庆",
"pid": 500000,
"countyname": "",
"engine": "2.0T",
"gearbox": "自动",
"mileage": 3.20,
"price": 12.80,
"downpayment": 3.80,
"isloan": 1,
"transfercount": 0,
"firstregshortdate": "2021-06-01",
"firstregdate": "2021-06",
"firstregyear": "2021年",
"firstregstr": "4年",
"environmental": "国VI",
"examine": "2027-6",
"insurance": "2026-6",
"colorname": "黑色",
"carusename": "家用",
"fuelname": "汽油",
"drivingmode": "前置前驱",
"levelname": "中型车",
"flowmode": "涡轮增压",
"marketrelative": "低于市场价3.50%",
"dealerid": 142990,
"remark": "【示例车商】车辆描述由车商自行发布,可能包含服务承诺、金融方案与门店信息等内容,长度不固定。",
"videourl": "",
"imageurl": "https://example.com/car/magotan-cover.jpg.webp",
"piclist": [
"https://example.com/car/magotan-1.jpg.webp",
"https://example.com/car/magotan-2.jpg.webp",
"https://example.com/car/magotan-3.jpg.webp"
],
"catepiclist": [
{
"title": "外观",
"list": [
"https://example.com/car/magotan-1.jpg.webp",
"https://example.com/car/magotan-2.jpg.webp"
]
},
{
"title": "内饰",
"list": [
"https://example.com/car/magotan-3.jpg.webp"
]
}
],
"archivelist": [
{"name": "上牌时间", "value": "2021-06"},
{"name": "表显里程", "value": "3.20万公里"},
{"name": "过户次数", "value": "0次"},
{"name": "所在地区", "value": "重庆"}
],
"archivebottomlistexp1": [
{"name": "驱动方式", "value": "前置前驱"},
{"name": "变速箱", "value": "7挡双离合"},
{"name": "综合油耗", "value": "6.6L"},
{"name": "发动机", "value": "2.0T"}
],
"apiCode": "usedcar.detail",
"apiName": "二手车车辆详情查询",
"chargeType": "PER_CALL",
"balance": 99.8000,
"costMs": 520
}
}
失败(缺少 dataId)—— 不收费
{
"code": 500,
"msg": "dataId 不能为空(取 usedcar.list 返回的车辆 dataId)",
"data": null
}
失败(查不到车辆详情)—— 不收费
{
"code": 500,
"msg": "未查询到该车辆的详情信息,请核对 dataId 后重试;本次调用不计费",
"data": null
}
错误码与常见失败原因
| code | msg(示例) | 处理建议 |
|---|---|---|
| 0 | success | 调用成功 |
| 500 | 缺少请求头 X-API-Key | 补充 X-API-Key |
| 500 | API Key 无效 / API Key 已停用 | 检查 Key 或重新启用 |
| 500 | 客户不存在或已停用 | 联系平台(可联系微信xujian_cq) |
| 500 | 接口不存在或已停用 | 确认 usedcar.detail 当前是否维护中 |
| 500 | 余额不足,请先充值。可联系微信xujian_cq | 充值后重试,余额不足不扣费 |
| 500 | 二手车服务未启用 / 二手车服务未配置(上游凭证缺失) | 平台侧配置问题,联系平台处理;不计费 |
| 500 | dataId 不能为空(取 usedcar.list 返回的车辆 dataId) | 补齐 dataId;不计费 |
| 500 | 未查询到该车辆的详情信息,请核对 dataId 后重试;本次调用不计费 | 确认 dataId 来自 usedcar.list;不计费 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 稍后重试;不计费 |
多语言代码示例
Java(Hutool)
String body = HttpRequest.get("https://api.xujian.tech/openapi/usedcar/detail")
.form("dataId", "60323428")
.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");
System.out.println("车型:" + data.getStr("carname"));
System.out.println("里程:" + data.getBigDecimal("mileage") + " 万公里");
System.out.println("售价:" + data.getBigDecimal("price") + " 万元");
System.out.println("首付:" + data.getBigDecimal("downpayment") + " 万元");
System.out.println("图片数:" + data.getJSONArray("piclist").size());
// 分类图集:按实际返回的 title 动态渲染(外观 / 内饰 / 细节)
data.getJSONArray("catepiclist").forEach(g -> {
JSONObject group = (JSONObject) g;
System.out.println(group.getStr("title") + ":" + group.getJSONArray("list").size() + " 张");
});
Python
import requests
def get_car_detail(api_key: str, data_id: str) -> dict | None:
"""按车辆 dataId 拉取车辆完整详情;查不到返回 None 且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/usedcar/detail",
params={"dataId": data_id},
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__":
car = get_car_detail("你的APIKey", "60323428")
if car:
print(car["carname"], f'{car["mileage"]}万公里', f'{car["price"]}万元')
for group in car.get("catepiclist", []):
print(group["title"], len(group["list"]))
JavaScript(浏览器 / Node 18+)
const params = new URLSearchParams({ dataId: "60323428" });
const resp = await fetch(`https://api.xujian.tech/openapi/usedcar/detail?${params}`, {
headers: { "X-API-Key": API_KEY },
});
const { code, msg, data } = await resp.json();
if (code === 0) {
console.log(data.carname, `${data.mileage}万公里`, `${data.price}万元`);
// 分类图集按 title 动态渲染,不要写死「外观 / 内饰 / 细节」
data.catepiclist.forEach((g) => console.log(g.title, g.list.length));
} else {
console.warn("查询失败(不收费):", msg);
}
常见问题(FAQ)
usedcar.detail 接口怎么收费?
usedcar.detail 的收费类型为 PER_CALL(按次计费),当前单价 0.2000 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
dataId 必填吗?从哪里来?
必填。dataId 来自 usedcar.list
返回的车辆数据 ID;不传或传错(不是列表返回的 dataId)会直接返回失败且不计费。
也可以用别名 infoid 传入,两者等价。
里程、售价、首付的单位是什么?
mileage 单位是万公里,price 与 downpayment
单位是万元,都是可直接解析的数值,与 usedcar.list 口径一致。
不支持贷款的车源(isloan = 0)首付可能为 0 或缺失,展示前先判空。
图片链接能直接长期外链吗?
可以直连渲染,但 imageurl / piclist / catepiclist
返回的是上游图床直链,存在防盗链与过期风险;长期展示的业务建议在同步时把图片转存到自己的对象存储。
平台不保证第三方图床的长期可用性。
没有查到车辆详情会扣费吗?
不会。接口采用「先预鉴权、查到车辆详情后再扣费」的两段式流程,
dataId 缺失、上游不可用、未查询到该车辆详情时,返回失败且不扣费、不写扣费流水。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。