This document outlines the internal Substack API endpoints used by this tool. These endpoints are subject to change as they are unofficial.
https://substack.com
POST /api/v1/login
- Body:
{ email, password, redirect: '/' } - Returns:
200 OK+Set-Cookie: connect.sid=...
GET /api/v1/posts
- Query Params:
limit: Number of posts (default 20)offset: Pagination offsetstatus: 'draft', 'published', 'all'
- Returns: Array of
Postobjects
POST /api/v1/drafts
- Body:
title: Stringbody: HTML content stringdraft: Boolean (true for draft)
- Returns:
Postobject (including ID)
POST /api/v1/drafts/{id}/publish
- Path Params:
id(Post ID) - Returns:
Postobject (published state)
DELETE /api/v1/posts/{id}
- Path Params:
id(Post ID)
GET /api/v1/notes
- Query Params:
limit - Returns: Array of
Noteobjects
POST /comment/feed/
- Body: JSON object representing ProseMirror document structure.
{ "bodyJson": { "type": "doc", "attrs": { "schemaVersion": "v1" }, "content": [ { "type": "paragraph", "content": [{ "type": "text", "text": "Hello world" }] } ] }, "tabId": "for-you", "surface": "feed", "replyMinimumRole": "everyone" }
POST /api/v1/notes/{id}/like
POST /api/v1/notes/{id}/restack
GET /api/v1/subscribers
- Query Params:
limit - Returns: Array of
Subscriberobjects
GET /api/v1/subscriber_count
- Returns:
{ count: number, ... }
GET /api/v1/me
- Returns:
UserProfileobject
GET /user/{slug}/public_profile
- Returns:
UserProfileobject