Pizza Hut API endpoint
Checks whether a Pizza Hut restaurant's delivery integration can deliver to a given address and, when it can, the estimated delivery fee (broken down by fee line item) and pickup/dropoff time. This is a checkout-time estimate -- it does not add an item to a cart or place an order, and takes no payment or account information. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case seen live, such as the requested delivery_provider not being enabled at that store. For the default INTERNAL provider, a serviceable result does not by itself confirm the address is within a real deliverable radius -- see this endpoint's markdown doc for the caveat. order_subtotal materially affects the fee estimate, so it is required rather than defaulted. pickup_at defaults to 30 minutes from now (an "order now" style estimate) when omitted.
/pizzahut/delivery-estimateQuery parameters:
store_number (required) — Pizza Hut's store number, from /pizzahut/stores, e.g. 040937.address1 (required) — delivery address line 1.address2 (optional) — delivery address line 2.city (required) — delivery address city.state (required) — delivery address state, two-letter code.postal_code (required) — delivery address postal code.country_code (optional, default US) — delivery address country code.latitude (required) — delivery address latitude.longitude (required) — delivery address longitude.order_subtotal (required) — order subtotal before fees, in dollars. This materially affects the fee estimate, so it is required rather than defaulted.pickup_at (optional, RFC3339) — pickup time. Defaults to 30 minutes from now (an "order now" style estimate) when omitted.delivery_provider (optional, default INTERNAL) — one of DOORDASH, MOCK_DOORDASH, INTERNAL. Unlike KFC (where DOORDASH is the confirmed-working default), every Pizza Hut store checked only has INTERNAL (Pizza Hut's own delivery fleet) enabled — see /pizzahut/store's delivery_providers.Response includes store_number, delivery_provider, serviceable, reason, pickup_at, dropoff_at, fee, fees[], source_url, and fetched_at. serviceable is true only when the upstream returned a real estimate; a false value with reason populated covers every other case confirmed live, such as the requested delivery_provider not being enabled at that store. fee is the total delivery fee; fees[] breaks it down by line item (name, type, amount), each amount given in cents and as a decimal dollar value.
Caveat confirmed live: for the INTERNAL provider, this endpoint does not appear to validate real geographic distance between the store and the delivery address — a delivery address on the opposite side of the country from a real, INTERNAL-only store still returned serviceable: true with the same flat fee as a genuinely nearby address, rather than an error. Treat a true result as confirmation that the store/provider pairing and address shape are valid inputs, not as proof the address is actually within a deliverable radius — this reflects Pizza Hut's own upstream behavior, not a gap in this endpoint.
Example response (serviceable):
{"code":200,"msg":"OK","data":{"store_number":"040937","delivery_provider":"INTERNAL","serviceable":true,"fee":{"amount_cents":599,"amount":5.99,"currency_code":"USD"},"fees":[{"name":"Delivery fee","type":"DELIVERY_FEE","amount":{"amount_cents":599,"amount":5.99,"currency_code":"USD"}}],"source_url":"https://www.pizzahut.com/v1/tarmor/ph_us/storefront/graphql","fetched_at":"2026-09-05T00:00:00Z"}}
Example response (not serviceable, a real live result — DoorDash was not enabled at this store):
{"code":200,"msg":"OK","data":{"store_number":"040937","delivery_provider":"DOORDASH","serviceable":false,"reason":"The requested StoreDeliveryProvider has not be enabled at this store","source_url":"https://www.pizzahut.com/v1/tarmor/ph_us/storefront/graphql","fetched_at":"2026-09-05T00:00:00Z"}}
| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| name | 1 | “Delivery fee” |
| type | 1 | “DELIVERY_FEE” |
| amount | 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | Yes | Pizza Hut's store number, from /pizzahut/stores | 040937 | |
| address1 | string | Yes | Delivery address line 1 | 250 W 57th St | |
| address2 | string | No | Delivery address line 2 | ||
| city | string | Yes | Delivery address city | New York | |
| state | string | Yes | Delivery address state, two-letter code | NY | |
| postal_code | string | Yes | Delivery address postal code | 10019 | |
| country_code | string | No | Delivery address country code (default US) | US | |
| latitude | number | Yes | Delivery address latitude | 40.7656 | |
| longitude | number | Yes | Delivery address longitude | -73.982 | |
| order_subtotal | number | Yes | Order subtotal before fees, in dollars | 10 | |
| pickup_at | string | No | RFC3339 pickup time (default 30 minutes from now) | 2026-09-05T20:00:00Z | |
| delivery_provider | string | No | Delivery provider to check (default INTERNAL) Allowed values: DOORDASH, MOCK_DOORDASH, INTERNAL. | INTERNAL | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/pizzahut/delivery-estimate?store_number=040937&address1=250+W+57th+St&city=New+York&state=NY&postal_code=10019&latitude=40.7656&longitude=-73.982&order_subtotal=10&delivery_provider=DOORDASH" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "040937",
"delivery_provider": "INTERNAL",
"serviceable": true,
"fee": {
"amount_cents": 599,
"amount": 5.99,
"currency_code": "USD"
},
"fees": [
{
"name": "Delivery fee",
"type": "DELIVERY_FEE",
"amount": {
"amount_cents": 599,
"amount": 5.99,
"currency_code": "USD"
}
}
],
"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.deliveryEstimateResponseDoc
| 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.DeliveryEstimateResponse | No | ||||
| data.delivery_provider | string | No | INTERNAL | |||
| data.dropoff_at | string | No | ||||
| data.fee | object | No | Fee is the total delivery fee; Fees breaks it down by line item. | |||
| data.fee.amount | number | No | 20.99 | |||
| data.fee.amount_cents | integer | No | 2099 | |||
| data.fee.currency_code | string | No | USD | |||
| data.fees | array | No | ||||
| data.fees[].amount | pizzahut.Money | No | ||||
| data.fees[].amount.amount | number | No | 20.99 | |||
| data.fees[].amount.amount_cents | integer | No | 2099 | |||
| data.fees[].amount.currency_code | string | No | USD | |||
| data.fees[].name | string | No | Delivery fee | |||
| data.fees[].type | string | No | DELIVERY_FEE | |||
| data.fetched_at | string | No | ||||
| data.pickup_at | string | No | ||||
| data.reason | string | No | The requested StoreDeliveryProvider has not be enabled at this store | |||
| data.serviceable | boolean | No | true | Serviceable is true only when the upstream returned a real estimate. A false value with Reason populated covers every other case this family has seen live: the provider not enabled at this store (confirmed live for DOORDASH against a real INTERNAL-only store) or the upstream delivery marketplace itself reporting an error -- Pizza Hut's schema represents these as distinct typed results, not one boolean. See this type's own doc comment for a caveat about what Serviceable:true does and does not confirm for INTERNAL. | ||
| 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/delivery-estimate?store_number=040937&address1=250+W+57th+St&city=New+York&state=NY&postal_code=10019&latitude=40.7656&longitude=-73.982&order_subtotal=10&delivery_provider=DOORDASH" \
-H "x-api-key: $CRAWLORA_API_KEY"