Best Buy
Overview
E-commerce — electronics retailer. Three read APIs (search, details, pricing) plus a write pair (addToCart / removeFromCart) keyed by server-generated lineId.
Workflows
Search and compare products
searchProducts(query) → suggestion terms, categories, skuId[]
getProductDetails(skuids ← searchProducts) → name, image, rating, reviewCount
getProductPricing(skus ← searchProducts) → currentPrice, regularPrice, savings, availability
Add an item to cart
searchProducts(query) → skuId[]
getProductPricing(skus ← searchProducts) → confirm purchasable=true (some SKUs are not online-sellable)
addToCart(skuId ← searchProducts) → cartCount, cartSubTotal, summaryItems[].lineId
Add then remove (round-trip)
addToCart(skuId) → summaryItems[0].lineId
removeFromCart(lineId ← addToCart.summaryItems[0].lineId) → order.cartItemCount, order.lineItems[]
Operations
| Operation |
Intent |
Key Input |
Key Output |
Notes |
| searchProducts |
search by keyword |
query |
terms, categories, skuId[] |
entry point |
| getProductDetails |
product info by SKU |
skuids ← searchProducts |
name, image, rating, reviewCount |
comma-separated SKUs |
| getProductPricing |
pricing by SKU |
skus ← searchProducts |
currentPrice, regularPrice, savings, purchasable |
comma-separated SKUs |
| addToCart |
add product to cart |
skuId ← searchProducts |
cartCount, cartSubTotal, summaryItems[].lineId |
write / caution; POST /cart/api/v1/addToCart |
| removeFromCart |
remove cart line |
lineId ← addToCart.summaryItems[0].lineId |
order.cartItemCount, order.lineItems[] |
write / caution; DELETE /cart/item/{lineId} |
Quick Start
# Search for products
openweb bestbuy exec searchProducts '{"query":"hdmi cable","count":3}'
# Get product details
openweb bestbuy exec getProductDetails '{"skuids":"6472356,6430949"}'
# Pricing
openweb bestbuy exec getProductPricing '{"skus":"6472356"}'
# Add to cart — capture the returned lineId
openweb bestbuy exec addToCart '{"items":[{"skuId":"6472356"}]}'
# Remove from cart — uses path param, NOT a JSON body
openweb bestbuy exec removeFromCart '{"lineId":"<lineId-from-addToCart>"}'
Known Limitations
- Akamai-protected — all requests run through
transport: page against an open bestbuy.com tab. Direct HTTP is blocked.
removeFromCart requires a fresh lineId — the line id is server-generated by addToCart and only valid for that cart line. Always chain the two ops (or pass an explicit lineId from a prior add).
- Not every SKU is online-sellable —
addToCart may return HTTP 400 ITEM_NOT_SELLABLE (typical for batteries, store-pickup-only items). Check getProductPricing buttonState.purchasable first.
1---2name: bestbuy3description: Best Buy4---5# Best Buy67## Overview8E-commerce — electronics retailer. Three read APIs (search, details, pricing) plus a write pair (addToCart / removeFromCart) keyed by server-generated `lineId`.910## Workflows1112### Search and compare products131. `searchProducts(query)` → suggestion terms, categories, `skuId[]`142. `getProductDetails(skuids ← searchProducts)` → name, image, rating, reviewCount153. `getProductPricing(skus ← searchProducts)` → currentPrice, regularPrice, savings, availability1617### Add an item to cart181. `searchProducts(query)` → `skuId[]`192. `getProductPricing(skus ← searchProducts)` → confirm `purchasable=true` (some SKUs are not online-sellable)203. `addToCart(skuId ← searchProducts)` → `cartCount`, `cartSubTotal`, `summaryItems[].lineId`2122### Add then remove (round-trip)231. `addToCart(skuId)` → `summaryItems[0].lineId`242. `removeFromCart(lineId ← addToCart.summaryItems[0].lineId)` → `order.cartItemCount`, `order.lineItems[]`2526## Operations2728| Operation | Intent | Key Input | Key Output | Notes |29|-----------|--------|-----------|------------|-------|30| searchProducts | search by keyword | query | terms, categories, skuId[] | entry point |31| getProductDetails | product info by SKU | skuids ← searchProducts | name, image, rating, reviewCount | comma-separated SKUs |32| getProductPricing | pricing by SKU | skus ← searchProducts | currentPrice, regularPrice, savings, purchasable | comma-separated SKUs |33| addToCart | add product to cart | skuId ← searchProducts | cartCount, cartSubTotal, summaryItems[].lineId | write / caution; POST `/cart/api/v1/addToCart` |34| removeFromCart | remove cart line | lineId ← addToCart.summaryItems[0].lineId | order.cartItemCount, order.lineItems[] | write / caution; DELETE `/cart/item/{lineId}` |3536## Quick Start3738```bash39# Search for products40openweb bestbuy exec searchProducts '{"query":"hdmi cable","count":3}'4142# Get product details43openweb bestbuy exec getProductDetails '{"skuids":"6472356,6430949"}'4445# Pricing46openweb bestbuy exec getProductPricing '{"skus":"6472356"}'4748# Add to cart — capture the returned lineId49openweb bestbuy exec addToCart '{"items":[{"skuId":"6472356"}]}'5051# Remove from cart — uses path param, NOT a JSON body52openweb bestbuy exec removeFromCart '{"lineId":"<lineId-from-addToCart>"}'53```5455## Known Limitations56- **Akamai-protected** — all requests run through `transport: page` against an open `bestbuy.com` tab. Direct HTTP is blocked.57- **`removeFromCart` requires a fresh `lineId`** — the line id is server-generated by `addToCart` and only valid for that cart line. Always chain the two ops (or pass an explicit `lineId` from a prior add).58- **Not every SKU is online-sellable** — `addToCart` may return HTTP 400 `ITEM_NOT_SELLABLE` (typical for batteries, store-pickup-only items). Check `getProductPricing` `buttonState.purchasable` first.