Papa John's API endpoint
Returns 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.
/papajohns/india/dealIndia market only. Prices are Indian Rupees (₹).
Query parameters:
deal_id (required) — a numeric deal id from
/papajohns/india/menu (items with kind set
to deal).Notable response behavior:
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.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.deal_id returns a 400; an id the operator has no deal for
returns a 404.| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| id | 4 | |
| quantity | 4 | 1 |
| optional | 4 | true in 0 of 4 |
| choices | 4 | median 4 entries |
| choice_count | 4 | 4 to 8, median 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| deal_id | string | Yes | Deal id from GET /papajohns/india/menu (items with kind=deal) | 17 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/papajohns/india/deal?deal_id=17" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"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"
}
}Request schema
No body schema
Response schema
#/definitions/papajohns.indiaDealResponseDoc
| 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.IndiaDealResponse | No | ||||
| data.buy_x | integer | No | ||||
| data.category_id | string | No | 11 | |||
| data.currency | papajohns.IndiaCurrency | No | ||||
| data.currency.code | string | No | ₹ | |||
| data.currency.country_code | string | No | 91 | |||
| data.currency.locale | string | No | en-IN | |||
| data.currency.name | string | No | Indian Rupee | |||
| data.description | string | No | Sakkath Combo | |||
| data.end_time | string | No | 23:59:59 | |||
| data.fetched_at | string | No | ||||
| data.get_y | integer | No | ||||
| data.highest_of_two | boolean | No | ||||
| data.id | string | No | 17 | |||
| data.image_url | string | No | ||||
| data.market | string | No | india | |||
| data.name | string | No | Sakkath Veg Combo - Dine In | |||
| data.price | number | No | 699 | Price is the deal's fixed price when price_type is fixedPrice, and 0 for a computed deal (BuyXGetY, HalfAndHalf, variablePrice). | ||
| data.price_type | string | No | fixedPrice | |||
| data.slots | array | No | ||||
| data.slots[].choice_count | integer | No | 5 | |||
| data.slots[].choices | array | No | ||||
| data.slots[].choices[].category | string | No | Pizzas | |||
| data.slots[].choices[].item_id | string | No | 71 | |||
| data.slots[].choices[].name | string | No | MARGHERITA | |||
| data.slots[].choices[].price | number | No | 399 | |||
| data.slots[].choices[].size | string | No | Medium | |||
| data.slots[].choices[].size_id | string | No | 2 | |||
| data.slots[].id | string | No | 1376 | |||
| data.slots[].name | string | No | ||||
| data.slots[].optional | boolean | No | false | |||
| data.slots[].percentage_off | number | No | ||||
| data.slots[].quantity | integer | No | 1 | |||
| data.slots[].size | string | No | Medium | |||
| data.source_url | string | No | ||||
| data.start_time | string | No | 00:00:00 | |||
| data.sum_of_two | boolean | No | SumOfTwo and HighestOfTwo describe how a two-item deal is priced when price_type is HalfAndHalf. | |||
| 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/deal?deal_id=17" \
-H "x-api-key: $CRAWLORA_API_KEY"