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

---

# Substack Post Bodies API

Up to 50 posts a cursor page, each with its full free body or the public preview of a paid post.

`GET /v1/substack/publications/{publication}/posts/bodies` returns archive posts with their bodies. `publication` is a subdomain, host or URL; a numeric publication id is refused here. `limit` is 1 to 50 and defaults to 20, and `cursor` comes from the previous page's `page.nextCursor`.

`data.posts[]` carries the same post fields as the archive plus `bodyHtml`. A free post has its whole body and `bodyIsPreview: false`. A paid or subscriber-only post has the preview the publication makes public and `bodyIsPreview: true`. `data.page` reports `hasMore` and `nextCursor`. The route is cursor paged because the archive offset does not carry bodies.

## Request

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

## FAQ

### Will I get the full text of a paid post?

No. You get the preview the publication makes public, with `bodyIsPreview: true`. A free post has the whole body and `bodyIsPreview: false`.

### How many posts fit on a page?

Between 1 and 50, with 20 as the default. Follow `page.nextCursor` while `page.hasMore` is true.

### What else is on each post?

The same metadata as the archive: `id`, `title`, `subtitle`, `url`, `publishedAt`, `tags`, `authors`, `commentCount`, `reactionCount`, `restackCount`, `audio` and `video` details when present.

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