车型识别查询接口说明:品牌、车系、车型三层数据的接入与调用
本文为纯技术接入说明,面向需要在业务中接入「车型数据查询」能力的开发者。内容涵盖能力边界、接入流程、三个接口的参数与返回结构、多语言调用示例、在线调试实录、错误码排查与工程实践建议。

一、技术简介
车型数据查询是一组面向车辆档案的结构化数据接口,用于在「品牌 → 车系 → 车型」三层实体之间逐级定位并读取参数。典型用途包括:
- 车辆资产管理:录入 VIN 后自动补全品牌、车系、年款与配置。
- 保险与后市场:按车系/车型拉取动力、变速箱、车身尺寸等基础参数。
- 数据分析与内容生产:批量遍历品牌—车系—车型树,构建本地车型库。
该接口以分层查询为设计核心:先取品牌列表,再取某品牌下的车系,最后取某车系下的车型详情,字段以「车系/车型/子车型」为主线,并附带配置项、动力、车身、安全配置等结构化属性。
二、能力概览
| 接口 | 路径 | 方法 | 作用 | 关键入参 |
|---|---|---|---|---|
| 品牌查询 | /searchBrand |
GET | 返回全部车辆品牌列表 | 无 |
| 车系查询 | /searchSeries |
GET | 返回某品牌下的车系列表 | brandId 或 brandName |
| 车型详情 | /searchCarInfo |
GET | 返回某车系下车型的详细参数 | brandId + serieId(必填),modelId/分页(可选) |
数据规模:覆盖近 200 个品牌及子品牌,包含上万款车型。返回体为 JSON,统一包裹于 showapi_res_body.data 之下。

三、适用场景
- 车型库建设:遍历品牌→车系→车型三层,落库形成可检索的车辆主数据。
- VIN / 车牌识别补全:识别出品牌车系后,调用详情接口补全动力、尺寸、配置等字段。
- 行业与保险系统:为保单、理赔、定价模型提供车型技术参数。
- 内容平台:按车系生成车型卡片、参数表,支撑汽车垂类内容生产。
四、接入流程
- 申请凭证:在控制台创建应用,获取
appcode(简单身份认证)或AppKey + AppSecret(签名认证)。 - 确认调用域名:本文示例使用
carapi.market.alicloudapi.com,完整调用地址见控制台接口文档。 - 选择认证方式:开发联调用
appcode(Header 带Authorization: APPCODE <你的appcode>);生产按规范用签名认证。 - 按三层顺序调用:
品牌查询→车系查询(带brandId/brandName)→车型详情(带brandId+serieId)。 - 解析返回:业务数据在
showapi_res_body.data;showapi_res_code非 0 时读showapi_res_error。

五、接口一:品牌查询 /searchBrand
作用:一次性返回全部车辆品牌,是三层查询的入口。
请求参数:无(GET,无需任何 Query/Header/Body 参数)。
返回结构:
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_body": {
"msg": "查询成功!",
"data": [
{
"initial": "A", "brand_id": "61234c1ebe669bf6be251556", "brand": "爱驰汽车" },
{
"initial": "A", "brand_id": "61234c1ebe669bf6be251555", "brand": "阿尔法・罗密欧" },
{
"initial": "A", "brand_id": "61234c1ebe669bf6be251557", "brand": "ARCFOX极狐" }
]
}
}
字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
initial |
string | 品牌首字母(用于分组/筛选) |
brand_id |
string | 品牌唯一标识,作为「车系查询」的入参 |
brand |
string | 品牌名称 |
brand_id是后续调用车系查询(brandId)的关键,建议落库保存,避免每次都按brandName模糊匹配。
六、接口二:车系查询 /searchSeries
作用:返回某品牌下的车系列表(如「奥迪」品牌下的「奥迪A3」「奥迪Q5」)。
请求参数(Query,均非必填,至少传一个用于定位品牌):
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
brandId |
string | 建议 | 车辆品牌 Id(来自品牌查询的 brand_id),示例 61234c1dbe669bf6be251553 |
brandName |
string | 建议 | 品牌名称(与 brandId 二选一) |
返回结构:
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_body": {
"msg": "查询成功!",
"data": [
{
"series": "一汽-大众奥迪",
"model": "奥迪A3两厢",
"model_id": "59bf44603909f3a96b69eb81",
"initial": "A",
"brand_id": "59bf445f3909f3a96b69eb7e",
"brand": "奥迪",
"series_id": "59bf44603909f3a96b69eb80"
},
{
"series": "一汽-大众奥迪",
"model": "奥迪Q5",
"model_id": "59bf44623909f3a96b69eb87",
"initial": "A",
"brand_id": "59bf445f3909f3a96b69eb7e",
"brand": "奥迪",
"series_id": "59bf44603909f3a96b69eb80"
}
]
}
}
字段说明:
| 字段 | 说明 |
|---|---|
series |
车系分组名(如「一汽-大众奥迪」) |
model |
车系/车型名称(如「奥迪A3两厢」) |
series_id |
车系 Id,作为「车型详情」的 serieId 入参 |
brand_id / brand |
回显品牌 |
七、接口三:车型详情 /searchCarInfo
作用:返回某车系下车型的完整技术参数(动力、变速箱、车身尺寸、配置项等)。
请求参数(Query):
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
brandId |
string | 是 | 车辆品牌 Id,示例 61234c1dbe669bf6be251553 |
serieId |
string | 是 | 车系 Id(来自车系查询的 series_id),示例 61235b4dbe66d5b348bddef6 |
modelId |
string | 否 | 子车系/车型 Id,用于进一步定位具体年款 |
page |
int | 否 | 当前页码,示例 1 |
maxResults |
int | 否 | 每页返回条数,示例 20 |

返回结构(节选,一个车型对象):
{
"showapi_res_code": 0,
"showapi_res_error": "",
"showapi_res_body": {
"msg": "查询成功!",
"data": [
{
"brandId": "44",
"brandKey": "B",
"brandName": "宝马",
"carId": "58a2ca6b7faaad13e4078d80",
"carName": "宝马3系",
"carSeriesId": "196",
"carType": "b",
"ckg": "4760*1811*1455",
"bsx": "8挡手自一体",
"bsxpz": {
"dwgs": "8", "bsxlx": "手自一体变速箱(AT)", "jc": "8挡手自一体" }
}
]
}
}
关键字段说明:
| 字段 | 说明 |
|---|---|
carId |
车型唯一 Id |
carName |
车型名称(如「宝马3系」) |
brandName / brandKey |
品牌名 / 品牌首字母 |
ckg |
长×宽×高(车身尺寸,单位 mm) |
bsx / bsxpz |
变速箱简述 / 变速箱配置(挡数、类型、简称) |
aqzb / blhsj 等 |
配置项对象,●=配备、-=未配备、○=部分配备 |
配置类子对象(
aqzb安全配置、blhsj玻璃/后视镜等)字段众多且为缩写码,建议按需映射到业务字段,全量展示前做码表翻译。
八、在线调试实录
以下为例示链路,从品牌 → 车系 → 车型详情逐级调用(Authorization 头使用 APPCODE 方式)。
步骤 1:品牌查询
curl -X GET "完整调用地址/searchBrand" \
-H "Authorization: APPCODE YOUR_APPCODE"
返回包含 data[],取目标品牌的 brand_id(如「宝马」对应的品牌 Id)。
步骤 2:车系查询
curl -X GET "完整调用地址/searchSeries?brandId=61234c1dbe669bf6be251553" \
-H "Authorization: APPCODE YOUR_APPCODE"
返回某品牌下车系列表,取目标车系的 series_id。
步骤 3:车型详情
curl -X GET "完整调用地址/searchCarInfo?brandId=61234c1dbe669bf6be251553&serieId=61235b4dbe66d5b348bddef6&page=1&maxResults=20" \
-H "Authorization: APPCODE YOUR_APPCODE"
返回该系下车型参数数组;showapi_res_code 为 0 即成功。
若使用签名认证(
AppKey+AppSecret),需按接口文档的签名规则生成请求头,参数需参与签名计算,联调阶段建议先用APPCODE快速验证参数正确性,再切换到签名方式上线。

九、多语言调用示例
Python
import requests
base = "完整调用域名" # 见控制台接口文档
headers = {
"Authorization": "APPCODE YOUR_APPCODE"}
def search_brand():
r = requests.get(f"{base}/searchBrand", headers=headers, timeout=10)
r.raise_for_status()
data = r.json()["showapi_res_body"]["data"]
return data # [{initial, brand_id, brand}, ...]
def search_series(brand_id):
r = requests.get(f"{base}/searchSeries",
params={
"brandId": brand_id}, headers=headers, timeout=10)
r.raise_for_status()
return r.json()["showapi_res_body"]["data"]
def car_detail(brand_id, serie_id, page=1, max_results=20):
r = requests.get(f"{base}/searchCarInfo",
params={
"brandId": brand_id, "serieId": serie_id,
"page": page, "maxResults": max_results},
headers=headers, timeout=10)
r.raise_for_status()
body = r.json()["showapi_res_body"]
if body.get("showapi_res_code") not in (0, "0"):
raise RuntimeError(body.get("showapi_res_error"))
return body["data"]
Node.js(fetch)
const BASE = "完整调用域名";
const HEADERS = {
Authorization: "APPCODE YOUR_APPCODE" };
async function searchSeries(brandId) {
const url = `${
BASE}/searchSeries?brandId=${
encodeURIComponent(brandId)}`;
const res = await fetch(url, {
headers: HEADERS });
if (!res.ok) throw new Error(`HTTP ${
res.status}`);
const json = await res.json();
if (json.showapi_res_code !== 0) throw new Error(json.showapi_res_error);
return json.showapi_res_body.data;
}
Java(HttpURLConnection 摘要)
// 省略异常与连接细节,重点在 URL 拼装与认证头
String url = base + "/searchSeries?brandId=" + URLEncoder.encode(brandId, "UTF-8");
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "APPCODE " + appcode);
conn.setConnectTimeout(10_000);
conn.setReadTimeout(10_000);
int code = conn.getResponseCode();
// code == 200 时读取 showapi_res_body.data;非 200 读取 showapi_res_error
十、调用限制与工程实践
- 计次规则:仅 HTTP 响应
200时扣减次数;非 200(限流、参数错、鉴权失败)不扣费。 - 前置校验:
brandId/serieId缺失时应先本地拦截,避免空参请求消耗配额。 - 幂等与缓存:品牌/车系列表变化缓慢,建议本地缓存(如品牌表每日刷新一次),车型详情可按
carId设 TTL 缓存,显著降低调用量。 - 限流与重试:对 4xx/5xx 与限流返回做指数退避重试,设置最大重试次数;避免瞬时高并发触发风控。
- 熔断降级:连续失败达到阈值时熔断,降级为「返回本地缓存 / 提示稍后重试」。
- 合规与数据安全:车型参数属结构化数据,落库与展示遵循最小必要原则,日志中不打印完整
appcode;传输走 HTTPS。

十一、错误码与排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
showapi_res_code 非 0 |
参数缺失/非法、品牌车系不存在 | 核对 brandId/serieId 是否来自上一步返回 |
| HTTP 401 / 鉴权失败 | appcode 错误或未加 APPCODE 前缀 |
检查请求头格式与凭证 |
| HTTP 429 / 限流 | 超过频率配额 | 退避重试 + 客户端限流 |
返回 data 为空 |
品牌/车系下无车型或未传对 Id | 用「车系查询」确认可用的 series_id |
十二、技术 FAQ
- 三个接口能单独调用吗? 可以,但「车系查询」「车型详情」依赖上一层的 Id,建议按 品牌→车系→车型 顺序调用并缓存中间结果。
- 如何定位具体年款? 在「车型详情」中用
modelId(子车系/车型 Id)进一步区分,配合page/maxResults分页遍历。 - 配置字段含义如何读?
aqzb、blhsj等对象里的●/○/-分别表示「配备/部分配备/未配备」,业务展示前建议建立码表映射。 - 鉴权选 appcode 还是签名? 联调用
appcode(APPCODE头)最简;生产对安全性与风控要求高时用AppKey+AppSecret签名。
十三、内容小结
车型数据查询接口以「品牌 → 车系 → 车型」三层为主线,通过 /searchBrand、/searchSeries、/searchCarInfo 逐级下钻获取车辆结构化参数。接入时的关键点在于:缓存中间层 Id、前置参数校验、限流重试与熔断降级,以及按码表翻译配置字段。遵循上述实践,可在控制调用成本的同时稳定支撑车型库建设、VIN 补全与行业数据分析等场景。
本文为技术接入说明,接口能力、参数与返回结构以控制台接口文档为准;调用地址、凭证获取与具体配额以实际开通的商品详情页说明为准。