格物 开放 API商品

REST API · 接口参考

REST API 参考 · 通用

商品

商品接口正在重构为统一商品层,届时所有场景用同一套接口、同一种商品 ID。在那之前员工福利与企业采购用 /v1/enterprise/*,消费者购物用 /v1/lm/*,每条接口标了适用场景。按关键词或类目找商品都用搜索,不提供翻完整个货盘的列表接口。

#商品详情

GET/v1/enterprise/products/{id}

鉴权appKey适用 员工福利 / 企业采购

出现在商品

路径参数

字段类型必填说明
idstring是
返回字段28 个,点击展开
字段类型说明
idstring商品 ID,下单时原样放进 items[].productId
externalItemIdstring
titlestring
subtitlestring
imageUrlstring
imageUrlsstring[]
categorystring
brandstring
pricenumber售价(元);多规格商品为最低规格价
marketPricenumber
shopNamestring
sales30dnumber
availabilitystring可选值:in_stock / out_of_stock
featuredboolean是否运营精选
matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
matchedSku.skuIdstring
matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
descriptionstring
detailImagesstring[]
specsobject
skusobject[]只有一个规格且无 skuId 时不返回
skus[].skuIdstringnull = 下单时不传 skuId;"0" 是真实 id,要原样传。可能为 null
skus[].specsobject
skus[].pricenumber
skus[].stocknumber
skus[].imagestring

错误

  • 404 NOT_FOUND:商品不存在或已下架

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/products/{id}" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "id": "string",3  "externalItemId": "string",4  "title": "string",5  "subtitle": "string",6  "imageUrl": "string",7  "imageUrls": [8    "string"9  ],10  "category": "string",11  "brand": "string",12  "price": 0,13  "marketPrice": 0,14  "shopName": "string",15  "sales30d": 0,16  "availability": "in_stock",17  "featured": true,18  "matchedSku": {19    "skuId": "string",20    "specText": "string",21    "price": 0,22    "imageUrl": "string"23  },24  "description": "string",25  "detailImages": [26    "string"27  ],28  "specs": null,29  "skus": [30    {31      "skuId": "string",32      "specs": null,33      "price": 0,34      "stock": 0,35      "image": "string"36    }37  ]38}

#商品批量详情

GET/v1/enterprise/products/batch

商品批量详情(ids 逗号分隔,最多 20 件)

鉴权appKey适用 员工福利 / 企业采购

一次查多件商品的详情(购物车 / 收藏 / 订单回显用),每件与「商品详情」同一结构、同一可见范围。按请求顺序返回 items;查不到或已下架的放进 notFound,不报错。一次最多 20 件,超过回 TOO_MANY_IDS。

查询参数

字段类型必填说明
idsstring是商品 id,英文逗号分隔,最多 20 个,如 ep_self_1,ep_self_2
返回字段30 个,点击展开
字段类型说明
itemsobject[]
items[].idstring商品 ID,下单时原样放进 items[].productId
items[].externalItemIdstring
items[].titlestring
items[].subtitlestring
items[].imageUrlstring
items[].imageUrlsstring[]
items[].categorystring
items[].brandstring
items[].pricenumber售价(元);多规格商品为最低规格价
items[].marketPricenumber
items[].shopNamestring
items[].sales30dnumber
items[].availabilitystring可选值:in_stock / out_of_stock
items[].featuredboolean是否运营精选
items[].matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
items[].matchedSku.skuIdstring
items[].matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
items[].matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
items[].matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
items[].descriptionstring
items[].detailImagesstring[]
items[].specsobject
items[].skusobject[]只有一个规格且无 skuId 时不返回
items[].skus[].skuIdstringnull = 下单时不传 skuId;"0" 是真实 id,要原样传。可能为 null
items[].skus[].specsobject
items[].skus[].pricenumber
items[].skus[].stocknumber
items[].skus[].imagestring
notFoundstring[]查不到或当前不可见的商品 id

错误

  • 400 BAD_REQUEST:ids 为空;TOO_MANY_IDS:超过 20 件

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/products/batch" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "id": "string",5      "externalItemId": "string",6      "title": "string",7      "subtitle": "string",8      "imageUrl": "string",9      "imageUrls": [10        "string"11      ],12      "category": "string",13      "brand": "string",14      "price": 0,15      "marketPrice": 0,16      "shopName": "string",17      "sales30d": 0,18      "availability": "in_stock",19      "featured": true,20      "matchedSku": {21        "skuId": "string",22        "specText": "string",23        "price": 0,24        "imageUrl": "string"25      },26      "description": "string",27      "detailImages": [28        "string"29      ],30      "specs": null,31      "skus": [32        {}33      ]34    }35  ],36  "notFound": [37    "string"38  ]39}

#按标签取商品

GET/v1/enterprise/products/by-tag

按标签取商品(tags 逗号分隔,match=any/all,支持按销量 / 价格 / 上架 / 打标时间排序或随机打散)

鉴权appKey适用 员工福利 / 企业采购

取运营打了指定标签的商品,标签 key 向平台运营索取。商品结构与商品列表一致,可见范围为已上架 + 本渠道可见 + 有货。实际生效的标签回在 tags(已剔除停用 / 不存在的):match=any 时忽略无效标签、全部无效返回空列表;match=all 时有一个无效即返回空列表。未带 x-open-user 时只能取第一页(翻页返回 401 NEED_LOGIN),排序不受限。

查询参数

字段类型必填说明
tagsstring是标签 key,英文逗号分隔(也可重复传 tags=a&tags=b),最多 20 个,超出的忽略
matchstring否any:带任一标签即可;all:须同时带齐所有标签。可选值:any / all。默认 "any"
sortBystring否sales_desc 销量从高到低(销量为分档值,同档按更新时间);price_asc / price_desc 按售价;newest 按上架时间,新品在前;tagged 按打标时间,运营最近打上该标签的在前;random 随机打散,同一用户一小时内顺序固定、翻页不重不漏,每小时换一次(未带 x-open-user 时同一 appKey 下所有访客同一顺序;命中超过 2000 件时按 sales_desc 返回)。可选值:sales_desc / price_asc / price_desc / newest / tagged / random。默认 "sales_desc"
pageinteger否默认 1。≥ 1
pageSizeinteger否默认 20。≥ 1,≤ 100
返回字段25 个,点击展开
字段类型说明
itemsobject[]
items[].idstring商品 ID,下单时原样放进 items[].productId
items[].externalItemIdstring
items[].titlestring
items[].subtitlestring
items[].imageUrlstring
items[].imageUrlsstring[]
items[].categorystring
items[].brandstring
items[].pricenumber售价(元);多规格商品为最低规格价
items[].marketPricenumber
items[].shopNamestring
items[].sales30dnumber
items[].availabilitystring可选值:in_stock / out_of_stock
items[].featuredboolean是否运营精选
items[].matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
items[].matchedSku.skuIdstring
items[].matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
items[].matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
items[].matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
pageinteger
pageSizeinteger
totalinteger命中总数(精确值)
hasMoreboolean
tagsstring[]实际生效的标签 key(已剔除停用 / 不存在的)

错误

  • 400 BAD_REQUEST:tags 为空,或 sortBy 不在可选值内

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/products/by-tag" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "id": "string",5      "externalItemId": "string",6      "title": "string",7      "subtitle": "string",8      "imageUrl": "string",9      "imageUrls": [10        "string"11      ],12      "category": "string",13      "brand": "string",14      "price": 0,15      "marketPrice": 0,16      "shopName": "string",17      "sales30d": 0,18      "availability": "in_stock",19      "featured": true,20      "matchedSku": {21        "skuId": "string",22        "specText": "string",23        "price": 0,24        "imageUrl": "string"25      }26    }27  ],28  "page": 0,29  "pageSize": 0,30  "total": 0,31  "hasMore": true,32  "tags": [33    "string"34  ]35}

#图文详情

GET/v1/enterprise/products/{id}/desc

图文详情(长图文,单独缓存)

鉴权appKey适用 员工福利 / 企业采购

已消毒的 HTML 片段,可直接渲染。拿不到时返回空串(仍为 200)。

路径参数

字段类型必填说明
idstring是

返回字段

字段类型说明
htmlstring
imageCountinteger

错误

  • 404 资源不存在,或不归属你的 appKey / 当前用户

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/products/{id}/desc" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "html": "string",3  "imageCount": 04}

#搜索 / 按条件浏览:商品 + 推荐规格,可附符合程度

POST/v1/enterprise/products/search

搜索 / 按条件浏览:商品 + 推荐规格,可附符合程度(mode=strict 只要完全符合的)

鉴权appKey适用 员工福利 / 企业采购

出现在商品

请求体带 version: 2(响应同样带 version: 2);不带 version 为旧版接口,返回格式不同,保留一个版本周期。按关键词 / 编码找商品,或按条件浏览。每条结果是「商品 + 推荐规格」,可附上符合程度与每个条件的判定(include: ["match"])。mode 控制多严:缺省 balanced(完全符合的在前、一件都没有才放宽);AI 助手推荐、清单解析建议 strict(只要完全符合的)。翻页用 nextCursor。匹配与排序规则、各商品池可用的筛选字段见开发者文档 §11。未带 x-open-user 时带 query、筛选或排序都返回 401 NEED_LOGIN,纯浏览只给第一页。

请求体application/json · 必须带 version: 2,其余全部可选;不传 query = 按条件浏览。不认识的参数一律 400 并在 field 里指明(带了旧参数会提示新写法)。不带 version 的请求按旧版接口处理(keyword / category / brand / priceMin / priceMax / inStockOnly / sortBy / page / pageSize,返回旧的 { items, page, pageSize, total }),保留一个版本周期

字段类型必填说明
versioninteger是接口版本,固定传 2。不传 = 旧版接口(返回格式不同)。可选值:2
queryobject否找什么:text 与 code 二选一
query.textstring否关键词。多个条件用空格分开,必须条件全部满足才算完全符合。最长 100
query.optionalstring[]否text 里「有更好、没有也行」的词(如用户说颜色无所谓):只参与排序,不作为必须条件。必须是 text 里出现过的词,否则 400。最多 10 项
query.codestring否按 SKU 编码 / 型号 / 条码 / 上游商品 ID 精确查,不容错、不改写。最长 64
filterobject否硬条件:不满足就不返回
filter.categorystring | string[]否叶子类目名,精确匹配;数组 = 任一
filter.categoryIdstring | string[]否类目 id(一级 / 二级 / 叶子),含子类目;数组 = 任一。类目导航接口给的就是它
filter.brandstring | string[]否品牌名,精确匹配;数组 = 任一
filter.priceobject否价格区间(元,含边界),按规格价:任一可售规格落在区间内即命中,此时推荐的就是区间内的规格。传反了自动对调
filter.price.gtenumber否≥ 0
filter.price.ltenumber否≥ 0
filter.inStockboolean否只要有货的
unknownstring否筛选字段没有值的商品怎么处理(当前可用字段都有值,预留)。可选值:include / exclude。默认 "include"
modestring否多严。balanced:完全符合的在前、部分符合的随后,一件都没有时才放宽(返回 relaxation);strict:只要完全符合的,宁缺毋滥(AI 助手推荐、清单解析用);broad:全部给,含放宽得到的。可选值:balanced / strict / broad。默认 "balanced"
sortstring否顺序。价格按推荐规格的价格;任何排序下不符合的(related)都排在最后。可选值:relevance / price_asc / price_desc / sales_desc。默认 "relevance"
profilestring否排序预设:agent 推荐给人看的少量结果(符合程度优先,其次有货);mall 搜索结果页。可选值:agent / mall。默认 "agent"
preferobject[]否软偏好:只影响同一符合程度内的先后,不影响返回哪些;多条按先后递减。sort 不是 relevance 时忽略。每条是以下三种写法之一:{ "field": "price", "direction": "low" | "high" } 便宜 / 贵的优先;{ "field": "brand", "value": "膳魔师" } 这个品牌优先;{ "text": "大容量" } 这个词命中的优先。最多 5 项
excludeFieldsstring[]否这次查询不用这些字段(只对 query.text 起作用):既不在里面找商品,也不拿它判断符合与否。用来对比某个字段的作用,如去掉卖点 sellingPoints。不能全部去掉。可选字段:title(标题)、titleGrams(标题按每两个字切开(中文分词切错时的兜底))、aliases(买家叫法(别名))、subtitle(副标题)、brand(品牌)、category(叶子类目名)、categoryPath(类目整条路径)、tags(平台类目路径)、skuSpecValues(各规格的规格值(颜色、尺码、容量、型号…)与材质)、skuTitles(各规格的规格名)、specsText(商品参数(前 600 字))、qualityPerformance(品质性能(前 300 字))、useCases(适用场景)、descriptionSellingPoints(商品描述与卖点(前 300 字))、audience(适用人群)、exactCodes(编码:上游商品 ID、SKU 编码、型号、条码)、supplierName(供应商名)。可选值:title / titleGrams / aliases / subtitle / brand / category / categoryPath / tags / skuSpecValues / skuTitles / specsText / qualityPerformance / useCases / descriptionSellingPoints / audience / exactCodes / supplierName
limitinteger否默认 20。≥ 1,≤ 50
cursorstring否翻页:上次返回的 nextCursor。与本次请求的条件绑定(换了条件 400),1 小时有效
includestring[]否match:每条结果附上条件判定(符合程度、每个条件满足与否及凭据)。可选值:match
返回字段58 个,点击展开
字段类型说明
versioninteger响应版本,固定 2。解析前可以校验它,防止拿旧格式硬解析。可选值:2
searchIdstring带 query 时返回;上报点击 / 加购 / 下单时带回
interpretationobject带 query.text 时返回:我们怎么理解这次查询(供参考,不是约定)
interpretation.searchedstring纠错 / 改写后实际搜的词;与输入不同时可提示「已为您搜索 xx」
interpretation.requirementsobject[]
interpretation.requirements[].textstring
interpretation.requirements[].rolestringproduct 品类 / attribute 属性 / brand 品牌 / other 其他(编码)。可选值:product / attribute / brand / other
interpretation.requirements[].enforcedboolean是否作为必须条件(决定完全符合与否)。只有有把握的条件才是 true
interpretation.requirements[].whystring不作为必须条件的原因:调用方标了可选 / 模糊词(大容量、好用)/ 认不出。可选值:optional / vague / unrecognized
hitsobject[]
hits[].productobject
hits[].product.idstring商品 ID,下单时原样放进 items[].productId
hits[].product.externalItemIdstring
hits[].product.titlestring
hits[].product.subtitlestring
hits[].product.imageUrlstring
hits[].product.imageUrlsstring[]
hits[].product.categorystring
hits[].product.brandstring
hits[].product.pricenumber售价(元);多规格商品为最低规格价
hits[].product.marketPricenumber
hits[].product.shopNamestring
hits[].product.sales30dnumber
hits[].product.availabilitystring可选值:in_stock / out_of_stock
hits[].product.featuredboolean是否运营精选
hits[].product.matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
hits[].product.matchedSku.skuIdstring
hits[].product.matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
hits[].product.matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
hits[].product.matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
hits[].product.categoryIdstring叶子类目 id(仅企业购)
hits[].skuobject推荐的规格;商品没有可售规格时为 null
hits[].sku.idstring规格 ID,即详情接口的 skus[].skuId;单规格商品(详情里没有规格选择)不给
hits[].sku.specTextstring规格值,如「曜石黑 / 1000ml」
hits[].sku.specsobject规格名 → 规格值
hits[].sku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径
hits[].sku.marketPricenumber
hits[].sku.imageUrlstring规格图;没有时用商品主图
hits[].sku.stockinteger
hits[].sku.availableboolean
hits[].sku.chosenBystringmatch 按搜索条件选出 / cheapest 条件在规格间没有区分,给价格区间内最便宜的 / only 只有一个规格。可选值:match / cheapest / only
hits[].skuCountinteger可售规格数
hits[].matchobjectinclude 含 match 时返回
hits[].match.levelstringexact 推荐的这个规格满足全部必须条件 / partial 没有不满足的,但有判断不了或分散在不同规格上的 / related 有不满足的,或是放宽得到的。可选值:exact / partial / related
hits[].match.requirementsobject[]每个条件在推荐规格上的判定,顺序同 interpretation.requirements
hits[].match.requirements[].textstring
hits[].match.requirements[].statestringmet 满足 / unmet 不满足(如类目明确是别的品类)/ unknown 判断不了(字面上没找到不算不满足)。可选值:met / unmet / unknown
hits[].match.requirements[].bystring满足的凭据:命中的规格值原文,如「曜石黑」
relaxationobject返回了不符合(related)的结果时才有:哪些必须条件没有满足。可提示「没有找到同时满足…的商品,以下是相关商品」
relaxation.droppedstring[]
relaxHintsobject[]完全符合的不足 limit 时:去掉某个必须条件能有几件完全符合的。AI 助手可据此问用户要不要放宽,再把那个词放进 query.optional 重搜
relaxHints[].dropstring
relaxHints[].exactinteger
totalobject
total.valueinteger
total.exactbooleanfalse = 估算值
nextCursorstring下一页的游标;没有 = 没有下一页。未登录访客不返回
degradedboolean搜索服务暂时不可用、退回查库:只按标题拆词匹配,没有 match 与推荐规格的条件判定

错误

  • 400 BAD_REQUEST:参数不合法(field 指明哪个参数;带了旧参数会提示新写法),version 不是 2,或 cursor 无效 / 过期 / 与本次条件不符

调用示例

1curl -X POST "https://api.gowu.net/v1/enterprise/products/search" \2  -H "x-app-key: $GOWU_APP_KEY" \3  -H "content-type: application/json" \4  -d '{"version":2,"query":{"text":"黑色 保温杯"},"mode":"strict","include":["match"],"limit":10}'

返回示例

1{2  "version": 2,3  "searchId": "string",4  "interpretation": {5    "searched": "string",6    "requirements": [7      {8        "text": "string",9        "role": "product",10        "enforced": true,11        "why": "optional"12      }13    ]14  },15  "hits": [16    {17      "product": {18        "id": "string",19        "externalItemId": "string",20        "title": "string",21        "subtitle": "string",22        "imageUrl": "string",23        "imageUrls": [],24        "category": "string",25        "brand": "string",26        "price": 0,27        "marketPrice": 0,28        "shopName": "string",29        "sales30d": 0,30        "availability": "in_stock",31        "featured": true,32        "matchedSku": {},33        "categoryId": "string"34      },35      "sku": {36        "id": "string",37        "specText": "string",38        "specs": null,39        "price": 0,40        "marketPrice": 0,41        "imageUrl": "string",42        "stock": 0,43        "available": true,44        "chosenBy": "match"45      },46      "skuCount": 0,47      "match": {48        "level": "exact",49        "requirements": []50      }51    }52  ],53  "relaxation": {54    "dropped": [55      "string"56    ]57  },58  "relaxHints": [59    {60      "drop": "string",61      "exact": 062    }63  ],64  "total": {65    "value": 0,66    "exact": true67  },68  "nextCursor": "string",69  "degraded": true70}

#类目导航 · 一级

GET/v1/enterprise/nav

鉴权appKey适用 员工福利 / 企业采购

出现在商品

返回字段

字段类型说明
itemsobject[]
items[].groupIdstring
items[].titlestring
items[].iconstring可能为 null
items[].entriesobject[]
items[].entries[].labelstring
items[].entries[].categoryIdstring
items[].entries[].categoryNamestring
items[].entries[].countinteger

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/nav" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "groupId": "string",5      "title": "string",6      "icon": "string",7      "entries": [8        {}9      ]10    }11  ]12}

#类目导航 · 二级

GET/v1/enterprise/nav/branch

类目导航 · 二级(带图)

鉴权appKey适用 员工福利 / 企业采购

查询参数

字段类型必填说明
idsstring是一级类目 id,逗号分隔,最多 20 个

返回字段

字段类型说明
itemsobject[]
items[].categoryIdstring
items[].namestring
items[].childrenobject[]每个一级最多 12 个
items[].children[].categoryIdstring
items[].children[].namestring
items[].children[].countinteger
items[].children[].imageUrlstring可能为 null
items[].children[].imageKindstring可选值:url / svg。可能为 null
items[].children[].monogramobject无图时的文字占位
items[].children[].monogram.textstring
items[].children[].monogram.huenumber

错误

  • 400 参数不合法

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/nav/branch" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "categoryId": "string",5      "name": "string",6      "children": [7        {}8      ]9    }10  ]11}

#首页专区

GET/v1/enterprise/zones

首页专区(运营位 banner),点开用下一条取商品

鉴权appKey适用 员工福利 / 企业采购可选

可选。运营配置的专区(一张 banner + 一组商品),按 sort 顺序渲染 banner,点击后用 id 调专区商品接口。停用的专区不出现。未登录访客浏览(平台为该应用配了访客货盘时)返回空列表。

返回字段

字段类型说明
itemsobject[]
items[].idstring
items[].namestring
items[].bannerUrlstring
items[].sortnumber

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/zones" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "id": "string",5      "name": "string",6      "bannerUrl": "string",7      "sort": 08    }9  ]10}

#专区商品

GET/v1/enterprise/zones/{id}/products

鉴权appKey适用 员工福利 / 企业采购可选

可选。商品结构与商品列表一致,按销量倒序。专区不存在、已停用或访客浏览时返回空列表(zone 为 null 或 items 为空),不返回 404。

路径参数

字段类型必填说明
idstring是专区 id

查询参数

字段类型必填说明
pageinteger否默认 1。≥ 1
pageSizeinteger否默认 20。≥ 1,≤ 100
返回字段31 个,点击展开
字段类型说明
itemsobject[]
items[].idstring商品 ID,下单时原样放进 items[].productId
items[].externalItemIdstring
items[].titlestring
items[].subtitlestring
items[].imageUrlstring
items[].imageUrlsstring[]
items[].categorystring
items[].brandstring
items[].pricenumber售价(元);多规格商品为最低规格价
items[].marketPricenumber
items[].shopNamestring
items[].sales30dnumber
items[].availabilitystring可选值:in_stock / out_of_stock
items[].featuredboolean是否运营精选
items[].matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
items[].matchedSku.skuIdstring
items[].matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
items[].matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
items[].matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
pageinteger
pageSizeinteger
totalinteger命中总数(带关键词时为估算值)。结果按渠道可见范围再过滤,一页可能少于 pageSize;翻页以返回为空或 page × pageSize ≥ total 判断结束
searchIdstring带关键词搜索时返回;上报点击 / 加购 / 下单时带回
correctedQuerystring做了错别字纠正时实际搜的词,可提示「已为您搜索 xx」
relaxedbooleantrue = 没有同时满足全部关键词的商品,返回的是放宽后的相关商品;可提示「没有找到同时满足『…』的商品,以下是相关商品」
zoneobject可能为 null
zone.idstring
zone.namestring
zone.bannerUrlstring
hasMoreboolean

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/zones/{id}/products" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "id": "string",5      "externalItemId": "string",6      "title": "string",7      "subtitle": "string",8      "imageUrl": "string",9      "imageUrls": [10        "string"11      ],12      "category": "string",13      "brand": "string",14      "price": 0,15      "marketPrice": 0,16      "shopName": "string",17      "sales30d": 0,18      "availability": "in_stock",19      "featured": true,20      "matchedSku": {21        "skuId": "string",22        "specText": "string",23        "price": 0,24        "imageUrl": "string"25      }26    }27  ],28  "page": 0,29  "pageSize": 0,30  "total": 0,31  "searchId": "string",32  "correctedQuery": "string",33  "relaxed": true,34  "zone": {35    "id": "string",36    "name": "string",37    "bannerUrl": "string"38  },39  "hasMore": true40}

#组货方案列表

GET/v1/enterprise/bundles

组货方案列表(按调用方所属产品,按场景分组,如「新企开办 → 1人团队」)

鉴权appKey适用 员工福利 / 企业采购可选

可选。平台运营配置的组货方案(如「新企开办 → 1人团队 / 5人团队」:一组规格 + 建议数量),按场景分组;场景、方案各自按运营设的顺序。只返回调用方所属产品(appKey 的产品归属)里已上线的方案。appKey 未配置所属产品时须传 realm;配置了的传别的产品返回 403。列表不含明细,选中方案后用 code 调组货方案详情。

查询参数

字段类型必填说明
scenestring否只看某个场景(场景编码,如 business_startup)
realmstring否所属产品。仅 appKey 未配置所属产品时需要。可选值:welfare / procurement / consumer

返回字段

字段类型说明
realmstring实际生效的产品
scenesobject[]
scenes[].codestring场景编码
scenes[].namestring场景名,如「新企开办」
scenes[].bundlesobject[]
scenes[].bundles[].codestring方案编码,稳定不变,用于取详情
scenes[].bundles[].namestring方案名称
scenes[].bundles[].labelstring前端选项标签,如「1人团队」
scenes[].bundles[].descriptionstring可能为 null
scenes[].bundles[].sortOrderinteger
scenes[].bundles[].versioninteger当前发布的版本号,运营每次发布 +1
scenes[].bundles[].itemCountinteger规格数
scenes[].bundles[].publishedAtstring可能为 null

错误

  • 400 BAD_REQUEST:appKey 未配置所属产品且没传 realm,或 realm 不认识

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/bundles" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "realm": "string",3  "scenes": [4    {5      "code": "string",6      "name": "string",7      "bundles": [8        {}9      ]10    }11  ]12}

#组货方案详情:规格 + 建议数量,价格库存实时,买不到的带原因

GET/v1/enterprise/bundles/{code}

鉴权appKey适用 员工福利 / 企业采购可选

可选。方案当前发布版本的规格与建议数量,价格、库存实时读取,并按调用方渠道判断能否购买。买不到的规格也会返回(available=false 并带 unavailableReason),由端上决定置灰还是提示换货;totalPrice 只合计能买的规格。加购 / 下单沿用 { productId, skuId?, qty }:qty 取 quantity,单规格商品 skuId 为 null,不传。

路径参数

字段类型必填说明
codestring是方案编码(来自组货方案列表)

查询参数

字段类型必填说明
realmstring否所属产品。仅 appKey 未配置所属产品时需要。可选值:welfare / procurement / consumer
返回字段29 个,点击展开
字段类型说明
codestring
namestring
labelstring
descriptionstring可能为 null
sortOrderinteger
versioninteger
itemCountinteger
publishedAtstring可能为 null
sceneobject
scene.codestring
scene.namestring
totalPricenumber能买的规格按建议数量的合计(元),参考价,以结算为准
unavailableCountinteger当前买不到的规格数
itemsobject[]
items[].skuRefstring规格的稳定标识
items[].productIdstring加购 / 下单用的商品 ID
items[].skuIdstring加购 / 下单用的规格 ID;单规格商品为 null。可能为 null
items[].quantityinteger建议数量
items[].titlestring
items[].specsobject规格属性,如 { 颜色: 黑色 }
items[].skuTitlestring可能为 null
items[].imageUrlstring
items[].brandstring可能为 null
items[].pricenumber单价(元),实时
items[].marketPricenumber可能为 null
items[].stockinteger精确库存;上游只给模糊库存时为 null,看 fuzzyStock。可能为 null
items[].fuzzyStockstring可能为 null
items[].availableboolean
items[].unavailableReasonstringavailable=false 时才有。可选值:商品未上架 / 上游已下架 / 规格已删除 / 无货 / 规格不存在 / 渠道不可售

错误

  • 400 BAD_REQUEST:appKey 未配置所属产品且没传 realm,或 realm 不认识
  • 404 NOT_FOUND:方案不存在、未上线或不在该产品里

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/bundles/{code}" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "code": "string",3  "name": "string",4  "label": "string",5  "description": "string",6  "sortOrder": 0,7  "version": 0,8  "itemCount": 0,9  "publishedAt": "string",10  "scene": {11    "code": "string",12    "name": "string"13  },14  "totalPrice": 0,15  "unavailableCount": 0,16  "items": [17    {18      "skuRef": "string",19      "productId": "string",20      "skuId": "string",21      "quantity": 0,22      "title": "string",23      "specs": null,24      "skuTitle": "string",25      "imageUrl": "string",26      "brand": "string",27      "price": 0,28      "marketPrice": 0,29      "stock": 0,30      "fuzzyStock": "string",31      "available": true,32      "unavailableReason": "商品未上架"33    }34  ]35}

#搜索联想

GET/v1/enterprise/products/suggest

搜索联想(?q=&limit=);q 为空返回热门搜索

鉴权appKey适用 员工福利 / 企业采购可选

可选。输入框联想:q 为已输入的前缀;q 为空时返回热门搜索词。搜索服务不可用时返回空列表(仍为 200),不影响主流程。

查询参数

字段类型必填说明
qstring否已输入的前缀;不传 = 热门搜索。最长 50
limitinteger否默认 10。≥ 1

返回字段

字段类型说明
itemsobject[]
items[].textstring
items[].typestringquery 热门搜索词 / category 类目 / brand 品牌。可选值:query / category / brand
items[].hitsinteger该词最近一次搜索的命中数(仅 query)

调用示例

1curl -X GET "https://api.gowu.net/v1/enterprise/products/suggest?q=保温&limit=10" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "text": "string",5      "type": "query",6      "hits": 07    }8  ]9}

#上报搜索结果上的点击 / 加购 / 下单

POST/v1/enterprise/products/events

上报搜索结果上的点击 / 加购 / 下单(带回搜索返回的 searchId),帮助搜索排序

鉴权appKey适用 员工福利 / 企业采购可选

可选。用户在搜索结果上点击、加购或下单时上报,带回搜索接口返回的 searchId,用于优化排序。尽力而为:搜索服务不可用时也返回成功。

请求体application/json

字段类型必填说明
productIdstring是
eventstring是可选值:click / cart / order
searchIdstring否搜索接口返回的 searchId。最长 64
positioninteger否在搜索结果里的位置(从 1 起)。≥ 1

返回字段

字段类型说明
okboolean

错误

  • 400 BAD_REQUEST:productId 缺失或 event 不是 click / cart / order

调用示例

1curl -X POST "https://api.gowu.net/v1/enterprise/products/events" \2  -H "x-app-key: $GOWU_APP_KEY" \3  -H "content-type: application/json" \4  -d '{"productId":"string","event":"click"}'

返回示例

1{2  "ok": true3}

#商品详情

GET/v1/lm/products/{id}

商品详情(含 SKU,下单每行都要带 skuId)

鉴权appKey适用 消费者

出现在商品

路径参数

字段类型必填说明
idstring是
返回字段28 个,点击展开
字段类型说明
idstring商品 ID,下单时原样放进 items[].productId
externalItemIdstring
titlestring
subtitlestring
imageUrlstring
imageUrlsstring[]
categorystring
brandstring
pricenumber售价(元);多规格商品为最低规格价
marketPricenumber
shopNamestring
sales30dnumber
availabilitystring可选值:in_stock / out_of_stock
featuredboolean是否运营精选
matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
matchedSku.skuIdstring
matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
detailImagesstring[]
specsobject
skusobject[]
skus[].skuIdstring下单每行必带
skus[].specsobject
skus[].pricenumber
skus[].stocknumber0 = 售罄;-1 = 上游不提供库存
skus[].imagestring
skus[].canSellbooleanfalse = 不可售

错误

  • 404 NOT_FOUND:商品不存在或已下架

调用示例

1curl -X GET "https://api.gowu.net/v1/lm/products/{id}" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "id": "string",3  "externalItemId": "string",4  "title": "string",5  "subtitle": "string",6  "imageUrl": "string",7  "imageUrls": [8    "string"9  ],10  "category": "string",11  "brand": "string",12  "price": 0,13  "marketPrice": 0,14  "shopName": "string",15  "sales30d": 0,16  "availability": "in_stock",17  "featured": true,18  "matchedSku": {19    "skuId": "string",20    "specText": "string",21    "price": 0,22    "imageUrl": "string"23  },24  "detailImages": [25    "string"26  ],27  "specs": null,28  "skus": [29    {30      "skuId": "string",31      "specs": null,32      "price": 0,33      "stock": 0,34      "image": "string",35      "canSell": true36    }37  ]38}

#搜索 / 按条件浏览:商品 + 推荐规格,可附符合程度

POST/v1/lm/products/search

搜索 / 按条件浏览:商品 + 推荐规格,可附符合程度(mode=strict 只要完全符合的)

鉴权appKey适用 消费者

出现在商品

请求体带 version: 2(响应同样带 version: 2);不带 version 为旧版接口,返回格式不同,保留一个版本周期。按关键词 / 编码找商品,或按条件浏览。每条结果是「商品 + 推荐规格」,可附上符合程度与每个条件的判定(include: ["match"])。mode 控制多严:缺省 balanced(完全符合的在前、一件都没有才放宽);AI 助手推荐、清单解析建议 strict(只要完全符合的)。翻页用 nextCursor。匹配与排序规则、各商品池可用的筛选字段见开发者文档 §11。未带 x-open-user 时带 query、筛选或排序都返回 401 NEED_LOGIN,纯浏览只给第一页。

请求体application/json · 必须带 version: 2,其余全部可选;不传 query = 按条件浏览。不认识的参数一律 400 并在 field 里指明(带了旧参数会提示新写法)。不带 version 的请求按旧版接口处理(keyword / category / brand / priceMin / priceMax / inStockOnly / sortBy / page / pageSize,返回旧的 { items, page, pageSize, total }),保留一个版本周期

字段类型必填说明
versioninteger是接口版本,固定传 2。不传 = 旧版接口(返回格式不同)。可选值:2
queryobject否找什么:text 与 code 二选一
query.textstring否关键词。多个条件用空格分开,必须条件全部满足才算完全符合。最长 100
query.optionalstring[]否text 里「有更好、没有也行」的词(如用户说颜色无所谓):只参与排序,不作为必须条件。必须是 text 里出现过的词,否则 400。最多 10 项
query.codestring否按 SKU 编码 / 型号 / 条码 / 上游商品 ID 精确查,不容错、不改写。最长 64
filterobject否硬条件:不满足就不返回
filter.categorystring | string[]否叶子类目名,精确匹配;数组 = 任一
filter.brandstring | string[]否品牌名,精确匹配;数组 = 任一
filter.priceobject否价格区间(元,含边界),按规格价:任一可售规格落在区间内即命中,此时推荐的就是区间内的规格。传反了自动对调
filter.price.gtenumber否≥ 0
filter.price.ltenumber否≥ 0
filter.inStockboolean否只要有货的
unknownstring否筛选字段没有值的商品怎么处理(当前可用字段都有值,预留)。可选值:include / exclude。默认 "include"
modestring否多严。balanced:完全符合的在前、部分符合的随后,一件都没有时才放宽(返回 relaxation);strict:只要完全符合的,宁缺毋滥(AI 助手推荐、清单解析用);broad:全部给,含放宽得到的。可选值:balanced / strict / broad。默认 "balanced"
sortstring否顺序。价格按推荐规格的价格;任何排序下不符合的(related)都排在最后。可选值:relevance / price_asc / price_desc / sales_desc。默认 "relevance"
profilestring否排序预设:agent 推荐给人看的少量结果(符合程度优先,其次有货);mall 搜索结果页。可选值:agent / mall。默认 "agent"
preferobject[]否软偏好:只影响同一符合程度内的先后,不影响返回哪些;多条按先后递减。sort 不是 relevance 时忽略。每条是以下三种写法之一:{ "field": "price", "direction": "low" | "high" } 便宜 / 贵的优先;{ "field": "brand", "value": "膳魔师" } 这个品牌优先;{ "text": "大容量" } 这个词命中的优先。最多 5 项
excludeFieldsstring[]否这次查询不用这些字段(只对 query.text 起作用):既不在里面找商品,也不拿它判断符合与否。用来对比某个字段的作用,如去掉卖点 sellingPoints。不能全部去掉。可选字段:title(标题)、titleGrams(标题按每两个字切开(中文分词切错时的兜底))、aliases(买家叫法(别名))、subtitle(副标题)、brand(品牌)、category(叶子类目名)、categoryPath(类目整条路径)、tags(平台类目路径)、skuSpecValues(各规格的规格值(颜色、尺码、容量、型号…)与材质)、skuTitles(各规格的规格名)、specsText(商品参数(前 600 字))、qualityPerformance(品质性能(前 300 字))、useCases(适用场景)、descriptionSellingPoints(商品描述与卖点(前 300 字))、audience(适用人群)、exactCodes(编码:上游商品 ID、SKU 编码、型号、条码)、supplierName(供应商名)。可选值:title / titleGrams / aliases / subtitle / brand / category / categoryPath / tags / skuSpecValues / skuTitles / specsText / qualityPerformance / useCases / descriptionSellingPoints / audience / exactCodes / supplierName
limitinteger否默认 20。≥ 1,≤ 50
cursorstring否翻页:上次返回的 nextCursor。与本次请求的条件绑定(换了条件 400),1 小时有效
includestring[]否match:每条结果附上条件判定(符合程度、每个条件满足与否及凭据)。可选值:match
返回字段58 个,点击展开
字段类型说明
versioninteger响应版本,固定 2。解析前可以校验它,防止拿旧格式硬解析。可选值:2
searchIdstring带 query 时返回;上报点击 / 加购 / 下单时带回
interpretationobject带 query.text 时返回:我们怎么理解这次查询(供参考,不是约定)
interpretation.searchedstring纠错 / 改写后实际搜的词;与输入不同时可提示「已为您搜索 xx」
interpretation.requirementsobject[]
interpretation.requirements[].textstring
interpretation.requirements[].rolestringproduct 品类 / attribute 属性 / brand 品牌 / other 其他(编码)。可选值:product / attribute / brand / other
interpretation.requirements[].enforcedboolean是否作为必须条件(决定完全符合与否)。只有有把握的条件才是 true
interpretation.requirements[].whystring不作为必须条件的原因:调用方标了可选 / 模糊词(大容量、好用)/ 认不出。可选值:optional / vague / unrecognized
hitsobject[]
hits[].productobject
hits[].product.idstring商品 ID,下单时原样放进 items[].productId
hits[].product.externalItemIdstring
hits[].product.titlestring
hits[].product.subtitlestring
hits[].product.imageUrlstring
hits[].product.imageUrlsstring[]
hits[].product.categorystring
hits[].product.brandstring
hits[].product.pricenumber售价(元);多规格商品为最低规格价
hits[].product.marketPricenumber
hits[].product.shopNamestring
hits[].product.sales30dnumber
hits[].product.availabilitystring可选值:in_stock / out_of_stock
hits[].product.featuredboolean是否运营精选
hits[].product.matchedSkuobject关键词搜索命中的规格:多规格商品、且搜索词能对应到某个规格时才有(「黑色 1000ml 保温杯」→ 黑色 / 1000ml)。带价格区间时给区间内的规格。建议卡片直接展示该规格,点进详情时用 skuId 预先选中。没有 = 按商品展示
hits[].product.matchedSku.skuIdstring
hits[].product.matchedSku.specTextstring规格值,按「 / 」连接,如「黑色 / 1000ml」
hits[].product.matchedSku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径;缺省 = 用商品价
hits[].product.matchedSku.imageUrlstring该规格的图片;缺省 = 用商品主图
hits[].product.categoryIdstring叶子类目 id(仅企业购)
hits[].skuobject推荐的规格;商品没有可售规格时为 null
hits[].sku.idstring规格 ID,即详情接口的 skus[].skuId;单规格商品(详情里没有规格选择)不给
hits[].sku.specTextstring规格值,如「曜石黑 / 1000ml」
hits[].sku.specsobject规格名 → 规格值
hits[].sku.pricenumber该规格的对外售价(元),与详情接口的规格价同口径
hits[].sku.marketPricenumber
hits[].sku.imageUrlstring规格图;没有时用商品主图
hits[].sku.stockinteger
hits[].sku.availableboolean
hits[].sku.chosenBystringmatch 按搜索条件选出 / cheapest 条件在规格间没有区分,给价格区间内最便宜的 / only 只有一个规格。可选值:match / cheapest / only
hits[].skuCountinteger可售规格数
hits[].matchobjectinclude 含 match 时返回
hits[].match.levelstringexact 推荐的这个规格满足全部必须条件 / partial 没有不满足的,但有判断不了或分散在不同规格上的 / related 有不满足的,或是放宽得到的。可选值:exact / partial / related
hits[].match.requirementsobject[]每个条件在推荐规格上的判定,顺序同 interpretation.requirements
hits[].match.requirements[].textstring
hits[].match.requirements[].statestringmet 满足 / unmet 不满足(如类目明确是别的品类)/ unknown 判断不了(字面上没找到不算不满足)。可选值:met / unmet / unknown
hits[].match.requirements[].bystring满足的凭据:命中的规格值原文,如「曜石黑」
relaxationobject返回了不符合(related)的结果时才有:哪些必须条件没有满足。可提示「没有找到同时满足…的商品,以下是相关商品」
relaxation.droppedstring[]
relaxHintsobject[]完全符合的不足 limit 时:去掉某个必须条件能有几件完全符合的。AI 助手可据此问用户要不要放宽,再把那个词放进 query.optional 重搜
relaxHints[].dropstring
relaxHints[].exactinteger
totalobject
total.valueinteger
total.exactbooleanfalse = 估算值
nextCursorstring下一页的游标;没有 = 没有下一页。未登录访客不返回
degradedboolean搜索服务暂时不可用、退回查库:只按标题拆词匹配,没有 match 与推荐规格的条件判定

错误

  • 400 BAD_REQUEST:参数不合法(field 指明哪个参数;带了旧参数会提示新写法),version 不是 2,或 cursor 无效 / 过期 / 与本次条件不符

调用示例

1curl -X POST "https://api.gowu.net/v1/lm/products/search" \2  -H "x-app-key: $GOWU_APP_KEY" \3  -H "content-type: application/json" \4  -d '{"version":2,"query":{"text":"黑色 保温杯"},"mode":"strict","include":["match"],"limit":10}'

返回示例

1{2  "version": 2,3  "searchId": "string",4  "interpretation": {5    "searched": "string",6    "requirements": [7      {8        "text": "string",9        "role": "product",10        "enforced": true,11        "why": "optional"12      }13    ]14  },15  "hits": [16    {17      "product": {18        "id": "string",19        "externalItemId": "string",20        "title": "string",21        "subtitle": "string",22        "imageUrl": "string",23        "imageUrls": [],24        "category": "string",25        "brand": "string",26        "price": 0,27        "marketPrice": 0,28        "shopName": "string",29        "sales30d": 0,30        "availability": "in_stock",31        "featured": true,32        "matchedSku": {},33        "categoryId": "string"34      },35      "sku": {36        "id": "string",37        "specText": "string",38        "specs": null,39        "price": 0,40        "marketPrice": 0,41        "imageUrl": "string",42        "stock": 0,43        "available": true,44        "chosenBy": "match"45      },46      "skuCount": 0,47      "match": {48        "level": "exact",49        "requirements": []50      }51    }52  ],53  "relaxation": {54    "dropped": [55      "string"56    ]57  },58  "relaxHints": [59    {60      "drop": "string",61      "exact": 062    }63  ],64  "total": {65    "value": 0,66    "exact": true67  },68  "nextCursor": "string",69  "degraded": true70}

#类目列表

GET/v1/lm/categories

类目列表(按商品数排序,作为搜索的 category 参数)

鉴权appKey适用 消费者

按商品数降序的类目名列表(不是树),用作搜索的 category 参数。

查询参数

字段类型必填说明
limitinteger否默认 30。≥ 1,≤ 100

返回字段

字段类型说明
itemsobject[]
items[].categorystring
items[].countinteger

调用示例

1curl -X GET "https://api.gowu.net/v1/lm/categories" \2  -H "x-app-key: $GOWU_APP_KEY"

返回示例

1{2  "items": [3    {4      "category": "string",5      "count": 06    }7  ]8}