# API Direct – Search Substack Posts

> API Direct – Search Substack Posts 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).

Search Substack posts by keyword across all publications, with optional time filtering, language ranking, and AI sentiment analysis.

## Facts

- Endpoint: GET https://x402.apidirect.io/v1/substack/posts?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/api-direct-search-substack-posts-133b967a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_pkDKc8dOw67jjw8xc1Ekb

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 api-direct-search-substack-posts-133b967a
```

Example prompt: Search Substack for posts about 'central bank digital currency' from the past 30 days and include AI emotion analysis on the results.

## When to prefer this

Use this endpoint when you need to search across all Substack publications by keyword, especially when time filtering (last 24h, week, month, or year), language preference, or AI-powered emotion/sentiment analysis are needed. Prefer this over general web search when the user specifically wants newsletter or long-form Substack content. It complements sibling endpoints for Reddit, Twitter, Instagram, and Threads searches on the same platform.

## Known failure modes

- Invalid posted_ago value (not 24h/7d/30d/12m) returns HTTP 400
- Query exceeding 500 characters returns a validation error
- Page number outside 1–101 range returns a validation error
- No results found for obscure or misspelled keywords returns empty result set
- Language code not exactly two letters returns a validation error
- Network timeout for high-traffic queries

## How this service works

Search Substack posts by keyword across every publication.

## Output

Returns a paginated list (16–20 per page) of Substack posts matching the keyword, including post title, author, publication, publication date, excerpt, and URL. When sentiment analysis is enabled, each post also includes Plutchik's Wheel emotion scores, a dominant emotion label, intensity rating, and polarity (positive/negative/neutral).

## 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": [
      "query"
     ],
     "properties": {
      "page": {
       "type": "integer",
       "default": 1,
       "maximum": 101,
       "minimum": 1,
       "description": "Page number for pagination (1-101). Each page returns 16-20 posts."
      },
      "query": {
       "type": "string",
       "maxLength": 500,
       "description": "Search keyword (max 500 characters)"
      },
      "language": {
       "type": "string",
       "maxLength": 2,
       "minLength": 2,
       "description": "Two-letter language code, e.g. es, to rank posts in that language first"
      },
      "posted_ago": {
       "enum": [
        "24h",
        "7d",
        "30d",
        "12m"
       ],
       "type": "string",
       "description": "Only return posts from this period: 24h (past day), 7d (past week), 30d (past month), or 12m (past year). Omit for all time. Any other value returns 400."
      },
      "get_sentiment": {
       "type": "boolean",
       "default": false,
       "description": "Set to true to add AI emotion analysis (Plutchik's Wheel) to each result. Adds +$0.001 per request to the cost. Returns emotion scores, dominant emotion, intensity, and polarity."
      }
     }
    }
   },
   "additionalProperties": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/api-direct-search-substack-posts-133b967a/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)
