Pizza Hut API endpoint
Returns one deal/combo's full choice-builder tree -- every named slot it offers (e.g. "1st Pizza", "Wings or Fries", "1st Dip") and every product variant a caller can pick to fill that slot, each with the real price delta selecting it adds over the bundle's base price (zero for a variant already covered by the deal, positive for an upgrade such as a larger size or a specialty pizza). This is a different structure from /pizzahut/modifiers -- that endpoint customizes toppings/sauces on one product variant, while this endpoint swaps whole product variants in and out of a multi-item combo. bundle_code comes from /pizzahut/menu's code field on a type=bundle item.
/pizzahut/bundle-choicesQuery parameters:
store_number (required) — Pizza Hut's store number, from /pizzahut/stores, e.g. 040937.bundle_code (required) — a deal/combo's bundle code, from /pizzahut/menu's code field on a type=bundle item, e.g. MEAL501BD ("Big Dinner Box").channel (optional, default WEB) — order channel the deal and pricing reflect, one of WEB, MOBILE, POS, KIOSK, DOORDASH, UBEREATS, GRUBHUB, IOS, ANDROID, DELIVEROO, JUST_EAT, CALL_CENTER.Response includes store_number, bundle_code, name, description, channel, price (the deal's own base price, same shape as /pizzahut/menu), choices[], choice_count, source_url, and fetched_at. Each choice has choice_code, name, min_allowed_selections, max_allowed_selections (omitted when the upstream places no explicit cap), and variants[]. Each variant has variant_code, name, and upcharge (amount_cents, amount, currency_code) — the price delta over the deal's base price for picking that variant in this slot.
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| choice_code | 3 | |
| name | 3 | “MHB Entree” and 2 other values |
| min_allowed_selections | 3 | 0 to 1, median 1 |
| max_allowed_selections | 3 | 1 |
| variants | 3 | median 21 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | Yes | Pizza Hut's store number, from /pizzahut/stores | 040937 | |
| bundle_code | string | Yes | A deal/combo's bundle code, from /pizzahut/menu's code field on a type=bundle item | MEAL501BD | |
| channel | string | No | Order channel the deal and pricing reflect (default WEB) Allowed values: WEB, MOBILE, POS, KIOSK, DOORDASH, UBEREATS, GRUBHUB, IOS, ANDROID, DELIVEROO, JUST_EAT, CALL_CENTER. | WEB | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/pizzahut/bundle-choices?store_number=040937&bundle_code=MEAL501BD&channel=WEB" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "040937",
"bundle_code": "MEALB18HT",
"name": "My Hut Box",
"description": "Choice of entrée: 2-top. Personal Pan Pizza, full or half melt, or 6 wings. Choice of side: fries or 4 wings. Wings are boneless or bone-in. Melt dipping sauce incl. Addt'l charge for extra cheese/toppings.",
"channel": "WEB",
"price": {
"amount_cents": 999,
"amount": 9.99,
"currency_code": "USD"
},
"choices": [
{
"choice_code": "742",
"name": "MHB Entree",
"min_allowed_selections": 1,
"max_allowed_selections": 1,
"variants": [
{
"variant_code": "variant_CLSS001_010BCYO2T_SIZE964MH_BASE015P",
"name": "My Hut Box Personal Pan® Create Your Own 2-Top Pizza",
"upcharge": {
"amount_cents": 0,
"amount": 0,
"currency_code": "USD"
}
}
]
},
{
"choice_code": "286",
"name": "Wings or Fries",
"min_allowed_selections": 1,
"max_allowed_selections": 1,
"variants": []
},
{
"choice_code": "657",
"name": "MHB Drink",
"min_allowed_selections": 1,
"max_allowed_selections": 1,
"variants": []
}
],
"choice_count": 3,
"source_url": "https://www.pizzahut.com/v1/tarmor/ph_us/storefront/graphql",
"fetched_at": "2026-09-06T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/pizzahut.bundleChoicesResponseDoc
| 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 | pizzahut.BundleChoicesResponse | No | ||||
| data.bundle_code | string | No | MEAL501BD | |||
| data.channel | string | No | WEB | |||
| data.choice_count | integer | No | 4 | |||
| data.choices | array | No | ||||
| data.choices[].choice_code | string | No | 748 | |||
| data.choices[].max_allowed_selections | integer | No | 1 | |||
| data.choices[].min_allowed_selections | integer | No | 1 | |||
| data.choices[].name | string | No | 1st Pizza | |||
| data.choices[].variants | array | No | ||||
| data.choices[].variants[].name | string | No | Medium Hand-Tossed Create Your Own 1-Top Pizza | |||
| data.choices[].variants[].upcharge | pizzahut.Money | No | ||||
| data.choices[].variants[].upcharge.amount | number | No | 20.99 | |||
| data.choices[].variants[].upcharge.amount_cents | integer | No | 2099 | |||
| data.choices[].variants[].upcharge.currency_code | string | No | USD | |||
| data.choices[].variants[].variant_code | string | No | variant_CLSS001_010BCYO1T_SIZE050M_BASE020H | |||
| data.description | string | No | All your faves - 2 medium 1-topping pizzas, 8 boneless wings, and 5 breadsticks! | |||
| data.fetched_at | string | No | ||||
| data.name | string | No | Big Dinner Box | |||
| data.price | pizzahut.Money | No | ||||
| data.price.amount | number | No | 20.99 | |||
| data.price.amount_cents | integer | No | 2099 | |||
| data.price.currency_code | string | No | USD | |||
| data.source_url | string | No | ||||
| data.store_number | string | No | 040937 | |||
| 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/pizzahut/bundle-choices?store_number=040937&bundle_code=MEAL501BD&channel=WEB" \
-H "x-api-key: $CRAWLORA_API_KEY"