---
title: "Get a Papa John's restaurant's priced menu"
method: GET
path: "/papajohns/menu"
tags: ["Papa John's"]
---

# Get a Papa John's restaurant's priced menu

`GET /papajohns/menu`

## Request

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

Returns a Papa John's US or Canada restaurant's full menu with that restaurant's own prices. Prices are per restaurant, not national -- the same 14-inch pizza can differ by several dollars between two stores -- so pass a store_id from GET /papajohns/store or GET /papajohns/nearby. Omitting it returns the national default menu, flagged as national_default in the response. Each category is returned with its sections and product groups, and every orderable SKU carries its price, calories, serving size, slice count and image. Set include_options to also get each product group's customization axes: every size and crust it is sold in, and every preparation instruction (how much cheese, how well done) with its choices. This is the US and Canada menu -- for India use GET /papajohns/india/menu, and for Chile, Costa Rica, Guatemala, Panama, Portugal or Spain use GET /papajohns/intl/menu.

## Query parameters

- `store_id` string
- `category` 'dippingsauces' | 'desserts' | 'drinks' | 'extras' | 'papabowls' | 'pizza' | 'sandwiches' | 'sides' | 'wings'
- `include_options` boolean

## Headers

- `x-api-key` string, required

## Response `200`

OK

- PapajohnsMenuResponseDoc
  - `code` integer: Code is the HTTP status code or a custom code used to indicate the result of the request @example 200
  - `data` PapajohnsMenuResponse
    - `categories` PapajohnsMenuCategory[]
      - `id` string
      - `image_url` string
      - `name` string
      - `product_count` integer: ProductCount is how many priced SKUs this category contains.
      - `sections` PapajohnsMenuSection[]
        - `description` string
        - `id` string
        - `name` string
        - `product_groups` PapajohnsMenuProductGroup[]
          - `allow_half_toppings` boolean
          - `available_topping_ids` integer[]
          - `crusts` PapajohnsMenuCrust[]
            - `code` string
            - `default` boolean
            - `id` integer
            - `name` string
            - `sub_type` string
          - `customizable` string: Customizable reports how far the product can be customized, as upstream classifies it, e.g. full or none.
          - `description` string
          - `featured` boolean
          - `free_toppings` integer
          - `id` string
          - `image_url` string
          - `instructions` PapajohnsMenuInstruction[]
            - `choices` PapajohnsMenuInstructionChoice[]
              - …
            - `description` string
            - `id` integer
            - `name` string
          - `max_same_topping` integer
          - `max_toppings` integer: Topping rules. AvailableToppingIDs are upstream's own numeric ids; this API publishes no name for them, so they are exposed as ids rather than invented labels.
          - `price_from` number: PriceFrom is the cheapest priced SKU in the group, so a caller can rank products without walking every SKU.
          - `products` PapajohnsMenuProduct[]
            - `calories` integer: Calories is per the serving described by serving_label.
            - `code` string
            - `crust_id` integer
            - `description` string
            - `disclaimer` string
            - `image_url` string
            - `name` string
            - `price` number: Price is this store's price. A build-your-own SKU whose price depends entirely on the customer's choices reports 0.
            - `regular_price` number: RegularPrice is the pre-promotion menu price where it differs.
            - `serving_label` string: ServingLabel describes what calories are counted per, e.g. "/slice, 6 slices".
            - `size` string: Size is the size label this SKU represents within its group.
            - `size_id` integer
            - `sku` string
            - `slices` integer
            - `surcharge` number
            - `title` string: Title is the shorter in-menu label, e.g. "Small Original Crust - Pepperoni".
          - `sizes` PapajohnsMenuSize[]: Sizes, Crusts and Instructions are populated only when include_options=true.
            - `default` boolean
            - `id` integer
            - `measure` string: Measure is the physical size where the group has one, e.g. 10".
            - `name` string: Name is the size's marketing name, e.g. Small.
          - `title` string
    - `category` string
    - `fetched_at` string
    - `national_default` boolean: NationalDefault is true when no store was selected, so a caller can tell a real store's prices from the fallback menu.
    - `product_count` integer
    - `source_url` string
    - `store_id` integer: StoreID echoes the restaurant the prices belong to. 0 is the national default menu.
  - `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)
