Skip to content

Shopping list builder

Every list on this page is one call to the public API. Pick a few recipes and watch what they share collapse into single lines.

Shopping list

Nothing yet

Pick a recipe and the API builds your list here, adding up anything the recipes share — two dishes wanting garlic become one line.

Pick recipes

  • Peruvian-Style Roast Chicken with Green Sauce

    onceuponachef.com120 min

  • Black Bean & Corn Salad with Chipotle-Honey Vinaigrette

    onceuponachef.com30 min

  • Baked Ziti

    onceuponachef.com90 min

  • Fish Florentine

    skinnytaste.com20 min

  • Spinach Quiche

    onceuponachef.com90 min

  • Turkey Taco Soup

    skinnytaste.com20 min

How this works

Everything on this page is two calls to the public API. There is no shopping list logic in the browser — the merging, the scaling and the aisles all happen behind GET /shopping-list, and the page only draws what comes back.

  1. Step 1

    Fill the grid

    The 36 cards come from GET /popular, ranked so a single five-star review cannot outrank a long-standing favourite. Six are on screen; the rest wait behind them.

  2. Step 2

    Collect the ids

    Every recipe carries an id. Adding one puts it in the query string, which is why this page can be shared and survives a refresh. Up to 20 ids go into one request.

  3. Step 3

    Build the list

    ?recipes=id,id comes back as one list grouped by aisle. Amounts are added up wherever the units allow — grams to grams, cloves to cloves — so two recipes wanting garlic become one line.

The request this page makes

curl "https://api.tinyplates.dev/shopping-list?recipes=66d0a1b2c3d4e5f6a7b8c9d0,66d0a1b2c3d4e5f6a7b8c9d1" \
  -H "Authorization: Bearer $TINY_PLATES_KEY"

Amounts that cannot be added stay separate: two cloves of garlic and 10 g of garlic are different lines, because turning one into the other needs a weight per clove nobody has. Ask for id:servings and the quantities are scaled to that many servings first.

Related endpoints: GET /search to find recipes by description, GET /pantry to go the other way and cook from what you already have, and GET /recipes/:id for the full recipe behind any card.