商家开放接口文档

商家用程序维护自己店铺的资料和商品、提交发布、回复客户咨询、查看访问统计。

适合:在诸葛军师开店、需要和自有系统同步的商家

服务地址
https://www.zhugejunshi.com/api/user-sites/merchant/open/v1
鉴权
Authorization: Bearer zsk_…
接口数量
14 个 · 文档版本 v1
文档文件
merchant-open.json(OpenAPI,可导入 Postman、Apifox 等工具)

使用须知

  • 只能访问密钥所属店铺的数据。
  • 每个密钥每分钟最多 60 次请求,其中写操作(PUT、POST)最多 20 次,按最近 60 秒计算。
  • 每家店每天最多 10,000 次(所有密钥合计),北京时间 00:00 重新计数。
  • 超限返回 429,并带 Retry-After 响应头,按它给出的秒数等待后再试。
接口总说明

商家用密钥调用接口,自己开发店铺运营工具:看询价、改商品草稿、发布、看统计。仅限商城店铺(mode = shop)。 密钥在商家后台 /my-shop 的“开放接口”标签里建和撤销(用店主本人主账号登录;程序令牌和子账号不能建)。完整密钥以 zsk_ 开头,只在建好时显示一次;每家店最多同时有 5 把有效密钥,有效期 30 / 90 / 180 / 365 天(默认 90 天)。 每次请求带请求头 Authorization: Bearer zsk_你的密钥,只认这一种写法。 限流:每把密钥每分钟最多 60 次,其中写操作(PUT、POST)最多 20 次,按最近 60 秒滚动计算;每家店每天最多 10,000 次(所有密钥合计),按北京时间自然日、00:00 重新开始,因权限不足、被下架或限流被拒的(403、429)不计入。超限返回 429,响应头 Retry-After 为需要等待的秒数。 检查顺序:密钥(401)、限流(429)、权限(403)、被下架时的写操作(403)、请求内容(422)、实际处理。请求体不超过 1 MB,请求体里不认识的字段会被拒绝(422)。没有回调(webhook),新询价请用 updated_since 定时拉取。 不能通过接口给买家发消息,也看不到买家的电话和邮箱。所有返回带 Cache-Control: private, no-store,不要缓存。返回的时间是 UTC 的 ISO 8601;统计里的 day 是北京时间日期。 revision 用来防止互相覆盖:PUT /draft、PUT /products/…、POST /review/submit 用店铺的 revision;POST /inquiries/{inquiry_id} 用这条询价自己的 revision。对不上返回 409,什么也不会改。

店铺

查看店铺状态与草稿,整份替换草稿,暂时下线或重新上线。

GET查看店铺状态与开店进度

/shop

需要密钥 · 需要权限 shop:read

返回店铺摘要(不含草稿)、开店各步骤进度、独立域名申请和各类条数。

返回

200店铺总览。
200 的返回字段
字段类型必填说明
siteShop | null否

店铺摘要,不含草稿;还没有店铺时为 null。

site.idstring否—
site.slugstring否—
site.urlstring否

店铺公开网址。

site.modestring否

shop 是商城店铺。

site.namestring否—
site.operator_namestring | null否—
site.review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

site.public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

site.review_notestring | null否—
site.suspend_notestring | null否—
site.has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

site.listedboolean否

是否已上架合作市场。

site.revisioninteger否

店铺的版本号,每次改动加一。

site.submitted_atstring(date-time) | null否—
site.published_atstring(date-time) | null否—
site.created_atstring(date-time) | null否—
site.updated_atstring(date-time) | null否—
site.draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

site.node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

stepsarray<object>否

开店各步骤的进度。

steps[].keystring否—
steps[].statestring否

done / todo / waiting / blocked / unknown。

steps[].notestring否—
domainobject | null否

独立域名申请,没有时为 null。

countsobject否—
counts.products_liveinteger否—
counts.products_draftinteger否—
counts.reports_openinteger否

未处理举报数。

返回示例
{
  "site": {
    "id": "00000000-0000-0000-0000-000000000001",
    "slug": "demo-shop",
    "url": "https://demo-shop.example.com/",
    "mode": "shop",
    "name": "示例商店",
    "operator_name": "示例经营者",
    "review_status": "approved",
    "public_status": "live",
    "review_note": null,
    "suspend_note": null,
    "has_unpublished_changes": false,
    "listed": true,
    "revision": 7,
    "submitted_at": "2026-11-03T02:00:00+00:00",
    "published_at": "2026-11-03T02:00:00+00:00",
    "created_at": "2026-11-01T02:00:00+00:00",
    "updated_at": "2026-11-03T02:00:00+00:00",
    "node_sync": {}
  },
  "steps": [
    {
      "key": "goods",
      "state": "done",
      "note": ""
    }
  ],
  "domain": null,
  "counts": {
    "products_live": 3,
    "products_draft": 4,
    "reports_open": 0
  }
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/shop' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。

GET读取整个店铺含草稿

/draft

需要密钥 · 需要权限 shop:read

返回整个店铺,含草稿全文(页面、区块、联系方式)和 revision。要改草稿,先读这里,改好再整份发回 PUT /draft。

返回

200含草稿的店铺。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "approved",
  "public_status": "live",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 7,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/draft' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。

PUT整份替换店铺草稿

/draft

需要密钥 · 需要权限 shop:write

整份替换草稿,不是只改几个字段;可同时改店名。保存后 revision 加一。审核中的店铺不能改,要先撤回;已发布的店铺一改草稿,状态变回 draft,线上继续显示上一版,重新发布后更新。写操作;店铺被平台下架后不可用(403)。

请求内容 (application/json,必填)

整份替换店铺草稿的请求字段
字段类型必填说明
revisioninteger是

读到的店铺 revision。

draftobject是

整份草稿,先 GET /draft 再改。

namestring | null否

店名,可选。

请求示例
{
  "revision": 7,
  "draft": {
    "pages": []
  },
  "name": "示例商店"
}

返回

200保存后的整个店铺,同 GET /draft。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "approved",
  "public_status": "live",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 8,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

409revision 对不上,这份内容在别处被改过,什么也没改。重新读取再改;提交发布时身份未核验也返回 409。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X PUT 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/draft' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "revision": 7,
  "draft": {
    "pages": []
  },
  "name": "示例商店"
}'

POST暂时下线店铺

/visibility/offline

需要密钥 · 需要权限 shop:write

让店铺暂时下线,买家看不到。不用请求体,也不用 revision。写操作;店铺被平台下架后不可用(403)。

返回

200整个店铺,public_status 变成 offline。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "approved",
  "public_status": "offline",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 7,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/visibility/offline' \
  -H 'Authorization: Bearer YOUR_API_KEY'

POST重新上线店铺

/visibility/online

需要密钥 · 需要权限 shop:write

让暂时下线的店铺重新公开,public_status 变回 live;只有暂时下线的店铺可以。不用请求体,也不用 revision。写操作;店铺被平台下架后不可用(403)。

返回

200整个店铺。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "approved",
  "public_status": "live",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 7,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/visibility/online' \
  -H 'Authorization: Bearer YOUR_API_KEY'

商品

查看线上与草稿商品,按区块替换商品,上传商品图片。

GET查看线上与草稿商品

/products

需要密钥 · 需要权限 shop:read

返回线上商品和草稿商品的对照。商品没有编号,用商品名把草稿和线上对应起来;live 里只会出现 same 和 removed,draft 里只会出现 same、changed 和 new。blocks 里的 page_key、block_id 用于 PUT /products/{page_key}/{block_id}。

返回

200商品对照。
200 的返回字段
字段类型必填说明
revisioninteger否—
review_statusstring否—
livearray<ProductLine>否

线上商品。

live[].page_keystring否—
live[].block_idstring否—
live[].indexinteger否

在区块里的位置。

live[].namestring否—
live[].pricestring否—
live[].imagestring | null否

图片 id。

live[].textstring否—
live[].changestring否

same 未改动 / changed 已改未提交 / new 新增 / removed 草稿里已删。

可选值:same / changed / new / removed

draftarray<ProductLine>否

草稿商品。

draft[].page_keystring否—
draft[].block_idstring否—
draft[].indexinteger否

在区块里的位置。

draft[].namestring否—
draft[].pricestring否—
draft[].imagestring | null否

图片 id。

draft[].textstring否—
draft[].changestring否

same 未改动 / changed 已改未提交 / new 新增 / removed 草稿里已删。

可选值:same / changed / new / removed

blocksarray<ProductBlock>否

草稿里的商品区块。

blocks[].page_keystring否—
blocks[].block_idstring否—
blocks[].titlestring否—
blocks[].itemsinteger否

区块里的商品条数。

mediaobject否

图片 id 对应的带签名网址(约一小时有效)。

problemstring否

现在还不能提交审核的原因,空字符串表示没问题。

返回示例
{
  "revision": 7,
  "review_status": "approved",
  "live": [
    {
      "page_key": "home",
      "block_id": "products-1",
      "index": 0,
      "name": "示例商品",
      "price": "39.9 元",
      "image": null,
      "text": "一句话说明",
      "change": "same"
    }
  ],
  "draft": [
    {
      "page_key": "home",
      "block_id": "products-1",
      "index": 0,
      "name": "示例商品",
      "price": "39.9 元",
      "image": null,
      "text": "一句话说明",
      "change": "same"
    }
  ],
  "blocks": [
    {
      "page_key": "home",
      "block_id": "products-1",
      "title": "热销商品",
      "items": 1
    }
  ],
  "media": {},
  "problem": ""
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/products' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。

PUT整块替换一个商品区块

/products/{page_key}/{block_id}

需要密钥 · 需要权限 products:write

替换草稿里某个商品区块的全部商品(整块替换)。page_key、block_id 取自 GET /products 返回的 blocks。items 里每件商品只能有 name、price、image、text 四个字段;image 填 POST /assets 返回的 id(不是网址),不放图片填 null。写操作;店铺被平台下架后不可用(403)。

请求参数

整块替换一个商品区块的请求参数
参数位置类型必填说明
page_key路径string是

页面编号,取自 GET /products 的 blocks。

最长 30

block_id路径string是

商品区块编号,取自 GET /products 的 blocks。

最长 40

请求内容 (application/json,必填)

整块替换一个商品区块的请求字段
字段类型必填说明
revisioninteger是

读到的店铺 revision。

itemsarray<ProductInput>是

这个区块的全部商品,整块替换。

items[].namestring否—
items[].pricestring否

价格文字,例如“39.9 元”。

items[].imagestring | null否

POST /assets 返回的图片 id,不放图片填 null。

items[].textstring否—
请求示例
{
  "revision": 7,
  "items": [
    {
      "name": "示例商品",
      "price": "39.9 元",
      "image": null,
      "text": "一句话说明"
    }
  ]
}

返回

200保存后的商品,同 GET /products。
200 的返回字段
字段类型必填说明
revisioninteger否—
review_statusstring否—
livearray<ProductLine>否

线上商品。

live[].page_keystring否—
live[].block_idstring否—
live[].indexinteger否

在区块里的位置。

live[].namestring否—
live[].pricestring否—
live[].imagestring | null否

图片 id。

live[].textstring否—
live[].changestring否

same 未改动 / changed 已改未提交 / new 新增 / removed 草稿里已删。

可选值:same / changed / new / removed

draftarray<ProductLine>否

草稿商品。

draft[].page_keystring否—
draft[].block_idstring否—
draft[].indexinteger否

在区块里的位置。

draft[].namestring否—
draft[].pricestring否—
draft[].imagestring | null否

图片 id。

draft[].textstring否—
draft[].changestring否

same 未改动 / changed 已改未提交 / new 新增 / removed 草稿里已删。

可选值:same / changed / new / removed

blocksarray<ProductBlock>否

草稿里的商品区块。

blocks[].page_keystring否—
blocks[].block_idstring否—
blocks[].titlestring否—
blocks[].itemsinteger否

区块里的商品条数。

mediaobject否

图片 id 对应的带签名网址(约一小时有效)。

problemstring否

现在还不能提交审核的原因,空字符串表示没问题。

返回示例
{
  "revision": 8,
  "review_status": "draft",
  "live": [],
  "draft": [
    {
      "page_key": "home",
      "block_id": "products-1",
      "index": 0,
      "name": "示例商品",
      "price": "39.9 元",
      "image": null,
      "text": "一句话说明",
      "change": "new"
    }
  ],
  "blocks": [
    {
      "page_key": "home",
      "block_id": "products-1",
      "title": "热销商品",
      "items": 1
    }
  ],
  "media": {},
  "problem": ""
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

404草稿里没有这个商品区块,或没有这条询价。

返回字段同 401。

409revision 对不上,这份内容在别处被改过,什么也没改。重新读取再改;提交发布时身份未核验也返回 409。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X PUT 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/products/{page_key}/{block_id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "revision": 7,
  "items": [
    {
      "name": "示例商品",
      "price": "39.9 元",
      "image": null,
      "text": "一句话说明"
    }
  ]
}'

POST上传商品图片

/assets

需要密钥 · 需要权限 products:write

用 multipart/form-data 上传,图片放在 file 字段(JPEG、PNG 或 WEBP,不超过 10 MB,只收一个文件)。同一张图片重复上传返回已有的那张;每家店最多 100 张图片。返回的 id 填进商品的 image。写操作;店铺被平台下架后不可用(403)。

请求内容 (multipart/form-data,必填)

上传商品图片的请求字段
字段类型必填说明
filestring(binary)是

图片文件。

返回

200图片信息。
200 的返回字段
字段类型必填说明
idstring否

填进商品的 image。

urlstring否

带签名的图片网址,约一小时有效。

widthinteger否—
heightinteger否—
bytesinteger否—
返回示例
{
  "id": "00000000-0000-0000-0000-0000000000b1",
  "url": "https://example.com/signed-image-url",
  "width": 800,
  "height": 600,
  "bytes": 40960
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/assets' \
  -H 'Authorization: Bearer YOUR_API_KEY'

发布

发布草稿、撤回以前提交的审核,并查看平台处理记录。

POST发布草稿

/review/submit

需要密钥 · 需要权限 review:write

发布草稿。身份核验已通过的店主发布后马上公开(review_status 变成 approved,public_status 变成 live),平台可事后下架。overseas_consent 必须是 true,表示同意页面放在新加坡服务器。身份未核验返回 409;审核中、内容没有改动、草稿不合格等返回 422 并带具体说明。写操作;店铺被平台下架后不可用(403)。

请求内容 (application/json,必填)

发布草稿的请求字段
字段类型必填说明
revisioninteger是

店铺的 revision。

overseas_consentboolean否

必须是 true(真正的布尔值),表示同意页面放在新加坡服务器;否则返回 422。

默认:false

请求示例
{
  "revision": 8,
  "overseas_consent": true
}

返回

200整个店铺。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "approved",
  "public_status": "live",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 9,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

409revision 对不上,这份内容在别处被改过,什么也没改。重新读取再改;提交发布时身份未核验也返回 409。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/review/submit' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "revision": 8,
  "overseas_consent": true
}'

POST撤回审核中的提交

/review/withdraw

需要密钥 · 需要权限 review:write

只用于以前提交、还在审核中的店铺,撤回后 review_status 变回 draft;不在审核中返回 422。不用请求体,也不用 revision。写操作;店铺被平台下架后不可用(403)。

返回

200整个店铺。
200 的返回字段
字段类型必填说明
idstring否—
slugstring否—
urlstring否

店铺公开网址。

modestring否

shop 是商城店铺。

namestring否—
operator_namestring | null否—
review_statusstring否

draft 草稿 / pending 审核中 / approved 已通过 / rejected 被退回。

可选值:draft / pending / approved / rejected

public_statusstring否

unpublished 还没公开 / live 公开中 / offline 暂时下线 / suspended 被平台下架。

可选值:unpublished / live / offline / suspended

review_notestring | null否—
suspend_notestring | null否—
has_unpublished_changesboolean否

草稿和线上公开的版本有没有不同。

listedboolean否

是否已上架合作市场。

revisioninteger否

店铺的版本号,每次改动加一。

submitted_atstring(date-time) | null否—
published_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
draftobject否

草稿全文:页面、区块、联系方式。GET /shop 里的 site 不含这个字段。

node_syncobject否

新加坡副本的同步状态,内部字段,可忽略。

返回示例
{
  "id": "00000000-0000-0000-0000-000000000001",
  "slug": "demo-shop",
  "url": "https://demo-shop.example.com/",
  "mode": "shop",
  "name": "示例商店",
  "operator_name": "示例经营者",
  "review_status": "draft",
  "public_status": "live",
  "review_note": null,
  "suspend_note": null,
  "has_unpublished_changes": false,
  "listed": true,
  "revision": 7,
  "submitted_at": "2026-11-03T02:00:00+00:00",
  "published_at": "2026-11-03T02:00:00+00:00",
  "created_at": "2026-11-01T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00",
  "draft": {
    "pages": []
  },
  "node_sync": {}
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/review/withdraw' \
  -H 'Authorization: Bearer YOUR_API_KEY'

GET查看平台处理记录

/records

需要密钥 · 需要权限 shop:read

店铺的提交、撤回、下线、上线、通过、退回、下架、恢复等记录,以及举报条数(只给条数,不给原文和举报人)。不带 updated_since 时按时间从新到旧;带时只返回这个时间之后(含)的,从旧到新,翻页时可能重复看到一条,不会漏。

请求参数

查看平台处理记录的请求参数
参数位置类型必填说明
updated_since查询string否

只返回这个时间之后(含)有变化的,按变化时间从旧到新排,用于增量拉取;不填时按时间从新到旧排。ISO 8601 格式,不写时区按 UTC 算;在网址里 + 要写成 %2B。

最长 40

limit查询integer否

每页条数。

范围:1 到 100;默认:20

offset查询integer否

跳过前多少条。

范围:0 到 100000;默认:0

返回

200记录列表。
200 的返回字段
字段类型必填说明
itemsarray<PlatformRecord>否—
items[].idstring否—
items[].actionstring否

submit、withdraw、offline、online 是店主自己做的;approve、reject、suspend、restore 是平台做的。

items[].bystring否

可选值:owner / platform

items[].notestring | null否

平台写的说明;店主自己的操作为 null。

items[].created_atstring(date-time)否—
totalinteger否—
reportsobject否—
reports.openinteger否

未处理。

reports.resolvedinteger否

已处理。

返回示例
{
  "items": [
    {
      "id": "00000000-0000-0000-0000-0000000000c1",
      "action": "submit",
      "by": "owner",
      "note": null,
      "created_at": "2026-11-03T02:00:00+00:00"
    }
  ],
  "total": 1,
  "reports": {
    "open": 0,
    "resolved": 0
  }
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/records' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。

客户咨询

拉取买家询价,修改询价状态和备注。

GET拉取买家询价列表

/inquiries

需要密钥 · 需要权限 inquiries:read

买家询价只有买家显示名和即时通信链接,没有电话和邮箱。带 updated_since 时按变化时间从旧到新,用于增量拉取。counts 不受 status 和 updated_since 影响,始终是全部询价的各状态条数(后端未提供时不返回)。

请求参数

拉取买家询价列表的请求参数
参数位置类型必填说明
status查询string否

只看某个状态;不填看全部。

可选值: / new / contacted / negotiating / agreed / closed

updated_since查询string否

只返回这个时间之后(含)有变化的,按变化时间从旧到新排,用于增量拉取;不填时按时间从新到旧排。ISO 8601 格式,不写时区按 UTC 算;在网址里 + 要写成 %2B。

最长 40

limit查询integer否

每页条数。

范围:1 到 100;默认:20

offset查询integer否

跳过前多少条。

范围:0 到 100000;默认:0

返回

200询价列表。
200 的返回字段
字段类型必填说明
itemsarray<Inquiry>否—
items[].idstring否—
items[].product_namestring | null否—
items[].quantity_textstring | null否—
items[].messagestring | null否—
items[].statusstring否

new 新询价 / contacted 已联系 / negotiating 洽谈中 / agreed 已谈成 / closed 已关闭。

可选值:new / contacted / negotiating / agreed / closed

items[].merchant_notestring | null否—
items[].revisioninteger否

这条询价自己的版本号。

items[].buyerobject否—
items[].buyer.namestring | null否

买家显示名。

items[].conversation_urlstring | null否

即时通信里这个私聊的链接。

items[].repliedboolean | null否

你有没有在私聊里回过。

items[].last_reply_atstring(date-time) | null否—
items[].created_atstring(date-time) | null否—
items[].updated_atstring(date-time) | null否—
totalinteger否—
countsobject否

全部询价的五种状态各有几条。

counts.newinteger否—
counts.contactedinteger否—
counts.negotiatinginteger否—
counts.agreedinteger否—
counts.closedinteger否—
返回示例
{
  "items": [
    {
      "id": "00000000-0000-0000-0000-0000000000a1",
      "product_name": "示例商品",
      "quantity_text": "100 件",
      "message": "想了解批量价格",
      "status": "new",
      "merchant_note": null,
      "revision": 1,
      "buyer": {
        "name": "示例买家"
      },
      "conversation_url": "/im?conversation=example",
      "replied": false,
      "last_reply_at": null,
      "created_at": "2026-11-03T02:00:00+00:00",
      "updated_at": "2026-11-03T02:00:00+00:00"
    }
  ],
  "total": 1,
  "counts": {
    "new": 1,
    "contacted": 0,
    "negotiating": 0,
    "agreed": 0,
    "closed": 0
  }
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/inquiries' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。

POST修改询价状态和备注

/inquiries/{inquiry_id}

需要密钥 · 需要权限 inquiries:write

没写的字段保持不变;note 写空字符串就清空备注(最多 500 字)。revision 是这条询价自己的,不是店铺的。不能给买家发消息。写操作;店铺被平台下架后不可用(403)。

请求参数

修改询价状态和备注的请求参数
参数位置类型必填说明
inquiry_id路径string是

询价编号,取自 GET /inquiries 的 id。

最长 36

请求内容 (application/json,必填)

修改询价状态和备注的请求字段
字段类型必填说明
revisioninteger是

这条询价自己的 revision。

statusstring | null否

不填保持不变。

可选值:new / contacted / negotiating / agreed / closed / null

notestring | null否

备注;空字符串清空,不填保持不变。

最长 500

请求示例
{
  "revision": 1,
  "status": "contacted",
  "note": "已报价,等对方确认"
}

返回

200更新后的这条询价。
200 的返回字段
字段类型必填说明
idstring否—
product_namestring | null否—
quantity_textstring | null否—
messagestring | null否—
statusstring否

new 新询价 / contacted 已联系 / negotiating 洽谈中 / agreed 已谈成 / closed 已关闭。

可选值:new / contacted / negotiating / agreed / closed

merchant_notestring | null否—
revisioninteger否

这条询价自己的版本号。

buyerobject否—
buyer.namestring | null否

买家显示名。

conversation_urlstring | null否

即时通信里这个私聊的链接。

repliedboolean | null否

你有没有在私聊里回过。

last_reply_atstring(date-time) | null否—
created_atstring(date-time) | null否—
updated_atstring(date-time) | null否—
返回示例
{
  "id": "00000000-0000-0000-0000-0000000000a1",
  "product_name": "示例商品",
  "quantity_text": "100 件",
  "message": "想了解批量价格",
  "status": "contacted",
  "merchant_note": "已报价,等对方确认",
  "revision": 2,
  "buyer": {
    "name": "示例买家"
  },
  "conversation_url": "/im?conversation=example",
  "replied": false,
  "last_reply_at": null,
  "created_at": "2026-11-03T02:00:00+00:00",
  "updated_at": "2026-11-03T02:00:00+00:00"
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

404草稿里没有这个商品区块,或没有这条询价。

返回字段同 401。

409revision 对不上,这份内容在别处被改过,什么也没改。重新读取再改;提交发布时身份未核验也返回 409。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X POST 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/inquiries/{inquiry_id}' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "revision": 1,
  "status": "contacted",
  "note": "已报价,等对方确认"
}'

统计

每天的浏览数和询价数。

GET查看每天浏览与询价数

/stats

需要密钥 · 需要权限 stats:read

最近若干天每天的浏览数和询价数,day 是北京时间日期。

请求参数

查看每天浏览与询价数的请求参数
参数位置类型必填说明
days查询integer否

统计最近多少天。

范围:7 到 90;默认:30

返回

200每日统计。
200 的返回字段
字段类型必填说明
daysarray<object>否—
days[].daystring(date)否

北京时间日期。

days[].viewsinteger否—
days[].inquiriesinteger否—
total_viewsinteger否—
total_inquiriesinteger否—
返回示例
{
  "days": [
    {
      "day": "2026-11-06",
      "views": 120,
      "inquiries": 3
    }
  ],
  "total_views": 120,
  "total_inquiries": 3
}
401密钥无效:没带、格式不对、不存在、已过期、已撤销,或店主账号、店铺不可用,一律是同一句,不说明是哪一种。
401 的返回字段
字段类型必填说明
detailstring是

中文说明。

403这把密钥没有所需权限,或店铺已被平台下架(下架后只能读,写接口都不行)。

返回字段同 401。

422请求体缺字段、多了不认识的字段、格式不对,或查询参数超出范围,返回统一提示;其余 422 带具体中文说明。

返回字段同 401。

429调用太频繁。响应头 Retry-After 是需要等待的秒数。

返回字段同 401。

503服务暂时不可用,稍后再试。

返回字段同 401。

错误返回的格式和重试建议见 错误处理。

调用示例

curl -X GET 'https://www.zhugejunshi.com/api/user-sites/merchant/open/v1/stats' \
  -H 'Authorization: Bearer YOUR_API_KEY'
在线调试

这里会用你填的密钥向正式接口发一次真实请求。密钥只留在本页内存里,不保存、不上传到别处,刷新页面后要重新填写。