{ "id": "app.bsky.feed.searchPostsV2", "defs": { "main": { "type": "query", "errors": [ { "name": "BadQueryString" } ], "output": { "schema": { "type": "object", "required": [ "posts" ], "properties": { "posts": { "type": "array", "items": { "ref": "app.bsky.feed.defs#postView", "type": "ref" }, "description": "Hydrated views of matching posts." }, "cursor": { "type": "string", "description": "Cursor for the next page of results." }, "hitsTotal": { "type": "integer", "description": "Estimated total number of matching hits. May be rounded or truncated." }, "detectedQueryLanguages": { "type": "array", "items": { "type": "string", "knownValues": [ "ja", "zh", "ko", "th", "ar" ] }, "description": "Query languages detected for CJK, Thai, or Arabic text. Empty or omitted for other scripts." } } }, "encoding": "application/json" }, "parameters": { "type": "params", "required": [], "properties": { "sort": { "type": "string", "description": "Ranking order for results. 'recent' sorts by recency; 'top' uses search ranking.", "knownValues": [ "recent", "top" ] }, "urls": { "type": "array", "items": { "type": "string", "format": "uri" }, "description": "Include posts that link to any of these URLs." }, "limit": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "description": "Maximum number of results to return." }, "query": { "type": "string", "description": "Search query string. A query or at least one filter is required." }, "since": { "type": "string", "description": "Include posts indexed at or after this timestamp. Can be a datetime, or just an ISO date (YYYY-MM-DD)." }, "until": { "type": "string", "description": "Include posts indexed before this timestamp. Defaults to the current time. Can be a datetime, or just an ISO date (YYYY-MM-DD)." }, "cursor": { "type": "string", "description": "Optional pagination cursor." }, "allTime": { "type": "boolean", "description": "Search the full index instead of the recent-post window." }, "authors": { "type": "array", "items": { "type": "string", "format": "at-identifier" }, "description": "Include posts by any of these authors. Handles are resolved to DIDs before searching." }, "domains": { "type": "array", "items": { "type": "string" }, "description": "Include posts that link to any of these domains." }, "hasMedia": { "type": "boolean", "description": "Include only posts with media." }, "hasVideo": { "type": "boolean", "description": "Include only posts with video." }, "hashtags": { "type": "array", "items": { "type": "string", "maxLength": 640, "maxGraphemes": 64 }, "description": "Include posts tagged with any of these hashtags. Do not include the hash (#) prefix." }, "mentions": { "type": "array", "items": { "type": "string", "format": "at-identifier" }, "description": "Include posts that mention any of these accounts. Handles are resolved to DIDs before searching." }, "following": { "type": "boolean", "description": "Include only posts from accounts followed by the viewer." }, "languages": { "type": "array", "items": { "type": "string", "format": "language" }, "description": "Include posts whose language matches any of these language codes." }, "excludeUrls": { "type": "array", "items": { "type": "string", "format": "uri" }, "description": "Exclude posts that link to any of these URLs." }, "repliesOnly": { "type": "boolean", "description": "Include only replies. Mutually exclusive with excludeReplies." }, "queryLanguage": { "type": "string", "description": "Language analyzer hint for the query text. If unset, the server auto-detects when possible.", "knownValues": [ "ja", "zh", "ko", "th", "ar" ] }, "threadRootUri": { "type": "string", "format": "at-uri", "description": "Include only posts in the thread rooted at this post URI." }, "embeddedAtUris": { "type": "array", "items": { "type": "string", "format": "at-uri" }, "description": "Include posts that embed any of these AT URIs." }, "excludeAuthors": { "type": "array", "items": { "type": "string", "format": "at-identifier" }, "description": "Exclude posts by any of these authors. Handles are resolved to DIDs before searching." }, "excludeDomains": { "type": "array", "items": { "type": "string" }, "description": "Exclude posts that link to any of these domains." }, "excludeReplies": { "type": "boolean", "description": "Exclude replies from results. Mutually exclusive with repliesOnly." }, "replyParentUri": { "type": "string", "format": "at-uri", "description": "Include only direct replies to this parent post URI." }, "excludeHashtags": { "type": "array", "items": { "type": "string", "maxLength": 640, "maxGraphemes": 64 }, "description": "Exclude posts tagged with any of these hashtags. Do not include the hash (#) prefix." }, "excludeMentions": { "type": "array", "items": { "type": "string", "format": "at-identifier" }, "description": "Exclude posts that mention any of these accounts. Handles are resolved to DIDs before searching." }, "excludeLanguages": { "type": "array", "items": { "type": "string", "format": "language" }, "description": "Exclude posts whose language matches any of these language codes." }, "excludeEmbeddedAtUris": { "type": "array", "items": { "type": "string", "format": "at-uri" }, "description": "Exclude posts that embed any of these AT URIs." } } }, "description": "Find posts matching a search query or filters, returning search hits for matching post records." } }, "$type": "com.atproto.lexicon.schema", "lexicon": 1 }