List Substack publication posts
List the posts in a Substack publication archive.
Headers
Get your API keyAPI key (`sfk_...`)
A publication: its numeric id (`89120`), its Substack subdomain (`astralcodexten`), its host (`www.astralcodexten.com`) or its URL. A numeric id is refused with a 400 on the routes that need a subdomain, host or URL.
min 1 chars · max 400 chars
Order. `oldest` is not supported.
one of: new, top, pinned
Only posts whose text matches this string.
min 1 chars · max 200 chars
Only posts in this section id (from the publication's sections).
≥ 0
Page number, 0 to 100,000; leave it at 0 and follow `page.nextCursor`. A page above 0 is refused with a 400 because the archive pages by cursor.
≥ 0 · ≤ 100000
Opaque cursor from the previous page's `page.nextCursor`. Omit it for the first page.
max 4096 chars
Rows to return, 1 to 23.
≥ 1 · ≤ 23
Endpoint-specific response payload.
Whether the publication was found.
one of: found, not_found, restricted
Why the publication is restricted, when it is.
one of: invite_only, flagged, paid, null
Numeric publication id.
The archive rows on this page.
Numeric post id.
Numeric publication id.
The post's URL slug.
The post's title.
The post's subtitle.
The post's short description.
`newsletter`, `podcast`, `video` or `restack`.
`everyone`, `only_paid`, `only_subscribers` or another value Substack uses.
Whether the post is paid.
Canonical post URL.
ISO 8601 timestamp, or null when Substack does not publish one.
ISO 8601 timestamp, or null when Substack does not publish one.
The post's language code.
Full body HTML for a free post; the preview only when `bodyIsPreview` is true.
True when the audience is not `everyone`.
The public preview text.
The post's word count.
The number of comments on the post.
Replies to comments on the post.
The number of reactions to the post.
Emoji to reaction count.
The number of restacks.
Who may comment on the post.
The post's cover image URL.
Whether the cover image is square.
Whether the cover image is explicit.
Whether the post is geoblocked.
Countries where the post is blocked.
The live stream id, when the post is a live stream.
Whether the post is published.
Whether the post is pinned.
The title shown to search engines.
The description shown to search engines.
The title used for social previews.
The previous post's slug.
The next post's slug.
The section the post belongs to.
Numeric section id.
The section's name.
The section's URL slug.
The post's tags.
Numeric tag id.
The tag's name.
The tag's URL slug.
Whether the tag is hidden.
The post's authors.
Numeric user id.
The name shown for the author.
The author's handle.
The author's profile slug.
The author's short biography.
The author's profile photo URL.
The author's main badge, when there is one.
The kind of badge, such as `bestseller`.
The badge tier, when it has one.
The handle the badge belongs to.
The service the badge comes from.
A link for the badge, when it has one.
The author's reader status fields, when available.
The author's bestseller tier.
The author's primary publication, when there is one.
Numeric publication id.
The publication's name.
The publication's Substack subdomain.
The publication's custom domain, when it has one.
The publication's logo URL.
Podcast metadata, when the post is an episode.
The episode number.
The season number.
The episode type.
Audio, when the post has any.
Audio file URL.
Audio length in seconds.
Audio file size in bytes.
The upload's media label, such as `audio`.
Artwork for the episode.
Generated or uploaded audio items.
Numeric post id.
The voice used for generated audio.
The audio file URL.
`tts` or Substack's own audio type.
The audio item's status.
Video, when the post has any.
Video length in seconds.
Video width in pixels.
Video height in pixels.
The playback id of the hosted video stream.
Whether the video uses Substack's hosted player.
Cursor pagination state for a publication archive page.
The offset sent with this request, 0 on a cursor page.
≥ 0
The page size requested.
≥ 0
True when `nextCursor` holds another page.
Always null. Deeper offsets are no longer served; follow `nextCursor`.
≥ 0
Opaque cursor for the next page; null on the last page.
Metadata describing the request and billing outcome.
Unique request identifier for tracing this API call.
min 1 chars
Credits charged for this request.
≥ 0
Public API version that served the response.
one of: v1
Code example
curl "https://api.socialfetch.dev/v1/substack/publications/astralcodexten/posts" \
-H "x-api-key: YOUR_API_KEY"Responses
Substack posts.