Skip to content

V1 OpenAPI 错误码 ​

本文集中维护 Sugumart OpenAPI V1 的错误响应、恢复方式和重试规则。各 Endpoint 文档说明业务上下文,本文件作为错误码处理的统一入口。

Base Path: /openapi/v1

错误响应格式 ​

错误响应使用 V1 统一信封。success 固定为 false;程序应以 HTTP Status 和稳定的 code 分支,不得依赖 message 文案。data 仅在需要时返回可安全使用的结构化辅助信息。

request_id 为可选字段,仅当请求携带 X-SGM-Request-Id Header 时返回,并与响应 Header X-Request-Id 相同。

json
{
  "success": false,
  "code": "order_shipment_data_incomplete",
  "message": "Shipment data is incomplete",
  "data": {
    "missing_fields": ["items[0].weight"]
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
字段类型必填说明
successboolean是固定为 false
codestring是稳定的机器可读错误码
messagestring是人类可读错误说明;内容可能优化,程序不得据此判断错误类型
dataobject | null否结构化错误辅助信息;字段随 code 确定,不保证所有错误都返回
request_idstring否请求携带 X-SGM-Request-Id 时返回,与 X-Request-Id Header 相同

重试分类 ​

分类含义调用方动作
否原请求未经修改时不应重试修正参数、权限、配置或业务状态后重新发起
查询后写请求结果或外部副作用可能不确定先查询对应资源;仅在确认操作未生效后重试
是临时故障,可重试使用指数退避并限制最大次数;存在 Retry-After 时优先遵循

无论错误是否标记为可重试,调用方都不得无限重试。对 POST 请求发生网络超时、500、502 或 503 时,应优先查询商品、订单、回调配置或物流仓的最新状态,避免重复创建外部资源。

通用错误码 ​

HTTPcode可重试调用方动作
400validation_error否根据 data 或 Endpoint 字段约束修正请求
401invalid_token否Access Token 无效或已过期;应用后端串行刷新一次,刷新失败再重新浏览器认证
401unauthorized否Access Token 无效或已过期;应用后端串行刷新一次,刷新失败再重新浏览器认证
403forbidden否检查当前 Token 绑定店铺及其权限,不能通过原请求重试恢复
403shop_not_initialized否引导卖家登录 https://seller.sugumart.com/ 完成 KYC 审核;Payoneer 未绑定不阻断 OpenAPI
403shop_suspended否店铺已暂停,停止调用并联系 Sugumart 客服
404not_found否检查资源 ID;该错误也用于隐藏其他租户的资源是否存在
400invalid_state否重新查询资源,并按最新状态决定后续操作
413request_entity_too_large否缩小请求体后重新发送;图片文件应通过媒体预签名 URL 上传,不应放入 JSON 请求体
429rate_limit_exceeded是等待 Retry-After 指定秒数后重试
500internal_error查询后写请求先查询资源状态;查询请求可指数退避重试

invalid_token 与 unauthorized 都表示 Access Token 无效或已过期。调用方应使用相同的单次刷新流程处理;只有刷新失败时才清除凭证并重新浏览器认证,不应根据二者推断不同的权限状态。

认证和店铺配置 ​

HTTPcode可重试调用方动作
400invalid_callback_url否改用合法 HTTP/HTTPS URL,移除 fragment 和内嵌账号密码
401invalid_token否串行刷新一次 Access Token;刷新失败时清除整组凭证并重新认证
400unauthorized_client否按应用类型改用 Authorization Code 或 Client Credentials
401invalid_client否检查 App ID、启用状态、当前 Client Secret,以及凭证是否发送到匹配的测试或生产 Auth 环境;修正后重新发起完整授权流程
400redirect_uri_not_allowed否在 Admin 登记完整回调地址,并确保浏览器授权与 Token 兑换使用完全相同的 redirect_uri
400invalid_grant否作废当前授权状态;使用新的 state、PKCE verifier 和授权码重新发起浏览器授权
403forbidden否检查 Token 所绑定店铺的权限或联系平台支持
404shop_not_found否确认 Token 已绑定可用店铺
404callback_not_configured否先为当前店铺设置通知回调

商品和媒体 ​

HTTPcode可重试调用方动作
400category_not_selectable否逐级查询类目并选择 selectable=true 的末级类目
400invalid_media_type否使用对应用途支持的图片格式
400image_file_too_large否压缩图片至对应用途大小限制以内
400invalid_image_dimensions否调整图片宽高至对应用途允许范围
400sku_structure_locked否保留已发布商品的露天规格结构
400cannot_delete_published_sku否保留 SKU UUID id 并设置 status=false
400invalid_sku_id否使用商品详情返回且属于当前商品的 SKU UUID
400duplicate_sku_target否移除通过 id 或 spec_id 重复定位的 SKU
400sku_not_published否仅更新已有露天 spec_id 的已发布 SKU
400at_least_one_active_sku_required否更新后至少保留一个 status=true 的 SKU
400product_incomplete否补齐 data.missing_fields 或提交审核所需资料
400product_main_image_limit_exceeded否将商品主图删除至最多 9 张后重新提交审核
409product_review_state_changed否重新获取商品详情后再保存
409ruten_sku_structure_conflict否露天规格结构在 Sugumart 之外发生变化;停止自动覆盖并联系管理员核对规格绑定
503upload_service_unavailable是指数退避后重新申请上传 URL;不要重复 PUT 已成功上传的文件
502ruten_sku_update_failed查询后SKU 本地修改已经保存但露天渠道同步失败;查询商品最新状态,再决定是否重试

平台类目和店铺商品分类 ​

HTTPcode可重试调用方动作
404category_not_found否重新从一级类目开始查询,确认 g_class 仍启用
404store_class_not_found否重新获取当前店铺商品分类列表
404product_category_not_found否重新获取商品分类列表,不再对原 ID 操作
409product_category_in_use否先将使用该分类的商品移出或改设其他分类
502ruten_store_class_mutation_failed查询后先查询商品分类列表,确认创建或删除是否已生效
502invalid_ruten_store_class_response是指数退避后重新获取商品分类列表

订单和取消交易 ​

HTTPcode可重试调用方动作
404order_not_found否检查 Sugumart 订单 ID 和当前店铺
409order_not_shippable否查询订单详情,以 available_actions 判断是否仍可出货
409order_not_cancellable否查询订单详情,以 available_actions 判断是否仍可取消
409fulfillment_already_exists否使用订单详情返回的当前履约,不再创建第二个履约
409cancellation_conflict否查询当前 cancellation,不得覆盖内容不同或买家发起的申请
409cancellation_not_pending否查询订单详情,确认是否仍有等待确认的买家取消申请
409cancellation_already_rejected否该申请不能再次确认,按最新取消状态处理
502ruten_provider_error查询后先查询商品或订单状态,确认露天操作是否生效

物流和仓库 ​

HTTPcode可重试调用方动作
400carrier_required否旧契约错误码;当前订单出货对无法识别的公司使用 OTHER,不会仅因此返回本错误
404warehouse_not_found否重新获取可用仓库列表并选择有效 code
409warehouse_unavailable否改选当前启用且物流商可用的仓库
409warehouse_role_mismatch否集运仓选择 consolidation,退货仓选择 return
409warehouse_provider_mismatch否两个仓库改为同一物流商
422shipment_configuration_incomplete否根据 data.missing_fields 补齐店铺物流配置;出现 seller_return_warehouse 时设置主要卖家大陆退货仓
422order_shipment_data_incomplete否根据 data.missing_fields 补齐订单、清关、SKU 重量或申报资料
503shipment_provider_error查询后先查询订单履约;未建立履约时再指数退避重试

错误 data 约定 ​

错误响应中的 data 只返回调用方可安全使用的结构化信息,不包含 Secret、完整证件号码或内部堆栈。

codedata 字段类型说明
validation_errorfieldsobject可选;字段名到校验错误数组的映射
product_incompletemissing_fieldsstring[]缺失或不符合提交审核要求的商品字段路径
product_main_image_limit_exceededfieldstring固定为 images
product_main_image_limit_exceededmax_countinteger固定为 9
product_main_image_limit_exceededactual_countinteger当前商品实际主图数量
ruten_sku_update_failedlocal_updatedboolean固定为 true,表示本地 SKU 修改已经保存
ruten_sku_update_failedupdated_sku_idsstring[]本次已保存的 Sugumart SKU UUID
ruten_sku_update_failedfailed_stepstring失败的渠道步骤:spec_info、price 或 stock
ruten_sku_update_failedcompleted_stepsstring[]失败前已经成功提交露天的步骤
shipment_configuration_incompletemissing_fieldsstring[]缺失的店铺物流配置字段路径
order_shipment_data_incompletemissing_fieldsstring[]缺失的订单、SKU 或清关字段路径
rate_limit_exceededretry_afterinteger建议等待秒数,与 Retry-After Header 一致

字段路径使用点号和数组下标,例如 skus[0].weight、items[0].product_id。调用方不得假设 data 一定存在;自动处理应以 code 为主。

跨境运输方式 ​

HTTP Statuscode条件与处理
400transport_mode_not_supported所选方式未在物流商配置中开启;查询仓库 transport_modes 后重新选择
409transport_mode_conflict本地失败履约重试显式传入不同方式;沿用原方式或省略该字段

transport_mode 非法枚举、null 或空字符串统一返回 400 validation_error。