Substack API endpoint
Returns one page of the Notes that restacked a given Note, each in the same shape as the single-Note endpoint. A restack may carry its own commentary in `body` or be a bare reshare with an empty body. Pagination is cursor-based.
/substack/note/restacksnote_id: required numeric Note id.cursor: optional opaque cursor from a previous response's
next_cursor.Returns one page of the Notes that restacked a given Note. Each entry is in
the same shape as substack-note.
A restack may carry its own commentary in body, or be a bare reshare with
an empty body. Substack's own UI splits these across "Notes" and
"Instants" tabs, but both read the same upstream data and filter in the
browser, so this endpoint returns them together.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| body | 16 | |
| author_id | 20 | |
| author_name | 20 | |
| author_photo_url | 20 | substack-post-media.s3.amazonaws.com and 2 other hosts |
| published_at | 20 | 2026-08-17 to 2026-09-13 |
| reactions | 20 | |
| language | 15 | |
| is_ai_generated | 20 | true in 0 of 20 |
| reaction_count | 18 | 1 to 52, median 1 |
| restack_count | 1 | 1 |
| reply_count | 2 | 1 to 3, median 1 |
| edited_at | 1 | 2026-08-17 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| note_id | integer | Yes | Numeric Note id | 316240438 | |
| cursor | string | No | Opaque cursor from a previous response's next_cursor | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/substack/note/restacks?note_id=316240438" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"note_id": 316240438,
"next_cursor": "2026-08-17T13:33:40.134Z",
"has_more": true,
"restacks": [
{
"id": 327128782,
"body": "YES 😢",
"author_name": "Kate Freeth",
"published_at": "2026-09-01T07:40:45.487Z",
"reaction_count": 0,
"is_ai_generated": false
}
]
},
"msg": "success"
}Request schema
No body schema
Response schema
#/definitions/substack.noteRestacksResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | substack.NoteRestacksResult | No | ||||
| data.has_more | boolean | No | ||||
| data.next_cursor | string | No | ||||
| data.note_id | integer | No | 316240438 | |||
| data.restacks | array | No | Note record, 21 fields: attached_post, author_bestseller_tier, author_handle, author_id, author_name, author_photo_url, author_url, body, edited_at, id, is_ai_generated, language and 6 more. Described under Get one public Substack Note API. | |||
| msg | string | No | success |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/substack/note/restacks?note_id=316240438" \
-H "x-api-key: $CRAWLORA_API_KEY"