Pizza Hut
Pizza Hut's US ordering site.
Pizza Hut's US ordering site. findStores returns the stores serving any US address or ZIP, nearest first, with each one's number, hours, distance, phone and the terms of the carryout and delivery it offers. getMenu reads a store's whole menu — every category, every item, and every variant's price at THAT store. getMenuItem reads one item's full store-level configuration by name — every size/crust, and every optional topping/sauce/cheese slot with what each choice costs on THAT variant. getDeals reads the deals and bundle offers Pizza Hut is running AT ONE STORE right now, filtered to what is actually redeemable there. priceOrder then prices a basket at one of those stores WITHOUT placing it — line items, subtotal, sales tax, delivery fee and the real total Pizza Hut would charge, for carryout or to a delivery address, anonymously.
Domain: pizzahut.com
Also known as: Pizza Hut, PizzaHut, pizzahut.com
Call it directly
bowmark.providers.pizzahut.getMenu(args: { storeNumber: string }): Promise<PizzahutMenu>
bowmark.providers.pizzahut.findStores(where: string | { address?: string; address2?: string; city?: string; state?: string; zip?: string; latitude?: number; longitude?: number }, options?: { fulfillment?: "carryout" | "delivery"; limit?: number }): Promise<PizzahutStore[]>
bowmark.providers.pizzahut.priceOrder(order: { storeNumber: string; items: { productCode: string; variantCode: string; quantity?: number; modifiers?: { slotCode: string; modifierCode: string; modifierWeightCode: string }[]; specialInstructions?: string }[]; fulfillment?: "carryout" | "delivery"; deliveryAddress?: { address: string; address2?: string; city: string; state: string; zip: string; deliveryInstructions?: string; phone?: string }; requestedTime?: string; promoCode?: string }): Promise<PizzahutPricedOrder>
bowmark.providers.pizzahut.getMenuItem(args: { storeNumber: string; item: string; category?: string }): Promise<PizzahutMenuItem>
bowmark.providers.pizzahut.getDeals(args: { storeNumber: string }): Promise<PizzahutDealsForRender>Functions
| Function | What it does |
|---|---|
getMenu | Reads a store's whole menu — every category (pizza, wings, pasta, sides, desserts, drinks, dips, melts, …), every item in each, and each item's variants with their price AT THAT STORE, all… |
findStores | Finds the Pizza Hut stores that serve a US location — each store's number, street address, phone, opening hours, straight-line distance, online status, and the terms of every fulfillment… |
priceOrder | Prices a basket at one Pizza Hut store WITHOUT placing it — every line item, the subtotal, each sales tax, each fee (the delivery fee among them) and the real total Pizza Hut would charge,… |
getMenuItem | Reads one menu item in full for a store — every size/crust it comes in, each one's own starting price, and every optional slot (sauce, cheese, toppings, seasoning, cut) with what each… |
getDeals | Reads the deals, coupons and bundle offers Pizza Hut is running AT ONE STORE right now — every deal that applies there, its bundle code, display name, description and legal text, in the… |
Types
interface PizzahutStore {
storeNumber: string;
storeId: string;
address: string;
address2: string | null;
city: string;
state: string;
zip: string;
country: string;
phone: string | null;
landmark: string | null;
latitude: number | null;
longitude: number | null;
distanceMiles: number | null;
onlineStatus: string;
fulfillment: PizzahutFulfillmentOption[];
deliveryFeeCents: number | null;
hours: PizzahutHours[];
timezone: string;
allowsFutureOrders: boolean;
futureOrderDays: number | null;
localizationToken: string;
}
interface PizzahutFulfillmentOption {
type: "CARRYOUT" | "DELIVERY";
name: string;
serviceTimeMinutes: number | null;
minOrderCents: number | null;
maxOrderCents: number | null;
allowsTip: boolean;
}
interface PizzahutHours {
fulfillment: "CARRYOUT" | "DELIVERY";
days: number[]; // ISO weekday, 1 = Monday … 7 = Sunday
opensAt: string; // "HH:MM:SS", store-local
duration: string; // "HH:MM:SS" from opensAt — the site expresses closing as a duration
}
// ── priceOrder ──────────────────────────────────────────────────────────────
interface PizzahutOrder {
storeNumber: string; // from findStores — everything is store-level
items: PizzahutOrderItem[]; // at least one
fulfillment?: "carryout" | "delivery"; // default "carryout"
deliveryAddress?: PizzahutDeliveryAddress; // REQUIRED for delivery, refused for carryout
requestedTime?: string; // ISO-8601; price for later, and the only way to
// price at all when the store is shut. A Date OBJECT
// cannot reach here from any surface — every argument
// crosses as JSON — so this is a string, always
promoCode?: string; // a dead code warns, it does not throw
}
interface PizzahutOrderItem {
productCode: string;
variantCode: string; // the variant IS the priced configuration (size + crust)
quantity?: number; // default 1
modifiers?: { slotCode: string; modifierCode: string; modifierWeightCode: string }[];
specialInstructions?: string;
}
interface PizzahutDeliveryAddress {
address: string; city: string; state: string; zip: string;
address2?: string; deliveryInstructions?: string;
phone?: string; // OPTIONAL — the site prices delivery without one
}
interface PizzahutPricedOrder {
storeNumber: string;
fulfillment: "CARRYOUT" | "DELIVERY";
currency: string;
lineItems: PizzahutPricedLineItem[];
subtotalCents: number; // after promotions, before tax and fees
originalSubtotalCents: number; // at menu price
taxes: { name: string; amountCents: number }[];
fees: { name: string; type: string; amountCents: number }[]; // type e.g. "DELIVERY_FEE"
totalCents: number; // the site's own total, not summed here
promotions: { name: string; code: string | null; amountCents: number }[];
deliveryProvider: string | null;
estimatedPromisedTime: string | null;
siteNotes: string[]; // always includes the payment one
blockers: string[]; // what still stands between this and an order
}
interface PizzahutPricedLineItem {
name: string | null;
productCode: string | null;
variantCode: string | null;
quantity: number;
priceCents: number;
originalPriceCents: number;
specialInstructions: string | null;
}
// ── getMenuItem ───────────────────────────────────────────────────────────
interface PizzahutMenuItem {
storeNumber: string;
productCode: string; // pass this + a variantCode below to priceOrder
name: string | null;
description: string | null;
category: string | null;
currency: string;
variants: PizzahutMenuItemVariant[];
}
interface PizzahutMenuItemVariant {
variantCode: string; // the priced configuration — size and crust are IN this code
name: string | null;
priceCents: number; // this variant's OWN starting price
attributes: string[]; // e.g. ["Original Pan® Pizza", "Personal Pan"]
slots: PizzahutMenuItemSlot[];
servingSize: { quantity: number; unit: string } | null;
allergens: { allergen: string; presence: string }[];
}
interface PizzahutMenuItemSlot {
slotCode: string; // e.g. "slot_pizza_cheese", "slot_toppings"
name: string | null;
minAllowedSelections: number;
maxAllowedSelections: number | null; // null = no cap the site publishes
modifiers: PizzahutMenuItemModifier[];
}
interface PizzahutMenuItemModifier {
modifierCode: string;
name: string | null;
weights: PizzahutMenuItemWeight[]; // portion/intensity choices for this modifier
}
interface PizzahutMenuItemWeight {
modifierWeightCode: string; // pass slotCode + modifierCode + this to priceOrder's modifiers
name: string | null; // e.g. "Light", "Regular", "Extra"
priceCents: number; // what THIS option costs on THIS variant — varies by size
}
// ── getMenu ───────────────────────────────────────────────────────────────
interface PizzahutMenuArgs {
storeNumber: string;
}
interface PizzahutMenuVariant {
variantCode: string;
name: string | null;
priceCents: number;
attributes: string[]; // e.g. ["Original Pan® Pizza", "Personal Pan"]
}
interface PizzahutMenuListItem {
productCode: string;
name: string | null;
description: string | null;
categoryCode: string;
categoryName: string;
currency: string;
variants: PizzahutMenuVariant[];
}
interface PizzahutMenuCategory {
categoryCode: string;
categoryName: string;
items: PizzahutMenuListItem[];
}
interface PizzahutMenu {
storeNumber: string;
currency: string;
categories: PizzahutMenuCategory[];
}
// ── getDeals ──────────────────────────────────────────────────────────────
// Mirrors the public types declared at the top of this file (PizzahutDeals,
// PizzahutDeal, PizzahutDealImage, PizzahutDealScope) — copied here so the
// rendered get_library blurb and the catalog signature are types the
// gateway can resolve. The exported shapes are the source of truth.
type PizzahutDealScopeForRender = "all" | { storeNumbers: string[] };
interface PizzahutDealImageForRender {
url: string;
title: string | null;
}
interface PizzahutDealForRender {
position: number | null;
code: string;
name: string;
description: string | null;
legalText: string | null;
appImage: PizzahutDealImageForRender | null;
webImage: PizzahutDealImageForRender | null;
}
interface PizzahutDealsForRender {
storeNumber: string;
deals: PizzahutDealForRender[];
sources: { name: string; scope: PizzahutDealScopeForRender }[];
}Examples
// Which Pizza Hut is closest to me, and how long does it say it'll take?
const stores = await bowmark.providers.pizzahut.findStores("90210", { limit: 5 });
return stores.map((s) => ({
store: s.storeNumber,
address: s.address + ", " + s.city + " " + s.state,
miles: s.distanceMiles,
minutes: s.fulfillment.find((f) => f.type === "CARRYOUT")?.serviceTimeMinutes,
}));// Will Pizza Hut deliver here, and on what terms?
// Delivery needs a real street address — a ZIP alone is a carryout-shaped question.
const [store] = await bowmark.providers.pizzahut.findStores(
{ address: "6100 Windhaven Pkwy", city: "Plano", state: "TX", zip: "75093" },
{ fulfillment: "delivery" },
);
if (!store) return "No Pizza Hut delivers to that address.";
const delivery = store.fulfillment.find((f) => f.type === "DELIVERY");
return {
store: store.storeNumber + " — " + store.address,
phone: store.phone,
feeDollars: store.deliveryFeeCents === null ? null : store.deliveryFeeCents / 100,
minimumDollars: delivery?.minOrderCents == null ? null : delivery.minOrderCents / 100,
promiseMinutes: delivery?.serviceTimeMinutes ?? null,
};