# Slickdeals API — live slickdeals.net deals: search with the site's own filters (price, discount, store, category, brand, rating, date, expired), one deal in full with price, list price, store, coupon code, shipping note, deal score, views, comments and the store link, the comments page by page, the Frontpage / Popular / Hot Deals / Fire Deals feeds, and category / store / brand ids with deal counts. No login, no API key.

> Search Slickdeals deals by keyword (or list every deal) with the site's own sort and filters. 40 deals per page, the site stops at 1000 results (25 pages).
> ReefAPI engine `slickdeals` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/slickdeals/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/slickdeals/v1/search — 2 credits
Search Slickdeals deals by keyword (or list every deal) with the site's own sort and filters. 40 deals per page, the site stops at 1000 results (25 pages).

**Parameters:**
- `query` (string, optional) — Search text as typed into slickdeals.net's search box. Optional: without it the search lists every deal (newest first) and the filters still apply.
- `page` (integer, optional, default 1) — Result page, 40 deals each. The site stops at page 25 (1000 deals); with sort=relevance its pages can repeat deals and run out early, sort=recent pages cleanly through every result ('instant pot' 388/388 unique).
- `sort` (enum, optional) — Result order, the site's own sort keys. Default relevance with a query, recent without. Unknown values are refused (the site silently falls back to relevance). [one of: relevance, recent, popular, last_comment_activity, price_low, price_high]
- `min_price` (number, optional) — Lowest deal price in USD, applied by the site ('instant pot' 388 -> 191 for 50-100). Deals without a numeric price are left out by a price filter.
- `max_price` (number, optional) — Highest deal price in USD (see min_price; 'instant pot' max 60 -> 164).
- `min_discount` (integer, optional) — Only deals at least this many percent off the list price, by the site's own discount figure ('instant pot' 388 -> 107 for 50).
- `store_id` (string, optional) — Slickdeals store id, or several comma-separated (any of them). 1 = Amazon, 439 = Walmart, 92 = Best Buy, 201 = Target, 9393 = Woot!; the `categories` action lists the stores with deal counts for any query. A deal tagged with several stores matches each of them, so a row's merchant can be another store (Walmart filter: 2 of 20 rows had Amazon as the deal's store).
- `category_id` (string, optional) — Slickdeals category id, or several comma-separated. 40 = Tech & Electronics, 286 = Home & Home Improvement, 9 = Computers, 285 = Clothing & Accessories, 7702 = Free Shipping; the `categories` action lists ids with counts and drills into subcategories. An id the site does not know returns 0 deals.
- `brand_id` (string, optional) — Slickdeals brand id, or several comma-separated (3378 = Apple, 4632 = Instant Pot); listed with counts by the `categories` action.
- `rating` (enum, optional) — The site's rating filter. firedeal / frontpage / popular keep only deals with that badge ('instant pot': 21 / 61 / 160 of 388). The thumbs levels are the site's labels, not literal vote counts: '5+' kept deals scoring 14 and up, '3+' 6 and up, '1+' 2 and up in the measured sample. [one of: all, firedeal, frontpage, popular, 5, 4, 3, 2, 1]
- `posted_within_days` (enum, optional) — Only deals posted in this window. The site's default is the past 3 years; 'all' searches every year ('instant pot': 30 days 17, 1 year 153, 3 years 388, all time 1000+). [one of: 1, 7, 30, 90, 365, 1095, all]
- `hide_expired` (boolean, optional) — Leave out deals the community marked expired ('instant pot' 388 -> 43).
- `forum_id` (integer, optional) — Only deals from one forum: 9 = Hot Deals (community posts), 4 = Freebies, 10 = Coupons, 30 = Deal Talk, 54 = Free Digital Goods, 177 = Marketplace Deals.

**Returns:** data.deals[]: deal_id, title, url, share_url, image_url, price, price_type (fixed|from|each|or_less|free|other), price_is_from, price_text, list_price, next_best_price (= list_price), list_price_text, discount_pct (from the card prices), source_discount_pct (the site's own figure), currency, extra_info ('+ Free S&H'), shipping_free, shipping_price, merchant {merchant_id, name}, score (net thumbs), comment_count, view_count, is_expired, is_frontpage, is_popular, is_fire, is_new, has_rebate, badge, forum_id, forum, posted_by {username}, published_at, last_comment_at, frontpage_post_id. data.total (the site's count), total_capped (true at 1000), data.pagination {page, last_page, has_more}, data.query (the applied filters).

**Example request body:**
```json
{
  "query": "instant pot",
  "sort": "recent"
}
```

### POST https://api.reefapi.com/slickdeals/v1/deal — 2 credits
One Slickdeals deal in full: price and list price, store, coupon code(s), shipping note, deal score, views, comment count, expired flag, the 'Get Deal' link (optionally followed to the store page), description, categories, brand, images, poster, and the first page of comments.

**Parameters:**
- `deal_id` (string, required) — The deal's id (`deal_id` from search or a feed), or a deal URL (https://slickdeals.net/f/20171283-...).
- `resolve_store_url` (boolean, optional, default false) — Also follow the deal's 'Get Deal' link once and return where it lands (`store_url`, e.g. the amazon.com product page; the site's own affiliate parameters are part of that address). One extra request.

**Returns:** data.deal: deal_id, title, url, share_url, price, price_type, price_is_from, price_text, list_price, next_best_price, list_price_text, discount_pct, currency, extra_info, shipping_free, shipping_price, voucher_code, voucher_codes[], merchant {merchant_id, name, url_name}, link_host, deal_link, deal_link_text, store_url and store_redirect_url (with resolve_store_url), asin, score, view_count, comment_count, is_expired, is_fire, deal_type, forum_id, forum, category {category_id, name, url}, categories[] {name, path, url}, brand {brand_id, name}, images[], description, editor_notes, links[] {text, url}, posted_by {user_id, username, reputation, deals_posted, join_date, rank, is_staff}, deal_editor, published_at, edited_at, updated_at, summary, breadcrumbs[], related_searches[]. data.comments[] (first page, see the comments action), data.comments_page {page, last_page, has_more}.

**Example request body:**
```json
{
  "deal_id": "20171283"
}
```

### POST https://api.reefapi.com/slickdeals/v1/comments — 2 credits
The comments on one Slickdeals deal, page by page (15 top-level comments per page, with their replies), oldest first as on the site.

**Parameters:**
- `deal_id` (string, required) — The deal's id (`deal_id` from search or a feed), or a deal URL (https://slickdeals.net/f/20171283-...).
- `page` (integer, optional, default 1) — Comment page, 15 top-level comments each (replies are nested in between). `last_page` in the answer says how many there are.

**Returns:** data.comments[]: comment_id, text, posted_at, url, author {user_id, username, title, join_date, post_count, badges[]}, reactions {like, funny, helpful, notHelpful}, is_threaded_reply. data.comment_count, data.page, data.last_page, data.has_more.

**Example request body:**
```json
{
  "deal_id": "20053761",
  "page": 2
}
```

### POST https://api.reefapi.com/slickdeals/v1/feed — 2 credits
The Slickdeals home page lists: Frontpage (editor-picked), Popular (voted up by the community), Hot Deals (newest community posts) and Fire Deals, with cursor paging.

**Parameters:**
- `feed` (enum, optional, default "frontpage") — Which list, as on the slickdeals.net home page tabs. [one of: frontpage, popular, hot_deals, fire_deals]
- `cursor` (string, optional) — `next_cursor` from the previous page of the same feed; omit for the first page.
- `show_expired` (boolean, optional) — Include deals marked expired (Frontpage: 137 -> 146 rows on the first page, 9 of them expired). Default as on the site: expired deals hidden.

**Returns:** data.deals[]: the same row as search. data.feed, data.headline, data.next_cursor, data.has_more.

**Example request body:**
```json
{
  "feed": "popular"
}
```

### POST https://api.reefapi.com/slickdeals/v1/categories — 2 credits
Slickdeals category, store and brand ids with deal counts, as the site's search sidebar lists them (about 10 per group, largest first): for all deals or for a query, and drilled into a category's subcategories. Use the ids in search.

**Parameters:**
- `query` (string, optional) — Optional search text: the facets then count deals matching it.
- `category_id` (string, optional) — Drill into one category: its subcategories are listed under it.
- `posted_within_days` (enum, optional, default "all") — Window the counts cover; default all time. [one of: 1, 7, 30, 90, 365, 1095, all]

**Returns:** data.categories[] {category_id, name, deal_count, selected, children[]}, data.stores[] {store_id, name, deal_count}, data.brands[] {brand_id, name, deal_count}, data.discount_buckets[] {min_discount, label, deal_count}, data.price_range {min, max}.

**Example request body:**
```json
{
  "category_id": "40"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=slickdeals
- Human docs page: https://reefapi.com/docs/slickdeals
- Overview page: https://reefapi.com/slickdeals-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
