快速上手

从一把密钥到你的第一批记录和一张收货照片,五分钟,用 curl 完成。

你只需要一样东西:一把合作方密钥。它已经知道自己被授予了哪些餐厅,API 会告诉你。

1. 拿到一把密钥

发邮件到 contact@backresto.com, 写上你的公司、你需要的餐厅和你想要的权限范围。我们与餐厅确认之后,把密钥发给你 指定的技术联系人。获取密钥 是完整的清单。一次把它写全,是让这趟 往返只花一封邮件而不是四封的原因。

一把密钥长这样:

brp_hV8kZ2pQ.tW3nR7yL9cF1sB4xJ6mA8dK0gN5vE2uP7hQ3rT1zY6i

点号前的那一半是公开前缀:它在那个页面的密钥列表里和支持沟通中标识这把密钥, 写下来是安全的。点号后的那一半是密钥串,它只在那一个屏幕上出现过,别处都没有。

2. 存好它

把整个值作为一个字符串放进你的密钥管理器,然后删掉它到达时的那封邮件。绝不要放进 代码仓库,绝不要放进 URL,绝不要放进日志行。我们只保存密钥串的摘要,所以密钥一旦 丢失,就意味着一次吊销加一把新密钥。写信给我们,两件事都在当天完成。

export BACKRESTO_PARTNER_API_KEY='brp_…'

3. 找到你的餐厅

问这把密钥它能触及哪些餐厅,以及各自带有哪些权限范围:

curl "https://api.backresto.com/v1/restaurants" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
{
  "data": [
    {
      "restaurantId": "restaurant-1",
      "scopes": ["deliveries:read", "delivery-pictures:read", "temperature-records:read"]
    }
  ]
}

大多数密钥只触及一家餐厅。把它的标识符留着,下面的调用会用到:

export RESTAURANT_ID='restaurant-1'

4. 看看这把密钥打开了哪些集合

每一种记录类型,包括收货记录,都是一个集合。问这把密钥它能 触及哪些:

curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
{
  "data": [
    {
      "collection": "deliveries",
      "readScope": "deliveries:read",
      "description": "Received shadow snapshots for deliveries; not complete primary-store history.",
      "stateKind": "received-shadow-snapshot",
      "payloadVersion": 1
    }
  ]
}

一个空的 data 意味着这把密钥还没有任何集合授权。 去申请你需要的那些。

5. 走一遍收货记录

一个集合用一个不透明的游标一页一页地走完。时间戳是以字符串表示的 Unix 毫秒时间 戳:这是整个 API 通用的约定,绝不是秒,也绝不是 ISO 8601。

curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections/deliveries/records" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY" \
  --get --data-urlencode "limit=100"
{
  "data": [
    {
      "id": "8f2c1b04-0d5a-4b7e-9f31-6ad2c0e77a51",
      "restaurantId": "restaurant-1",
      "collection": "deliveries",
      "deleted": false,
      "capturedAt": "1787932805120",
      "receivedAt": "1787932911004",
      "sequence": "88",
      "data": {
        "timestamp": "1787932800000",
        "isCompliant": false,
        "supplierDeliveriesId": "supplier-7",
        "temperatureRecords": [
          { "product": "Poulet fermier", "lotNumber": "L2291", "value": 6.4, "unit": "C" }
        ],
        "nonComplianceReasons": ["Température trop élevée"],
        "correctiveActions": ["Produit refusé"],
        "commentary": null
      }
    }
  ],
  "nextCursor": null
}

温度始终是摄氏度。这里没有时间区间:你走完这个集合,想要一周的话就按 data.timestamp 过滤,并留着 id,好在下一次遍历时对账。其他集合(温度、冷却、 清洁、标签)也完全按同样的方式走。

6. 取一次收货的照片

照片就是 delivery-pictures 这个集合。每条记录在 data.deliveryId 里点出它的收货 记录,字节内容则来自它的附件:

curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections/delivery-pictures/records" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY" \
  --get --data-urlencode "limit=100"

curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections/delivery-pictures/records/$PICTURE_ID/assets" \
  -H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"

第二次调用返回有效期十五分钟的签名 URL;下载字节内容时不带 Authorization 请求头。 它需要 delivery-pictures:read 权限范围。如果你的密钥只有 deliveries:read,收货 记录会正常返回,而照片返回 403。这正是授权在起作用,解决办法是让客户签发一把两个 权限范围都有的密钥。

7. 处理你真正会遇到的那两种失败

404:这家餐厅不在你的密钥上,或者这条记录不存在。两者被有意做成无法 区分:API 不会向一个看不到某家餐厅的调用方确认它存在。

403:这家餐厅在你的密钥上,但这个端点需要的那个权限范围不在。

每一个错误都是一份 problem 文档,绝不会是 HTML 页面,并且带有一个 requestId,写信给我们时值得把它附上。

接下来看什么

  • 获取密钥:申请清单,以及日后如何变更一把密钥。
  • 认证:权限范围、轮换,一把密钥能做什么、不能做什么。
  • 分页:游标,以及如何让一份副本保持最新。
  • 收货记录:一次收货查验及其照片的每一个字段。
  • 集合与记录:全部二十六种记录类型,以及它们共用的那个信封。
  • MCP:在 AI 客户端里用上同一份数据,大约三分钟。

最后更新于 2026-09-29。