Substack API endpoint
Returns one page of public replies to a Note, each in the same shape as /substack/note. Pagination is cursor-based: pass the previous response's next_cursor back as cursor.
/substack/note/repliesnote_id: required numeric Note id.cursor: optional opaque cursor from a previous response's
next_cursor.Pagination is cursor-based, not page-based: pass next_cursor back as
cursor to get the following page. more_count is the number of further
reply branches the upstream reports, and has_more is true when either
that count is positive or a next_cursor is present.
| Field | Filled in, of 8 checked | Values in the sample |
|---|---|---|
| id | 8 | |
| body | 8 | median 193 characters |
| author_id | 8 | |
| author_name | 8 | |
| author_photo_url | 5 | substack-post-media.s3.amazonaws.com |
| published_at | 8 | 2026-08-16 to 2026-08-18 |
| reaction_count | 8 | 11 to 167, median 26 |
| restack_count | 3 | 1 to 5, median 3 |
| reply_count | 6 | 1 to 15, median 2 |
| reactions | 8 | |
| language | 8 | |
| is_ai_generated | 8 | true in 0 of 8 |
| edited_at | 3 | 2026-08-17 to 2026-08-18 |
| 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/replies?note_id=316240438" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"note_id": 316240438,
"next_cursor": "eyJvZmZzZXQiOjgsInJlcXVlc3Rf...",
"has_more": true,
"more_count": 13,
"replies": [
{
"id": 317039537,
"body": "Explain please.",
"author_name": "Mrs Buttermore",
"published_at": "2026-08-17T02:11:04.882Z",
"reaction_count": 4,
"is_ai_generated": false
}
]
},
"msg": "success"
}Request schema
No body schema
Response schema
#/definitions/substack.noteRepliesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | substack.NoteRepliesResult | No | ||||
| data.has_more | boolean | No | ||||
| data.more_count | integer | No | MoreCount is how many further reply branches the upstream reports. | |||
| data.next_cursor | string | No | ||||
| data.note_id | integer | No | 316240438 | |||
| data.replies | 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/replies?note_id=316240438" \
-H "x-api-key: $CRAWLORA_API_KEY"