Bowmark AIdocs

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

FunctionWhat it does
getMenuReads 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…
findStoresFinds 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…
priceOrderPrices 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,…
getMenuItemReads 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…
getDealsReads 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,
};