# Product Hunt API scraper — daily/weekly/monthly leaderboards, product detail & reviews, launch comments, topic & category feeds, maker profiles, collections, and the discussions forum from producthunt.com (logged-out, no API key)

> Today's or historical leaderboard launches (daily/weekly/monthly/yearly).
> ReefAPI engine `producthunt` · 13 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/producthunt/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 or blocked calls are free.
- **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, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /producthunt/v1/posts — 1 credit
Today's or historical leaderboard launches (daily/weekly/monthly/yearly).

**Parameters:**
- `period` (enum, optional, default "daily") — Leaderboard window. Unknown values fall back to the daily board. [one of: daily, weekly, monthly, yearly]
- `date` (string, optional) — Leaderboard date (YYYY-MM-DD). Overrides year/month/day when given.
- `year` (integer, optional) — Leaderboard year (used with month/day/week; defaults to today).
- `month` (integer, optional) — Leaderboard month 1-12 (for daily/monthly periods).
- `day` (integer, optional) — Leaderboard day of month 1-31 (for the daily period).
- `week` (integer, optional) — ISO week number 1-53 (for the weekly period).
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** posts[] (id, slug, name, tagline, upvotes, comments_count, daily/weekly/monthly_rank, topics, product), has_more + next_date/next_page

### POST /producthunt/v1/post — 1 credit
Full launch/product detail by slug: tagline, description, website, makers, hunter, topics, media gallery, external links, review aggregates, alternatives, and launch history.

**Parameters:**
- `slug` (string, required) — Launch post or product slug (the segment in producthunt.com/products/<slug> or /posts/<slug>).

**Returns:** post{}, product{} (+ ai_review_summary, pro_con_tags), makers[], hunter{}, topics[], media[], links[], alternatives[], launches[], rating_breakdown[]

**Example request body:**
```json
{
  "slug": "notion"
}
```

### POST /producthunt/v1/reviews — 1 credit
Product reviews by slug: per-question answer text, rating + rating histogram, pro/con tags, and the AI review summary.

**Parameters:**
- `slug` (string, required) — Product slug (producthunt.com/products/<slug>).
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** product{}, rating, reviews_count, rating_breakdown[], reviews[] (question/answer), pro_con_tags[], ai_review_summary, has_more, page

**Example request body:**
```json
{
  "slug": "notion"
}
```

### POST /producthunt/v1/topics — 0 credits
Browse Product Hunt topics (interest tags applied to launches).

**Parameters:**
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** topics[] (id, slug, name, description, followers_count, image_url), has_more, page

### POST /producthunt/v1/topic_posts — 1 credit
Launches filtered by topic slug.

**Parameters:**
- `slug` (string, required) — Topic slug (the segment in producthunt.com/topics/<slug>).
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** posts[] for the topic (same shape as posts), has_more, page

**Example request body:**
```json
{
  "slug": "notion"
}
```

### POST /producthunt/v1/categories — 1 credit
Browse Product Hunt product categories (the curated category tree, distinct from topics).

**Parameters:**
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** categories[] (id, name, path, url, subcategories[]), has_more, page

### POST /producthunt/v1/category — 1 credit
Products and launches inside one product category by slug.

**Parameters:**
- `slug` (string, required) — Category slug (the segment in producthunt.com/categories/<slug>).
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** products[] / posts[] in the category, has_more, page

**Example request body:**
```json
{
  "slug": "notion"
}
```

### POST /producthunt/v1/search — 1 credit
Keyword search across Product Hunt — products (default) or makers/users (type=users).

**Parameters:**
- `query` (string, required) — Free-text search keywords.
- `type` (enum, optional, default "products") — What to search: products (default) or users. Unknown values fall back to products. [one of: products, users]
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** products[] OR users[] (depending on type), has_more, page

**Example request body:**
```json
{
  "query": "ai"
}
```

### POST /producthunt/v1/collections — 1 credit
Public curated product collections index.

**Parameters:**
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** collections[] (id, slug, name, description, path, products_count, user), has_more, page

### POST /producthunt/v1/collection — 1 credit
Single collection (its products) by user+collection slug or full path.

**Parameters:**
- `path` (string, optional) — Full collection path (e.g. /@user/collections/<slug>). Alternative to username + collection_slug.
- `username` (string, optional) — Collection owner's username (with/without @). Combine with collection_slug, or pass the full path.
- `collection_slug` (string, optional) — Collection slug — the trailing segment of a collection path.

**Returns:** collection{id, slug, name, description, products_count, user, products[]}, products[]

### POST /producthunt/v1/user — 1 credit
Maker/user profile plus their submitted launches.

**Parameters:**
- `username` (string, required) — Product Hunt username/handle, with or without @ (the name in producthunt.com/@<username>).
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** user{} (id, username, name, headline, followers_count, products_count, is_maker), posts[] (submitted launches), has_more, page

**Example request body:**
```json
{
  "username": "rrhoover"
}
```

### POST /producthunt/v1/discussions — 1 credit
Product Hunt discussions/forum thread feed (popular or newest).

**Parameters:**
- `order` (enum, optional, default "popular") — Discussion feed ordering. Unknown values fall back to popular. [one of: popular, newest]
- `page` (integer, optional, default 1) — Result page number (1-based). Use meta.next_page to go further.

**Returns:** threads[] (id, slug, title, description_preview, votes_count, comments_count, user, url), has_more, page

### POST /producthunt/v1/discussion — 1 credit
Single discussion thread with its full nested comment tree.

**Parameters:**
- `slug` (string, required) — Discussion thread slug — the trailing segment of a producthunt.com/p/<forum>/<slug> URL.
- `forum` (string, optional) — Discussion forum segment (the part before the thread slug in /p/<forum>/<slug>). Optional — alternatively pass the full thread path.
- `path` (string, optional) — Full collection path (e.g. /@user/collections/<slug>). Alternative to username + collection_slug.

**Returns:** thread{}, comments[] (nested replies[], votes_count, user, created_at), comments_count

**Example request body:**
```json
{
  "slug": "notion"
}
```

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