Substack API endpoint
Returns one of a user's public connection lists. Each entry is a full profile in the same shape as /substack/user, subscriber signals included. user_id is the numeric id returned by /substack/user. The upstream returns a bounded preview of each list rather than the complete membership.
/substack/user/connectionsuser_id: required numeric user id, as returned by
/api/v1/substack/user.list: optional list to read. Allowed values: followers, following,
subscribers. Defaults to followers.Returns one of a user's public connection lists. Each entry is a full
profile in the same shape as /api/v1/substack/user, subscriber signals
included, so a connection list can be walked without a lookup per user.
Two limits worth knowing:
follower_count on /api/v1/substack/user for the true
total.subscriptions is not a valid list value; the upstream rejects it.| Field | Filled in, of 21 checked | Values in the sample |
|---|---|---|
| id | 21 | |
| handle | 21 | |
| name | 21 | |
| bio | 14 | median 155 characters |
| photo_url | 17 | substack-post-media.s3.amazonaws.com and 1 other host |
| profile_set_up_at | 21 | 2021-11-28 to 2026-07-19 |
| url | 21 | substack.com |
| bestseller_tier | 1 | 100 |
| subscribers | 21 | |
| publications | 0 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| user_id | integer | Yes | Numeric user id from /substack/user | 49731969 | |
| list | string | No | Which list to read Allowed values: followers, following, subscribers. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/substack/user/connections?user_id=49731969&list=followers" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"user_id": 49731969,
"list": "followers",
"name": "Followers",
"users": [
{
"id": 1233587,
"handle": "bodytype",
"name": "Mikala Jamison",
"url": "https://substack.com/@bodytype",
"subscribers": {
"total": 61000,
"total_hidden": false,
"paid_rough": "Thousands"
}
}
]
},
"msg": "success"
}Request schema
No body schema
Response schema
#/definitions/substack.userConnectionsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | substack.UserConnectionsResult | No | ||||
| data.list | string | No | followers | |||
| data.name | string | No | Followers | |||
| data.user_id | integer | No | 49731969 | |||
| data.users | array | No | User record, 32 fields: bestseller_tier, bio, handle, id, name, photo_url, profile_set_up_at, publications, slug, subscribers, subscriptions, url. Described under Get a public Substack writer profile 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/user/connections?user_id=49731969&list=followers" \
-H "x-api-key: $CRAWLORA_API_KEY"