> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/product-hunt/users-username-posts>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/product-hunt/users-username-posts.mdx>

---

# Product Hunt User Posts API

One user's made, submitted or voted posts, 20 a page, with a cursor to continue.

`GET /v1/product-hunt/users/{username}/posts` returns `data.posts`, `data.username`, `data.kind`, `data.totalCount` and `data.page`. Choose the list with `kind`: `made`, `submitted` or `voted`. Each post is a reference with `id`, `slug` and `name`; pages hold up to 20.

Start from `GET /v1/product-hunt/users/{username}`, which returns the first page of each list and a `nextCursor` for it. Send that cursor here with the same username and `kind` to continue. A cursor belongs to the list it came from. A username with no public profile returns `lookupStatus: not_found` and an empty list.

Product Hunt pages these lists by position over an order with ties, so a post can appear on two pages and another can be skipped; de-duplicate by `id`.

## Request

- **Endpoint:** `GET /v1/product-hunt/users/{username}/posts`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by username, list and cursor
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/product-hunt/users/username/posts/get)
- **Platform page:** [/platforms/product-hunt](https://www.socialfetch.dev/platforms/product-hunt)

## FAQ

### How do I page a user's posts?

When `data.page.hasMore` is true, send `data.page.nextCursor` as `cursor` with the same username and `kind`. A cursor from one list does not work on another.

### Which list does kind select?

`made` is what the user built, `submitted` is what they posted, and `voted` is what they upvoted. The response echoes the list in `data.kind`.

### How do I get the full post for one of these rows?

Use the row's `slug` on `GET /v1/product-hunt/posts/{slug}`. A row only carries `id`, `slug` and `name`.

### How do I tell a missing user from an empty list?

Check `data.lookupStatus`. A username with no public profile returns `not_found`; a real user with nothing in that list returns `found` with `posts: []`.

### How much does it cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
