---
title: "Get one Panera Bread cafe's full menu with prices, nutrition and allergens"
method: GET
path: "/panera/menu"
tags: ["Panera"]
---

# Get one Panera Bread cafe's full menu with prices, nutrition and allergens

`GET /panera/menu`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/panera/menu`
- Auth: API key in header `x-api-key`

Returns one cafe's full category tree (with subcategories) and its complete item catalog, priced for that specific cafe -- Panera's prices are genuinely per-cafe, not a national list (the same salad has been confirmed live at different prices in Chicago and New York). Each item carries its price, product type, whether it is customizable, its published nutrients (only Calories and Caffeine are published -- a fuller macro/micronutrient breakdown is not available), its allergen statement (contains / may-contain, each with an id and display name), Panera's own wellness/dietary labels (for example Vegan, Vegetarian, Gluten Conscious), and a live in_stock flag reflecting this cafe's current stockouts. Cafe ids come from GET /panera/locations. An unknown cafe id returns a 404.

## Query parameters

- `cafe_id` integer, required

## Headers

- `x-api-key` string, required

## Response `200`

OK

- PaneraMenuResponseDoc
  - `code` integer: Code is the HTTP status code or a custom code used to indicate the result of the request @example 200
  - `data` PaneraMenuResponse
    - `cafe_id` integer
    - `categories` PaneraMenuCategory[]
      - `cat_id` integer
      - `image_key` string
      - `item_ids` integer[]: ItemIDs are the items directly under this category. Look them up in the response's top-level Items list.
      - `name` string
      - `sort_weight` integer
      - `subcategories` PaneraMenuCategory[]
    - `count` integer
    - `fetched_at` string
    - `items` PaneraMenuItem[]
      - `allergens` PaneraMenuAllergens
        - `contains` PaneraMenuAllergenEntry[]
          - `id` string
          - `name` string
        - `may_contain` PaneraMenuAllergenEntry[]
          - `id` string
          - `name` string
      - `customizable` boolean
      - `description` string
      - `image_key` string
      - `in_stock` boolean: InStock reflects this cafe's live stockout feed. false means Panera currently has this item unavailable to order at this specific cafe.
      - `item_id` integer
      - `name` string
      - `nutrients` PaneraMenuNutrient[]
        - `name` string
        - `unit` string
        - `value` number
      - `price` number
      - `product_type` string
      - `tags` string[]: Tags are Panera's own merchandising badges for this item (e.g. NEW_PRODUCT, LIMITED_TIME, IN_SEASON, ITS_BACK, MY_PANERA_EXCLUSIVE). Best-effort: badges are fetched from a separate feed keyed to a different id space than the rest of this catalog, so not every item resolves one -- see common.go's package doc.
      - `wellness` string[]: Wellness are Panera's own dietary labels (e.g. Vegan, Vegetarian, Gluten Conscious).
    - `source_url` string
  - `msg` unknown

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
