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

---

# Substack Sitemap API

Every post URL a publication lists in its sitemap, with the last change date.

`GET /v1/substack/publications/{publication}/posts/index` returns the publication's own sitemap. `data.posts[]` holds only `/p/{slug}` URLs and `data.pages[]` holds the other pages, such as `/archive` and `/about`; every row has `kind`, `url`, `slug`, `lastModified` and `changeFrequency`. The whole sitemap is one response, so there is no cursor or offset.

`data.hasSitemap` is false when the publication does not publish a sitemap, and `posts` is empty. `data.publicationId` names the publication. Use this route to build a complete list of post URLs before fetching individual posts.

## Request

- **Endpoint:** `GET /v1/substack/publications/{publication}/posts/index`
- **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/index/get)
- **Platform page:** [/platforms/substack](https://www.socialfetch.dev/platforms/substack)

## FAQ

### Does this return post bodies?

No. It returns URLs and their last change date. Fetch `post.get` for a post's body or metadata.

### What if hasSitemap is false?

The publication does not publish a sitemap, so `posts` is empty. Use the archive route to list what it serves instead.

### Is the sitemap paged?

No. The route returns the publication's sitemap in one response, which is why it is separate from the paged archive.

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