BuyWhere Citation-Safety FAQ v2
This page is the companion to the original How to Cite BuyWhere Catalog Stats Accurately. The original covers how to fetch and cite the live numbers. This v2 covers what has changed since: the meta.approximate flag, the REST-first rule when MCP search_products degrades, the canonical host for agent.json, and the evergreen phrasing that stays safe as the catalog shifts.
What changed and why this FAQ exists
Three things shifted between the original FAQ (published 2026-08-21, snapshot at 386M / 895K / 383M) and today (snapshot at ~370M / ~935K / ~365M):
- The static copy in
agent.jsonoverstates. The canonical card athttps://buywhere.ai/.well-known/agent.jsonstill describes BuyWhere as "381M+ products from 900,000+ merchants worldwide" — true several weeks ago, now overstated by about 14M products and understated by about 35K merchants. Until the editorial refresh lands, anything citing the agent-card description propagates a stale number. /v1/catalog/statsnow carries anapproximateflag. Most responses now arrive with"meta": {"approximate": true, "source": "pg_class_fallback"}. That is by design — the fallback path serves a number within ~1% of the true count instead of timing out — but editors and agents should know what the flag means so they do not assume a stale "exact" promise.- MCP
search_productshas intermittently returned zero rows when REST still works. During the regression window, the MCP dispatcher served{"meta": {"emptiness_reason": "api_error", "engine_status": "error"}}for common head terms. RESTGET /v1/productscontinued to return real rows. The REST-first fallback is the documented pattern until MCP search recovers.
Live stats (fetch these — never paraphrase the static text)
curl -s https://api.buywhere.ai/v1/catalog/stats
Returns at the time of writing:
{
"data": {
"total_products": 367129632,
"total_merchants": 935495,
"active_products": 363458336
},
"meta": {
"approximate": true,
"source": "pg_class_fallback",
"ts": "2026-08-24T20:55:34.462Z"
}
}
That timestamp is the freshness stamp. The rounded, citation-safe phrasing for the current snapshot is:
BuyWhere indexes nearly 370 million products from nearly 935,000 merchant storefronts worldwide, of which about 365 million are currently active.
For evergreen prose where you cannot refetch, prefer approximate phrases ("hundreds of millions of products", "nearly a million merchants") over specific numbers that will drift within weeks.
The meta.approximate flag, explained
The flag is set when the response comes from the fast pg_class_fallback path instead of an exact SELECT COUNT(*). The number is still trustworthy for editorial citation — the fast path tracks the true count within about 1%. What you should not do is treat the response as a guarantee that the figure is "right now" in the strict transactional sense; treat it as a recent snapshot good for prose and high-level comparisons.
For product-level pagination, do not use the meta total. Use the page-by-page response count from /v1/products and follow the next-page token. The per-page count is authoritative; the meta total is approximate by definition.
The REST-first rule when MCP search degrades
If your agent integrates with BuyWhere via MCP and search_products (or search_products_v2) returns a payload that includes meta.emptiness_reason set to "api_error" and diagnostic.engine_status set to "error", the canonical fallback is:
curl -s "https://api.buywhere.ai/v1/products?country=US&limit=10" \
-H "Authorization: Bearer $BUYWHERE_API_KEY"
The REST endpoint runs on a different retrieval path. When the MCP search path is in a degraded state, REST continues to return real rows. Map the REST rows into the same product-card shape your agent would have returned from MCP (title, price, merchant, url, image_url, region, country_code, availability) so downstream code does not need to branch.
Confirm the fallback by checking that MCP list_categories, get_deals, get_product, compare_products, and find_best_price are still healthy — they have been throughout the recent incidents. The regression has been isolated to the search_products (v1 and v2) dispatchers.
Canonical agent metadata
The canonical agent card is at https://buywhere.ai/.well-known/agent.json. If your crawler or agent-discovery code follows api.buywhere.ai/agent.json, that path serves a 308 redirect to the canonical host with an x-agent-card header pointing at the same path. Treat the canonical host as authoritative for skills, examples, and capability claims.
Related resources
- Original citation FAQ: How to Cite BuyWhere Catalog Stats Accurately
- Live stats endpoint: https://api.buywhere.ai/v1/catalog/stats
- REST products endpoint: https://api.buywhere.ai/v1/products
- MCP server: https://api.buywhere.ai/mcp
- Canonical agent card: https://buywhere.ai/.well-known/agent.json
- Quickstart for AI agents: Build a shopping agent with BuyWhere MCP