Papa John's API endpoint
Returns 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.
/papajohns/india/menuIndia market only. Prices are Indian Rupees (₹) and the catalog is India-specific. This is a different operator and a different menu from Papa John's US/Canada — do not compare it with
/papajohns/nutritionor the US locator endpoints (/papajohns/directory,/papajohns/store,/papajohns/nearby).
Query parameters:
category_id (optional) — return only this category. An unknown id returns
a 404.store_id (optional) — hide items blacked out at this store. Discover ids
with /papajohns/india/stores.channel_id (optional) — order channel. One of 1 (Delivery), 2
(Take Away), 3 (Dine In), 4 (Drive Through Pickup).day (optional) — weekday. One of 0 (Sunday), 1 (Monday), 2
(Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday).tag (optional) — return only items carrying this tag, e.g. Veg,
Non Veg, Spicy. Case-insensitive.include_options (optional, default false) — include every item's full
size/crust/topping/sauce tree with per-option prices.Notable response behavior:
store_id, channel_id, and
day filter item availability, never price.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.availability lists the blackout combinations
(blacked_out_store_ids, blacked_out_channel_ids, blacked_out_days).
Empty lists mean the item is available everywhere.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 for one item.kind is deal) whose price is computed rather than fixed reports
price 0 — read price_type instead. See
/papajohns/india/deal 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.channel_id or day returns a 400.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| name | 1 | “GST” |
| type | 1 | “percentage” |
| value | 1 | 5 |
| inclusive | 1 | true in 0 of 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category_id | string | No | Return only this category id | 6 | |
| store_id | string | No | Hide items blacked out at this store id (see GET /papajohns/india/stores). Only applies together with channel_id and day. | 7 | |
| channel_id | string | No | Order channel. One of: 1 (Delivery), 2 (Take Away), 3 (Dine In), 4 (Drive Through Pickup). Only applies together with store_id and day. Allowed values: 1, 2, 3, 4. | 1 | |
| day | string | No | Weekday. One of: 0 (Sunday), 1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday). Only applies together with store_id and channel_id. Allowed values: 0, 1, 2, 3, 4, 5, 6. | 1 | |
| tag | string | No | Return only items carrying this tag, e.g. Veg, Non Veg, Spicy. Case-insensitive. | Veg | |
| include_options | boolean | No | Include every item's full size/crust/topping option tree with prices. Default false. | false | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/india/menu?channel_id=1&day=0&include_options=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.indiaMenuResponseDoc
| 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 | papajohns.IndiaMenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].description | string | No | ||||
| data.categories[].id | string | No | 6 | |||
| data.categories[].image_url | string | No | ||||
| data.categories[].item_count | integer | No | 29 | |||
| data.categories[].items | array | No | IndiaMenuItem record, 43 fields: availability, buy_x, category_id, customizable, description, discounted, get_y, id, image_url, kind, name, price and 7 more. Described under Papa John's India Menu Item API. | |||
| data.categories[].name | string | No | Pizzas | |||
| data.categories[].rank | integer | No | 7 | |||
| data.categories[].subcategories | array | No | ||||
| data.categories[].subcategories[].id | string | No | 8 | |||
| data.categories[].subcategories[].items | array | No | IndiaMenuItem record, 43 fields: availability, buy_x, category_id, customizable, description, discounted, get_y, id, image_url, kind, name, price and 7 more. Described under Papa John's India Menu Item API. | |||
| data.categories[].subcategories[].name | string | No | India Special | |||
| data.currency | papajohns.IndiaCurrency | No | IndiaCurrency record, 4 fields: code, country_code, locale, name. Described under Papa John's India Deal API. | |||
| data.fetched_at | string | No | ||||
| data.filters | papajohns.IndiaMenuFilters | No | ||||
| data.filters.availability_filter_applied | boolean | No | false | AvailabilityFilterApplied is false unless store_id, channel_id, and day were all supplied -- the operator's blackout rules need all three. | ||
| data.filters.category_id | string | No | ||||
| data.filters.channel | string | No | Delivery | |||
| data.filters.channel_id | string | No | ||||
| data.filters.day | string | No | ||||
| data.filters.day_name | string | No | Monday | |||
| data.filters.store_id | string | No | ||||
| data.filters.tag | string | No | ||||
| data.item_count | integer | No | 114 | |||
| data.market | string | No | india | |||
| data.source_url | string | No | ||||
| data.tags | array | No | ||||
| data.taxes | array | No | ||||
| data.taxes[].inclusive | boolean | No | false | |||
| data.taxes[].name | string | No | GST | |||
| data.taxes[].type | string | No | percentage | |||
| data.taxes[].value | number | No | 5 | |||
| 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 |
| 404 | Not Found | #/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/papajohns/india/menu?channel_id=1&day=0&include_options=true" \
-H "x-api-key: $CRAWLORA_API_KEY"