Get a publication's posts, newest first, top or most discussed, or search them by keyword. Returns post title, author, publication date, engagement, paywall status, word count and tags.
curl "https://apidirect.io/v1/substack/publication/posts?publication=lenny&sort_by=most_recent&page=1" -H "X-API-Key: YOUR_API_KEY"
{
"count": 20,
"has_next_page": true,
"page": 1,
"podcasts_only": false,
"posts": [
{
"audience": "only_paid",
"audio_url": "",
"author": "lenny",
"author_id": "1849774",
"author_name": "Lenny Rachitsky",
"author_url": "https://substack.com/@lenny",
"authors": [
{
"name": "Lenny Rachitsky",
"url": "https://substack.com/@lenny",
"user_id": "1849774",
"username": "lenny"
}
],
"comments": 25,
"cover_image_url": "https://substackcdn.com/image/fetch/$s_!ByeN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F…",
"date": "2025-10-14 13:03:49",
"domain": "substack.com",
"is_paid": true,
"lang": "en",
"likes": 839,
"podcast_duration": 0,
"podcast_image_url": "",
"podcast_url": "",
"post_id": "175662739",
"publication": "Lenny's Newsletter",
"publication_id": "10845",
"publication_url": "https://www.lennysnewsletter.com",
"reactions": {
"❤": 839
},
"replies": 0,
"restacks": 65,
"slug": "everyone-should-be-using-claude-code",
"snippet": "How to get started, and 50 ways non-technical people are using Claude Code in their work and life",
"source": "Substack",
"subtitle": "How to get started, and 50 ways non-technical people are using Claude Code in their work and life",
"tags": [
"AI"
],
"title": "Everyone should be using Claude Code more",
"type": "newsletter",
"url": "https://www.lennysnewsletter.com/p/everyone-should-be-using-claude-code",
"video_duration": 0,
"wordcount": 2958
}
],
"publication": {
"logo_url": "https://substackcdn.com/image/fetch/$s_!8MSN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F…",
"name": "Lenny's Newsletter",
"publication_id": "10845",
"subdomain": "lenny",
"url": "https://www.lennysnewsletter.com"
},
"publication_url": "https://www.lennysnewsletter.com",
"query": null,
"sort_by": "top"
}
All the way: the archive has no fixed last page. A page past the end returns an empty list.
Substack's Discussions tab: the posts with comment activity, newest first. Substack filters each page of 20, so pages can hold fewer posts.
Yes. Pass query to get the publication's posts matching it, most relevant first, 20 per page and up to 101 pages.
Pass podcasts_only=true. Each episode carries podcast_url and podcast_duration; publications without a podcast return an empty list.
Yes, with is_paid true. Their full body needs Post Details, which returns the free preview for paid posts.
You only pay for successful requests. The Substack Publication Posts API costs $0.003 per request. There are no monthly fees or commitments. You get 50 free requests per endpoint every month.
No. You can sign up and use the free tier (50 requests/endpoint/month) without adding a payment method. You only need to add a card when you want to exceed the free tier.
Yes, there's a concurrency limit of 10 simultaneous requests per endpoint per user. If you need more, just get in touch.
Get your API key and start making requests in minutes. 50 requests/month free every month.
Get API Key