Substack hub

Substack Post API

One post by id or URL, with its body or the public preview and the publication attached.

GET /v1/substack/posts/{post}

1 credit Failed requests are free

About this endpoint

GET /v1/substack/posts/{post} takes a numeric post id (223208969) or a canonical post URL. It returns data.post with id, publicationId, slug, title, subtitle, description, kind, audience, isPaywalled, url, publishedAt, updatedAt, bodyHtml, bodyIsPreview, wordCount, commentCount, reactionCount, restackCount, reactions, tags, authors, section, audio and video.

data.publication is a summary of the post's publication. A free post has the whole bodyHtml; a paid or subscriber-only post has the public preview and bodyIsPreview: true. lookupStatus is found or not_found.

Substack Post API FAQ

Can I pass a post URL?

Yes. A numeric id or a canonical post URL works. A URL on a custom domain is the reliable way to reach a post that a bare publication subdomain would redirect away from.

Is bodyHtml always the full post?

No. Check bodyIsPreview. When it is true, bodyHtml is the preview the publication makes public, not the paid body.

What reaction data is included?

reactionCount is the total and reactions maps each emoji to its count. commentCount and restackCount give the other engagement totals.

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