Panera API endpoint
Returns one cafe's active order-quantity limits -- promotional or supply-constrained items Panera caps per order (for example a seasonal souffle limited to 6 within a 2-day window). Each rule has a scope (item or group), the item ids it applies to, and one or more day-offset windows each with its own max_quantity. A cafe with no active limits returns an empty rules list, not an error. Cafe ids come from GET /panera/locations.
/panera/quantity-rulesQuery parameters:
cafe_id (required) — Panera cafe id, from /panera/locations, e.g. 601447.Response shape:
rules[] — each rule has:
name — Panera's own rule label, e.g. Souffle.scope — group (the limit applies to the combined quantity across every listed item_id) or item (each id is limited independently).item_ids[] — the items this rule covers. Cross-reference against /panera/menu's own item_id.windows[] — one or more day-offset windows the limit applies within, each with from_offset_days, to_offset_days and max_quantity.Example response (trimmed):
{"code":200,"msg":"OK","data":{"cafe_id":601447,"rules":[{"name":"Souffle","scope":"group","item_ids":[652616,652620,780778,780780],"windows":[{"from_offset_days":0,"to_offset_days":2,"max_quantity":6}]}],"count":3,"source_url":"https://www-api.panerabread.com/www-api/public/menu/quantityrules/601447/version/109839","fetched_at":"2026-09-03T12:00:00Z"}}
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| name | 3 | “Souffle” and 2 other values |
| scope | 3 | “group” and 1 other value |
| item_ids | 3 | |
| windows | 3 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| cafe_id | integer | Yes | Panera cafe id, from /panera/locations | 601447 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/panera/quantity-rules?cafe_id=601447" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"cafe_id": 601447,
"rules": [
{
"name": "Souffle",
"scope": "group",
"item_ids": [
652616,
652620,
780778,
780780
],
"windows": [
{
"from_offset_days": 0,
"to_offset_days": 2,
"max_quantity": 6
}
]
}
],
"count": 3,
"source_url": "https://www-api.panerabread.com/www-api/public/menu/quantityrules/601447/version/109839",
"fetched_at": "2026-09-03T12:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/panera.quantityRulesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | panera.QuantityRulesResponse | No | ||||
| data.cafe_id | integer | No | 601447 | |||
| data.count | integer | No | 3 | |||
| data.fetched_at | string | No | ||||
| data.rules | array | No | ||||
| data.rules[].item_ids | array | No | ||||
| data.rules[].name | string | No | Souffle | |||
| data.rules[].scope | string | No | group | |||
| data.rules[].windows | array | No | ||||
| data.rules[].windows[].from_offset_days | integer | No | 0 | |||
| data.rules[].windows[].max_quantity | integer | No | 6 | |||
| data.rules[].windows[].to_offset_days | integer | No | 2 | |||
| data.source_url | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/panera/quantity-rules?cafe_id=601447" \
-H "x-api-key: $CRAWLORA_API_KEY"