Pick beers off a tap list that a user hasn't had
untappd_menu_pickConverts raw beer menu lines into top-rated picks you haven't had yet. Resolves each line to an Untappd beer, checks your history, and ranks the unmatched beers by rating.
Instructions
One call from a tap list to "order this": give the raw menu lines as read from a photo and get back the top-rated beers the user has NOT had. It (1) refreshes the user's distinct-beers cache — an incremental refresh when the cache is complete, otherwise it backfills automatically within api_budget, no separate sync needed; (2) resolves each line to an Untappd beer (prices/punctuation stripped, scored on brewery + name match and check-in volume, venue_city as tie-breaker; resolutions are cached locally so repeat venues are instant); (3) treats " SEASONAL/ROTATING" as a list of possible beers (needs_confirmation) and "ROTATING CIDER"-style lines as unresolved ("ask bartender"); (4) checks every beer against the cache; (5) ranks the not-had ones by global rating. Returns picks, not_had, had, possible, unresolved, a sync block (what the refresh did) and freshness (coverage); if coverage is still incomplete a "not had" may be a false negative and another_run_needed is true. api_budget is also capped to the quota Untappd reports, when it reports one. Omit username for your own account.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Raw menu lines as read from the menu, e.g. ["JACKALOPE FENNARIO IPA $7", "BLACK ABBEY SEASONAL", "ROTATING CIDER"]. | |
| top_n | No | How many picks to return (default 2, max 10). | |
| username | No | Untappd username. Omit to use your own configured account (UNTAPPD_USERNAME). | |
| api_budget | No | Max Untappd API calls this run, shared by the cache sync, searches and rating lookups (default 60; Untappd allows ~100/hour). If it runs out, the result says another_run_needed and a re-run continues from what was cached. | |
| venue_city | No | City of the venue (e.g. "Nashville") — breaks ties between same-named beers toward local breweries. | |
| style_filter | No | Case-insensitive substring filter on the beer style or parent style for the picks (e.g. "ipa", "stout"). | |
| refresh_resolutions | No | Ignore cached line→beer matches and re-search every line (default false). |