Quickstart
From a key to a delivery and a collection record in five minutes, with curl.
You need one thing: a partner key. It already knows which restaurants it was granted, and the API will tell you.
1. Get a key
Email contact@backresto.com with your company, the restaurants you need and the scopes you want. We confirm with the restaurant, then send the key to the technical contact you named. Getting a key is the full checklist β sending it complete is what makes the round trip one email rather than four.
A key looks like this:
brp_hV8kZ2pQ.tW3nR7yL9cF1sB4xJ6mA8dK0gN5vE2uP7hQ3rT1zY6i
The half before the dot is a public prefix β it identifies the key in the list on that page and in support conversations, and it is safe to write down. The half after it is the secret, and it appears nowhere but that one screen.
2. Store it
Put the whole value in your secret manager, as one string, and delete the email it arrived in. Never a repository, never a URL, never a log line. We keep only a digest of the secret, so a lost key means a revocation and a new one β write to us and both happen the same day.
export BACKRESTO_PARTNER_API_KEY='brp_β¦'
3. Find your restaurant
Ask the key which restaurants it reaches, and with which scopes:
curl "https://api.backresto.com/v1/restaurants" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
{
"data": [
{
"restaurantId": "restaurant-1",
"scopes": ["deliveries:read", "delivery-images:read"]
}
]
}
Most keys reach one restaurant. Keep its identifier for the calls below:
export RESTAURANT_ID='restaurant-1'
4. List a week of deliveries
The list endpoint takes an explicit time range, in epoch milliseconds, as strings. That is the convention across the whole API β never seconds, never ISO 8601.
curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/deliveries" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY" \
--get \
--data-urlencode "from=1787846400000" \
--data-urlencode "to=1788451200000" \
--data-urlencode "limit=25"
{
"data": [
{
"id": "8f2c1b04-0d5a-4b7e-9f31-6ad2c0e77a51",
"restaurantId": "restaurant-1",
"occurredAt": "1787932800000",
"isCompliant": false,
"supplier": { "id": "supplier-7", "name": "Metro Nord" },
"temperatureRecords": [
{ "product": "Poulet fermier", "lotNumber": "L2291", "unit": "C", "value": 6.4 }
],
"nonComplianceReasons": ["TempΓ©rature trop Γ©levΓ©e"],
"correctiveActions": ["Produit refusΓ©"],
"commentary": null,
"imageCount": 2
}
],
"nextCursor": null
}
5. Fetch one delivery, and its photographs
curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/deliveries/$DELIVERY_ID" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/deliveries/$DELIVERY_ID/images" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
The photographs endpoint needs the delivery-images:read scope in addition to
deliveries:read. If your key has only the first, the delivery answers and the
photographs answer 403 β that is the grant doing its job, and the fix is for
the customer to issue a key with both.
6. Read one of the other collections
Everything that is not a delivery β temperatures, cooling, cleaning, labels β is a collection. Ask the key which ones it opens:
curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY"
An empty data means the key has no collection grants yet, which is the normal
state of a key issued for deliveries alone β ask for the ones you need.
Otherwise, walk one:
curl "https://api.backresto.com/v1/restaurants/$RESTAURANT_ID/collections/temperature-records/records" \
-H "Authorization: Bearer $BACKRESTO_PARTNER_API_KEY" \
--get --data-urlencode "limit=100"
{
"data": [
{
"id": "3a71f0c8-9d24-4f11-bb0e-77c2e5a41d93",
"restaurantId": "restaurant-1",
"collection": "temperature-records",
"deleted": false,
"capturedAt": "1788961200000",
"receivedAt": "1788961318000",
"sequence": "4192",
"data": {
"timestamp": "1788961200000",
"value": 3.2,
"unit": "CELSIUS",
"shift": "MORNING",
"equipmentId": "equipment-12"
}
}
],
"nextCursor": null
}
No time range here: you walk the collection and keep id to reconcile on the
next walk.
7. Handle the two failures you will actually meet
404 β the restaurant is not on your key, or the delivery does not exist.
The two are deliberately indistinguishable: the API does not confirm that a
restaurant exists to a caller who cannot see it.
403 β the restaurant is on your key, but the scope this endpoint needs is
not.
Every error is a problem document, never an HTML page, and
carries a requestId worth quoting if you write to us.
Where next
- Getting a key β the request checklist, and how to change a key later.
- Authentication β scopes, rotation, what a key can and cannot do.
- Pagination β the cursor, and how to walk a long range.
- Deliveries β every field, and what it means on the shop floor.
- Collections & records β the other twenty-four record types, and the envelope they share.
- MCP β the same data inside an AI client, in about three minutes.