{"openapi":"3.1.0","info":{"title":"Weir API","version":"daeb5c297784-20261018T133126Z","description":"One API for public conversations on Reddit and X, each returned in that platform's own\nfield names.\n\nA Reddit post carries `subreddit`, `selftext`, `score`, `upvoteRatio`, and `numComments`.\nAn X post carries `text`, `likeCount`, `retweetCount`, and an embedded `author` object.\nNothing is renamed into a shared vocabulary and nothing is dropped to make the shapes\nmatch: the only fields both carry are `id`, `url`, and `createdAt`.\n\n**Billing.** Prepaid: calls spend a balance of credits, 5,000 free each month plus any\nbought, and stop when it runs out. Priced per returned result, not per request. A call\nthat fails or is refused costs nothing. A call that succeeds is charged for what it\nreturned, plus a one-credit minimum that covers reaching the source even when nothing\nmatched. Every operation publishes its price in an `x-weir-billing` extension, and every\nresponse reports what it charged in `x-credits-charged` and what is left in\n`x-credits-remaining`.\n\n**Limits.** Running out of credit returns `402` and is *not* retryable: only a person can\nclear it, by adding credits in the dashboard, and retrying never will. Rate limiting returns\n`429` and is retryable, as is a `429` with `details.reason` `credits_held`, returned when\nthe account's remaining credits are held by its own calls still in flight. They are\nseparate codes because they need opposite responses."},"servers":[{"url":"https://api.weirapp.io","description":"API"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Reddit","description":"Reddit-specific operations: communities, comment trees, and scoped search."},{"name":"X","description":"X-specific operations: posts, threads, quotes, and edit history; profiles, timelines, followers, and account search; Lists and Spaces; and search with composable filters."},{"name":"Monitors","description":"Saved queries that run on a schedule and report only what is new. Results are deduplicated by content, so an edited or re-posted item never alerts twice."},{"name":"Webhooks","description":"Signed deliveries when a monitor finds something, instead of polling. Every attempt is recorded, including ones that are about to be retried."},{"name":"Account","description":"Introspection: who this key belongs to, what credit it has left, and what its tier allows. These endpoints are free — they never consume credits."},{"name":"System","description":"Liveness and readiness. Unauthenticated."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Weir API key"}},"schemas":{},"parameters":{}},"paths":{"/health":{"get":{"operationId":"getHealth","tags":["System"],"summary":"Liveness check","responses":{"200":{"description":"Service is alive.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"service":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}},"required":["status","service","version","timestamp"]}}}}}}},"/ready":{"get":{"operationId":"getReadiness","tags":["System"],"summary":"Readiness check","responses":{"200":{"description":"Dependencies are ready.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"service":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}},"required":["status","service","version","timestamp"]}}}},"503":{"description":"A required dependency is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"service":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}},"required":["status","service","version","timestamp"]}}}}}}},"/v1/usage":{"get":{"operationId":"getUsage","tags":["Account"],"summary":"Credit balance, holds, and this month's free grant","description":"Returns the caller's own credit state. Requires authentication but no additional scope, because a key that cannot discover why it is being refused cannot handle being refused.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"The account's credits.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"balance":{"type":"integer","minimum":0,"description":"Credits the account holds: what is left of this month's free grant plus everything bought. Purchased credits never expire."},"reserved":{"type":"integer","minimum":0,"description":"Credits held by this account's calls still in flight. Each is charged what it returned and gives the rest back when it finishes."},"available":{"type":"integer","minimum":0,"description":"balance minus reserved. A billed call is admitted while this covers its minimum charge; below that, calls return 402 until credits are added."},"freeGrant":{"type":["object","null"],"properties":{"granted":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"resetsAt":{"type":"string","format":"date-time","description":"When this month's free credits expire and next month's arrive."}},"required":["granted","remaining","resetsAt"],"description":"This month's free credits, which are spent before anything bought and do not roll over. Null for a workspace that does not receive them: each person's oldest workspace does."},"tier":{"type":"string","enum":["free","t1","t2","t3"],"description":"Raised by lifetime credit purchases, net of refunds: free, then t1 from $5, t2 from $100, t3 from $500. Spending and time never lower it."},"spendingPaused":{"type":"boolean","description":"True while a refund or payment dispute on the account is resolved. Billed calls return 402 until then; free calls still work."}},"required":["balance","reserved","available","freeGrant","tier","spendingPaused"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The account no longer exists.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/limits":{"get":{"operationId":"getLimits","tags":["Account"],"summary":"Ceilings imposed by the account's tier","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Tier limits.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tier":{"type":"string","enum":["free","t1","t2","t3"],"description":"Raised by lifetime credit purchases, net of refunds: free, then t1 from $5, t2 from $100, t3 from $500. Spending and time never lower it."},"rateLimitPerMinute":{"type":"integer","exclusiveMinimum":0},"maxMonitors":{"type":"integer","minimum":0},"maxWebhooks":{"type":"integer","minimum":0},"hourlySchedules":{"type":"boolean","description":"Whether monitors may run hourly. Daily and weekly schedules are on every tier."}},"required":["tier","rateLimitPerMinute","maxMonitors","maxWebhooks","hourlySchedules"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The account no longer exists.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/reddit/search":{"post":{"operationId":"searchReddit","tags":["Reddit"],"summary":"Search public Reddit posts","description":"Posts matching a query across Reddit, or within the communities named in `subreddit` or\n`subreddits`. Reddit's search covers post titles and bodies only — it does not search\ncomment text; to find mentions in comments, read a community's comment stream with\n`GET /v1/reddit/subreddits/{name}/comments` or watch it with a `subreddit_comments` monitor.\n\nTo list a community without a keyword, use `GET /v1/reddit/subreddits/{name}/posts`. NSFW\nposts are excluded unless `includeNsfw` is true.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"Reddit search syntax: words, `\"exact phrases\"`, `OR`, `-exclusions`, and field operators such as `title:`, `author:`, `flair:`, `site:example.com`, `url:`, `self:yes`.","example":"\"churn\" pricing"},"subreddit":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})$","description":"Restrict the search to one community, by name without `r/`.","example":"saas"},"subreddits":{"type":"array","items":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})$"},"minItems":1,"maxItems":25,"description":"Restrict the search to several communities at once (up to 25).","example":["saas","startups"]},"sort":{"type":"string","enum":["relevance","hot","top","new","comments"],"default":"relevance","description":"`new` is arrival order; `comments` ranks by comment count."},"time":{"type":"string","enum":["all","year","month","week","day","hour"],"default":"all","description":"Only posts created within this window."},"includeNsfw":{"type":"boolean","default":false,"description":"Include results marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."}},"required":["query"]}}}},"responses":{"200":{"description":"Reddit posts, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.post","creditsPerUnit":3}]}}},"/v1/reddit/posts/{id}":{"get":{"operationId":"getRedditPost","tags":["Reddit"],"summary":"Get one public Reddit post","description":"The post's current state: score, comment count, flair, and whether it was locked, archived,\nor removed (`removedByCategory`). To refresh many posts at once, use\n`POST /v1/reddit/lookup`; for its comments, `GET /v1/reddit/posts/{id}/comments`.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9]{1,13}$","description":"Reddit's base-36 post id, without the `t3_` prefix: `1vdo8we` in a post URL.","example":"1vdo8we"},"required":true,"description":"Reddit's base-36 post id, without the `t3_` prefix: `1vdo8we` in a post URL.","name":"id","in":"path"}],"responses":{"200":{"description":"One Reddit post, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"reddit.post","creditsPerUnit":3}]}}},"/v1/reddit/subreddits/{name}":{"get":{"operationId":"getSubreddit","tags":["Reddit"],"summary":"Get information about a public subreddit","description":"A community's description, member count, type, language, and whether it is NSFW or\nquarantined. A community that does not exist is a 404; one that is private, banned,\nquarantined, or otherwise not publicly readable is a 404 whose `details.reason` says which.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})$","description":"Community name without the `r/` prefix: 3-21 letters, digits, or underscores starting with a letter or digit, or a two-letter language community such as `de`.","example":"saas"},"required":true,"description":"Community name without the `r/` prefix: 3-21 letters, digits, or underscores starting with a letter or digit, or a two-letter language community such as `de`.","name":"name","in":"path"}],"responses":{"200":{"description":"Subreddit metadata, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's fullname for the community, `t5_` included."},"name":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"description":{"type":["string","null"],"description":"The short public description. Null if unset."},"url":{"type":"string"},"subscribers":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"The whole community is marked NSFW."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subredditType":{"type":"string","description":"`public`, `restricted`, `private`, `archived`, `gold_restricted`, or `user`."},"submissionType":{"type":["string","null"],"description":"What may be posted: `any`, `link`, or `self`."},"lang":{"type":["string","null"],"description":"The community's declared language, such as `en`."},"quarantine":{"type":"boolean","description":"Quarantined by Reddit: hidden from search and listings."},"communityIcon":{"type":["string","null"],"description":"URL of the community icon. Null if unset."},"bannerImg":{"type":["string","null"],"description":"URL of the banner image. Null if unset."}},"required":["id","name","title","description","url","subscribers","over18","createdUtc","createdAt","subredditType","submissionType","lang","quarantine","communityIcon","bannerImg"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"reddit.community","creditsPerUnit":1}]}}},"/v1/reddit/subreddits/{name}/search":{"post":{"operationId":"searchSubreddit","tags":["Reddit"],"summary":"Search posts within one subreddit","description":"Posts matching a query inside the community in the path. The body cannot widen the search\nbeyond it. To find communities rather than posts, use `POST /v1/reddit/search/subreddits`.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})$","description":"Community name without the `r/` prefix: 3-21 letters, digits, or underscores starting with a letter or digit, or a two-letter language community such as `de`.","example":"saas"},"required":true,"description":"Community name without the `r/` prefix: 3-21 letters, digits, or underscores starting with a letter or digit, or a two-letter language community such as `de`.","name":"name","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"Reddit search syntax: words, `\"exact phrases\"`, `OR`, `-exclusions`, and field operators such as `title:`, `author:`, `flair:`, `site:example.com`, `url:`, `self:yes`.","example":"\"churn\" pricing"},"sort":{"type":"string","enum":["relevance","hot","top","new","comments"],"default":"relevance","description":"`new` is arrival order; `comments` ranks by comment count."},"time":{"type":"string","enum":["all","year","month","week","day","hour"],"default":"all","description":"Only posts created within this window."},"includeNsfw":{"type":"boolean","default":false,"description":"Include results marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."}},"required":["query"]}}}},"responses":{"200":{"description":"Reddit posts restricted to the named subreddit.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.post","creditsPerUnit":3}]}}},"/v1/reddit/posts/{id}/comments":{"get":{"operationId":"getRedditComments","tags":["Reddit"],"summary":"Get a Reddit comment tree as a flat list, page by page","description":"A post's comments, flattened depth-first: each carries `depth` (0 is top-level) and\n`parentId`, so the tree can be rebuilt. The first page is the thread as Reddit lays it out,\nup to `limit` comments and `depth` levels.\n\nLarge threads do not fit on one page: Reddit stands in for the rest with \"load more\"\nlinks, and `meta.moreCount` estimates how many comments sit behind them. Pass\n`meta.nextCursor` back to load them, up to 100 per page, until it is null. Later pages\ncontain only the newly loaded comments, each still carrying its `depth` and `parentId`.\n\n`comment` focuses the thread on one comment, as its permalink does, with `context`\nancestors above it.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9]{1,13}$","description":"Reddit's base-36 post id, without the `t3_` prefix: `1vdo8we` in a post URL.","example":"1vdo8we"},"required":true,"description":"Reddit's base-36 post id, without the `t3_` prefix: `1vdo8we` in a post URL.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":50,"description":"Comments on the first page; Reddit's own ceiling is 500. Each later page loads up to 100 more of the comments Reddit left behind \"load more\" links.","example":50},"required":false,"description":"Comments on the first page; Reddit's own ceiling is 500. Each later page loads up to 100 more of the comments Reddit left behind \"load more\" links.","name":"limit","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":10,"default":3,"description":"Reply levels to include; 1 is top-level comments only."},"required":false,"description":"Reply levels to include; 1 is top-level comments only.","name":"depth","in":"query"},{"schema":{"type":"string","enum":["confidence","top","new","controversial","old","random","qa","live"],"default":"confidence","description":"`confidence` is Reddit's \"best\"; `new` puts the latest first."},"required":false,"description":"`confidence` is Reddit's \"best\"; `new` puts the latest first.","name":"sort","in":"query"},{"schema":{"type":"string","pattern":"^[A-Za-z0-9]{1,13}$","description":"Focus on one comment (its id, without `t1_`): returns it, up to `context` of its ancestors, and its replies — the view a comment's permalink opens.","example":"lqx9zab"},"required":false,"description":"Focus on one comment (its id, without `t1_`): returns it, up to `context` of its ancestors, and its replies — the view a comment's permalink opens.","name":"comment","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":8,"description":"Ancestors to include above `comment`. Default 3."},"required":false,"description":"Ancestors to include above `comment`. Default 3.","name":"context","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."},"required":false,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Comments ordered by Reddit with depth and parent IDs.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 comment id, without the `t1_` prefix."},"postId":{"type":"string","description":"The post this comment belongs to, without `t3_`."},"parentId":{"type":"string","description":"The comment or post this replies to."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"body":{"type":"string","description":"Markdown. `[removed]` or `[deleted]` once taken down."},"score":{"type":"integer"},"permalink":{"type":"string","description":"Absolute URL of the comment."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"isSubmitter":{"type":"boolean","description":"The commenter is the post's author (OP)."},"edited":{"type":["number","null"],"description":"When the comment was last edited, in epoch seconds. Null if it never was."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned under the post by a moderator."},"scoreHidden":{"type":"boolean","description":"Reddit is hiding this comment's score for now; `score` means nothing while true."},"depth":{"type":"integer","minimum":0,"description":"0 for a top-level comment."}},"required":["id","postId","parentId","author","body","score","permalink","createdUtc","createdAt","subreddit","isSubmitter","edited","distinguished","stickied","scoreHidden","depth"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"moreCount":{"type":"integer","minimum":0,"description":"Reddit's estimate of the comments not loaded yet. 0 once `nextCursor` is null."},"focalCommentId":{"type":"string","description":"The comment the thread is focused on, when `comment` was given."}},"required":["requestId","moreCount"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":4,"units":[{"kind":"reddit.comment","creditsPerUnit":3}]}}},"/v1/reddit/subreddits/{name}/posts":{"get":{"operationId":"getSubredditPosts","tags":["Reddit"],"summary":"List a community's posts: hot, new, rising, top, or controversial","description":"A community's own listing, with no keyword: everything new in r/saas, or this week's top\nposts in r/startups. Use this rather than search when the community is the filter — Reddit's\nsearch needs a query and cannot express \"everything\".\n\n`name` also takes `popular`, `all`, or several communities joined with `+`, which reads\nthem as one listing in a single call (and is billed as one request).\n\nPages are newest-cursor-forward and stop at about 1,000 posts, Reddit's own ceiling, where\n`nextCursor` becomes null. NSFW posts are left out unless `includeNsfw=true`; how many were\nleft out is in `meta.omittedNsfw`. A community that does not exist, or is private, banned,\nor quarantined, is a 404 whose `details.reason` says which.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})(?:\\+(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})){0,24}$","description":"A community name without `r/`; `popular` or `all` for the site-wide listings; or up to 25 communities joined with `+` (`saas+startups+entrepreneur`) to read them as one listing in a single call.","example":"saas+startups"},"required":true,"description":"A community name without `r/`; `popular` or `all` for the site-wide listings; or up to 25 communities joined with `+` (`saas+startups+entrepreneur`) to read them as one listing in a single call.","name":"name","in":"path"},{"schema":{"type":"string","enum":["hot","new","rising","top","controversial"],"default":"hot","description":"Reddit's own orderings. `new` is arrival order, which is what watching a community needs; `hot` is Reddit's default front page.","example":"new"},"required":false,"description":"Reddit's own orderings. `new` is arrival order, which is what watching a community needs; `hot` is Reddit's default front page.","name":"sort","in":"query"},{"schema":{"type":"string","enum":["hour","day","week","month","year","all"],"description":"Window for `top` and `controversial` only. Defaults to `day` for those sorts.","example":"week"},"required":false,"description":"Window for `top` and `controversial` only. Defaults to `day` for those sorts.","name":"time","in":"query"},{"schema":{"type":"string","pattern":"^(?:GLOBAL|[A-Z]{2}|US_[A-Z]{2})$","description":"Region for `popular` sorted by `hot` only: a country code (`DE`), a US state (`US_CA`), or `GLOBAL`.","example":"GLOBAL"},"required":false,"description":"Region for `popular` sorted by `hot` only: a country code (`DE`), a US state (`US_CA`), or `GLOBAL`.","name":"geo","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","example":"false"},"required":false,"description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","name":"includeNsfw","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Posts per page, before the NSFW rule is applied.","example":25},"required":false,"description":"Posts per page, before the NSFW rule is applied.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."},"required":false,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Posts in the listing's order, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.post","creditsPerUnit":3}]}}},"/v1/reddit/subreddits/{name}/comments":{"get":{"operationId":"getSubredditComments","tags":["Reddit"],"summary":"Read a community's newest comments, across every post","description":"Every new comment in a community, newest first, each with the post it belongs to\n(`linkTitle`, `linkPermalink`). This is the way to find mentions inside comments: Reddit's\nsearch does not search comment text at all.\n\nBusy communities produce comments faster than anyone pages through them; to watch one\ncontinuously, create a `subreddit_comments` monitor, which also filters by keyword. `name`\ntakes several communities joined with `+`. NSFW is judged by the comment's post and is left\nout unless `includeNsfw=true`.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})(?:\\+(?:[A-Za-z0-9][A-Za-z0-9_]{2,20}|[A-Za-z]{2})){0,24}$","description":"A community name without `r/`; `popular` or `all` for the site-wide listings; or up to 25 communities joined with `+` (`saas+startups+entrepreneur`) to read them as one listing in a single call.","example":"saas+startups"},"required":true,"description":"A community name without `r/`; `popular` or `all` for the site-wide listings; or up to 25 communities joined with `+` (`saas+startups+entrepreneur`) to read them as one listing in a single call.","name":"name","in":"path"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","example":"false"},"required":false,"description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","name":"includeNsfw","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Comments per page.","example":50},"required":false,"description":"Comments per page.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."},"required":false,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Comments, newest first, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 comment id, without the `t1_` prefix."},"postId":{"type":"string","description":"The post this comment belongs to, without `t3_`."},"parentId":{"type":"string","description":"The comment or post this replies to."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"body":{"type":"string","description":"Markdown. `[removed]` or `[deleted]` once taken down."},"score":{"type":"integer"},"permalink":{"type":"string","description":"Absolute URL of the comment."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"isSubmitter":{"type":"boolean","description":"The commenter is the post's author (OP)."},"edited":{"type":["number","null"],"description":"When the comment was last edited, in epoch seconds. Null if it never was."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned under the post by a moderator."},"scoreHidden":{"type":"boolean","description":"Reddit is hiding this comment's score for now; `score` means nothing while true."},"linkTitle":{"type":"string","description":"Title of the post the comment belongs to."},"linkAuthor":{"type":"string","description":"Author of that post."},"linkPermalink":{"type":"string","description":"Absolute URL of that post."},"numComments":{"type":"integer","minimum":0,"description":"Comments on that post."},"over18":{"type":"boolean","description":"That post is marked NSFW."}},"required":["id","postId","parentId","author","body","score","permalink","createdUtc","createdAt","subreddit","isSubmitter","edited","distinguished","stickied","scoreHidden","linkTitle","linkAuthor","linkPermalink","numComments","over18"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.comment","creditsPerUnit":3}]}}},"/v1/reddit/search/subreddits":{"post":{"operationId":"searchSubreddits","tags":["Reddit"],"summary":"Find communities by name or topic","description":"Communities whose name or description matches the query, with member counts. Use it to\nfind where a topic is discussed before reading or watching those communities. To search\n*posts* inside one community, use `POST /v1/reddit/subreddits/{name}/search` instead.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500,"description":"Words to match against community names and descriptions.","example":"indie hackers"},"sort":{"type":"string","enum":["relevance","activity"],"default":"relevance","description":"`activity` favours communities that are busy right now."},"includeNsfw":{"type":"boolean","default":false,"description":"Include results marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."}},"required":["query"]}}}},"responses":{"200":{"description":"Communities, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's fullname for the community, `t5_` included."},"name":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"description":{"type":["string","null"],"description":"The short public description. Null if unset."},"url":{"type":"string"},"subscribers":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"The whole community is marked NSFW."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subredditType":{"type":"string","description":"`public`, `restricted`, `private`, `archived`, `gold_restricted`, or `user`."},"submissionType":{"type":["string","null"],"description":"What may be posted: `any`, `link`, or `self`."},"lang":{"type":["string","null"],"description":"The community's declared language, such as `en`."},"quarantine":{"type":"boolean","description":"Quarantined by Reddit: hidden from search and listings."},"communityIcon":{"type":["string","null"],"description":"URL of the community icon. Null if unset."},"bannerImg":{"type":["string","null"],"description":"URL of the banner image. Null if unset."}},"required":["id","name","title","description","url","subscribers","over18","createdUtc","createdAt","subredditType","submissionType","lang","quarantine","communityIcon","bannerImg"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.community","creditsPerUnit":1}]}}},"/v1/reddit/users/{username}":{"get":{"operationId":"getRedditUser","tags":["Reddit"],"summary":"Get a Reddit account's public profile","description":"Karma, account age, moderator and Premium status, and the profile's bio and follower count\n— the facts that tell a real, established account from a throwaway. A suspended account is\nreturned with `isSuspended: true` and its counters null, because that is all Reddit shows;\nan account that does not exist is a 404.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,20}$","description":"Username without the `u/` prefix.","example":"spez"},"required":true,"description":"Username without the `u/` prefix.","name":"username","in":"path"}],"responses":{"200":{"description":"The profile, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":["string","null"],"description":"Base-36 account id without `t2_`. Null for a suspended account."},"name":{"type":"string","description":"Username without the `u/` prefix."},"url":{"type":"string","description":"Absolute URL of the profile."},"isSuspended":{"type":"boolean","description":"Suspended by Reddit: the profile shows nothing else."},"createdUtc":{"type":["number","null"],"description":"When the account was created, in epoch seconds."},"createdAt":{"type":["string","null"],"format":"date-time"},"linkKarma":{"type":["integer","null"],"description":"Karma from posts."},"commentKarma":{"type":["integer","null"],"description":"Karma from comments."},"totalKarma":{"type":["integer","null"]},"isEmployee":{"type":["boolean","null"],"description":"A Reddit employee."},"isMod":{"type":["boolean","null"],"description":"Moderates at least one community."},"isGold":{"type":["boolean","null"],"description":"Has Reddit Premium."},"verified":{"type":["boolean","null"]},"hasVerifiedEmail":{"type":["boolean","null"]},"iconImg":{"type":["string","null"],"description":"URL of the avatar."},"snoovatarImg":{"type":["string","null"],"description":"URL of the full-body avatar, if one is set."},"acceptFollowers":{"type":["boolean","null"]},"subreddit":{"type":["object","null"],"properties":{"title":{"type":"string"},"publicDescription":{"type":["string","null"],"description":"The profile's bio."},"over18":{"type":"boolean","description":"The account marked its profile NSFW."},"bannerImg":{"type":["string","null"]},"subscribers":{"type":"integer","minimum":0,"description":"Followers. 0 when the account hides the count."}},"required":["title","publicDescription","over18","bannerImg","subscribers"],"description":"The profile page itself, which Reddit models as a community named `u_<name>`. Null for a suspended account."}},"required":["id","name","url","isSuspended","createdUtc","createdAt","linkKarma","commentKarma","totalKarma","isEmployee","isMod","isGold","verified","hasVerifiedEmail","iconImg","snoovatarImg","acceptFollowers","subreddit"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"reddit.user","creditsPerUnit":1}]}}},"/v1/reddit/users/{username}/posts":{"get":{"operationId":"getRedditUserPosts","tags":["Reddit"],"summary":"List the posts an account has submitted","description":"Posts the account submitted, across every community, newest first by default. To be told\nwhen it posts, create a `reddit_user` monitor instead of polling.\n\nReddit lets people hide some or all of their activity from their profile, so an empty page\nfor an account with karma usually means hidden, not inactive. An account that does not exist\nis a 404, and a suspended one is a 404 with `details.reason` `suspended`. Pages stop at\nabout 1,000 items, Reddit's own ceiling.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,20}$","description":"Username without the `u/` prefix.","example":"spez"},"required":true,"description":"Username without the `u/` prefix.","name":"username","in":"path"},{"schema":{"type":"string","enum":["new","hot","top","controversial"],"default":"new","description":"`new` is what the account did most recently.","example":"new"},"required":false,"description":"`new` is what the account did most recently.","name":"sort","in":"query"},{"schema":{"type":"string","enum":["hour","day","week","month","year","all"],"description":"Window for `top` and `controversial` only. Defaults to `all` for those sorts.","example":"month"},"required":false,"description":"Window for `top` and `controversial` only. Defaults to `all` for those sorts.","name":"time","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","example":"false"},"required":false,"description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","name":"includeNsfw","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."},"required":false,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Posts, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.post","creditsPerUnit":3}]}}},"/v1/reddit/users/{username}/comments":{"get":{"operationId":"getRedditUserComments","tags":["Reddit"],"summary":"List the comments an account has made","description":"Comments the account made, across every community, each with the post it belongs to\n(`linkTitle`, `linkPermalink`). Newest first by default.\n\nReddit lets people hide some or all of their activity from their profile, so an empty page\nfor an account with karma usually means hidden, not inactive. An account that does not exist\nis a 404, and a suspended one is a 404 with `details.reason` `suspended`. Pages stop at\nabout 1,000 items, Reddit's own ceiling.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,20}$","description":"Username without the `u/` prefix.","example":"spez"},"required":true,"description":"Username without the `u/` prefix.","name":"username","in":"path"},{"schema":{"type":"string","enum":["new","hot","top","controversial"],"default":"new","description":"`new` is what the account did most recently.","example":"new"},"required":false,"description":"`new` is what the account did most recently.","name":"sort","in":"query"},{"schema":{"type":"string","enum":["hour","day","week","month","year","all"],"description":"Window for `top` and `controversial` only. Defaults to `all` for those sorts.","example":"month"},"required":false,"description":"Window for `top` and `controversial` only. Defaults to `all` for those sorts.","name":"time","in":"query"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","example":"false"},"required":false,"description":"Include posts marked NSFW. Off by default; what it removes is reported in `meta.omittedNsfw`, so a short or empty page is never mistaken for a quiet one.","name":"includeNsfw","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"example":25},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor."},"required":false,"description":"`meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Comments, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 comment id, without the `t1_` prefix."},"postId":{"type":"string","description":"The post this comment belongs to, without `t3_`."},"parentId":{"type":"string","description":"The comment or post this replies to."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"body":{"type":"string","description":"Markdown. `[removed]` or `[deleted]` once taken down."},"score":{"type":"integer"},"permalink":{"type":"string","description":"Absolute URL of the comment."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"isSubmitter":{"type":"boolean","description":"The commenter is the post's author (OP)."},"edited":{"type":["number","null"],"description":"When the comment was last edited, in epoch seconds. Null if it never was."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned under the post by a moderator."},"scoreHidden":{"type":"boolean","description":"Reddit is hiding this comment's score for now; `score` means nothing while true."},"linkTitle":{"type":"string","description":"Title of the post the comment belongs to."},"linkAuthor":{"type":"string","description":"Author of that post."},"linkPermalink":{"type":"string","description":"Absolute URL of that post."},"numComments":{"type":"integer","minimum":0,"description":"Comments on that post."},"over18":{"type":"boolean","description":"That post is marked NSFW."}},"required":["id","postId","parentId","author","body","score","permalink","createdUtc","createdAt","subreddit","isSubmitter","edited","distinguished","stickied","scoreHidden","linkTitle","linkAuthor","linkPermalink","numComments","over18"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]},"omittedNsfw":{"type":"integer","minimum":0,"description":"Items removed from this page because they are marked NSFW and `includeNsfw` is false. Absent when nothing was removed. A page can be short, or even empty with a non-null `nextCursor`, because of it."}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.comment","creditsPerUnit":3}]}}},"/v1/reddit/lookup":{"post":{"operationId":"lookupReddit","tags":["Reddit"],"summary":"Fetch up to 100 posts and comments, and 100 communities, in one call","description":"Current state of items you already know about: fresh scores and comment counts, whether a\npost was removed (`removedByCategory`) or a comment deleted (`[deleted]` body), and\ncommunity metadata — in one request instead of one per item. Accepts the links people\nactually paste.\n\nItems Reddit did not return (deleted, nonexistent, or not publicly readable) are listed in\n`meta.missing` as `t3_<id>`, `t1_<id>`, or `r/<name>`. Results are not filtered for NSFW:\nyou named these items. Billed per item returned.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"posts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048},"maxItems":100,"description":"Posts, as ids (`1vdo8we`), `t3_` fullnames, post URLs, or `redd.it` links. Share links (`/s/...`) carry no id and are refused.","example":["1vdo8we","https://www.reddit.com/r/saas/comments/1vdo8we/a_title/"]},"comments":{"type":"array","items":{"type":"string","minLength":1,"maxLength":2048},"maxItems":100,"description":"Comments, as ids, `t1_` fullnames, or comment permalinks.","example":["lqx9zab"]},"subreddits":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"maxItems":100,"description":"Communities, by name, `r/name`, or community URL.","example":["saas","r/startups"]}}}}}},"responses":{"200":{"description":"The items that exist and are publicly readable, in Reddit's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"posts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 post id, without the `t3_` prefix."},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"selftext":{"type":"string","description":"Body text. Empty for a link post."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"permalink":{"type":"string","description":"Path on reddit.com, beginning with a slash."},"url":{"type":"string","description":"Absolute URL to the post."},"score":{"type":"integer","description":"Upvotes minus downvotes. Can be negative, and is fuzzed by Reddit."},"upvoteRatio":{"type":"number","minimum":0,"maximum":1,"description":"Fraction of votes that were upvotes."},"numComments":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"Marked NSFW by the author or a moderator."},"createdUtc":{"type":"number","description":"Creation time in epoch seconds, as Reddit reports it."},"createdAt":{"type":"string","format":"date-time","description":"The same instant as `createdUtc`, in ISO 8601."},"domain":{"type":"string","description":"`self.<subreddit>` for a text post; otherwise the host the post links to."},"isSelf":{"type":"boolean","description":"A text post rather than a link."},"urlOverriddenByDest":{"type":["string","null"],"description":"Where a link post points. Null for a text post."},"linkFlairText":{"type":["string","null"],"description":"The post's flair, such as `Question` or `Hiring`. Null when it has none."},"authorFlairText":{"type":["string","null"],"description":"The author's flair in this community."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned to the top of the community."},"locked":{"type":"boolean","description":"New comments are disabled."},"archived":{"type":"boolean","description":"Past Reddit's archive age: no new comments or votes."},"spoiler":{"type":"boolean"},"edited":{"type":["number","null"],"description":"When the post was last edited, in epoch seconds. Null if it never was."},"numCrossposts":{"type":"integer","minimum":0},"crosspostParent":{"type":["string","null"],"description":"The original post's id, without `t3_`, when this post is a crosspost."},"removedByCategory":{"type":["string","null"],"description":"Why the post was removed: `moderator`, `deleted`, `author`, `automod_filtered`, `reddit`, and so on. Null while it is visible."},"subredditSubscribers":{"type":"integer","minimum":0,"description":"Members of the community at the time the post was read."},"postHint":{"type":["string","null"],"description":"What the post holds when Reddit says: `image`, `link`, `hosted:video`, `self`."},"isVideo":{"type":"boolean"}},"required":["id","subreddit","title","selftext","author","permalink","url","score","upvoteRatio","numComments","over18","createdUtc","createdAt","domain","isSelf","urlOverriddenByDest","linkFlairText","authorFlairText","distinguished","stickied","locked","archived","spoiler","edited","numCrossposts","crosspostParent","removedByCategory","subredditSubscribers","postHint","isVideo"]}},"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's base-36 comment id, without the `t1_` prefix."},"postId":{"type":"string","description":"The post this comment belongs to, without `t3_`."},"parentId":{"type":"string","description":"The comment or post this replies to."},"author":{"type":"string","description":"Username without the `u/` prefix. `[deleted]` if removed."},"body":{"type":"string","description":"Markdown. `[removed]` or `[deleted]` once taken down."},"score":{"type":"integer"},"permalink":{"type":"string","description":"Absolute URL of the comment."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subreddit":{"type":"string","description":"Community name without the `r/` prefix."},"isSubmitter":{"type":"boolean","description":"The commenter is the post's author (OP)."},"edited":{"type":["number","null"],"description":"When the comment was last edited, in epoch seconds. Null if it never was."},"distinguished":{"type":["string","null"],"description":"`moderator` or `admin` when posted in an official capacity; otherwise null."},"stickied":{"type":"boolean","description":"Pinned under the post by a moderator."},"scoreHidden":{"type":"boolean","description":"Reddit is hiding this comment's score for now; `score` means nothing while true."},"linkTitle":{"type":"string","description":"Title of the post the comment belongs to."},"linkAuthor":{"type":"string","description":"Author of that post."},"linkPermalink":{"type":"string","description":"Absolute URL of that post."},"numComments":{"type":"integer","minimum":0,"description":"Comments on that post."},"over18":{"type":"boolean","description":"That post is marked NSFW."}},"required":["id","postId","parentId","author","body","score","permalink","createdUtc","createdAt","subreddit","isSubmitter","edited","distinguished","stickied","scoreHidden","linkTitle","linkAuthor","linkPermalink","numComments","over18"]}},"subreddits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Reddit's fullname for the community, `t5_` included."},"name":{"type":"string","description":"Community name without the `r/` prefix."},"title":{"type":"string"},"description":{"type":["string","null"],"description":"The short public description. Null if unset."},"url":{"type":"string"},"subscribers":{"type":"integer","minimum":0},"over18":{"type":"boolean","description":"The whole community is marked NSFW."},"createdUtc":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"subredditType":{"type":"string","description":"`public`, `restricted`, `private`, `archived`, `gold_restricted`, or `user`."},"submissionType":{"type":["string","null"],"description":"What may be posted: `any`, `link`, or `self`."},"lang":{"type":["string","null"],"description":"The community's declared language, such as `en`."},"quarantine":{"type":"boolean","description":"Quarantined by Reddit: hidden from search and listings."},"communityIcon":{"type":["string","null"],"description":"URL of the community icon. Null if unset."},"bannerImg":{"type":["string","null"],"description":"URL of the banner image. Null if unset."}},"required":["id","name","title","description","url","subscribers","over18","createdUtc","createdAt","subredditType","submissionType","lang","quarantine","communityIcon","bannerImg"]}}},"required":["posts","comments","subreddits"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"missing":{"type":"array","items":{"type":"string"},"description":"What was asked for and not returned: `t3_<id>`, `t1_<id>`, `r/<name>`."}},"required":["requestId","missing"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"reddit.post","creditsPerUnit":3},{"kind":"reddit.comment","creditsPerUnit":3},{"kind":"reddit.community","creditsPerUnit":1}]}}},"/v1/x/search":{"post":{"operationId":"searchX","tags":["X"],"summary":"Search public X posts with composable filters","description":"Searches public posts. Every filter narrows the result, and at least one of `query`, `phrase`, `hashtags`, `fromUsers`, `toUsers`, `mentions`, `listId`, or `quotedPostId` is required. Paginate with `meta.nextCursor`. Billed per post returned.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200,"description":"Words that must all appear, in any order.","example":"launch"},"phrase":{"type":"string","minLength":1,"maxLength":200,"description":"An exact phrase that must appear."},"anyWords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":80},"maxItems":20,"description":"At least one of these words must appear."},"excludeWords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":80},"maxItems":20,"description":"None of these words may appear."},"hashtags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":10,"description":"Any of these hashtags, with or without the `#`."},"fromUsers":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":10,"description":"Posted by any of these usernames."},"toUsers":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":10,"description":"Replying to any of these usernames."},"mentions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":50},"maxItems":10,"description":"Mentioning any of these usernames."},"language":{"type":"string","minLength":2,"maxLength":12,"description":"Language X detected, as a BCP-47 tag such as `en`."},"minLikes":{"type":"integer","minimum":0},"minReplies":{"type":"integer","minimum":0},"minReposts":{"type":"integer","minimum":0},"onlyLinks":{"type":"boolean","description":"Only posts containing a link."},"onlyOriginal":{"type":"boolean","description":"Exclude replies."},"onlyReplies":{"type":"boolean","description":"Only replies."},"onlyText":{"type":"boolean","description":"Exclude posts with links."},"since":{"type":"string","format":"date-time","description":"Posted at or after this instant (UTC)."},"until":{"type":"string","format":"date-time","description":"Posted before this instant (UTC)."},"quotedPostId":{"type":"string","pattern":"^\\d{1,19}$","description":"Only posts quoting this post. `getXQuotes` is the dedicated endpoint for this."},"listId":{"type":"string","pattern":"^\\d{1,19}$","description":"Only posts by members of this public List."},"sinceId":{"type":"string","pattern":"^\\d{1,19}$","description":"Only posts newer than this post id, exclusive. The way to resume a feed: pass the newest id already seen."},"untilId":{"type":"string","pattern":"^\\d{1,19}$","description":"Only posts older than this post id, exclusive."},"sort":{"type":"string","enum":["latest","top"],"default":"latest","description":"`latest` is newest first; `top` is X's own engagement ranking."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Most posts to return. X serves about 20 per page at most."},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."}}},"example":{"query":"launch","fromUsers":["example_dev"],"sort":"latest","limit":20}}}},"responses":{"200":{"description":"X posts, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts":{"get":{"operationId":"getXPosts","tags":["X"],"summary":"Get up to 100 public X posts by id","description":"Looks up many posts in one request, for hydrating ids you already hold (from a webhook, a dataset, or another response). Posts come back in the order requested. An id that cannot be returned is listed in `meta.notFound` instead of failing the request, and is not billed. Billed per post returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}(,\\d{1,19}){0,99}$","description":"Comma-separated numeric post ids, 1 to 100, no spaces. Duplicates are ignored.","example":"1878432157392445440,1878432157392445441"},"required":true,"description":"Comma-separated numeric post ids, 1 to 100, no spaces. Duplicates are ignored.","name":"ids","in":"query"}],"responses":{"200":{"description":"The posts found, in request order.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"notFound":{"type":"array","items":{"type":"string"},"description":"Requested ids that came back empty: deleted, suspended, protected, withheld, or never existed. They cost nothing."}},"required":["requestId","notFound"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","notFound":["1878432157392445441"]}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts/{id}":{"get":{"operationId":"getXPost","tags":["X"],"summary":"Get one public X post","description":"Returns one post with its author, counters, media, and any post it quotes or reposts. 404 when the post does not exist, was deleted, or is not public.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"}],"responses":{"200":{"description":"One X post, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null},"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts/{id}/replies":{"get":{"operationId":"getXReplies","tags":["X"],"summary":"Get replies to an X post","description":"Returns the replies under a post, including replies to replies. The post itself, the posts above it, and promoted posts are left out. For the author's own continuation, use `getXThread`. Billed per reply returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"},{"schema":{"type":"string","enum":["latest","relevance","likes"],"default":"latest","description":"`latest` is newest first; `relevance` and `likes` are X's own rankings."},"required":false,"description":"`latest` is newest first; `relevance` and `likes` are X's own rankings.","name":"sort","in":"query"}],"responses":{"200":{"description":"Replies, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts/{id}/thread":{"get":{"operationId":"getXThread","tags":["X"],"summary":"Get the author's thread containing a post","description":"Returns the thread a post belongs to, in reading order: the author's earlier posts it continues from, the post, and the author's continuation below it. Pass any post in the thread. Other people's replies are not included; use `getXReplies` for those. Assembled from X's first page of the conversation, so a thread long enough for X to fold behind \"Show more\" ends at the fold. 404 when the post does not exist. Billed per post returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"}],"responses":{"200":{"description":"The thread, first post first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts/{id}/quotes":{"get":{"operationId":"getXQuotes","tags":["X"],"summary":"Get posts quoting an X post","description":"Returns public posts that quote the given post, each with the quoted post embedded as `quotedPost`. Useful for tracking how a post is being discussed beyond its replies. Paginate with `meta.nextCursor`. Billed per post returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"},{"schema":{"type":"string","enum":["latest","top"],"default":"latest","description":"`latest` is newest first; `top` is X's own engagement ranking."},"required":false,"description":"`latest` is newest first; `top` is X's own engagement ranking.","name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most posts to return. X may return fewer.","example":20},"required":false,"description":"Most posts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Quote posts, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/posts/{id}/retweeters":{"get":{"operationId":"getXRetweeters","tags":["X"],"summary":"Get accounts that reposted an X post","description":"Returns the accounts that reposted a post, as X lists them; X may cap the list for very widely reposted posts. Who liked a post is not available: X made likes private. Paginate with `meta.nextCursor`. Billed per account returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Most accounts to return. X may return fewer.","example":20},"required":false,"description":"Most accounts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Accounts that reposted the post.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":3,"units":[{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/posts/{id}/edits":{"get":{"operationId":"getXPostEdits","tags":["X"],"summary":"Get the edit history of an X post","description":"Returns every version of an edited post, newest first, including the current one. An empty list means the post exists and was never edited. X allows edits only in the first hour after posting. 404 when the post does not exist. Billed per version returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric post id: the digits after `/status/` in a post's URL.","example":"1878432157392445440"},"required":true,"description":"Numeric post id: the digits after `/status/` in a post's URL.","name":"id","in":"path"}],"responses":{"200":{"description":"Versions of the post, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/users":{"get":{"operationId":"getXUsers","tags":["X"],"summary":"Get up to 100 public X profiles by id","description":"Looks up many accounts in one request, for hydrating ids you already hold, such as post authors or followers. Profiles come back in the order requested. An id that cannot be returned (suspended, deactivated, or never existed) is listed in `meta.notFound` and not billed. Billed per profile returned, at the same rate as `getXUser`.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}(,\\d{1,19}){0,99}$","description":"Comma-separated numeric account ids, 1 to 100, no spaces. Duplicates are ignored.","example":"1593274519387648000,783214"},"required":true,"description":"Comma-separated numeric account ids, 1 to 100, no spaces. Duplicates are ignored.","name":"ids","in":"query"}],"responses":{"200":{"description":"The profiles found, in request order.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"notFound":{"type":"array","items":{"type":"string"},"description":"Requested ids that came back empty: deleted, suspended, protected, withheld, or never existed. They cost nothing."}},"required":["requestId","notFound"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","notFound":["783214"]}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2}]}}},"/v1/x/users/search":{"post":{"operationId":"searchXUsers","tags":["X"],"summary":"Search X accounts","description":"Finds accounts by name, username, or bio, ranked by X's people search. Use it to turn a person or brand name into a username before calling the other account endpoints. Paginate with `meta.nextCursor`. Billed per account returned.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":100,"description":"Free text matched against names, usernames, and bios, as X's people search does.","example":"api developer"},"limit":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most accounts to return. X may return fewer."},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."}},"required":["query"]},"example":{"query":"api developer"}}}},"responses":{"200":{"description":"Matching accounts.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/users/{user}":{"get":{"operationId":"getXUser","tags":["X"],"summary":"Get a public X profile","description":"Returns one account's profile: name, bio, counters, pinned posts, and whether it is protected. A protected account's profile is public on X, so it is returned; its posts are not. 404 when the account does not exist or is suspended.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"}],"responses":{"200":{"description":"An X profile, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false},"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.profile","creditsPerUnit":2}]}}},"/v1/x/users/{user}/about":{"get":{"operationId":"getXUserAbout","tags":["X"],"summary":"Get an X account's \"About this account\" details","description":"Returns what X shows under \"About this account\": the country X attributes the account to, how it connects to X, how many times its username has changed, and identity verification. Useful for judging whether an account is what it claims to be. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed as one profile, plus one more when `{user}` is a numeric id.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"}],"responses":{"200":{"description":"The account's about details.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"createdAt":{"type":"string","format":"date-time"},"profileImageUrl":{"type":["string","null"]},"profileImageShape":{"type":["string","null"],"description":"`Circle` for people, `Square` for organisations, `Hexagon` for some others."},"verified":{"type":"boolean"},"protected":{"type":["boolean","null"]},"aboutProfile":{"type":["object","null"],"properties":{"accountBasedIn":{"type":["string","null"],"description":"The country X attributes the account to."},"locationAccurate":{"type":["boolean","null"],"description":"Whether X considers `accountBasedIn` accurate."},"createdCountryAccurate":{"type":["boolean","null"]},"source":{"type":["string","null"],"description":"How the account connects to X, in X's own words, such as an app store."},"usernameChanges":{"type":"object","properties":{"count":{"type":["integer","null"],"minimum":0},"lastChangedAt":{"type":["string","null"],"format":"date-time"}},"required":["count","lastChangedAt"]}},"required":["accountBasedIn","locationAccurate","createdCountryAccurate","source","usernameChanges"]},"verificationInfo":{"type":["object","null"],"properties":{"isIdentityVerified":{"type":["boolean","null"]},"verifiedSince":{"type":["string","null"],"format":"date-time"}},"required":["isIdentityVerified","verifiedSince"]}},"required":["id","username","name","createdAt","profileImageUrl","profileImageShape","verified","protected","aboutProfile","verificationInfo"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","createdAt":"2022-11-17T15:04:05.000Z","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileImageShape":"Circle","verified":true,"protected":false,"aboutProfile":{"accountBasedIn":"Portugal","locationAccurate":true,"createdCountryAccurate":true,"source":"Web App","usernameChanges":{"count":1,"lastChangedAt":"2024-03-02T09:00:00.000Z"}},"verificationInfo":{"isIdentityVerified":false,"verifiedSince":"2023-05-10T12:00:00.000Z"}},"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.profile","creditsPerUnit":2}]}}},"/v1/x/users/{user}/posts":{"get":{"operationId":"getXUserPosts","tags":["X"],"summary":"Get a public X user timeline","description":"Returns an account's own posts and reposts, newest first, with any pinned post first. Replies are on `getXUserReplies`. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per post returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most posts to return. X may return fewer.","example":20},"required":false,"description":"Most posts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Timeline posts, in X's own field names.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/users/{user}/replies":{"get":{"operationId":"getXUserReplies","tags":["X"],"summary":"Get an X account's posts and replies","description":"Returns the profile's Replies tab: the account's posts together with its replies to others, newest first, with any pinned post first. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per post returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most posts to return. X may return fewer.","example":20},"required":false,"description":"Most posts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Posts and replies, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/users/{user}/media":{"get":{"operationId":"getXUserMedia","tags":["X"],"summary":"Get an X account's posts with media","description":"Returns the profile's Media tab: the account's own posts that carry photos, videos, or GIFs, newest first. Media URLs are in each post's `media`. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per post returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most posts to return. X may return fewer.","example":20},"required":false,"description":"Most posts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Posts with media, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/users/{user}/highlights":{"get":{"operationId":"getXUserHighlights","tags":["X"],"summary":"Get the posts an X account highlights","description":"Returns the profile's Highlights tab: posts the account chose to feature. Only accounts with X Premium can highlight, so for others the list is empty. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per post returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"description":"Most posts to return. X may return fewer.","example":20},"required":false,"description":"Most posts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Highlighted posts.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/users/{user}/followers":{"get":{"operationId":"getXUserFollowers","tags":["X"],"summary":"Get an X account's followers","description":"Returns accounts that follow the account, most recent first, as X lists them. X chooses the page size (about 70), so there is no `limit`; paginate with `meta.nextCursor`, which is null after the last page. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per account returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Followers, most recent first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":3,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/users/{user}/following":{"get":{"operationId":"getXUserFollowing","tags":["X"],"summary":"Get the accounts an X account follows","description":"Returns accounts the account follows, most recent first, as X lists them. X chooses the page size (about 70), so there is no `limit`; paginate with `meta.nextCursor`, which is null after the last page. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per account returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Followed accounts, most recent first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":3,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/users/{user}/affiliates":{"get":{"operationId":"getXUserAffiliates","tags":["X"],"summary":"Get an organisation's affiliated X accounts","description":"Returns the accounts a Verified Organization lists as affiliated with it, such as its employees, products, or regional accounts. Empty for accounts that are not Verified Organizations. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per account returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Most accounts to return. X may return fewer.","example":20},"required":false,"description":"Most accounts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Affiliated accounts.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/users/{user}/subscriptions":{"get":{"operationId":"getXUserSubscriptions","tags":["X"],"summary":"Get the creators an X account subscribes to","description":"Returns the creators the account pays to subscribe to, where it has not hidden them. Often empty. 404 when the account does not exist, or is protected: a protected account's posts and connections are visible only to accounts it approved. Billed per account returned. The first page also bills one profile lookup, to resolve `{user}`; later pages carry the account in the cursor and do not.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,50}$","description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","example":"example_dev"},"required":true,"description":"A username, with or without the `@`, or a numeric account id. An all-digit value is read as an id.","name":"user","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Most accounts to return. X may return fewer.","example":20},"required":false,"description":"Most accounts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Subscribed-to creators.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.profile","creditsPerUnit":2},{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/lists/{id}":{"get":{"operationId":"getXList","tags":["X"],"summary":"Get a public X List","description":"Returns a List's name, description, owner, and member and follower counts. Read its members with `getXListMembers` and its timeline with `getXListPosts`. 404 when the List does not exist or is private. Billed per List returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","example":"1585430245762441216"},"required":true,"description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","name":"id","in":"path"}],"responses":{"200":{"description":"One X List.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"url":{"type":"string","description":"`https://x.com/i/lists/{id}`."},"createdAt":{"type":"string","format":"date-time"},"memberCount":{"type":"integer","minimum":0},"subscriberCount":{"type":"integer","minimum":0,"description":"Accounts following the list."},"ownerId":{"type":"string"},"owner":{"type":["object","null"],"properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"],"description":"The list's owner. Null only when X omits it."}},"required":["id","name","description","url","createdAt","memberCount","subscriberCount","ownerId","owner"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":{"id":"1585430245762441216","name":"API builders","description":"People shipping public APIs.","url":"https://x.com/i/lists/1585430245762441216","createdAt":"2022-10-27T00:00:00.000Z","memberCount":63,"subscriberCount":7,"ownerId":"1593274519387648000","owner":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"}},"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.list","creditsPerUnit":2}]}}},"/v1/x/lists/{id}/members":{"get":{"operationId":"getXListMembers","tags":["X"],"summary":"Get the members of a public X List","description":"Returns the accounts in a List, as X orders them. Lists are curated, so this is a quick way to find the accounts that matter on a topic. Paginate with `meta.nextCursor`, which is null after the last page. Billed per account returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","example":"1585430245762441216"},"required":true,"description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Most accounts to return. X may return fewer.","example":20},"required":false,"description":"Most accounts to return. X may return fewer.","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Accounts in the List.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","description":"Handle without the `@` prefix."},"name":{"type":"string","description":"Display name."},"description":{"type":["string","null"]},"url":{"type":"string"},"profileImageUrl":{"type":["string","null"]},"profileBannerUrl":{"type":["string","null"]},"location":{"type":["string","null"]},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"followingCount":{"type":"integer","minimum":0},"statusesCount":{"type":"integer","minimum":0,"description":"Posts published."},"likeCount":{"type":"integer","minimum":0},"createdAt":{"type":"string","format":"date-time"},"pinnedPostIds":{"type":"array","items":{"type":"string"},"description":"Ids of the posts pinned to the top of the profile, usually zero or one."},"protected":{"type":"boolean","description":"True when only approved followers can see this account's posts. Its posts, replies, media, and relationship lists are then not available through this API."}},"required":["id","username","name","description","url","profileImageUrl","profileBannerUrl","location","verified","followersCount","followingCount","statusesCount","likeCount","createdAt","pinnedPostIds","protected"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","description":"Building developer tools. Posts about APIs and data.","url":"https://x.com/example_dev","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","profileBannerUrl":"https://pbs.twimg.com/profile_banners/1593274519387648000/1700000000","location":"Lisbon","verified":true,"followersCount":12840,"followingCount":311,"statusesCount":4210,"likeCount":9876,"createdAt":"2022-11-17T15:04:05.000Z","pinnedPostIds":["1878432157392445440"],"protected":false}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":3,"units":[{"kind":"x.user_result","creditsPerUnit":1}]}}},"/v1/x/lists/{id}/posts":{"get":{"operationId":"getXListPosts","tags":["X"],"summary":"Get the timeline of a public X List","description":"Returns recent posts from the List's members, newest first: the same feed the List shows on X. X chooses the page size (up to about 100 posts), so there is no `limit`; paginate with `meta.nextCursor`. Billed per post returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,19}$","description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","example":"1585430245762441216"},"required":true,"description":"Numeric List id: the digits after `/i/lists/` in a List's URL.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":4096,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400."},"required":false,"description":"Opaque cursor from the previous page's `meta.nextCursor`. Pass it back unchanged, with the same path and query parameters; a cursor from another request is rejected with 400.","name":"cursor","in":"query"}],"responses":{"200":{"description":"Posts from the List's members, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]},"quotedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"The post this one quotes, when it is a quote post."},"retweetedPost":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Numeric post id, as a string. It exceeds 2^53."},"text":{"type":"string","description":"Full post text, untruncated."},"url":{"type":"string"},"lang":{"type":["string","null"],"description":"BCP-47 language tag detected by X."},"createdAt":{"type":"string","format":"date-time"},"conversationId":{"type":["string","null"],"description":"The thread this post belongs to."},"inReplyToId":{"type":["string","null"]},"author":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"likeCount":{"type":["integer","null"],"minimum":0},"retweetCount":{"type":["integer","null"],"minimum":0},"replyCount":{"type":["integer","null"],"minimum":0},"viewCount":{"type":["integer","null"],"minimum":0},"quoteCount":{"type":["integer","null"],"minimum":0},"bookmarkCount":{"type":["integer","null"],"minimum":0},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["photo","video","animated_gif"],"description":"X's own media type names."},"url":{"type":["string","null"],"description":"The image for a photo; the highest-bitrate MP4 for a video or GIF. Null when X offers only a stream."},"previewImageUrl":{"type":["string","null"],"description":"Poster frame for a video. Null for photos and GIFs."}},"required":["id","type","url","previewImageUrl"]},"description":"Attached photos, videos, and GIFs, in display order."},"entities":{"type":"object","properties":{"hashtags":{"type":"array","items":{"type":"string"},"description":"Hashtags, without the `#`."},"mentions":{"type":"array","items":{"type":"string"},"description":"Mentioned usernames, without the `@`."},"urls":{"type":"array","items":{"type":"string"},"description":"Expanded link targets, not t.co short links."}},"required":["hashtags","mentions","urls"]}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities"],"description":"Set when this post is a repost. Read the original's text and counts here: X truncates a repost's own `text` to `RT @user: …`."}},"required":["id","text","url","lang","createdAt","conversationId","inReplyToId","author","likeCount","retweetCount","replyCount","viewCount","quoteCount","bookmarkCount","media","entities","quotedPost","retweetedPost"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":[{"id":"1878432157392445440","text":"Shipping search filters for quotes and Lists today. Changelog below.","url":"https://x.com/example_dev/status/1878432157392445440","lang":"en","createdAt":"2026-07-01T16:20:00.000Z","conversationId":"1878432157392445440","inReplyToId":null,"author":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"likeCount":482,"retweetCount":51,"replyCount":37,"viewCount":90412,"quoteCount":9,"bookmarkCount":64,"media":[{"id":"1878432150193311744","type":"photo","url":"https://pbs.twimg.com/media/GhExample.jpg","previewImageUrl":null}],"entities":{"hashtags":["devtools"],"mentions":["example_team"],"urls":["https://example.com/log"]},"quotedPost":null,"retweetedPost":null}],"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b","nextCursor":"1f0c9a7b3e2d4c5b6a798877.eyJ2IjoxfQ"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":2,"units":[{"kind":"x.post","creditsPerUnit":1}]}}},"/v1/x/spaces/{id}":{"get":{"operationId":"getXSpace","tags":["X"],"summary":"Get an X Space","description":"Returns a Space (a live audio room): its title, state (`NotStarted`, `Running`, or `Ended`), schedule, host, speakers, and audience counts, and whether a replay is available. Listeners are included only with `listeners=true`. 404 when the Space does not exist. Billed per Space returned.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z0-9]{8,20}$","description":"Space id: the code after `/i/spaces/` in a Space's URL.","example":"1YqKDqWqdPLJV"},"required":true,"description":"Space id: the code after `/i/spaces/` in a Space's URL.","name":"id","in":"path"},{"schema":{"type":"string","enum":["true","false"],"default":"false","description":"Include the listener list. Off by default: it can be long, and it names individuals who only listened.","example":"false"},"required":false,"description":"Include the listener list. Off by default: it can be long, and it names individuals who only listened.","name":"listeners","in":"query"}],"responses":{"200":{"description":"One X Space.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","description":"`https://x.com/i/spaces/{id}`."},"state":{"type":["string","null"],"description":"X's lifecycle state, such as `NotStarted`, `Running`, or `Ended`."},"title":{"type":["string","null"]},"createdAt":{"type":["string","null"],"format":"date-time"},"scheduledStart":{"type":["string","null"],"format":"date-time"},"startedAt":{"type":["string","null"],"format":"date-time"},"endedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":["string","null"],"format":"date-time"},"creatorId":{"type":["string","null"]},"creator":{"type":["object","null"],"properties":{"id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"},"followersCount":{"type":"integer","minimum":0},"profileImageUrl":{"type":["string","null"]}},"required":["id","username","name","verified","followersCount","profileImageUrl"]},"isLocked":{"type":["boolean","null"]},"disallowJoin":{"type":["boolean","null"]},"isSpaceAvailableForReplay":{"type":["boolean","null"]},"isSpaceAvailableForClipping":{"type":["boolean","null"]},"totalLiveListeners":{"type":["integer","null"],"minimum":0},"totalReplayWatched":{"type":["integer","null"],"minimum":0},"participantCount":{"type":["integer","null"],"minimum":0},"participants":{"type":"object","properties":{"admins":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"username":{"type":["string","null"]},"name":{"type":["string","null"]},"profileImageUrl":{"type":["string","null"]},"verified":{"type":["boolean","null"]},"isMutedByAdmin":{"type":["boolean","null"]},"isMutedByGuest":{"type":["boolean","null"],"description":"Muted their own microphone."}},"required":["id","username","name","profileImageUrl","verified","isMutedByAdmin","isMutedByGuest"]},"description":"Hosts and co-hosts."},"speakers":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"username":{"type":["string","null"]},"name":{"type":["string","null"]},"profileImageUrl":{"type":["string","null"]},"verified":{"type":["boolean","null"]},"isMutedByAdmin":{"type":["boolean","null"]},"isMutedByGuest":{"type":["boolean","null"],"description":"Muted their own microphone."}},"required":["id","username","name","profileImageUrl","verified","isMutedByAdmin","isMutedByGuest"]}},"listeners":{"type":"array","items":{"type":"object","properties":{"id":{"type":["string","null"]},"username":{"type":["string","null"]},"name":{"type":["string","null"]},"profileImageUrl":{"type":["string","null"]},"verified":{"type":["boolean","null"]},"isMutedByAdmin":{"type":["boolean","null"]},"isMutedByGuest":{"type":["boolean","null"],"description":"Muted their own microphone."}},"required":["id","username","name","profileImageUrl","verified","isMutedByAdmin","isMutedByGuest"]},"description":"Empty unless listeners were requested with `listeners=true`."}},"required":["admins","speakers","listeners"]}},"required":["id","url","state","title","createdAt","scheduledStart","startedAt","endedAt","updatedAt","creatorId","creator","isLocked","disallowJoin","isSpaceAvailableForReplay","isSpaceAvailableForClipping","totalLiveListeners","totalReplayWatched","participantCount","participants"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"nextCursor":{"type":["string","null"]}},"required":["requestId"]}},"required":["data","meta"]},"example":{"data":{"id":"1YqKDqWqdPLJV","url":"https://x.com/i/spaces/1YqKDqWqdPLJV","state":"Ended","title":"Office hours: search filters","createdAt":"2026-07-01T17:00:00.000Z","scheduledStart":null,"startedAt":"2026-07-01T17:01:00.000Z","endedAt":"2026-07-01T18:00:00.000Z","updatedAt":"2026-07-01T18:00:01.000Z","creatorId":"1593274519387648000","creator":{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","verified":true,"followersCount":12840,"profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg"},"isLocked":false,"disallowJoin":false,"isSpaceAvailableForReplay":true,"isSpaceAvailableForClipping":true,"totalLiveListeners":0,"totalReplayWatched":214,"participantCount":2,"participants":{"admins":[{"id":"1593274519387648000","username":"example_dev","name":"Example Developer","profileImageUrl":"https://pbs.twimg.com/profile_images/1593274519387648000/avatar_normal.jpg","verified":true,"isMutedByAdmin":false,"isMutedByGuest":false}],"speakers":[],"listeners":[]}},"meta":{"requestId":"6f1c2a9e-3b4d-4e5f-8a7b-9c0d1e2f3a4b"}}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The requested resource does not exist.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"503":{"description":"The source is temporarily unavailable. The request is safe to retry.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":1,"rateLimitWeight":1,"units":[{"kind":"x.space","creditsPerUnit":2}]}}},"/v1/monitors":{"get":{"operationId":"listMonitors","tags":["Monitors"],"summary":"List monitors","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Monitors belonging to this account.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]}},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"]},"status":{"type":"string","enum":["active","paused","archived"]},"webhookId":{"type":["string","null"],"format":"uuid"},"lastRunAt":{"type":["string","null"],"format":"date-time"},"nextRunAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","target","sources","schedule","status","webhookId","lastRunAt","nextRunAt","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}},"post":{"operationId":"createMonitor","tags":["Monitors"],"summary":"Create a monitor","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"],"default":"daily"},"webhookId":{"type":["string","null"],"format":"uuid"}},"required":["name","target"]}}}},"responses":{"201":{"description":"The created monitor.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]}},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"]},"status":{"type":"string","enum":["active","paused","archived"]},"webhookId":{"type":["string","null"],"format":"uuid"},"lastRunAt":{"type":["string","null"],"format":"date-time"},"nextRunAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","target","sources","schedule","status","webhookId","lastRunAt","nextRunAt","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"The webhook does not exist in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"409":{"description":"The tier's monitor limit was reached, or its schedules do not include hourly. `details.limit` says which ceiling.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/monitors/{id}":{"get":{"operationId":"getMonitor","tags":["Monitors"],"summary":"Get one monitor","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The monitor.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]}},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"]},"status":{"type":"string","enum":["active","paused","archived"]},"webhookId":{"type":["string","null"],"format":"uuid"},"lastRunAt":{"type":["string","null"],"format":"date-time"},"nextRunAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","target","sources","schedule","status","webhookId","lastRunAt","nextRunAt","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}},"patch":{"operationId":"updateMonitor","tags":["Monitors"],"summary":"Update a monitor","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"]},"webhookId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["active","paused","archived"]}}}}}},"responses":{"200":{"description":"The updated monitor.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["search"]},"query":{"type":"string","minLength":1,"maxLength":500},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]},"minItems":1,"maxItems":2}},"required":["kind","query","sources"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean"}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["subreddit_comments"]},"subreddit":{"type":"string","minLength":1,"maxLength":400},"query":{"type":["string","null"],"minLength":1,"maxLength":500,"default":null},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","subreddit"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_user"]},"username":{"type":"string","minLength":1,"maxLength":200},"include":{"type":"string","enum":["posts","comments","both"],"default":"both"},"includeNsfw":{"type":"boolean","default":false}},"required":["kind","username"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_user"]},"handle":{"type":"string","minLength":1,"maxLength":200},"userId":{"type":["string","null"],"pattern":"^\\d+$","default":null}},"required":["kind","handle"]},{"type":"object","properties":{"kind":{"type":"string","enum":["reddit_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]},{"type":"object","properties":{"kind":{"type":"string","enum":["x_thread"]},"postId":{"type":"string","minLength":1,"maxLength":2048}},"required":["kind","postId"]}],"description":"What the monitor watches. `search` runs a keyword search across sources; `subreddit` watches one community, with a keyword or without; `x_user` watches one account's posts; `reddit_thread` and `x_thread` watch one conversation for new replies. Identifiers are normalised, so a pasted URL, an `r/` prefix, or an `@` handle are all accepted."},"sources":{"type":"array","items":{"type":"string","enum":["reddit","x"]}},"schedule":{"type":"string","enum":["manual","hourly","daily","weekly"]},"status":{"type":"string","enum":["active","paused","archived"]},"webhookId":{"type":["string","null"],"format":"uuid"},"lastRunAt":{"type":["string","null"],"format":"date-time"},"nextRunAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","target","sources","schedule","status","webhookId","lastRunAt","nextRunAt","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor, or no such webhook, in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}},"delete":{"operationId":"deleteMonitor","tags":["Monitors"],"summary":"Delete a monitor","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The monitor was deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/monitors/{id}/results":{"get":{"operationId":"listMonitorResults","tags":["Monitors"],"summary":"List deduplicated results a monitor has found","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Results, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"monitorId":{"type":"string","format":"uuid"},"itemType":{"type":"string","enum":["post","comment"],"description":"A thread watch finds comments; every other kind finds posts."},"source":{"type":"string"},"externalId":{"type":["string","null"]},"url":{"type":"string"},"title":{"type":["string","null"]},"body":{"type":["string","null"]},"authorHandle":{"type":["string","null"]},"communityName":{"type":["string","null"]},"firstSeenAt":{"type":"string","format":"date-time"}},"required":["id","monitorId","itemType","source","externalId","url","title","body","authorHandle","communityName","firstSeenAt"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/monitors/{id}/runs":{"get":{"operationId":"listMonitorRuns","tags":["Monitors"],"summary":"List a monitor's execution history","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Runs, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"monitorId":{"type":"string","format":"uuid"},"status":{"type":"string"},"startedAt":{"type":["string","null"],"format":"date-time"},"finishedAt":{"type":["string","null"],"format":"date-time"},"resultsFound":{"type":"integer","minimum":0},"newResults":{"type":"integer","minimum":0},"creditsUsed":{"type":"integer","minimum":0},"errorSummary":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","monitorId","status","startedAt","finishedAt","resultsFound","newResults","creditsUsed","errorSummary","createdAt"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/monitors/{id}/run":{"post":{"operationId":"runMonitor","tags":["Monitors"],"summary":"Queue a monitor run immediately","description":"Queues the run and returns straight away. The run itself consumes credits when it executes, priced by what it finds, not by this call.","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"202":{"description":"The run was queued, or was already queued.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobId":{"type":"string"},"queued":{"type":"boolean"}},"required":["jobId","queued"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such monitor in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"409":{"description":"The monitor is paused or archived. Resume it before running it.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":4,"units":[]}}},"/v1/webhooks":{"get":{"operationId":"listWebhooks","tags":["Webhooks"],"summary":"List webhooks","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Webhooks belonging to this account. Secrets are never returned.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["active","disabled"]},"events":{"type":"array","items":{"type":"string"}},"failureCount":{"type":"integer","minimum":0},"disabledAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","url","status","events","failureCount","disabledAt","createdAt","updatedAt"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}},"post":{"operationId":"createWebhook","tags":["Webhooks"],"summary":"Create a webhook","description":"The signing secret is returned exactly once, in this response. It is stored encrypted and cannot be retrieved again. To replace it, create a new webhook and delete this one.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"url":{"type":"string","maxLength":2048,"format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["monitor.result.created","monitor.run.failed"]},"minItems":1,"default":["monitor.result.created"]}},"required":["name","url"]}}}},"responses":{"201":{"description":"The created webhook and its one-time signing secret.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["active","disabled"]},"events":{"type":"array","items":{"type":"string"}},"failureCount":{"type":"integer","minimum":0},"disabledAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"secret":{"type":"string","description":"Shown once. Store it now; it cannot be recovered."}},"required":["id","name","url","status","events","failureCount","disabledAt","createdAt","updatedAt","secret"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation, or the URL is not a permitted destination.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"409":{"description":"The tier's webhook limit was reached. `details.limit` is the ceiling.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/webhooks/{id}":{"patch":{"operationId":"updateWebhook","tags":["Webhooks"],"summary":"Update a webhook","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"url":{"type":"string","maxLength":2048,"format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["monitor.result.created","monitor.run.failed"]},"minItems":1},"status":{"type":"string","enum":["active","disabled"]}}}}}},"responses":{"200":{"description":"The updated webhook.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["active","disabled"]},"events":{"type":"array","items":{"type":"string"}},"failureCount":{"type":"integer","minimum":0},"disabledAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","url","status","events","failureCount","disabledAt","createdAt","updatedAt"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such webhook in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}},"delete":{"operationId":"deleteWebhook","tags":["Webhooks"],"summary":"Delete a webhook","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The webhook was deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such webhook in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/webhooks/{id}/test":{"post":{"operationId":"testWebhook","tags":["Webhooks"],"summary":"Queue a test delivery","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"202":{"description":"A signed test event was queued.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobId":{"type":"string"},"queued":{"type":"boolean"}},"required":["jobId","queued"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"404":{"description":"No such webhook in this account.","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":2,"units":[]}}},"/v1/webhook-deliveries":{"get":{"operationId":"listWebhookDeliveries","tags":["Webhooks"],"summary":"List recent delivery attempts","security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"webhookId","in":"query"}],"responses":{"200":{"description":"Delivery attempts, newest first.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"webhookId":{"type":"string","format":"uuid"},"eventId":{"type":"string"},"eventType":{"type":"string"},"status":{"type":"string"},"attempts":{"type":"integer","minimum":0},"lastStatusCode":{"type":["integer","null"]},"lastError":{"type":["string","null"]},"deliveredAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","webhookId","eventId","eventType","status","attempts","lastStatusCode","lastError","deliveredAt","createdAt"]}},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"400":{"description":"The request failed validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"401":{"description":"The API key is missing, malformed, expired, or revoked.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"402":{"description":"The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"403":{"description":"The API key does not carry the scope this route requires.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"500":{"description":"An unexpected error occurred.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}},"/v1/whoami":{"get":{"operationId":"getIdentity","tags":["Account"],"summary":"Identify the account and scopes behind this key","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Authenticated API identity.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"apiKeyId":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["accountId","apiKeyId","scopes"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":{}}},"required":["code","message","retryable"]},"meta":{"type":"object","properties":{"requestId":{"type":"string"}},"required":["requestId"]}},"required":["error","meta"]}}}}},"x-weir-billing":{"minimumCredits":0,"rateLimitWeight":1,"units":[]}}}},"webhooks":{}}