Total Wine API
Total Wine & More data as structured JSON, priced at the store you pick: product search with that store's price, units in stock, purchase limit and aisle; product detail with bay, shelf and last restock date; and a store locator by ZIP or city.
50 free credits on signup. No card, no Total Wine account.
{ "data": { "query": "titos", "store_id": "503", "page": 1, "total_results": 13, "searched_all_stores": false, "count": 13, "products": [ { "position": 1, "id": "96260175", "name": "Tito's Handmade Vodka", "brand": "Tito's", "size": "1.75L Bottle", "price": 2999, "in_stock": true, "stock": 1204, "purchase_limit": 6, "aisle": "Aisle 03, Left", "rating": 4.8, "review_count": 3302, "pickup": true, "delivery": true, "shipping": false }, { "position": 2, "id": "96260010", "name": "Tito's Handmade Vodka", "brand": "Tito's", "size": "1L Bottle", "price": 2499, "in_stock": true, "stock": 56, "purchase_limit": 6, "aisle": "Aisle 03, Left", "rating": 4.8, "review_count": 3302, "pickup": true, "delivery": true, "shipping": false } ] }, "response_time": 11108}Live call at store 503 (San Antonio) against the real endpoint. 2 free runs, then it's your own key.
What is the Scavio Total Wine API?
The Scavio Total Wine API is a REST API that returns Total Wine & More data as structured JSON at a store you choose. Its 3 POST endpoints cover product search with the store's price, units in stock and aisle; product detail with bay, shelf and restock date; and a store locator by ZIP or city that returns the store_id every price call takes.
- 3
- endpoints, all live in production
- 10
- credits per call, every endpoint
- Per store
- price, stock and aisle
The Total Wine data buyers actually need
The price and stock at the store you shop, not a national average.
Search
POST /api/v1/totalwine/searchKeyword search priced at the Total Wine store you pick. Every result carries that store's price, the units it has on hand, the per-order purchase limit, the aisle it sits in, rating and review count, and whether pickup, delivery and shipping are available.
Product detail
POST /api/v1/totalwine/productOne product at one store by id or URL: price, units in stock, aisle, bay and shelf, the date the store last received it, ABV, size, taste profile, characteristics such as finish and product type, breadcrumbs and images.
Store locator
POST /api/v1/totalwine/storesTotal Wine stores near a ZIP code or city, nearest first, each with the store number that every price call takes, plus address, phone, coordinates, distance in miles and delivery availability.
All 3 Total Wine API endpoints
Every route is a POST, returns JSON, and takes the same API key. 10 credits per successful call.
| Endpoint | Returns | Credits |
|---|---|---|
Search/api/v1/totalwine/search | Keyword search at one store: that store's price, units in stock, purchase limit, aisle, size, rating and pickup, delivery and shipping availability | 10 |
Product detail/api/v1/totalwine/product | One product at one store: price, units in stock, aisle, bay and shelf, last restock date, ABV, taste profile, characteristics and breadcrumbs | 10 |
Store locator/api/v1/totalwine/stores | Total Wine stores near a ZIP or city with store number, address, phone, coordinates and distance in miles | 10 |
50 free credits on signup covers 5 Total Wine calls. See plans
Search Total Wine at one store
One POST with a store_id, and every result comes back with that store's price, units in stock and aisle. The response on the right is a real capture at store 503.
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# Find the stores near a ZIP - 10 credits
stores = client.totalwine.stores("78801", radius=100)["data"]["stores"]
store_id = stores[0]["store_id"]
# Prices and stock at that store - 10 credits
res = client.totalwine.search("titos", store_id=store_id)
for item in res["data"]["products"]:
print(item["name"], item["size"], item["price"], item["stock"], item["aisle"])
# One product at the same store - 10 credits
p = client.totalwine.product(product_id="96260175", store_id=store_id)["data"]
print(p["price"], p["stock"], p["aisle"], p["bay"], p["shelf"]){
"data": {
"query": "titos",
"store_id": "503",
"page": 1,
"total_results": 13,
"searched_all_stores": false,
"count": 13,
"products": [
{
"position": 1,
"id": "96260175",
"name": "Tito's Handmade Vodka",
"brand": "Tito's",
"size": "1.75L Bottle",
"price": 2999,
"in_stock": true,
"stock": 1204,
"purchase_limit": 6,
"aisle": "Aisle 03, Left",
"rating": 4.8,
"review_count": 3302,
"pickup": true,
"delivery": true,
"shipping": false
},
{
"position": 2,
"id": "96260010",
"name": "Tito's Handmade Vodka",
"brand": "Tito's",
"size": "1L Bottle",
"price": 2499,
"in_stock": true,
"stock": 56,
"purchase_limit": 6,
"aisle": "Aisle 03, Left",
"rating": 4.8,
"review_count": 3302,
"pickup": true,
"delivery": true,
"shipping": false
}
]
},
"response_time": 11108
}Why not scraping Total Wine directly?
Total Wine has no public API, and its prices change with the store a visitor is matched to.
DIY Total Wine scraping
- Total Wine offers no public API for product, price or store data
- The site blocks ordinary scrapers and answers for whichever store it matches you to
- Getting one store's price means steering every request to that store and checking it stuck
- Stock, aisle and restock data sit in a large page state you have to parse
Scavio Total Wine API
- Three POST endpoints returning clean JSON with consistent field names
- Every price and stock figure is for the store_id you send, verified on each response
- Units in stock, purchase limit, aisle, bay, shelf and last restock date included
- One key, 50 free credits on signup, the same JSON envelope as every Scavio platform
Scavio returns publicly available data only.
What developers build with it
Restaurant and bar purchasing
Track the shelf price and stock of the spirits, wine and beer you buy at the Total Wine store you actually shop, next to your distributor and grocery prices.
stores + search + productStore-to-store price comparison
Total Wine prices differ by store and state. Query the same product at several store numbers to see where it is cheapest and where it is in stock.
stores + productStock and restock monitoring
Watch units on hand and the last received date at one store to catch a restock of an allocated bottle, or to see when a fast mover is running low.
productLiquor retail competitive intelligence
Compare Total Wine's everyday prices against Spec's, grocery chains and Costco for the same brand and size, on one API key.
search + Spec's + HEB + CostcoAgent shopping tools
Give an AI agent Total Wine as a callable tool through the MCP server: find the nearest store, check a bottle's price and stock, and plan a pickup.
MCP + RESTHow to get Total Wine data as JSON
- 1
Get an API key
Sign up for a Scavio account and copy your key from the dashboard. You get 50 credits free on signup, with no card required and no Total Wine account.
- 2
Find your store
Send {"query": "78801"} to https://api.scavio.dev/api/v1/totalwine/stores with an Authorization: Bearer header. Every store in the response carries a store_id.
- 3
Search at that store
Send {"query": "titos", "store_id": "503"} to /api/v1/totalwine/search. Each result carries that store's price, units in stock and aisle. Pass a result's id to /api/v1/totalwine/product for the full detail.
Total Wine API FAQ
Does Total Wine have a public API?
+
No. Total Wine & More does not offer a public API for product, price or store data. The Scavio Total Wine API fills that gap with 3 POST endpoints that return Total Wine data as structured JSON: store-level product search, product detail and a store locator.
What is the Scavio Total Wine API?
+
It is a REST API that returns public totalwine.com data as structured JSON. Three POST endpoints cover keyword search at one store with price, stock and aisle; product detail at one store with bay, shelf and restock date; and a store locator by ZIP or city.
Are the prices for a specific store?
+
Yes. Total Wine prices and stock are set per store, so every price call takes a store_id and returns that store's numbers. A response is only returned when Total Wine answered for the store you asked for. In our capture, Tito's Handmade Vodka 1.75L was 2999 cents with 1,204 units on hand at store 503 (San Antonio Del Norte).
How do I find a Total Wine store number?
+
POST a ZIP code or city to /api/v1/totalwine/stores. Stores come back nearest first, each with a store_id. In our capture, ZIP 78801 (Uvalde, TX) returned San Antonio (The Rim) at 79.28 miles, San Antonio (Del Norte) and Forum.
Does it return stock levels?
+
Yes. Search results and product detail carry stock, the units the store has on hand, plus in_stock. Search also returns purchase_limit, the most units one order can take. Product detail adds last_received_date, when the store last received the item.
Does it return the aisle location?
+
Yes. Search returns aisle (for example "Aisle 03, Left"), and product detail adds bay and shelf, so you can find the bottle in the store.
What happens if a store does not sell an item?
+
When a store carries none of the matches, Total Wine falls back to searching other stores. Those are other stores' prices, so the API drops them, returns an empty products list and sets searched_all_stores to true. This happens, for example, with spirits at Virginia stores, because Virginia sells spirits only in state stores.
How much does a Total Wine request cost?
+
Every Total Wine endpoint costs 10 credits. New accounts get 50 free credits on signup, one time, with no card required. Paid plans start at $30 per month for 7,000 credits.
How are prices formatted?
+
Prices are integers in cents: 2999 means $29.99. prices[] lists each price Total Wine shows with its type (EDLP is the everyday price), and price is the lowest of them.
How fresh is the data?
+
Every request fetches the page live from Total Wine at the moment you call it, and nothing is cached. Each response carries fetched_at, the time Total Wine answered.
Which languages and tools are supported?
+
Every endpoint is a plain HTTPS POST with a JSON body, so any language works. Scavio also ships Python and JavaScript SDKs, a remote MCP server at mcp.scavio.dev for AI agents, and an n8n community node, all on the same API key.
Is using Total Wine data legal?
+
Scavio returns publicly available Total Wine data and does not access accounts or order history. You remain responsible for how you use the data, including compliance with Total Wine's terms. Talk to your own counsel for your specific use case.
Explore more of Scavio
Spec's API
Every Texas Spec's store's price for a product in one call.
HEB API
Store-level grocery prices, SNAP eligibility and aisle locations.
Costco API
Warehouse prices, gas, coupons and clearance.
Walmart API
Search, product, reviews and store-level pricing.
Kroger API
Search and product detail across Kroger banners.
Total Wine API docs
All 3 endpoints with params and real responses.
Try the Total Wine API free
50 free credits on signup, no card. Your first request is a POST with a ZIP code in it.