# DealBuffalo > DealBuffalo (dealbuffalo.com) aggregates the hottest American deals posted on > community deal forums, on Amazon's own Today's Deals page, > Amazon Warehouse (open-box/refurbished copies priced clearly below the > cheapest new price), and verified eBay.com listings (new-condition listings > priced below the median of recent actual eBay sales), and presents them in a > simple, fast, community-voted list. Every deal links directly to the store. > Deals are refreshed automatically every 10 minutes. ## Quickstart for agents 1. Fetch https://dealbuffalo.ca/llms-full.txt — the full current catalog of active deals as plain-text markdown (title, price, store, category, customer rating, source, posted time, deal page and store link per deal). One fetch, no JavaScript. 2. Or use the JSON API below for filtering (search, sort, dealer, source, category, price cap, discount floor, freshness, pagination). 3. Every HTML page on this site is server-rendered: the raw HTTP response already contains the full text content, , meta description, canonical URL, Open Graph tags and JSON-LD structured data. No JavaScript is required to read any page. 4. Any page also has a markdown version for agents: send the "Accept: text/markdown" header (e.g. curl -H "Accept: text/markdown" https://dealbuffalo.ca/deals/123) and the response is text/markdown — a clean, formatting- stripped rendering of the same data — with an x-markdown-tokens estimate header. HTML stays the default for browsers; the HTML <head> advertises the markdown twin via <link rel="alternate" type="text/markdown">. ## Pages - [Home (deal list, sorted by hotness)](https://dealbuffalo.ca/) - [Newest deals](https://dealbuffalo.ca/?sort=new) - [Most saving deals](https://dealbuffalo.ca/?sort=saving) - [Deal detail page](https://dealbuffalo.ca/deals/{id}) — one page per deal (id is the numeric "id" field of the API); carries the price, store, category, community votes, price-check verdict, similar deals and Product JSON-LD. - [About](https://dealbuffalo.ca/about) ## Machine-readable APIs - GET https://dealbuffalo.ca/.well-known/api-catalog — API catalog (RFC 9727 Linkset, application/linkset+json) for automated discovery: one entry per API with service-desc (OpenAPI spec), service-doc (this guide) and status (health) links. - GET https://dealbuffalo.ca/.well-known/agent-card.json — A2A (agent-to-agent) Agent Card per the A2A Protocol: how other agents discover DealBuffalo — identity, the HTTP+JSON interface, capabilities, and the deal-data skills. - GET https://dealbuffalo.ca/.well-known/agent-skills/index.json — Agent Skills Discovery index (RFC v0.2.0): installable skills for this service. Each entry is a SKILL.md artifact (type "skill-md") with a URL and a SHA-256 digest; fetch the index, then the artifact, and verify the digest. - GET https://dealbuffalo.ca/.well-known/oauth-authorization-server — RFC 8414 OAuth authorization server metadata: the standard discovery document clients probe to learn how to authenticate. It states the truth — no grant types, no response types, no scopes: the API is open and needs no authentication. The named endpoints exist and answer with a clear "no authentication required" error; the JWK Set is a valid empty set. - GET https://dealbuffalo.ca/auth.md — Auth.md agent-registration discovery: this API is open (no OAuth, no API key, no registration). States that plainly for agents; the RFC 8414 metadata above is the machine-readable companion. - GET https://dealbuffalo.ca/api/openapi.json — OpenAPI 3.1 specification of the JSON API (application/vnd.oai.openapi+json); the service-desc target of the catalog. - GET https://dealbuffalo.ca/llms-full.txt — full-text markdown dump of ALL active deals (single fetch; regenerated on every request, cached 10 min). - GET https://dealbuffalo.ca/api/deals — JSON list of active deals. Params: sort=hot|new|votes|saving|discount|price_asc|price_desc, q=<search>, dealer=<store>, source=community|slickdeals|amazondeals|ebay|warehouse, category=<product category>, min_disc=<percent 1-90>, max_price=<number>, fresh=1h|12h|24h|7d|30d, page=<n>, per_page=<n (max 100)>, status=active|expired|all. Response: {"items":[{"id","title","url","thread_url","dealer","category","price","original_price","currency","image_url","asin","rating"?"rating_count","score","user_votes","votes","comments","clicks","wahou","posted_at","status","price_check"?"similar"?}],"total","page","pages"} (rating = product customer star rating on the 5-star scale, null when unknown; rating_count = number of ratings, 0 when unknown) - GET https://dealbuffalo.ca/api/deals/{id} — single deal JSON (includes "price_check" verdict and "similar" top-3 deals). - POST https://dealbuffalo.ca/api/deals/{id}/vote?value=1|-1 — cast a vote on a deal (+1 upvote, -1 downvote). One vote per visitor IP per deal; voting again from the same IP changes the vote. Response: {"ok", "value", "user_votes", "votes"} where "votes" is the new displayed total (scraped score + user votes). - GET https://dealbuffalo.ca/go/{id} — click tracker: records one click per unique visitor IP, then 302-redirects to the deal's "url". Backs the "wahou" popularity flag. - GET https://dealbuffalo.ca/api/dealers — active-deal counts grouped by store. - GET https://dealbuffalo.ca/api/sources — active-deal counts grouped by source. - GET https://dealbuffalo.ca/api/categories — active-deal counts grouped by product category (e.g. "Electronics", "Home & Kitchen"). - GET https://dealbuffalo.ca/api/meta — deal counts and last scrape status. - GET https://dealbuffalo.ca/feed.xml — RSS 2.0 of the latest 50 deals. - GET https://dealbuffalo.ca/sitemap.xml — XML sitemap of deal pages. ## Notes - "url" points at the store product page; Amazon..com links carry our affiliate tag. - "source" values: community (community deal forums; thread_url is null for those, and image_url points at the site's own /img/{id} proxy — the source image is re-hosted so no source domain is exposed), slickdeals (Slickdeals), amazondeals (Amazon..com Today's Deals; thread_url is null and score is 0 for those), ebay (verified eBay.com listings; thread_url is null and score is 0 for those, dealer is "ebay.com"), warehouse (Amazon..com Warehouse open-box / refurbished deals; price is the used price, original_price is the cheapest new price, thread_url is null and score is 0). - "score" is the community vote score scraped from the source (higher means more upvoted; 0 for first-party sources). "user_votes" is the sum of DealBuffalo visitors' own votes on the deal (+1/-1, one per IP, via POST /api/deals/{id}/vote). "votes" is the displayed total: score + user_votes (a deal at +42 on its forum with +10 from our visitors shows +52). - "clicks" is the count of unique visitor IPs that followed the deal's outbound link (via /go/{id}); "wahou" is true once clicks reach the site's popularity threshold (the 🔥 Wahou badge). Both are read-time; "wahou" is never stored. - "price"/"original_price" use the "currency" field (USD for community, Amazon and eBay deals, USD for Slickdeals); either may be null. - Deal items may include "price_check": the DealBuffalo price oracle's independent verdict (verdict=genuine|fair|check|unknown) backed by signals "ebay_sold" (median of actual sold listings from other stores), "new_offers" and "used_offers" (cheapest new / used buying options on Amazon..com). It is computed from third-party market data, never from Amazon's own "was" price, and is absent until the oracle has stored evidence for the deal's ASIN. - Sources listed in UI_EXCLUDE_SOURCES (currently: Slickdeals, pending relaunch) are omitted from the list, facets, RSS, sitemap and llms-full.txt; direct deal URLs still resolve. - Active deals are periodically re-checked against their current price; a deal whose price has clearly risen above the deal price is automatically marked expired and drops out of the list. Inconclusive checks (bot walls, missing prices) never expire a deal. - Content is aggregated from public community posts; source threads are linked as "thread_url".