# Substack User Activity Feed

> Substack User Activity Feed is a paid API for AI agents from x402.apidirect.io, paid per call via x402, $0.004/call, status unknown (last checked 2026-10-30).

Fetches a Substack author's public activity feed including notes, posts, restacks, replies, and likes, paginated and filterable by activity type.

## Facts

- Endpoint: GET https://x402.apidirect.io/v1/substack/user/activity?utm_source=zero.xyz
- Price: $0.004/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-30
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/substack-user-activity-feed-cc9f2e4f
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_uqE1jesOv3nl5pk2bDZEp

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability substack-user-activity-feed-cc9f2e4f
```

Example prompt: Can you pull the last 3 pages of activity from the Substack author @lenny — I want to see all types: notes, posts, and restacks?

## When to prefer this

Use this endpoint when you need to retrieve a Substack author's public activity feed by username, user ID, or profile URL, especially when you want to filter by a specific activity type (note, post, reply, restack, or like) or paginate through a large history. Prefer this over generic web scraping when you need structured, clean activity data from Substack specifically. It is well-suited for monitoring creator activity, competitive research on newsletter authors, or building content digests from Substack writers.

## Known failure modes

- Unknown or misspelled username returns empty results or 404-equivalent
- Invalid user_id (non-numeric or non-existent) returns an error
- Requesting more pages than available returns a partial result set (early stop)
- Private or deleted Substack profiles may return no results
- Rate limiting or payment failure returns a 402 or error response
- Providing none of username, user_id, or url causes a validation error

## How this service works

Get an author's public activity feed: their Notes and the posts they publish or restack, newest first, or only their notes, posts, replies, restacks or likes.

## Output

A merged, paginated list of the author's public Substack activity items (up to 12 per page), each containing the activity type (note, post, reply, restack, or like), publication metadata, content snippets, timestamps, and engagement signals. Multiple pages are merged into a single response. Fetching stops early if no more results exist.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [],
     "properties": {
      "url": {
       "type": "string",
       "maxLength": 500,
       "description": "Profile URL, e.g. https://substack.com/@lenny (max 500 characters). Provide one of username, user_id or url."
      },
      "type": {
       "enum": [
        "note",
        "post",
        "reply",
        "restack",
        "like"
       ],
       "type": "string",
       "description": "Only one kind of activity: note, post, reply, restack or like. Omit for notes, posts and restacks."
      },
      "pages": {
       "type": "integer",
       "default": 1,
       "maximum": 250,
       "minimum": 1,
       "description": "Number of pages to fetch and merge into one response (1-250, billed per page returned). Each page returns 12 items. Fetching stops early when there are no more results."
      },
      "user_id": {
       "type": "string",
       "description": "Numeric Substack user ID, as returned in user_id. Provide one of username, user_id or url."
      },
      "username": {
       "type": "string",
       "maxLength": 100,
       "description": "Substack handle, e.g. lenny, with or without a leading @ (max 100 characters). Provide one of username, user_id or url."
      }
     }
    }
   },
   "additionalProperties": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/substack-user-activity-feed-cc9f2e4f/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.apidirect.io](https://www.zero.xyz/host/x402.apidirect.io/llms.txt)
