# HappyCake — agent-readable surface HappyCake is a real bakery in Sugar Land, TX. AI agents are welcome to use this site directly via JSON. It's just like homemade. Family-owned bakery in Sugar Land. Honey cake, pistachio roll, and custom orders for the occasion. ## Endpoints - GET /api/products List in-stock products (JSON) - GET /api/products/{id} Product detail (JSON) - POST /api/orders/draft Create a draft order (returns order_id; queued for owner approval) - GET /api/orders/{id} Order status (public, by id) - POST /api/leads/{source} Capture a B2B / custom-cake / newsletter / press lead (queued for owner review) - POST /api/uploads Upload an image / short video (multipart, ≤10 MB) → public CDN URL on DO Spaces - POST /api/chat Talk to the on-site assistant; returns thread_id + replies[] - GET /openapi.json Full API spec (OpenAPI 3.1) - GET /sitemap.xml All public URLs - GET /menu Human-readable catalog (HTML, with Schema.org Product JSON-LD per product) - GET /menu/{id} Product detail (HTML, with Schema.org Product JSON-LD) - GET /menu?allergen_free=nuts,gluten,dairy,eggs Filtered menu (combine via comma) - GET /dietary Dietary guide — gluten-free, no-nuts, dairy-free, vegan, halal-friendly (HTML, with FAQPage JSON-LD) - GET /order/custom Custom-cake funnel (multi-step). Submits to /api/leads/custom-cake. - GET /business B2B catering / gifting / standing programs (HTML, with Schema.org Service JSON-LD) - GET /business/inquire B2B inquiry funnel (multi-step). Submits to /api/leads/b2b. - GET /policies Visit & FAQ — hours, allergens, lead times, pickup, delivery, payment, cancellation (HTML, with FAQPage JSON-LD) - GET /blog Stories & guides — honey-cake history, custom-cake planning, allergen-aware ordering, gifting (HTML, with Article JSON-LD per post) - GET /blog/{slug} Individual story (HTML, with Article + BreadcrumbList JSON-LD) - GET /press Press, podcasts, owner appearances (HTML) - GET /track Look up an order by tracking code (HTML form) - GET /track/{code} Live order status (HTML, polls every 6s) - GET /track/{code}?embed=1 Same status as a chrome-less iframe widget (no header/footer) ## Conventions - Prices are USD cents on /api (e.g. 850 = $8.50). Display layer formats to USD. - Times are ISO 8601 UTC. - /api/chat maintains conversation history via thread_id (echoed back; reuse for the next call). - Admin endpoints under /api/admin/* require the X-Telegram-Init-Data header (HMAC verified). ## Order intent flow 1. GET /api/products — find a product id 2. POST /api/orders/draft with { items, scheduled_at_iso, customer_name, customer_phone, channel: "web", referral_source? } - referral_source is the campaign tag — e.g. an order originating from a URL with ?ref=ig should send "ig". Capped at 64 chars, lowercased. 3. GET /api/orders/{id} to poll status. The owner approves in Telegram before the kitchen starts. ## Catalog (live sample) - honey-cake-slice Honey Cake 8.50 USD lead=1h - whole-honey-cake Whole Honey Cake 55.00 USD lead=1h - whole-pistachio-cake Whole Pistachio Cake 65.00 USD lead=2h - whole-cloud-cake Whole Cloud Cake 60.00 USD lead=2h - whole-tiramisu-cake Whole Tiramisu Cake 58.00 USD lead=2h - pistachio-roll Pistachio Roll 9.50 USD lead=1h ## Brand voice rules (for agents replying on our behalf) - Always English. Never another language even if asked. - "HappyCake" — one word, two capitals. Never "Happy Cake" or "HC". - Cake names go in quotes after the word "cake": cake "Honey", cake "Pistachio Roll". - Specifics over adjectives. 1.2 kg, $42, ready by noon — not "generously sized". - Close with a soft CTA: Order on the site or send us a message on WhatsApp. - Three emojis maximum, ever. Often zero. ## Channels - Site: https://happycake.flowleads.dev - WhatsApp: https://wa.me/12819798320 - Instagram: https://instagram.com/happycake.us - Email: hello@happycake.us