Store locator and footprint mapping
Use Papa John's endpoints to turn store locator and footprint mapping into repeatable API requests with documented inputs and JSON responses.
Turn Papa John's public store and menu data into structured JSON — a US directory browse from country to state to city to store, coordinate-based nearby search with distance, hours, price range, and fulfillment services, full per-store detail including a Google Place ID, Papa John's own national nutrition-facts and allergen-matrix reference data, and — for the separate India market — a live priced menu (INR) with deals, item options, and store lookup. Credential-free.
Browse Papa John's US store directory, get nutrition/allergen data, and pull India's live priced menu and deals as structured JSON.
Endpoint families
6
Documented params
26
Examples
9
Live catalog snapshot
Active endpoints
9
Methods
GET
Required params
15
Schema refs
9
{
"platform": "Papa John's",
"endpoint": "papajohns-directory",
"method": "GET",
"path": "/papajohns/directory",
"auth": "apiKey"
}Use cases
Browse Papa John's US store directory, get nutrition/allergen data, and pull India's live priced menu and deals as structured JSON.
Use Papa John's endpoints to turn store locator and footprint mapping into repeatable API requests with documented inputs and JSON responses.
Use Papa John's endpoints to turn delivery/pickup coverage research into repeatable API requests with documented inputs and JSON responses.
Use Papa John's endpoints to turn local retail presence monitoring into repeatable API requests with documented inputs and JSON responses.
Use Papa John's endpoints to turn nutrition and allergen lookup into repeatable API requests with documented inputs and JSON responses.
Use Papa John's endpoints to turn india menu, deal, and pricing monitoring into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Papa John's endpoint catalog — 9 endpoints, 26 documented request parameters, and 9 published response schemas — the same catalog Docs and Playground run against.
9 documented Papa John's endpoints, grouped into 6 request families — India, Allergens and Directory, plus 3 more.
26 request parameters are documented across those Papa John's endpoints, 15 of them required — the full input contract is public before you write any integration code.
9 of the 9 Papa John's endpoints ship a recorded example response, and 9 carry a documented response schema — you can code against the real JSON before the first request.
Papa John's endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
9 hosted MCP tools back the Papa John's endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/papajohns/india/menu
/papajohns/allergens
/papajohns/directory
/papajohns/nearby
/papajohns/nutrition
/papajohns/store
Endpoint catalog
/papajohns/directoryReturns one level of Papa John's store directory. Omit path for the root country index, then pass a child's path to descend through state, city, and store levels. Each child includes its name, path, URL, store count when available, and whether it is a store leaf. Pass a store child's path to GET /papajohns/store. This is a directory browse; use GET /papajohns/nearby for a coordinate search.
MCP tool papajohns_directory
/papajohns/nearbyReturns Papa John's stores within a radius of a latitude/longitude, ordered nearest first, with distance, address, phone, hours, timezone, price range, fulfillment services, payment options, and ordering link. The response includes total_in_radius and offset paging. A coordinate with no nearby stores returns an empty list.
MCP tool papajohns_nearby
/papajohns/storeReturns one Papa John's store's published profile: address, phone, coordinates, general and pickup hours, timezone, Google Place id, and ordering link. The path comes from a store child returned by GET /papajohns/directory. Passing a directory path returns 404.
MCP tool papajohns_store
/papajohns/nutritionReturns Papa John's own published nutrition-facts panel for every item in one category -- full pizzas by name, or a single ingredient family (crust, cheese, sauce, toppings). Each item lists every published size/crust variant with serving size and a full nutrition-facts breakdown (calories, fat, cholesterol, sodium, carbohydrate, fiber, sugars, protein). This is Papa John's national reference data, not priced per-store data -- see GET /papajohns/directory for store lookup.
MCP tool papajohns_nutrition
/papajohns/allergensReturns Papa John's complete published item x allergen matrix (crusts, sauces, cheeses, meats, veggies, and more), grouped by section, each item flagged for peanut, tree nut, egg, milk, wheat, soy, fish, shellfish, and sesame content.
MCP tool papajohns_allergens
/papajohns/india/menuReturns Papa John's **India** menu with live prices in Indian Rupees, from papajohns.in's own ordering backend. This is the India market only -- prices, items, and availability are India-specific and are not comparable to Papa John's US/Canada data (see GET /papajohns/nutrition for US national reference data). Returns every category with its items and deals: list price, strike-through price where a discount is active, dietary tags (Veg, Non Veg, Spicy), images, and the store/channel/day combinations where an item is blacked out. Set include_options=true to also get each item's full size, crust, topping, sauce, and drizzle tree with per-option prices -- this makes the response very large, so prefer GET /papajohns/india/menu/item for one item's options. Pricing is franchise-wide rather than per-store; store_id, channel_id, and day filter item availability, not price, and only take effect when all three are supplied.
Response notes
- **Pricing is franchise-wide, not per-store.** `store_id`, `channel_id`, and `day` filter item *availability*, never price. - **The availability filter needs all three of `store_id`, `channel_id`, and `day`.** Upstream blacks an item out only at a specific store × channel × day combination, so a partial selection cannot hide anything. `filters.availability_filter_applied` reports whether the filter actually ran. - Each item's `availability` lists the blackout combinations (`blacked_out_store_ids`, `blacked_out_channel_ids`, `blacked_out_days`). Empty lists mean the item is available everywhere. - Items and deals share one upstream rank space and are returned merged in that order, so a deal can appear between two a la carte items. Filter on `kind` (`item` or `deal`) to separate them. - `include_options=true` makes the response substantially larger (roughly 1MB for the whole catalog versus ~58KB without). Prefer [`/papajohns/india/menu/item`](papajohns-india-menu-item.md) for one item. - A deal (`kind` is `deal`) whose price is computed rather than fixed reports `price` `0` — read `price_type` instead. See [`/papajohns/india/deal`](papajohns-india-deal.md) for a deal's full composition. - `taxes` carries the franchise tax applied on top of menu prices; menu prices are pre-tax unless a tax is marked `inclusive`. - An unknown `channel_id` or `day` returns a `400`. Example response: ```json {"code":200,"msg":"OK","data":{"market":"india","currency":{"code":"₹","name":"Indian Rupee","locale":"en-IN","country_code":"91"},"taxes":[{"name":"GST","type":"percentage","value":5,"inclusive":false}],"tags":["Veg","Non Veg","Spicy"],"categories":[{"id":"6","name":"Pizzas","rank":7,"items":[{"id":"60","name":"CHICKEN PEPPERONI","kind":"item","description":"Smoky chicken pepperoni, melty real mozzarella, and pizza sauce.","price":679,"discounted":false,"category_id":"6","rank":58,"tags":["Spicy","Non Veg"],"image_url":"https://d1t8cetepnp3l.cloudfront.net/pj_webapp/images/Website/chicken-pepperoni4180.png","customizable":true,"upsell":false,"availability":{}}],"subcategories":[{"id":"8","name":"India Special","items":[]}],"item_count":38}],"item_count":114,"filters":{"availability_filter_applied":false},"source_url":"https://papajohns.suntechsolutions.us/api/newmenu?store_id=0&day=6&channel_id=0","fetched_at":"2026-09-05T09:00:00Z"}} ```
MCP tool papajohns_india_menu
/papajohns/india/storesReturns every Papa John's **India** restaurant with its address, phone, coordinates, and weekly opening hours broken down per order channel (delivery, take away, dine in, drive-through pickup). These store ids are what GET /papajohns/india/menu's store_id availability filter is keyed on. India market only -- for US/Canada stores use GET /papajohns/directory, GET /papajohns/store, or GET /papajohns/nearby.
Response notes
- `hours` has one entry per weekday per channel, so a store publishing three channels returns 21 entries. `channels` lists the distinct channel names that store publishes hours for. - Hours upstream has marked inactive are omitted. - An unknown `channel_id` returns a `400`. Example response: ```json {"code":200,"msg":"OK","data":{"market":"india","stores":[{"id":"7","name":"PJPB - 360° Business Park, Electronics City BLR","store_code":"QRyCHD","address":"Papa Johns, Electronic City Phase I, Electronic City, Bengaluru, Karnataka 560100","phone":"9240244043","latitude":12.840903161072498,"longitude":77.65593675511532,"hours":[{"day":"Monday","channel_id":"2","channel":"Take Away","opens":"11:00:00","closes":"23:00:59"}],"channels":["Dine In","Drive Through Pickup","Take Away"]}],"count":9,"source_url":"https://papajohns.suntechsolutions.us/api/stores","fetched_at":"2026-09-05T09:00:00Z"}} ```
MCP tool papajohns_india_stores
/papajohns/india/menu/itemReturns one Papa John's **India** menu item with its complete customization tree: every size, and for each size every crust, topping, dipping sauce, drizzle, and base sauce with that option's own price in Indian Rupees. The option group flagged base_price carries the item's base price for that size (the crust group on pizzas) rather than an add-on charge; half_price is the surcharge when the option is applied to one half of a pizza. India market only -- prices are Indian Rupees. Use GET /papajohns/india/menu to discover item ids.
Response notes
- The option group flagged `base_price` carries the item's base price for that size (the crust group on pizzas) rather than an add-on charge. Every other group's `price` is a surcharge. - `half_price` on a choice is the charge when that option is applied to one half of a pizza; a group with `halves_enabled` supports half-and-half selection. - `selection_rule` and `selection_spec` come from upstream and describe how many options may be picked, e.g. `Exactly` `1`, or `Between` `0,10`. - Options upstream has disabled are omitted rather than returned inactive. - An unknown `item_id` returns a `404`. Deal ids are not item ids — use [`/papajohns/india/deal`](papajohns-india-deal.md) for those. Example response: ```json {"code":200,"msg":"OK","data":{"market":"india","currency":{"code":"₹","name":"Indian Rupee","locale":"en-IN","country_code":"91"},"taxes":[{"name":"GST","type":"percentage","value":5,"inclusive":false}],"category":"Pizzas","item":{"id":"71","name":"MARGHERITA","kind":"item","price":399,"discounted":false,"category_id":"6","tags":["Veg"],"customizable":true,"upsell":false,"availability":{},"sizes":[{"id":"3","name":"Large","default":true,"rank":1,"option_groups":[{"id":"1","name":"Crust","selection_rule":"Exactly","selection_spec":"1","base_price":true,"halves_enabled":true,"choices":[{"id":"1","name":"Original Crust","price":799,"half_price":399.5,"default":true,"extra":false,"removable":false}]}]}]},"source_url":"https://papajohns.suntechsolutions.us/api/newmenu?store_id=0&day=6&channel_id=0","fetched_at":"2026-09-05T09:00:00Z"}} ```
MCP tool papajohns_india_menu_item
/papajohns/india/dealReturns one Papa John's **India** combo or offer with its full composition: each slot in the deal (with its quantity, size, and whether it can be skipped) and every menu item eligible to fill that slot, with each choice's own price in Indian Rupees. This is materially more than the deal row in GET /papajohns/india/menu, which carries only the deal's name, price, and pricing rule. price_type is one of fixedPrice, BuyXGetY, HalfAndHalf, or variablePrice; only fixedPrice deals report a non-zero price. India market only.
Response notes
- `price_type` is one of `fixedPrice`, `BuyXGetY`, `HalfAndHalf`, or `variablePrice`. Only a `fixedPrice` deal reports a non-zero `price`; the others are computed from the chosen items at order time. - `buy_x`/`get_y` are set on `BuyXGetY` deals. `sum_of_two`/`highest_of_two` describe how a two-item `HalfAndHalf` deal is priced. - A slot with `optional` true may be skipped when ordering. Each choice carries the size and the price that size costs inside this deal, which is often lower than the same item's a la carte price. - `start_time`/`end_time` appear only when the deal is genuinely time-limited. The operator encodes "available all day" as a zero-length window, which is omitted rather than reported as a deal that is never orderable. - A non-numeric `deal_id` returns a `400`; an id the operator has no deal for returns a `404`. Example response: ```json {"code":200,"msg":"OK","data":{"market":"india","id":"17","name":"Sakkath Veg Combo - Dine In","description":"Sakkath Combo","price":699,"price_type":"fixedPrice","category_id":"11","slots":[{"id":"1376","quantity":1,"optional":false,"choices":[{"item_id":"37","name":"BREADSTICKS","size":"6 PC","category":"Sides"},{"item_id":"71","name":"MARGHERITA","price":399,"size":"Medium","size_id":"2","category":"Pizzas"}],"choice_count":5}],"source_url":"https://papajohns.suntechsolutions.us/api/dealdetails/17","fetched_at":"2026-09-05T09:00:00Z"}} ```
MCP tool papajohns_india_deal
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape Papa John's
Crawlora's Papa John's endpoints return normalized public Papa John's data as JSON with one API key — no Papa John's account required. The US family is locator plus national nutrition/allergen reference data — no credential-free US menu-pricing source was found. The India family (papajohns/india/*) is a separate operator and a separate priced menu in Indian Rupees — don't mix the two markets.
Call /papajohns/directory with no path for the root country index, then pass a returned child's path to descend through state, city, and store levels. Each child carries name, path, url, is_store, and store_count when published.
Pass a latitude and longitude to /papajohns/nearby for stores within a radius, nearest first, each with distance, address, phone, coordinates, hours, timezone, price range, fulfillment services, payment options, and ordering URL. Page through total_in_radius with offset for a dense area.
Pass the path from a directory entry flagged is_store, or a /papajohns/nearby result's own path, to /papajohns/store for its store ID, name, address, phone, coordinates, general and pickup hours, timezone, and Google Place ID — passing a directory (non-store) path returns a 404.
Pass a category (cheese, crust, desserts, dipping-sauces, drinks, extras, papa-bowls, papadias, pizzas, sandwiches, sauce, sides, toppings, or wings) to /papajohns/nutrition for every published size/crust variant's serving size and full nutrition breakdown. This is national reference data, not priced per-store data.
Call /papajohns/allergens with no parameters for Papa John's complete published item x allergen guide — crusts, sauces, cheeses, meats, veggies, and more — grouped by section, each flagged for peanut, tree nut, egg, milk, wheat, soy, fish, shellfish, and sesame content.
Call /papajohns/india/menu for every category's items and deals with live prices in Indian Rupees, discount strike-through pricing, dietary tags, and store/channel/day blackout availability. Pass category_id, store_id, channel_id, day, or tag to narrow it, or include_options for the full size/crust/topping tree.
Pass an item id from /papajohns/india/menu to /papajohns/india/menu/item for its full option tree with per-option prices, or a deal id to /papajohns/india/deal for that deal's exact item composition.
Call /papajohns/india/stores for Papa John's India restaurant list — use a returned store_id to filter /papajohns/india/menu's availability for that specific store.
FAQ
Call /papajohns/directory to browse country/state/city/store levels, /papajohns/nearby with a coordinate for nearby stores, /papajohns/store with a store path for full detail, /papajohns/nutrition for the national nutrition-facts panel, or /papajohns/allergens for the allergen matrix — all return structured JSON with one API key.
For the US: no credential-free per-store menu-pricing source was found, so store data covers location, hours, and fulfillment/payment options only, and nutrition/allergen data are Papa John's national reference figures, not priced per-store data. For India, it's different: /papajohns/india/menu returns a fully priced menu (₹) with live discounts, dietary tags, and per-store/channel/day availability — read from papajohns.in's own ordering backend. The two markets are separate operators and separate catalogs; don't compare them.
Check is_store on the entry — only those paths are valid input to /papajohns/store; a country, state, or city path returns a 404 there instead of a hollow record.
Distance from the search coordinate, plus enough store detail (address, phone, hours, price range, fulfillment services) that a follow-up /papajohns/store call is often unnecessary — its path can still be passed to /papajohns/store for the Google Place ID and pickup-specific hours.
It covers every item Papa John's itself publishes nutrition data for, grouped into 14 categories (pizzas, wings, sides, and more) — pass one category per call. A nutrient Papa John's doesn't publish for a given variant is omitted rather than reported as a real zero.
Menu prices are pre-tax unless a given tax entry is marked inclusive — /papajohns/india/menu's taxes array carries the franchise tax (e.g. GST) applied on top. A deal whose price is computed rather than fixed reports price as 0; read price_type instead, or call /papajohns/india/deal for that deal's exact composition.