---
title: "Get one Subway store's full menu"
method: GET
path: "/subway/menu"
tags: ["Subway"]
---

# Get one Subway store's full menu

`GET /subway/menu`

## Request

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

Returns one Subway store's complete menu: every category, every product, and for each purchasable size (Footlong, 6-inch, etc.) its price, full nutrition panel (calories, fat, sodium, protein and more) and allergen disclosures. Store IDs come from a GET /subway/store result's store_id field. This endpoint currently covers US stores only: the menu is not available for non-US stores, which return 404 -- see GET /subway/combos for the bundle/combo categories that are available in other markets. Categories carry is_main_category: true for human-browsable menu sections (Sandwiches, Drinks, Salads, ...) and false for Subway's own internal build/customization groupings, which are included for completeness but are not meant to be shown as menu sections on their own.

## Query parameters

- `store_id` string, required

## Headers

- `x-api-key` string, required

## Response `200`

OK

- SubwayMenuResponseDoc
  - `code` integer: Code is the HTTP status code or a custom code used to indicate the result of the request @example 200
  - `data` SubwayMenuResponse
    - `categories` SubwayMenuCategory[]
      - `description` string
      - `id` string
      - `is_main_category` boolean
      - `items` SubwayMenuItem[]
        - `id` string
        - `name` string
        - `slug` string
        - `variants` SubwayMenuVariant[]
          - `allergens` SubwayAllergen[]
            - `contains` boolean
            - `may_contain` boolean
            - `name` string
          - `available` boolean
          - `id` string
          - `image_asset_urn` string: ImageAssetURN is Subway's own Adobe AEM asset identifier, not a directly fetchable URL -- confirmed live 2026-09-02 that the upstream's own imageUrl field is always empty; this is what is actually populated. Kept as-is rather than inventing an unverified delivery-URL scheme.
          - `name` string: Name is the upstream product name, which sometimes carries an internal build code in parentheses (e.g. "(1DM)") -- passed through verbatim rather than stripped, since the meaning of that code is not documented anywhere this family could confirm.
          - `nutrition` SubwayNutritionFact[]
            - `name` string
            - `value` number
          - `price` number
          - `size` string: Size is the build label ("Footlong", "6''", "Kids") distinguishing this variant from siblings of the same MenuItem.
      - `name` string
      - `slug` string
    - `category_count` integer
    - `currency` string
    - `fetched_at` string
    - `product_count` integer
    - `source_url` string
    - `store_id` 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/028417aa35bb?raw)
