# Bluesky Post Search

> Bluesky Post Search 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 Bluesky posts by keyword with optional date filtering, sorting, and AI sentiment analysis.

## Facts

- Endpoint: GET https://x402.apidirect.io/v1/bluesky/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/bluesky-post-search-bcff95d7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_kH7ex4bOWLx9I08VsPI6b

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 bluesky-post-search-bcff95d7
```

Example prompt: Search Bluesky for posts about 'climate change' from the past week, sorted by most recent, and include AI sentiment analysis on each result.

## When to prefer this

Use this endpoint when you need to search public Bluesky posts by keyword, hashtag, user handle, or phrase — especially when you want date filtering, relevance or recency sorting, multi-page retrieval, or per-post AI emotion/sentiment analysis. Prefer it over general web scraping when you need structured post data from Bluesky specifically. Choose the sibling 'Search Bluesky users' endpoint if you want to find accounts rather than posts.

## Known failure modes

- Empty results if no posts match the keyword or date range
- Rate limiting or payment failure if x402 payment is not correctly handled
- Invalid date format (must be YYYY-MM-DD) returns validation error
- Query exceeds 500-character limit returns error
- Pages parameter out of range (must be 1-20) returns validation error
- Bluesky search syntax errors may return unexpected or empty results

## How this service works

Search Bluesky posts by keyword.

## Output

Returns a merged list of Bluesky posts matching the query (up to 50 per page, up to 20 pages), including post text, author details, timestamps, and optionally a sentiment object per post with emotion scores (joy, trust, fear, surprise, sadness, disgust, anger, anticipation each 0-100), dominant emotion, emotional intensity (0-10), 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": {
      "pages": {
       "type": "integer",
       "default": 1,
       "maximum": 20,
       "minimum": 1,
       "description": "Number of pages to fetch and merge into one response (1-20, billed per page returned). Each page returns up to 50 results. Fetching stops early when there are no more results."
      },
      "query": {
       "type": "string",
       "maxLength": 500,
       "description": "Search keyword (max 500 characters). Bluesky search syntax works: \"exact phrase\", -exclude, from:handle, lang:en, #tag"
      },
      "sort_by": {
       "enum": [
        "most_recent",
        "relevance"
       ],
       "type": "string",
       "default": "most_recent",
       "description": "Sort order: most_recent or relevance (default: most_recent)"
      },
      "end_date": {
       "type": "string",
       "format": "date",
       "description": "Only posts up to this date (format: YYYY-MM-DD)"
      },
      "start_date": {
       "type": "string",
       "format": "date",
       "description": "Only posts from this date onward (format: YYYY-MM-DD)"
      },
      "get_sentiment": {
       "type": "boolean",
       "default": false,
       "description": "Set to true to add AI emotion analysis to each result. Adds a `sentiment` object containing `emotions` (joy, trust, fear, surprise, sadness, disgust, anger and anticipation, each scored 0-100), `dominant_emotion`, `emotional_intensity` (0-10), and `polarity` (positive, negative or neutral). Any item"
      }
     }
    }
   },
   "additionalProperties": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/bluesky-post-search-bcff95d7/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)
