Pizza Hut API endpoint
Returns one product variant's full build-your-own customization tree -- every slot (e.g. "Pizza Sauce", "Pizza Cheese", "Pizza Toppings", "Crust Finishers"), every modifier within it (a specific topping, sauce flavor, or seasoning), and every weight/placement option (e.g. Light, Regular, Extra, or a Left/Right/Whole pizza-half placement) with its own real price delta -- zero for an amount already included by default, a positive upcharge for an "extra" option. variant_code comes from /pizzahut/menu's variant_code or variants[].variant_code fields.
/pizzahut/modifiersQuery parameters:
store_number (required) — Pizza Hut's store number, from /pizzahut/stores, e.g. 040937.variant_code (required) — a product's specific size/crust/style variant code, from /pizzahut/menu's variant_code or variants[].variant_code fields, e.g. a Create-Your-Own pizza's variant.channel (optional, default WEB) — order channel the customization tree and pricing reflect, one of WEB, MOBILE, POS, KIOSK, DOORDASH, UBEREATS, GRUBHUB, IOS, ANDROID, DELIVEROO, JUST_EAT, CALL_CENTER.Response includes store_number, variant_code, name, channel, price (the variant's own base price, same shape as /pizzahut/menu), slots[], slot_count, source_url, and fetched_at. Each slot has slot_code, name, min_allowed_selections, max_allowed_selections (omitted when the upstream places no explicit cap), and modifiers[]. Each modifier has modifier_code, name, and weights[]. Each weight has modifier_weight_code, name, and price (amount_cents, amount, currency_code).
| Field | Filled in, of 6 checked | Values in the sample |
|---|---|---|
| slot_code | 6 | |
| name | 6 | “Pizza Sauce” and 5 other values |
| min_allowed_selections | 6 | 0 |
| modifiers | 6 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | Yes | Pizza Hut's store number, from /pizzahut/stores | 040937 | |
| variant_code | string | Yes | A product's specific size/crust/style variant code, from /pizzahut/menu | variant_CLSS001_010BCYO1T_SIZE060L_BASE020H | |
| channel | string | No | Order channel the customization tree 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/modifiers?store_number=040937&variant_code=variant_CLSS001_010BCYO1T_SIZE060L_BASE020H&channel=WEB" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "040937",
"variant_code": "variant_CLSS001_010BCYO1T_SIZE060L_BASE020H",
"name": "Large Hand-Tossed Create Your Own 1-Top Pizza",
"channel": "WEB",
"price": {
"amount_cents": 1849,
"amount": 18.49,
"currency_code": "USD"
},
"slots": [
{
"slot_code": "slot_pizza_cheese",
"name": "Pizza Cheese",
"min_allowed_selections": 0,
"modifiers": [
{
"modifier_code": "modifier_pizza_cheese",
"name": "Pizza Cheese",
"weights": [
{
"modifier_weight_code": "CLSS001P|TOPP547ZC",
"name": "Light Cheese",
"price": {
"amount_cents": 0,
"amount": 0,
"currency_code": "USD"
}
},
{
"modifier_weight_code": "CLSS001P|TOPP200XC",
"name": "Extra Cheese",
"price": {
"amount_cents": 299,
"amount": 2.99,
"currency_code": "USD"
}
}
]
}
]
}
],
"slot_count": 6,
"source_url": "https://www.pizzahut.com/v1/tarmor/ph_us/storefront/graphql",
"fetched_at": "2026-09-05T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/pizzahut.modifiersResponseDoc
| 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.ModifiersResponse | No | ||||
| data.channel | string | No | WEB | |||
| data.fetched_at | string | No | ||||
| data.name | string | No | Large Hand-Tossed Create Your Own 1-Top Pizza | |||
| 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.slot_count | integer | No | 6 | |||
| data.slots | array | No | ||||
| data.slots[].max_allowed_selections | integer | No | 5 | |||
| data.slots[].min_allowed_selections | integer | No | 0 | |||
| data.slots[].modifiers | array | No | ||||
| data.slots[].modifiers[].modifier_code | string | No | CLSS001P|TOPP012P | |||
| data.slots[].modifiers[].name | string | No | Pepperoni | |||
| data.slots[].modifiers[].weights | array | No | ||||
| data.slots[].modifiers[].weights[].modifier_weight_code | string | No | CLSS001P|TOPP200XC | |||
| data.slots[].modifiers[].weights[].name | string | No | Extra Cheese | |||
| data.slots[].modifiers[].weights[].price | pizzahut.Money | No | ||||
| data.slots[].modifiers[].weights[].price.amount | number | No | 20.99 | |||
| data.slots[].modifiers[].weights[].price.amount_cents | integer | No | 2099 | |||
| data.slots[].modifiers[].weights[].price.currency_code | string | No | USD | |||
| data.slots[].name | string | No | Pizza Toppings | |||
| data.slots[].slot_code | string | No | slot_pizza_toppings | |||
| data.source_url | string | No | ||||
| data.store_number | string | No | 040937 | |||
| data.variant_code | string | No | variant_CLSS001_010BCYO1T_SIZE060L_BASE020H | |||
| 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/modifiers?store_number=040937&variant_code=variant_CLSS001_010BCYO1T_SIZE060L_BASE020H&channel=WEB" \
-H "x-api-key: $CRAWLORA_API_KEY"