Shopify Inventory Levels Set API返回NotFound错误排查请求
问题场景
我们有一套库存与价格更新服务,测试账号中可正常通过API更新商品价格和库存,但切换至正式站点凭证后,仅价格更新功能正常,库存更新持续返回「NotFound」错误。该问题稳定复现,使用Postman或curl发起相同请求也会失败,已尝试2024-04与2023-07版本的API。直接登录Shopify管理后台可正常更新库存,且能通过GET请求成功获取当前库存水平。
成功获取库存的GET请求详情
请求方式:GET
请求地址:/admin/api/2024-04/inventory_levels.json?inventory_item_ids=51191952113953
响应内容:
{ "inventory_levels": [ { "inventory_item_id": 51191952113953, "location_id": 76281872673, "available": 2, "updated_at": "2024-06-04T11:52:50+03:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/112663920929?inventory_item_id=51191952113953" } ] }
库存更新失败的POST请求详情
请求方式:POST
请求地址:/admin/api/2024-04/inventory_levels/set.json
请求体:
{ "inventory_item_id": 51191952113953, "location_id": 76281872673, "available": 3 }
响应内容:
{ "errors": "Not Found" }
排查与解决方向
检查API凭证的库存写入权限
正式站点的API Access Token可能缺少write_inventory权限。价格更新仅需write_products权限,但库存更新需要单独的write_inventory权限。登录Shopify后台「应用和销售渠道」→「查看应用」→对应应用的「权限」页面,确认是否开启库存写入权限,若未开启,申请权限并重新生成有效凭证。验证Location ID的有效性
尽管GET请求能返回该Location的库存数据,仍需确认正式站点中76281872673对应的位置是否被禁用或删除。进入Shopify后台「设置」→「位置」,检查目标位置的状态,若已禁用,需切换至启用的位置或重新启用该位置。修正请求体参数层级
Shopify的inventory_levels/set接口要求参数嵌套在inventory_level对象内,当前请求的参数为平级结构,可能导致接口解析失败。修正后的请求体应为:{ "inventory_level": { "inventory_item_id": 51191952113953, "location_id": 76281872673, "available": 3 } }测试环境可能因宽松校验通过,但正式环境严格遵循接口规范,这是此类问题的常见诱因。
确认商品的库存跟踪状态
若正式站点中该商品未开启「跟踪库存」,API无法对其库存进行更新。进入商品编辑页的「库存」板块,检查是否勾选「跟踪此产品的库存」选项,仅开启跟踪的商品支持API库存修改。尝试其他API版本
部分正式站点可能因店铺配置(如多地点库存模式)导致特定API版本存在兼容性问题。可尝试切换至更早的稳定版本(如2023-01)或最新候选版本,同时确认店铺是否启用「多地点库存」功能,确保调用符合对应模式的API规范。
内容的提问来源于stack exchange,提问作者Vijeesh

