Search posts by query
const url = 'https://api.fxbsky.app/2/search?q=puppies&feed=latest&count=30&lang=es';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.fxbsky.app/2/search?q=puppies&feed=latest&count=30&lang=es'Search posts via Bluesky app.bsky.feed.searchPosts. Response shape matches FxTwitter GET /2/search (code, results, cursor). cursor.top is always null; pass cursor.bottom as the cursor query param. feed=latest and feed=top map to Bluesky sort. feed=media uses sort=latest then keeps posts with image, video, or external link embeds (may return fewer hits than count). lang is used for inline translation only, not the upstream post-language filter.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Example
puppiesSearch query (non-empty)
Search tab (default latest). media is a client-side filter on the current result page (no native Bluesky media tab).
Page size (default 30)
Pagination cursor from prior response (cursor.bottom)
Example
esTarget language (ISO 639-1 or BCP 47) for inline translation when available
Responses
Section titled “ Responses ”Search results
object
object
Discriminator: single status
Recursive reference — same shape as APIBlueskyStatus.
object
object
Placeholder for an unavailable post (quote/thread).
Why the post is unavailable
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
Handle or account id used in permalinks (@user on X).
Parent post id (X: snowflake; Bluesky: record key).
Permalink to the parent post when known.
Permalink to the parent author profile when known.
Display name of the parent author when known.
object
object
Example
{ "results": [ { "type": "status", "quote": { "type": "tombstone", "provider": "twitter", "reason": "deleted", "author": { "type": "profile", "verification": { "type": "organization" } } }, "author": { "type": "profile", "verification": { "type": "organization" } }, "media": { "external": { "type": "video" }, "photos": [ { "type": "photo" } ], "videos": [ { "type": "video", "formats": [ { "container": "mp4", "codec": "h264" } ], "publisher": { "type": "profile", "verification": { "type": "organization" } } } ], "all": [ { "type": "photo" } ], "mosaic": { "type": "mosaic_photo" }, "broadcast": { "state": "LIVE", "orientation": "landscape" } }, "embed_card": "tweet", "provider": "bluesky" } ]}Invalid q parameter
object
Example
{ "code": 400}No results or search unavailable
object
object
Discriminator: single status
Recursive reference — same shape as APIBlueskyStatus.
object
object
Placeholder for an unavailable post (quote/thread).
Why the post is unavailable
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
Handle or account id used in permalinks (@user on X).
Parent post id (X: snowflake; Bluesky: record key).
Permalink to the parent post when known.
Permalink to the parent author profile when known.
Display name of the parent author when known.
object
object
Example
{ "results": [ { "type": "status", "quote": { "type": "tombstone", "provider": "twitter", "reason": "deleted", "author": { "type": "profile", "verification": { "type": "organization" } } }, "author": { "type": "profile", "verification": { "type": "organization" } }, "media": { "external": { "type": "video" }, "photos": [ { "type": "photo" } ], "videos": [ { "type": "video", "formats": [ { "container": "mp4", "codec": "h264" } ], "publisher": { "type": "profile", "verification": { "type": "organization" } } } ], "all": [ { "type": "photo" } ], "mosaic": { "type": "mosaic_photo" }, "broadcast": { "state": "LIVE", "orientation": "landscape" } }, "embed_card": "tweet", "provider": "bluesky" } ]}Upstream or processing error
object
object
Discriminator: single status
Recursive reference — same shape as APIBlueskyStatus.
object
object
Placeholder for an unavailable post (quote/thread).
Why the post is unavailable
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
Discriminator: full user profile (API v2).
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Facet kind: e.g. url, mention, hashtag, bold, media, custom_emoji (Mastodon custom emoji image)
Start and end UTF-16 indices
object
object
Handle or account id used in permalinks (@user on X).
Parent post id (X: snowflake; Bluesky: record key).
Permalink to the parent post when known.
Permalink to the parent author profile when known.
Display name of the parent author when known.
object
object
Example
{ "results": [ { "type": "status", "quote": { "type": "tombstone", "provider": "twitter", "reason": "deleted", "author": { "type": "profile", "verification": { "type": "organization" } } }, "author": { "type": "profile", "verification": { "type": "organization" } }, "media": { "external": { "type": "video" }, "photos": [ { "type": "photo" } ], "videos": [ { "type": "video", "formats": [ { "container": "mp4", "codec": "h264" } ], "publisher": { "type": "profile", "verification": { "type": "organization" } } } ], "all": [ { "type": "photo" } ], "mosaic": { "type": "mosaic_photo" }, "broadcast": { "state": "LIVE", "orientation": "landscape" } }, "embed_card": "tweet", "provider": "bluesky" } ]}