# Bluesky Posts & Search

> Bluesky Posts & Search is a paid API for AI agents from social.duoleads.com, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-29).

Search public Bluesky posts by keyword, hashtag, or handle using AT Protocol AppView, returning paginated results with engagement metrics and metadata.

## Facts

- Endpoint: GET https://social.duoleads.com/v1/bluesky/search?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/bluesky-posts-search-039dcdc1
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_6vAX62Zy0DP0IDrF27RBm

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-posts-search-039dcdc1
```

Example prompt: Search Bluesky for recent posts mentioning 'open source AI' and show me the top 10, including who posted them, how many likes they got, and links to the posts.

## When to prefer this

Choose this endpoint when you specifically need to search public Bluesky posts by keyword, hashtag, or handle. It is ideal for social listening, brand monitoring, trend tracking, or content discovery on Bluesky. Prefer it over the Social Search Across Platforms sibling when you want Bluesky-only results with full post metadata. Prefer it over Bluesky Account Posts Feed when you want topic-based search rather than a specific account's timeline.

## Known failure modes

- Invalid or empty query string returns an error (not charged)
- No matching posts returns an empty items array (not charged)
- Invalid cursor string may return an error or reset to first page
- Rate limits from the upstream Bluesky AppView may cause temporary failures
- Queries exceeding 200 characters are rejected by schema validation
- Non-existent handles in from: syntax return empty results

## How this service works

Bluesky Posts & Search: find public Bluesky posts by keyword, phrase, hashtag or from:handle through the AT Protocol AppView, newest first. Per post the text, author handle and display name, likes, replies, reposts, language, media links, time and URL, in one schema shared by every platform; next_cursor gives the next page. Social listening on Bluesky for brands, products and topics. Bad input is free; not found or no match is not charged.

## Output

A JSON object containing a paginated list of matching Bluesky posts, each with: AT Protocol post ID, direct post URL, language code, post text, author handle and display name, engagement metrics (likes, replies, reposts), platform identifier, media URLs if present, and creation timestamp. Also includes query echo, a next_cursor for pagination, source disclaimer, and a request ID.

## 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"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "q"
     ],
     "properties": {
      "q": {
       "type": "string",
       "maxLength": 200,
       "description": "Search text (1-200 characters; Bluesky search syntax such as from:, #tag and quotes works)."
      },
      "limit": {
       "type": "string",
       "pattern": "^[0-9]{1,4}$",
       "description": "Posts per page, 1-25. Default 25."
      },
      "cursor": {
       "type": "string",
       "maxLength": 512,
       "description": "next_cursor of the previous page."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "as_of": "2026-10-15T12:00:00.000Z",
  "items": [
   {
    "id": "at://did:plc:synth000000000000000000000001/app.bsky.feed.post/3lsynth000001",
    "url": "https://bsky.app/profile/synth-alpha.bsky.social/post/3lsynth000001",
    "lang": "en",
    "text": "The synthwidget launch went really well, great work team!",
    "type": "post",
    "author": {
     "handle": "synth-alpha.bsky.social",
     "verified": true,
     "followers": null,
     "display_name": "Synthetic Alpha"
    },
    "metrics": {
     "likes": 42,
     "views": null,
     "replies": 3,
     "reposts": 5
    },
    "platform": "bluesky",
    "parent_id": null,
    "created_at": "2026-10-14T10:00:00.000Z",
    "media_urls": [
     "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:synth000000000000000000000001/bafkreiimg@jpeg"
    ]
   },
   {
    "id": "at://did:plc:synth000000000000000000000002/app.bsky.feed.post/3lsynth000002",
    "url": "https://bsky.app/profile/synth-beta.example.com/post/3lsynth000002",
    "lang": "en",
    "text": "synthwidget is not working for me today",
    "type": "post",
    "author": {
     "handle": "synth-beta.example.com",
     "verified": false,
     "followers": null,
     "display_name": "Synthetic Beta"
    },
    "metrics": {
     "likes": 1,
     "views": null,
     "replies": 0,
     "reposts": 0
    },
    "platform": "bluesky",
    "parent_id": null,
    "created_at": "2026-10-14T11:30:00.000Z",
    "media_urls": []
   }
  ],
  "query": {
   "q": "synthetic widgets",
   "limit": 10,
   "cursor": null
  },
  "source": "public data via the Bluesky AppView API; not affiliated with Bluesky",
  "complete": true,
  "platform": "bluesky",
  "disclaimer": "Public data via third-party providers; not affiliated with or endorsed by any platform. Do not use to profile, target or train AI on individuals.",
  "request_id": "01KEXAMPLE0000000000000000",
  "next_cursor": "25"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/bluesky-posts-search-039dcdc1/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from social.duoleads.com](https://www.zero.xyz/host/social.duoleads.com/llms.txt)
