> **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/ko-fi/posts-slug-comments>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/ko-fi/posts-slug-comments.mdx>

---

# Ko-fi Comments API

A post's comment threads, with author details and one level of replies, 25 at a time.

`GET /v1/ko-fi/posts/{slug}/comments` returns `data.comments`, 25 top-level comments a page, newest first as the post shows them. Each comment has `id`, `text`, `author` (`id`, `name`, `handle`, `avatarUrl`), `postedAt`, `likes`, `parentId`, `replyTo` and `replies`. A reply has the same author and text fields plus `parentId` and `replyTo`, and its own `replies` array is always empty because replies nest one level only. Replies are ordered oldest first. `data.page.total` counts all comments including replies when Ko-fi publishes a total.

Continue with `page.nextCursor` while `page.hasMore` is true. The offset is opaque and carries the post slug, so a cursor from another post is refused. A post with no comments is `found` with an empty list. A missing post is `not_found`.

## Request

- **Endpoint:** `GET /v1/ko-fi/posts/{slug}/comments`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by post slug
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/ko-fi/posts/slug/comments/get)
- **Platform page:** [/platforms/ko-fi](https://www.socialfetch.dev/platforms/ko-fi)

## FAQ

### Are replies nested more than one level?

No. Ko-fi nests replies one level deep, and the API returns replies inline on each top-level comment. A reply's own replies array is always empty; deeper replies are not returned.

### How do I tell an empty post from a missing post?

Read lookupStatus. A real post with no comments is found with comments: []. A missing post is not_found.

### How is the page offset passed?

Use the opaque cursor from page.nextCursor. Do not build an offset yourself: the cursor carries the post slug and a fingerprint of the request, and a cursor issued for another post is refused with a 400 before any request.

### How many credits does a comments page 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.
