---
title: "List Product Hunt comments"
method: GET
path: "/v1/producthunt/comments"
tags: ["Product Hunt"]
---

# List Product Hunt comments

`GET /v1/producthunt/comments`

## Request

- Base URL: `https://api.scrapeatlas.com`
- URL: `https://api.scrapeatlas.com/v1/producthunt/comments`
- Auth: API key in header `x-api-key`

List Product Hunt comment threads. Pass post for a launch's comments, forum and discussion for a forum discussion's comments (each top-level comment with its HTML body, votes, author and up to five direct replies, sorted by score, votes or date), or comment for the direct replies to one comment, oldest first. Page with cursor. Each successful request costs 1 account credit, including partial results. Failed requests cost 0 credits.

## Query parameters

- `post` string
- `forum` string
- `discussion` string
- `comment` string
- `order` 'score' | 'votes' | 'date' | 'date_desc'
- `cursor` string
- `limit` string

## Response `200`

Inspect the response status and failure or coverage fields.

- union
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` true, required
    - `status` 'success' | 'partial', required
    - `sourceUrl` string, uri, required
    - `fetchedAt` string, date-time, required
    - `coverage` object, required
      - `source` 'public_api' | 'public_feed', required
      - `complete` boolean, required
      - `warnings` string[], required
    - `post` object, required
      - `id` string, required
      - `slug` string, required
      - `name` string, required
      - `commentsCount` integer, required
    - `comments` object[], required
      - `id` string, required
      - `bodyHtml` string, nullable, required
      - `createdAt` string, required
      - `votesCount` integer, required
      - `repliesCount` integer, required
      - `isSticky` boolean, required
      - `isPinned` boolean, required
      - `path` string, nullable, required
      - `url` string, nullable, required
      - `user` object, nullable, required
        - `id` string, required
        - `name` string, nullable, required
        - `username` string, required
        - `headline` string, nullable, required
        - `avatarUrl` string, nullable, required
        - `url` string, required
      - `replies` object[], required
        - `id` string, required
        - `bodyHtml` string, nullable, required
        - `createdAt` string, required
        - `votesCount` integer, required
        - `repliesCount` integer, required
        - `isSticky` boolean, required
        - `isPinned` boolean, required
        - `path` string, nullable, required
        - `url` string, nullable, required
        - `user` object, nullable, required
          - `id` string, required
          - `name` string, nullable, required
          - `username` string, required
          - `headline` string, nullable, required
          - `avatarUrl` string, nullable, required
          - `url` string, required
      - `hasMoreReplies` boolean, required
    - `totalCount` integer, nullable, required
    - `nextCursor` string, nullable, required
    - `hasMore` boolean, required
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` false, required
    - `status` 'failed' | 'challenged', required
    - `failure` object, required
      - `code` 'invalid_request' | 'unauthorized' | 'not_found' | 'upstream_challenged' | 'upstream_rate_limited' | 'upstream_error' | 'unsupported_page' | 'response_too_large' | 'unsafe_redirect' | 'request_limit' | 'timeout' | 'busy' | 'payload_too_complex', required
      - `message` string, required
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` true, required
    - `status` 'success' | 'partial', required
    - `sourceUrl` string, uri, required
    - `fetchedAt` string, date-time, required
    - `coverage` object, required
      - `source` 'public_api' | 'public_feed', required
      - `complete` boolean, required
      - `warnings` string[], required
    - `discussion` object, required
      - `id` string, required
      - `slug` string, required
      - `title` string, required
      - `commentsCount` integer, required
    - `comments` object[], required
      - `id` string, required
      - `bodyHtml` string, nullable, required
      - `createdAt` string, required
      - `votesCount` integer, required
      - `repliesCount` integer, required
      - `isSticky` boolean, required
      - `isPinned` boolean, required
      - `path` string, nullable, required
      - `url` string, nullable, required
      - `user` object, nullable, required
        - `id` string, required
        - `name` string, nullable, required
        - `username` string, required
        - `headline` string, nullable, required
        - `avatarUrl` string, nullable, required
        - `url` string, required
      - `replies` object[], required
        - `id` string, required
        - `bodyHtml` string, nullable, required
        - `createdAt` string, required
        - `votesCount` integer, required
        - `repliesCount` integer, required
        - `isSticky` boolean, required
        - `isPinned` boolean, required
        - `path` string, nullable, required
        - `url` string, nullable, required
        - `user` object, nullable, required
          - `id` string, required
          - `name` string, nullable, required
          - `username` string, required
          - `headline` string, nullable, required
          - `avatarUrl` string, nullable, required
          - `url` string, required
      - `hasMoreReplies` boolean, required
    - `totalCount` integer, nullable, required
    - `nextCursor` string, nullable, required
    - `hasMore` boolean, required
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` false, required
    - `status` 'failed' | 'challenged', required
    - `failure` object, required
      - `code` 'invalid_request' | 'unauthorized' | 'not_found' | 'upstream_challenged' | 'upstream_rate_limited' | 'upstream_error' | 'unsupported_page' | 'response_too_large' | 'unsafe_redirect' | 'request_limit' | 'timeout' | 'busy' | 'payload_too_complex', required
      - `message` string, required
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` true, required
    - `status` 'success' | 'partial', required
    - `sourceUrl` string, uri, required
    - `fetchedAt` string, date-time, required
    - `coverage` object, required
      - `source` 'public_api' | 'public_feed', required
      - `complete` boolean, required
      - `warnings` string[], required
    - `comment` object, required
      - `id` string, required
      - `repliesCount` integer, required
    - `replies` object[], required
      - `id` string, required
      - `bodyHtml` string, nullable, required
      - `createdAt` string, required
      - `votesCount` integer, required
      - `repliesCount` integer, required
      - `isSticky` boolean, required
      - `isPinned` boolean, required
      - `path` string, nullable, required
      - `url` string, nullable, required
      - `user` object, nullable, required
        - `id` string, required
        - `name` string, nullable, required
        - `username` string, required
        - `headline` string, nullable, required
        - `avatarUrl` string, nullable, required
        - `url` string, required
    - `totalCount` integer, nullable, required
    - `nextCursor` string, nullable, required
    - `hasMore` boolean, required
  - object
    - `requestId` string, uuid, required
    - `accounting` object, required
      - `upstreamRequests` integer, required
      - `responseBytes` integer, required
      - `durationMs` number, required
    - `success` false, required
    - `status` 'failed' | 'challenged', required
    - `failure` object, required
      - `code` 'invalid_request' | 'unauthorized' | 'not_found' | 'upstream_challenged' | 'upstream_rate_limited' | 'upstream_error' | 'unsupported_page' | 'response_too_large' | 'unsafe_redirect' | 'request_limit' | 'timeout' | 'busy' | 'payload_too_complex', required
      - `message` string, required

## Other responses

- `400`: Request could not complete; inspect error or failure.code.
- `401`: Request could not complete; inspect error or failure.code.
- `402`: Request could not complete; inspect error or failure.code.
- `403`: Request could not complete; inspect error or failure.code.
- `404`: Request could not complete; inspect error or failure.code.
- `408`: Request could not complete; inspect error or failure.code.
- `413`: Request could not complete; inspect error or failure.code.
- `429`: Request could not complete; inspect error or failure.code.
- `500`: Request could not complete; inspect error or failure.code.
- `502`: Request could not complete; inspect error or failure.code.
- `503`: Request could not complete; inspect error or failure.code.
- `504`: Request could not complete; inspect error or failure.code.

---

[API](https://skmtc.dev/scrapeatlas/apis/scrapeatlas-api.md) · [All operations](https://skmtc.dev/scrapeatlas/apis/scrapeatlas-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrapeatlas/apis/scrapeatlas-api/revisions/9ba049316894?raw)
