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

---

# Substack Comments API

One post's whole comment tree in a single answer, nested and with engagement on each comment.

`GET /v1/substack/posts/{post}/comments` returns the whole comment tree for a post. `sort` is `best`, `oldest` or `newest`; the whole tree is returned either way. The post must be a canonical post URL; a numeric post id is refused with a 400.

`data.comments[]` starts at the top-level comments. Each comment has `id`, `postId`, `publicationId`, `body`, `bodyJson`, `createdAt`, `editedAt`, `author`, `reactionCount`, `reactions`, `restackCount`, `replyCount`, `isPinned`, `reactorNames` and `attachments`, with replies nested under `replies`. `data.returnedCount` counts the nodes returned. `commentsHidden` is true when a paid post does not serve comments publicly, and `truncated` is true when more than 5,000 nodes were cut.

## Request

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

## FAQ

### How are replies nested?

Top-level comments are in `comments`, and each comment's replies are in its `replies` array. The route bounds depth and node count so one very large tree cannot exhaust the response.

### Why are comments hidden?

A paid post may serve no comments publicly. In that case `commentsHidden` is true and `comments` is empty, rather than an error.

### What is truncated?

The tree is cut at 5,000 nodes. When `truncated` is true, more nodes existed than the response carries.

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