# ChatterAPI > ChatterAPI is a Reddit and X data API for developers and AI agents. One API key and one credit balance. REST at https://api.chatterapi.com/v1 and a hosted MCP server at https://api.chatterapi.com/mcp. Every response includes the credits it cost. Failed calls cost 0. Auth: send `Authorization: Bearer ca_live_...`. Get a key at https://chatterapi.com/signup (1,000 free credits, no card). Generated 2026-10-14 from the ChatterAPI tool registry. ## Quickstart You can make your first call in about two minutes. All you need is an API key and a terminal. ### 1. Get a key [Sign up](https://chatterapi.com/signup) with your email. New accounts get 1,000 free credits, and you don't need a card. Open [API keys](https://chatterapi.com/dashboard/keys) and create a key. You only see it once, so copy it into an environment variable right away: terminal: ```bash export CHATTERAPI_KEY="ca_live_..." ``` ### 2. Make your first call Search Reddit posts from the past year that mention a small business CRM: curl: ``` curl "https://chatterapi.com/v1/reddit/search?q=best+crm+for+small+business&time=year&limit=5" \ -H "Authorization: Bearer $CHATTERAPI_KEY" ``` JavaScript: ``` const res = await fetch("https://chatterapi.com/v1/reddit/search?q=best+crm+for+small+business&time=year&limit=5", { method: "GET", headers: { Authorization: `Bearer ${process.env.CHATTERAPI_KEY}`, }, }); const { data, page, credits } = await res.json(); ``` Python: ``` import os, requests r = requests.get( "https://chatterapi.com/v1/reddit/search?q=best+crm+for+small+business&time=year&limit=5", headers={"Authorization": f"Bearer {os.environ['CHATTERAPI_KEY']}"}, ) print(r.json()) ``` ### 3. Read the response Every successful call returns the same envelope. This one was recorded from a live call: response (first two rows): ```json { "data": [ { "id": "1wdihhj", "fullname": "t3_1wdihhj", "title": "What CRM should a small business use?", "body": "We’re a small B2B business with 6 people and sales is still pretty founder led, but revenue has grown enough that keeping leads, follow ups and customer conversations spread across spreadsheets and inboxes is starting to fall apart. I’m trying to figure out what the best CRM for a small business looks like when you need something the whole team can use without spending weeks setting it up. \n \nI keep finding everything from really basic small business CRM tools to newer AI native CRM platforms, and I’m more interested in something that can take some of the sales work off the team rather than just becoming another database we have to maintain. Main thing is finding a CRM we can grow into without needing a dedicated ops person just to keep it running.", "author": "NotedWhisky", "subreddit": "CRM", "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "externalUrl": null, "score": 51, "numComments": 186, "upvoteRatio": null, "createdAt": "2026-09-11T14:52:16.000Z", "nsfw": false, "locked": null, "media": null }, { "id": "1vmy4xb", "fullname": "t3_1vmy4xb", "title": "If You Had to Pick the Best CRM for Small Business Today, What Would It Be?", "body": "I've spent the last few days reading reviews and watching videos, and somehow I'm even more undecided than when I started.\n\nEvery CRM looks amazing on its website, but that doesn't tell you what it's like after you've been using it for six months.\n\nI'm more interested in hearing from people who rely on one every day. Which CRM are you using, and what keeps you from switching? Is there anything about it that drives you crazy, or do you feel like it's been worth every dollar?\n\nMy main goal is to stay on top of leads, keep follow-ups organized, and automate the routine work without ending up with a system that's harder to manage than the business itself.\n\nI'd appreciate hearing some live experiences. If you've found a CRM you'd choose again, I'd love to know which one and why.", "author": "Living_Dependent242", "subreddit": "CRMSoftware", "permalink": "/r/CRMSoftware/comments/1vmy4xb/if_you_had_to_pick_the_best_crm_for_small/", "url": "https://www.reddit.com/r/CRMSoftware/comments/1vmy4xb/if_you_had_to_pick_the_best_crm_for_small/", "externalUrl": null, "score": 10, "numComments": 56, "upvoteRatio": null, "createdAt": "2026-08-13T02:25:31.000Z", "nsfw": false, "locked": null, "media": null } ], "page": { "nextCursor": "eyJ2IjoxLCJwIjoiYW55YXBpIiwiYyI6ImN1cl9qWGJYVzlhZ3E1NXBDdHI4d3VCeG9nIiwibyI6MCwiaCI6ImQ4ZmU3ZjZiNjM0OSJ9", "hasMore": true }, "credits": { "charged": 1, "remaining": 24999 }, "requestId": "req_01JA7Q3V8K2N4P5R6S7T8V", "cached": false } ``` > Recorded from a live call on 2026-10-07, cut to two rows. Your balance will differ. - `data`: the result. An array on list tools, an object on lookups. - `page.nextCursor`: pass it as `cursor` to get the next page. Null on the last page. - `page.hasMore`: false on the last page. Only list tools have `page`. - `credits.charged`: what this call cost. - `credits.remaining`: your balance after it. - `requestId`: quote it when you contact support. - `cached`: true when served from our cache. Cached calls cost the same. - `warnings`: only present when something was partial, for example one platform of two did not answer. Headers on every response: `x-request-id`, `x-credits-charged`, `x-credits-remaining`, `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset`. ### 4. Get the next page When `page.hasMore` is true, send `page.nextCursor` back as `cursor` with the same parameters. Each page is charged separately. See [Pagination](https://chatterapi.com/docs/pagination) for a full loop. ### 5. Try an X call The same key works for X. Look up an account by handle: curl: ``` curl "https://chatterapi.com/v1/x/users/levelsio" \ -H "Authorization: Bearer $CHATTERAPI_KEY" ``` JavaScript: ``` const res = await fetch("https://chatterapi.com/v1/x/users/levelsio", { method: "GET", headers: { Authorization: `Bearer ${process.env.CHATTERAPI_KEY}`, }, }); const { data, page, credits } = await res.json(); ``` Python: ``` import os, requests r = requests.get( "https://chatterapi.com/v1/x/users/levelsio", headers={"Authorization": f"Bearer {os.environ['CHATTERAPI_KEY']}"}, ) print(r.json()) ``` response: ```json { "data": { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸http://levels.vc\n📸http://PhotoAI.com $86K/m\n🎮http://VibeJam.com $44K/m\n🏡http://InteriorAI.com $23K/m\n👙@X $13K/m\n🌍http://Nomads.com $7K/m\n🏩http://Hotelist.com $5K/m", "followers": 974707, "following": 3276, "tweets": 181450, "verified": false, "blueVerified": true, "canDm": false, "protected": false, "location": "📕My book $5K/m 👉", "url": "https://readMAKE.com", "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_400x400.jpg", "createdAt": "2013-07-08T09:31:59.000Z" }, "credits": { "charged": 3, "remaining": 24996 }, "requestId": "req_01JA7Q3V8K2N4P5R6S7T8W", "cached": false } ``` > Recorded from a live call on 2026-10-13. ### 6. Use it from an agent Agents can call the same tools through the hosted MCP server at `https://api.chatterapi.com/mcp`. The [MCP page](https://chatterapi.com/docs/mcp) has setup instructions for each client. ### 7. Next steps - [Errors](https://chatterapi.com/docs/errors): every code, and which ones to retry. - [Rate limits](https://chatterapi.com/docs/rate-limits): requests per second per plan. - [Test keys](https://chatterapi.com/docs/test-keys): build and test without spending credits. - [API reference](https://chatterapi.com/docs/tools): every tool, its parameters and its cost. ## Authentication Every request carries one ChatterAPI API key. You do not need a Reddit or X developer account. ### The Authorization header Send the key as a Bearer token on every request: header: ``` Authorization: Bearer ca_live_0123456789abcdef0123456789abcdef01234567 ``` The MCP server uses the same header. ### Key formats | Key | Format | What it does | |---|---|---| | Live | `ca_live_` + 40 hex characters | Calls the real data sources and spends credits. | | Test | `ca_test_` + 40 hex characters | Returns recorded samples, never spends. See [Test keys](https://chatterapi.com/docs/test-keys). | ### Creating, naming and revoking keys 1. Open [API keys](https://chatterapi.com/dashboard/keys) in the dashboard. 2. Choose Create key, give it a name you will recognise later (for example the app or server that uses it), and pick Live or Test. 3. Copy the key. It is shown only once. 4. To revoke a key, choose Revoke next to it. Calls using that key start failing with `key_revoked` straight away. Keys are stored hashed, so nobody can show you a key again. If you lose one, create a new key and revoke the old one. ### Keeping keys safe - Keep keys in environment variables or a secrets manager. Don't put them in code or a public repo. - Do not call the API from browser code with a live key, because anyone can read it there. Call from your server instead. - To rotate a key, create the new one, deploy it, then revoke the old one. - Use one key per app or server. That way, revoking one does not break the others. ### Authentication errors - [`missing_key`](https://chatterapi.com/docs/errors#missing_key): no Authorization header. - [`invalid_key`](https://chatterapi.com/docs/errors#invalid_key): malformed or unknown key. - [`key_revoked`](https://chatterapi.com/docs/errors#key_revoked): the key was revoked. - [`account_suspended`](https://chatterapi.com/docs/errors#account_suspended): the account is suspended. ## Response envelope and headers ```json { "data": [ "..." ], "page": { "nextCursor": "opaque-string-or-null", "hasMore": true }, "credits": { "charged": 1, "remaining": 24999 }, "requestId": "req_01J9Z6Q3V8K2N4", "cached": false } ``` - `data`: the result. An array on list tools, an object on lookups. - `page.nextCursor`: pass it as `cursor` to get the next page. Null on the last page. - `page.hasMore`: false on the last page. Only list tools have `page`. - `credits.charged`: what this call cost. - `credits.remaining`: your balance after it. - `requestId`: quote it when you contact support. - `cached`: true when served from our cache. Cached calls cost the same. - `warnings`: only present when something was partial, for example one platform of two did not answer. Headers on every response: `x-request-id`, `x-credits-charged`, `x-credits-remaining`, `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset`. ## Errors HTTP 402: ```json { "error": { "code": "insufficient_credits", "message": "This call costs up to 2 credits and you have 1.", "retryable": false, "docsUrl": "https://chatterapi.com/docs/errors#insufficient_credits", "topupUrl": "https://chatterapi.com/dashboard/billing", "instructionsForAgent": "The user's ChatterAPI balance is too low for this call. Tell them and share the topupUrl. Do not retry." }, "requestId": "req_01JA7Q3V8K2N4P5R6S7T8V" } ``` | Code | HTTP | Retryable | Charged | |---|---|---|---| | [`missing_key`](#missing_key) | 401 | no | 0 | | [`invalid_key`](#invalid_key) | 401 | no | 0 | | [`key_revoked`](#key_revoked) | 401 | no | 0 | | [`account_suspended`](#account_suspended) | 403 | no | 0 | | [`scope_denied`](#scope_denied) | 403 | no | 0 | | [`invalid_input`](#invalid_input) | 400 | no | 0 | | [`not_found`](#not_found) | 404 | no | 0 | | [`insufficient_credits`](#insufficient_credits) | 402 | no | 0 | | [`rate_limited`](#rate_limited) | 429 | yes | 0 | | [`upstream_error`](#upstream_error) | 502 | yes | 0 | | [`upstream_timeout`](#upstream_timeout) | 504 | yes | 0 | | [`x_account_required`](#x_account_required) | 409 | no | 0 | | [`x_account_needs_reconnect`](#x_account_needs_reconnect) | 409 | no | 0 | | [`internal`](#internal) | 500 | yes | 0 | ### missing_key HTTP 401, not retryable, charged 0. When: The request has no `Authorization: Bearer` header. What to do: Send `Authorization: Bearer ca_live_...` on every request. You can create a key on the Keys page of the dashboard. Tell the user: Ask the user for their ChatterAPI key (it starts with ca_live_). Do not retry without one. ### invalid_key HTTP 401, not retryable, charged 0. When: The key is malformed, or no key with that value exists. What to do: Check that you copied the whole key. Keys are `ca_live_` or `ca_test_` followed by 40 hex characters. A lost key can't be shown again, so create a new one. Tell the user: The API key is wrong. Ask the user to copy it again from the Keys page of their dashboard. ### key_revoked HTTP 401, not retryable, charged 0. When: The key was revoked from the dashboard. What to do: Create a new key and update your env var. Revoking is permanent. Tell the user: This API key was revoked. Ask the user to create a new key on the Keys page. ### account_suspended HTTP 403, not retryable, charged 0. When: The account behind the key is suspended. What to do: Email support with the `requestId`. Calls will keep failing until the account is restored. Tell the user: This ChatterAPI account is suspended. Tell the user to contact support. Do not retry. ### scope_denied HTTP 403, not retryable, charged 0. When: An 18+ tool (or `nsfw=true`) was called on an account that has not turned on 18+ tools, or a write tool was called with a read-only key. What to do: Confirm your age and turn on 18+ tools in Settings, or create a key with write access for X actions. Tell the user: This key or account isn't allowed to use this tool. Tell the user what setting is needed. Do not retry. ### invalid_input HTTP 400, not retryable, charged 0. When: A parameter failed validation, or the request included an unknown parameter. The message names the field. What to do: Fix the named field. Each tool's reference page lists its parameters, types and limits. An expired cursor also returns this error, so restart from the first page. ### not_found HTTP 404, not retryable, charged 0. When: The user, post, subreddit, tweet or list does not exist, or the path matches no tool. What to do: Check the id or name. Reddit account checks return a state instead of this error, so you can tell a deleted account from a suspended one. ### insufficient_credits HTTP 402, not retryable, charged 0. When: The balance is below the tool's cost. We check this before any upstream call. What to do: Top up or upgrade at the `topupUrl` in the error. Nothing was charged. Tell the user: The user's ChatterAPI balance is too low for this call. Tell them and share the topupUrl. Do not retry. ### rate_limited HTTP 429, retryable, charged 0. When: You sent more requests per second than your plan allows. What to do: Wait `retryAfter` seconds (also in the `retry-after` header), then retry. Spread your calls out, or upgrade for a higher limit. Tell the user: Too many requests per second. Wait retryAfter seconds, then retry once. ### upstream_error HTTP 502, retryable, charged 0. When: Every data provider for this tool failed. What to do: Retry with exponential backoff. If a cached copy exists, you get that instead, marked with a `stale_data` warning. ### upstream_timeout HTTP 504, retryable, charged 0. When: The provider took longer than 15 seconds. What to do: Retry with backoff. Smaller `limit` values return faster. ### x_account_required HTTP 409, not retryable, charged 0. When: An X write tool was called without `accountId`. What to do: Connect an X account in the dashboard and pass its id as `accountId`. Tell the user: This X action needs a connected X account. Ask the user to connect one on the Accounts page and pass its accountId. ### x_account_needs_reconnect HTTP 409, not retryable, charged 0. When: The session for the connected X account expired. What to do: Reconnect the account on the Accounts page, then retry. Tell the user: The connected X account's session expired. Ask the user to reconnect it on the Accounts page. ### internal HTTP 500, retryable, charged 0. When: This is a bug on our side. We log it with the request id. What to do: Retry once. If it keeps happening, email support with the `requestId`. ## Credits and billing One balance pays for every Reddit and X tool. Each call costs a fixed number of credits, and the response shows how many. ### What a credit is Every tool is priced in credits. A cheap Reddit read costs one credit, and tools that do more work cost more. The rules: | What | Credits | |---|---| | Reddit read: post search, subreddit feed, one post, profile, post history | 1 | | Reddit deep read: comment, media, community or user search, subreddit rules, account status, comment history | 2 | | Reddit thread with comments, or a lead finder page (Reddit or X) | 3 | | X read: profile, tweets, search, replies, one page of followers | 3 | | X verified followers, per 20 | 4 | | Search everywhere (Reddit + X) | 4 | | Lead finder everywhere | 5 | | Brand mentions everywhere | 6 | | X action from your connected account (follow, like, retweet, tweet) | 5 | | X DM send | 10 | | Failed call or bad input | 0 | ### Cost per tool The number shown is the most a call can cost. Tools marked "up to" charge less when they do less work, and the response says exactly what was charged. | Tool | Id | Credits | Note | |---|---|---|---| | [Reddit Post Search](https://chatterapi.com/docs/tools/reddit-search) | `reddit.search` | 1 credit | | | [Reddit NSFW Post Search](https://chatterapi.com/docs/tools/reddit-nsfw-search) | `reddit.nsfw_search` | 2 credits | Needs 18+ setting | | [Reddit Comment Search](https://chatterapi.com/docs/tools/reddit-search-comments) | `reddit.search_comments` | 2 credits | | | [Reddit Media Search](https://chatterapi.com/docs/tools/reddit-search-media) | `reddit.search_media` | 2 credits | | | [Reddit Scraper](https://chatterapi.com/docs/tools/reddit-scrape) | `reddit.scrape` | 1 credit | | | [Reddit Comment Exporter](https://chatterapi.com/docs/tools/reddit-thread) | `reddit.thread` | 3 credits | | | [Subreddit Finder](https://chatterapi.com/docs/tools/reddit-communities) | `reddit.communities` | 2 credits | | | [NSFW Subreddit Finder](https://chatterapi.com/docs/tools/reddit-nsfw-communities) | `reddit.nsfw_communities` | 2 credits | Needs 18+ setting | | [Subreddit Stats](https://chatterapi.com/docs/tools/reddit-subreddit) | `reddit.subreddit` | 2 credits | | | [Subreddit Posts](https://chatterapi.com/docs/tools/reddit-subreddit-posts) | `reddit.subreddit_posts` | 1 credit | | | [Reddit User Lookup](https://chatterapi.com/docs/tools/reddit-user) | `reddit.user` | up to 2 credits | 1 credit, 2 with detail=full | | [Reddit Account Checker](https://chatterapi.com/docs/tools/reddit-user-status) | `reddit.user_status` | 2 credits | | | [Reddit Comment History](https://chatterapi.com/docs/tools/reddit-user-comments) | `reddit.user_comments` | 2 credits | | | [Reddit Post History](https://chatterapi.com/docs/tools/reddit-user-posts) | `reddit.user_posts` | 1 credit | | | [Reddit User Search](https://chatterapi.com/docs/tools/reddit-user-search) | `reddit.user_search` | 2 credits | | | [Reddit Lead Finder](https://chatterapi.com/docs/tools/reddit-leads) | `reddit.leads` | 3 credits | | | [X User Lookup](https://chatterapi.com/docs/tools/x-user) | `x.user` | 3 credits | | | [X User Search](https://chatterapi.com/docs/tools/x-user-search) | `x.user_search` | 3 credits | | | [X Follower Exporter](https://chatterapi.com/docs/tools/x-followers) | `x.followers` | 3 credits per page (20 rows by default) | | | [X Following Exporter](https://chatterapi.com/docs/tools/x-following) | `x.following` | 3 credits per page (20 rows by default) | | | [Verified Follower Exporter](https://chatterapi.com/docs/tools/x-verified-followers) | `x.verified_followers` | 4 credits per 20 rows | | | [X Timeline Scraper](https://chatterapi.com/docs/tools/x-tweets) | `x.tweets` | 3 credits | | | [X Mentions Monitor](https://chatterapi.com/docs/tools/x-mentions) | `x.mentions` | 3 credits | | | [X Tweet Search](https://chatterapi.com/docs/tools/x-search) | `x.search` | 3 credits | | | [X Tweet Lookup](https://chatterapi.com/docs/tools/x-tweet-detail) | `x.tweet_detail` | 3 credits | | | [Tweet Replies Exporter](https://chatterapi.com/docs/tools/x-replies) | `x.replies` | 3 credits | | | [Retweeter Exporter](https://chatterapi.com/docs/tools/x-retweeters) | `x.retweeters` | 3 credits | | | [X List Members](https://chatterapi.com/docs/tools/x-list-members) | `x.list_members` | 3 credits | | | [X Lead Finder](https://chatterapi.com/docs/tools/x-leads) | `x.leads` | 3 credits | | | [Send a DM](https://chatterapi.com/docs/tools/x-dm-send) | `x.dm_send` | 10 credits | | | [Follow / unfollow](https://chatterapi.com/docs/tools/x-follow) | `x.follow` | 5 credits | | | [Like / retweet](https://chatterapi.com/docs/tools/x-like) | `x.like` | 5 credits | | | [Post a tweet](https://chatterapi.com/docs/tools/x-tweet) | `x.tweet` | 5 credits | | | [Search Everywhere](https://chatterapi.com/docs/tools/everywhere-search) | `everywhere.search` | up to 4 credits | 1 for the Reddit side plus 3 for the X side; 5 with nsfw=true | | [Lead Finder](https://chatterapi.com/docs/tools/everywhere-leads) | `everywhere.leads` | up to 5 credits | 5 when both platforms answer, 3 when only one does | | [Brand Mentions](https://chatterapi.com/docs/tools/everywhere-mentions) | `everywhere.mentions` | up to 6 credits | 1 for Reddit posts, 2 for Reddit comments and 3 for X, for the sources called | ### Pages, not rows List tools charge once per page, not per row. The X follower exporters are the exception: they charge per page of a fixed size, and that size is shown as the unit next to the price. ### Cached and failed calls - Cached responses cost the same as fresh ones. The cache makes repeat calls fast but doesn't change the price. - Failed calls cost 0. No error code ever charges credits. - Test keys cost 0. ### How your balance works Your balance has two parts: monthly credits from your plan, and purchased credits from top-ups. Monthly credits are spent first and reset each billing period. Purchased credits are spent after them. You can read your balance three ways: - `credits.remaining` in every response body. - The `x-credits-remaining` response header. - `GET /v1/account`, which is free and also returns your plan and rate limit. ### Running out If your balance is below a tool's cost, the call fails with HTTP 402 before anything is fetched, and you aren't charged: HTTP 402: ```json { "error": { "code": "insufficient_credits", "message": "This call costs up to 2 credits and you have 1.", "retryable": false, "docsUrl": "https://chatterapi.com/docs/errors#insufficient_credits", "topupUrl": "https://chatterapi.com/dashboard/billing", "instructionsForAgent": "The user's ChatterAPI balance is too low for this call. Tell them and share the topupUrl. Do not retry." }, "requestId": "req_01JA7Q3V8K2N4P5R6S7T8V" } ``` `topupUrl` goes to billing. `instructionsForAgent` tells an AI agent to stop and tell you instead of retrying. ### Plans, top-ups and signup credits New accounts get 1,000 credits once. Plans start at $19 a month for 25,000 credits. Only subscribers can buy top-ups, and purchased credits stay in your balance if the plan ends. Full prices are on the [pricing page](https://chatterapi.com/pricing). The [Usage](https://chatterapi.com/dashboard/usage) page shows your spend per tool and per day. ## Rate limits Your plan sets the limit, which is counted in requests per second per account. ### Limits by plan | Account | Requests per second | |---|---| | Free (signup credits only) | 2 | | Starter ($19/month) | 10 | | Growth ($49/month) | 25 | | Scale ($149/month) | 50 | | Any test key | 5 | ### Headers Every API response includes these headers: | Header | Meaning | |---|---| | `x-ratelimit-limit` | Requests per second allowed for this key. | | `x-ratelimit-remaining` | Requests left in the current second. | | `x-ratelimit-reset` | Unix time (seconds) when the window resets. | ### When you hit the limit A call over the limit fails with HTTP 429 and code [`rate_limited`](https://chatterapi.com/docs/errors#rate_limited). The body includes `retryAfter` and the response includes a `retry-after` header, both in seconds. You are not charged for the call. Data providers also set their own limits. If a provider pushes back, you get a retryable [`upstream_error`](https://chatterapi.com/docs/errors#upstream_error) instead. ### Free endpoints `GET /v1/account` and `GET /v1/usage` cost no credits but require a key. `GET /v1/tools` and `GET /v1/health` don't require a key. ### Staying under the limit - Use `limit` to get more rows from each call rather than making more calls. - Cache results on your side, since most data doesn't change from minute to minute. - When you get a 429, back off instead of retrying in a tight loop. ## Pagination List tools return one page at a time, and you move forward with an opaque cursor. ### limit and cursor - `limit`: rows per page, 1 to 100, default 25. Some sources return fewer than you ask for. X pages hold about 20. - `cursor`: the `page.nextCursor` from the previous response. Treat it as opaque and never build one yourself. - `page.hasMore`: false on the last page. A cursor only works with the parameters it came from. If you change `q`, `sort` or any other input and send an old cursor, you get `invalid_input`. ### Looping through pages JavaScript: ``` // Fetch every page of a Reddit search, stopping when hasMore is false. let cursor = null; let spent = 0; do { const url = new URL("https://api.chatterapi.com/v1/reddit/search"); url.searchParams.set("q", "crm recommendation"); url.searchParams.set("limit", "25"); if (cursor) url.searchParams.set("cursor", cursor); const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.CHATTERAPI_KEY}` } }); const body = await res.json(); if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`); spent += body.credits.charged; for (const post of body.data) console.log(post.title); cursor = body.page.hasMore ? body.page.nextCursor : null; } while (cursor); console.log("credits spent:", spent); ``` Python: ``` # Fetch every page of a Reddit search, stopping when hasMore is false. import os, requests cursor, spent = None, 0 while True: params = {"q": "crm recommendation", "limit": 25} if cursor: params["cursor"] = cursor r = requests.get( "https://api.chatterapi.com/v1/reddit/search", params=params, headers={"Authorization": f"Bearer {os.environ['CHATTERAPI_KEY']}"}, ) body = r.json() if not r.ok: raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}") spent += body["credits"]["charged"] for post in body["data"]: print(post["title"]) if not body["page"]["hasMore"]: break cursor = body["page"]["nextCursor"] print("credits spent:", spent) ``` ### Each page is one charge Each page is billed separately at the tool's price, so set a page budget for large exports. The X follower exporters list their page size as the unit next to the price. ### Cursors expire Cursors may expire after a while, since the platforms' own cursors do. An expired cursor returns `invalid_input` with the message `cursor: invalid or expired cursor`, and you have to start again from the first page. ## Test keys Build, test and demo without spending credits. ### What a test key does - Never calls Reddit or X data sources. - Never charges: `credits.charged` is always 0. - Returns the recorded sample for that tool with `cached: true`. - Still checks auth, the 18+ setting and input validation, and enforces a rate limit of 5 requests per second. ### When to use one - In CI, so tests don't spend credits or depend on live data. - While you write agent prompts, so an agent stuck in a loop costs nothing. - In demos and screenshots. ### Creating a test key On [API keys](https://chatterapi.com/dashboard/keys), choose Create key and pick Test. The key starts with `ca_test_`. ### Limitations Inputs are validated, but whatever you search for, the response is always the same recorded sample. If a tool has no recorded sample yet, it returns `not_found` with a note to use a live key. ### Tools with a recorded sample | Tool | Id | Sample captured | |---|---|---| | [Reddit Post Search](https://chatterapi.com/docs/tools/reddit-search) | `reddit.search` | 2026-10-07 | | [Reddit NSFW Post Search](https://chatterapi.com/docs/tools/reddit-nsfw-search) | `reddit.nsfw_search` | 2026-10-13 | | [Reddit Comment Search](https://chatterapi.com/docs/tools/reddit-search-comments) | `reddit.search_comments` | 2026-10-07 | | [Reddit Media Search](https://chatterapi.com/docs/tools/reddit-search-media) | `reddit.search_media` | 2026-10-13 | | [Reddit Scraper](https://chatterapi.com/docs/tools/reddit-scrape) | `reddit.scrape` | 2026-10-07 | | [Reddit Comment Exporter](https://chatterapi.com/docs/tools/reddit-thread) | `reddit.thread` | 2026-10-07 | | [Subreddit Finder](https://chatterapi.com/docs/tools/reddit-communities) | `reddit.communities` | 2026-10-07 | | [NSFW Subreddit Finder](https://chatterapi.com/docs/tools/reddit-nsfw-communities) | `reddit.nsfw_communities` | 2026-10-13 | | [Subreddit Stats](https://chatterapi.com/docs/tools/reddit-subreddit) | `reddit.subreddit` | 2026-10-07 | | [Subreddit Posts](https://chatterapi.com/docs/tools/reddit-subreddit-posts) | `reddit.subreddit_posts` | 2026-10-07 | | [Reddit User Lookup](https://chatterapi.com/docs/tools/reddit-user) | `reddit.user` | 2026-10-07 | | [Reddit Account Checker](https://chatterapi.com/docs/tools/reddit-user-status) | `reddit.user_status` | 2026-10-07 | | [Reddit Comment History](https://chatterapi.com/docs/tools/reddit-user-comments) | `reddit.user_comments` | 2026-10-07 | | [Reddit Post History](https://chatterapi.com/docs/tools/reddit-user-posts) | `reddit.user_posts` | 2026-10-13 | | [Reddit User Search](https://chatterapi.com/docs/tools/reddit-user-search) | `reddit.user_search` | 2026-10-13 | | [Reddit Lead Finder](https://chatterapi.com/docs/tools/reddit-leads) | `reddit.leads` | 2026-10-14 | | [X User Lookup](https://chatterapi.com/docs/tools/x-user) | `x.user` | 2026-10-13 | | [X User Search](https://chatterapi.com/docs/tools/x-user-search) | `x.user_search` | 2026-10-14 | | [X Follower Exporter](https://chatterapi.com/docs/tools/x-followers) | `x.followers` | 2026-10-14 | | [X Following Exporter](https://chatterapi.com/docs/tools/x-following) | `x.following` | 2026-10-14 | | [Verified Follower Exporter](https://chatterapi.com/docs/tools/x-verified-followers) | `x.verified_followers` | 2026-10-14 | | [X Timeline Scraper](https://chatterapi.com/docs/tools/x-tweets) | `x.tweets` | 2026-10-14 | | [X Mentions Monitor](https://chatterapi.com/docs/tools/x-mentions) | `x.mentions` | 2026-10-14 | | [X Tweet Search](https://chatterapi.com/docs/tools/x-search) | `x.search` | 2026-10-13 | | [X Tweet Lookup](https://chatterapi.com/docs/tools/x-tweet-detail) | `x.tweet_detail` | 2026-10-14 | | [Tweet Replies Exporter](https://chatterapi.com/docs/tools/x-replies) | `x.replies` | 2026-10-14 | | [Retweeter Exporter](https://chatterapi.com/docs/tools/x-retweeters) | `x.retweeters` | 2026-10-14 | | [X List Members](https://chatterapi.com/docs/tools/x-list-members) | `x.list_members` | 2026-10-14 | | [X Lead Finder](https://chatterapi.com/docs/tools/x-leads) | `x.leads` | 2026-10-13 | | [Send a DM](https://chatterapi.com/docs/tools/x-dm-send) | `x.dm_send` | 2026-10-14T00:00:00.000Z | | [Follow / unfollow](https://chatterapi.com/docs/tools/x-follow) | `x.follow` | 2026-10-14T00:00:00.000Z | | [Like / retweet](https://chatterapi.com/docs/tools/x-like) | `x.like` | 2026-10-14T00:00:00.000Z | | [Post a tweet](https://chatterapi.com/docs/tools/x-tweet) | `x.tweet` | 2026-10-14T00:00:00.000Z | | [Search Everywhere](https://chatterapi.com/docs/tools/everywhere-search) | `everywhere.search` | 2026-10-14 | | [Lead Finder](https://chatterapi.com/docs/tools/everywhere-leads) | `everywhere.leads` | 2026-10-14 | | [Brand Mentions](https://chatterapi.com/docs/tools/everywhere-mentions) | `everywhere.mentions` | 2026-10-14 | ## MCP Endpoint https://api.chatterapi.com/mcp, streamable HTTP, Bearer key on every request. Tool names are the id with dots replaced by underscores. Results are one compact JSON text item `{ data, page, credits }` plus the same object as structuredContent; business errors are results with isError true. #### Claude Code Where: Run once in your terminal ```bash claude mcp add --transport http chatterapi https://api.chatterapi.com/mcp \ --header "Authorization: Bearer $CHATTERAPI_KEY" ``` Set CHATTERAPI_KEY in your shell first, or paste the key in place of $CHATTERAPI_KEY. Check: Run claude mcp list. chatterapi shows as connected. Then ask Claude to search Reddit for something. Format checked 2026-10-14: https://code.claude.com/docs/en/mcp #### Claude Desktop Where: Settings, Developer, Edit Config (claude_desktop_config.json) ```json { "mcpServers": { "chatterapi": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.chatterapi.com/mcp", "--header", "Authorization:${AUTH_HEADER}" ], "env": { "AUTH_HEADER": "Bearer YOUR_KEY" } } } } ``` Claude Desktop's config file runs local commands, so this uses the mcp-remote bridge to send the key header. Needs Node 18 or newer. Check: Quit and reopen Claude Desktop. Open the connectors menu under the message box; chatterapi is listed with its tools. Format checked 2026-10-14: https://modelcontextprotocol.io/docs/develop/connect-local-servers #### Cursor Where: ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project) ```json { "mcpServers": { "chatterapi": { "url": "https://api.chatterapi.com/mcp", "headers": { "Authorization": "Bearer ${env:CHATTERAPI_KEY}" } } } } ``` ${env:CHATTERAPI_KEY} reads the key from your environment. You can paste the key there instead. Check: Open Cursor Settings, MCP. The server shows a green dot and its tool count. Format checked 2026-10-14: https://cursor.com/docs/context/mcp #### Windsurf Where: mcp_config.json (Cascade, MCP servers, View raw config) ```json { "mcpServers": { "chatterapi": { "serverUrl": "https://api.chatterapi.com/mcp", "headers": { "Authorization": "Bearer YOUR_KEY" } } } } ``` Older installs keep the file at ~/.codeium/windsurf/mcp_config.json; current docs put it at ~/.config/devin/mcp_config.json. Check: In Cascade, open the MCP servers panel and press refresh. The tools appear under the server name. Format checked 2026-10-14: https://docs.devin.ai/desktop/cascade/mcp #### Codex Where: ~/.codex/config.toml ```toml [mcp_servers.chatterapi] url = "https://api.chatterapi.com/mcp" bearer_token_env_var = "CHATTERAPI_KEY" ``` Codex reads the key from the CHATTERAPI_KEY environment variable. Check: Run codex mcp list. chatterapi is listed. Format checked 2026-10-14: https://learn.chatgpt.com/docs/extend/mcp?surface=cli #### VS Code Where: .vscode/mcp.json, or MCP: Open User Configuration ```json { "inputs": [ { "type": "promptString", "id": "chatterapi-key", "description": "ChatterAPI API key", "password": true } ], "servers": { "chatterapi": { "type": "http", "url": "https://api.chatterapi.com/mcp", "headers": { "Authorization": "Bearer ${input:chatterapi-key}" } } } } ``` Check: Run MCP: List Servers from the Command Palette. VS Code asks for the key the first time the server starts. Format checked 2026-10-14: https://code.visualstudio.com/docs/agents/reference/mcp-configuration ## Tool reference ### reddit.search: Reddit Post Search GET /v1/reddit/search · MCP name `reddit_search` · 1 credit Search Reddit posts by keyword across all of Reddit or inside one subreddit. Returns posts with title, body, author, subreddit, score, comment count and URL, newest data within minutes. Costs 1 credit per page of up to 25 posts. Tip: Reddit operators work inside q, e.g. "exact phrase", OR, NOT, author:name. Parameters: - `q` (query, string, required): Search text. Reddit operators allowed. - `subreddit` (query, string): Limit to one subreddit, e.g. SaaS. - `sort` (query, enum, default relevance, one of relevance|new|hot|top|comments): Result order. - `time` (query, enum, default all, one of hour|day|week|month|year|all): Time window. - `nsfw` (query, boolean,string): Include adult posts. true needs the 18+ setting and is billed as reddit.nsfw_search. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditPost[]`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json [ { "id": "1wdihhj", "fullname": "t3_1wdihhj", "title": "What CRM should a small business use?", "body": "We’re a small B2B business with 6 people and sales is still pretty founder led, but revenue has grown enough that keeping leads, follow ups and customer conversations spread across spreadsheets and inboxes is starting to fall apart. I’m trying to figure out what the best CRM for a small business looks like when you need something the whole team can use without spending weeks setting it up. \n \nI keep finding everything from really basic small business CRM tools to newer AI native CRM platforms, and I’m more interested in something that can take some of the sales work off the team rather than just becoming another database we have to maintain. Main thing is finding a CRM we can grow into without needing a dedicated ops person just to keep it running.", "author": "NotedWhisky", "subreddit": "CRM", "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "externalUrl": null, "score": 51, "numComments": 186, "upvoteRatio": null, "createdAt": "2026-09-11T14:52:16.000Z", "nsfw": false, "locked": null, "media": null }, { "id": "1vmy4xb", "fullname": "t3_1vmy4xb", "title": "If You Had to Pick the Best CRM for Small Business Today, What Would It Be?", "body": "I've spent the last few days reading reviews and watching videos, and somehow I'm even more undecided than when I started.\n\nEvery CRM looks amazing on its website, but that doesn't tell you what it's like after you've been using it for six months.\n\nI'm more interested in hearing from people who rely on one every day. Which CRM are you using, and what keeps you from switching? Is there anything about it that drives you crazy, or do you feel like it's been worth every dollar?\n\nMy main goal is to stay on top of leads, keep follow-ups organized, and automate the routine work without ending up with a system that's harder to manage than the business itself.\n\nI'd appreciate hearing some live experiences. If you've found a CRM you'd choose again, I'd love to know which one and why.", "author": "Living_Dependent242", "subreddit": "CRMSoftware", "permalink": "/r/CRMSoftware/comments/1vmy4xb/if_you_had_to_pick_the_best_crm_for_small/", "url": "https://www.reddit.com/r/CRMSoftware/comments/1vmy4xb/if_you_had_to_pick_the_best_crm_for_small/", "externalUrl": null, "score": 10, "numComments": 56, "upvoteRatio": null, "createdAt": "2026-08-13T02:25:31.000Z", "nsfw": false, "locked": null, "media": null } ] ``` ### reddit.nsfw_search: Reddit NSFW Post Search GET /v1/reddit/nsfw/search · MCP name `reddit_nsfw_search` · 2 credits · requires 18+ opt-in Search Reddit posts including adult (NSFW) content. Only works when the account owner has turned on 18+ access in the dashboard; otherwise it returns scope_denied. Returns the same post objects as reddit.search. Costs 2 credits per page. Tip: set nsfwOnly=true to drop safe-for-work posts from the results. Parameters: - `q` (query, string, required): Search text. Reddit operators allowed. - `subreddit` (query, string): Limit to one subreddit. - `sort` (query, enum, default relevance, one of relevance|new|hot|top|comments): Result order. - `time` (query, enum, default all, one of hour|day|week|month|year|all): Time window. - `nsfwOnly` (query, boolean,string): Return only posts marked NSFW. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditPost[]`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "id": "1x576li", "fullname": "t3_1x576li", "title": "When does editing a photograph stop being photography?", "body": "I've been thinking about how much of a photograph is reality and how much is the photographer's interpretation.\n\nExposure, contrast, color grading, cropping, black and white conversion — all of these can completely change how a scene feels without changing what was actually in front of the camera.\n\nBut where do we draw the line?\n\nIs a heavily edited landscape still an honest photograph if it captures the emotion the photographer experienced? Or should a photograph preserve the scene as faithfully as possible?\n\nI'd be interested to hear how other photographers approach this, especially when editing becomes part of their creative process.", "author": "Pure-Positive3607", "subreddit": "AskPhotography", "permalink": "/r/AskPhotography/comments/1x576li/when_does_editing_a_photograph_stop_being/", "url": "https://www.reddit.com/r/AskPhotography/comments/1x576li/when_does_editing_a_photograph_stop_being/", "externalUrl": null, "score": 0, "numComments": 4, "upvoteRatio": 0.5, "createdAt": "2026-10-13T20:04:04.000Z", "nsfw": false, "locked": false, "media": null }, { "id": "1x5760e", "fullname": "t3_1x5760e", "title": "Natural light fungi", "body": "Decided to leave the flash and diffuser at home today, and found some cool fungi. Natural light is definitely a whole different ball game but I had loads of fun. \nI'm new to photography so any advice/feedback on editing or composition is welcome :) Cheers!", "author": "crymax", "subreddit": "macrophotography", "permalink": "/r/macrophotography/comments/1x5760e/natural_light_fungi/", "url": "https://www.reddit.com/r/macrophotography/comments/1x5760e/natural_light_fungi/", "externalUrl": "https://www.reddit.com/gallery/1x5760e", "score": 1, "numComments": 0, "upvoteRatio": 1, "createdAt": "2026-10-13T20:03:24.000Z", "nsfw": false, "locked": false, "media": { "type": "gallery", "urls": [ "https://preview.redd.it/z2w7jizcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=09998e5c6994af9a23f290f1216b24640d301e0d", "https://preview.redd.it/0s576jzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=d90d5fed5663611b405a8507341696a05aaf0acc", "https://preview.redd.it/otldkfzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=d38059057dafa7c0aae384195ff4306dd43b9ebf", "https://preview.redd.it/vcv8pgzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=813df5d6e9527abc7b83a29c2be6e805d054290c", "https://preview.redd.it/kzw33gzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=1e3e3d4ad187626871335fe9e65d708958bb410f", "https://preview.redd.it/8t8vikzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=5b45317aca89a00ceb6e92a0575a7bb97a071b7b", "https://preview.redd.it/jtju9hzcjavh1.jpg?width=2048&format=pjpg&auto=webp&s=5aa5ea65e09e2285c96858c1a60a393c57f1e435", "https://preview.redd.it/nkr14a0djavh1.jpg?width=2048&format=pjpg&auto=webp&s=3b675aaf7e79580a56b3210329489d36821db348" ] } } ] ``` ### reddit.search_comments: Reddit Comment Search GET /v1/reddit/comments/search · MCP name `reddit_search_comments` · 2 credits Search Reddit comments by keyword, the place where people actually recommend and complain about tools. Returns comment text, author, score, subreddit, the parent post title and a link. Costs 2 credits per page. Tip: comments have no time filter upstream, so sort=new and stop paging once results get older than you need. Parameters: - `q` (query, string, required): Search text. Reddit operators allowed. - `sort` (query, enum, default relevance, one of relevance|new|top): Result order. Comments have no time filter, so use new to monitor. - `author` (query, string): Only comments by this username. - `nsfw` (query, boolean,string): Include comments from adult communities. true needs the 18+ setting. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditComment[]`. Fields: `id` string, `fullname` string, `parentId` string or null, `postId` string or null, `postTitle` string or null, `author` string or null, `body` string, `bodyTruncated` boolean, `score` number or null, `subreddit` string or null, `permalink` string or null, `url` string or null, `createdAt` string. Example response data (recorded 2026-10-07, first 2 items): ```json [ { "id": "j01f68f", "fullname": "t1_j01f68f", "parentId": null, "postId": "zk2soo", "postTitle": "I think quite a lot of people in this subreddit ARE entrepreneurs", "author": "esoemah", "body": "I know the guy already answered your question, but I’d like to offer an alternative that you could consider as well: social listening. Basically, you’d monitor social media for any mentions of keywords relevant to your business, then engage with these people. I’d recommend checking out the following tools for this: F5bot (it’s free, scans entirety of Reddit) MentionFunnel (full disclosure, I built it. It has a free tier and you can filter by specific subreddits and in the future also other platforms such as HN and Twitter) GummySearch (very good for audience research, also has keyword tracking and a free tier iirc)", "bodyTruncated": false, "score": 2, "subreddit": "Entrepreneur", "permalink": "/r/Entrepreneur/comments/zk2soo/i_think_quite_a_lot_of_people_in_this_subreddit/j01f68f/", "url": "https://www.reddit.com/r/Entrepreneur/comments/zk2soo/i_think_quite_a_lot_of_people_in_this_subreddit/j01f68f/", "createdAt": "2022-12-13T11:30:40.000Z" }, { "id": "le642mq", "fullname": "t1_le642mq", "parentId": null, "postId": "1e86dz5", "postTitle": "[NBA] LeBron and Curry in the tunnel following the win: Lebron - \"To be honest I like those ones more than the blowouts...I like being tested baby.\" Curry - \"Put the closer on.\"", "author": "EyePlay", "body": "The sub is just bigger and Silver has turned the NBA into the social media consumed sport. Unless you want to talk hoops on twitter, reddit has become the main NBA hub over the last ten years. People who consume the NBA primarily through social media (including this subreddit) are a lot different than people who watch games and then are looking for a place of discussion. And there is a difference between the two. I became active later than you guys. Think I more or less stopped using RealGM and ISH in 2016 because the player only fans + alt accounts was making things unbearable. And I remember the threads on r/nba then on how it was consistently near the top of reddit in growth. Like in 2013 r/nba had 98,103 members. Now we have 12,159,356 members. In 2016, around the time I joined, r/nba was 99th in total members and under 2m. Can't figure out the exact as that data is, in fact, not beautiful. According to this r/nba is 10th in member growth just in this past year. 4.2m+ more members. eta ^ got automodded because my reddit links were np and idk wtf that means so I'm just not going to link them. Believe me or google it yourself lol. Basically: way bigger community (and it's a HUGE community now) + about a decade worth of results on how the NBA has decided they want to be watched and here we are. Not that anyone asked for my opinion, but if you can't tell I think what the NBA has decided to do has created worse fans, while also way more fans than they would have alternatively so I don't blame them. It worked, I guess.", "bodyTruncated": false, "score": 6, "subreddit": "nba", "permalink": "/r/nba/comments/1e86dz5/nba_lebron_and_curry_in_the_tunnel_following_the/le642mq/", "url": "https://www.reddit.com/r/nba/comments/1e86dz5/nba_lebron_and_curry_in_the_tunnel_following_the/le642mq/", "createdAt": "2024-07-21T02:10:00.000Z" } ] ``` ### reddit.search_media: Reddit Media Search GET /v1/reddit/media/search · MCP name `reddit_search_media` · 2 credits Find Reddit image, video and gallery posts by keyword. Returns posts with a media object holding direct image or video URLs. Costs 2 credits per page. Tip: set kind=image, video or gallery to narrow results; the body field is empty for media results. Parameters: - `q` (query, string, required): Search text. Reddit operators allowed. - `kind` (query, enum, default all, one of image|video|gallery|all): Media type to return. - `sort` (query, enum, default relevance, one of relevance|new|hot|top|comments): Result order. - `time` (query, enum, default all, one of hour|day|week|month|year|all): Time window. - `nsfw` (query, boolean,string): Include adult media. true needs the 18+ setting. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditPost[]`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "id": "ohisdo", "fullname": "t3_ohisdo", "title": "I made a time, habit and goal tracker web app that displays as a flexible dashboard. My first Vue 3 serverless SaaS.", "body": "", "author": "msign", "subreddit": "webdev", "permalink": "/r/webdev/comments/ohisdo/i_made_a_time_habit_and_goal_tracker_web_app_that/", "url": "https://www.reddit.com/r/webdev/comments/ohisdo/i_made_a_time_habit_and_goal_tracker_web_app_that/", "externalUrl": null, "score": 1810, "numComments": 177, "upvoteRatio": null, "createdAt": "2021-07-10T13:33:49.000Z", "nsfw": false, "locked": null, "media": { "type": "video", "urls": [ "https://v.redd.it/54dpscm51ea71/DASH_720.mp4?source=fallback" ] } }, { "id": "1wlokpk", "fullname": "t3_1wlokpk", "title": "This belongs here", "body": "", "author": "leisurechef", "subreddit": "enshittification", "permalink": "/r/enshittification/comments/1wlokpk/this_belongs_here/", "url": "https://www.reddit.com/r/enshittification/comments/1wlokpk/this_belongs_here/", "externalUrl": null, "score": 6279, "numComments": 136, "upvoteRatio": null, "createdAt": "2026-09-20T18:22:14.000Z", "nsfw": false, "locked": null, "media": { "type": "image", "urls": [ "https://i.redd.it/hm0owv5iwpqh1.jpeg" ] } } ] ``` ### reddit.scrape: Reddit Scraper GET /v1/reddit/posts/{id} · MCP name `reddit_scrape` · 1 credit Fetch one Reddit post by id or URL, with full body text, score, comment count, upvote ratio, flags and media. Costs 1 credit. Tip: to get the comments too, call reddit.thread instead (it includes the post). Parameters: - `id` (path, string, required): Post id (1wdihhj), t3_ id, or any reddit.com / redd.it post URL. Output: `RedditPost`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json { "id": "1wdihhj", "fullname": "t3_1wdihhj", "title": "What CRM should a small business use?", "body": "We’re a small B2B business with 6 people and sales is still pretty founder led, but revenue has grown enough that keeping leads, follow ups and customer conversations spread across spreadsheets and inboxes is starting to fall apart. I’m trying to figure out what the best CRM for a small business looks like when you need something the whole team can use without spending weeks setting it up. \n \nI keep finding everything from really basic small business CRM tools to newer AI native CRM platforms, and I’m more interested in something that can take some of the sales work off the team rather than just becoming another database we have to maintain. Main thing is finding a CRM we can grow into without needing a dedicated ops person just to keep it running.", "author": "NotedWhisky", "subreddit": "CRM", "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "externalUrl": null, "score": 52, "numComments": 186, "upvoteRatio": 0.96, "createdAt": "2026-09-11T14:52:16.000Z", "nsfw": false, "locked": false, "media": null } ``` ### reddit.thread: Reddit Comment Exporter GET /v1/reddit/threads/{id} · MCP name `reddit_thread` · 3 credits Get a Reddit post together with its comments as a flat list (rebuild the tree with parentId). Returns the post, up to about 100 comments per page, and counts of replies Reddit did not load. Costs 3 credits per page. Tip: no thread API returns every comment on very large threads; compare comments.length with reportedCommentCount. Parameters: - `id` (path, string, required): Post id or post URL. - `cursor` (query, string, 1..2048): Next page of comments. Output: `RedditThread`. Fields: `post` object or null, `comments` object[], `unloadedReplyStubs` number, `reportedCommentCount` number or null. Example response data (recorded 2026-10-07, first 2 items): ```json { "post": { "id": "1wdihhj", "fullname": "t3_1wdihhj", "title": "What CRM should a small business use?", "body": "We’re a small B2B business with 6 people and sales is still pretty founder led, but revenue has grown enough that keeping leads, follow ups and customer conversations spread across spreadsheets and inboxes is starting to fall apart. I’m trying to figure out what the best CRM for a small business looks like when you need something the whole team can use without spending weeks setting it up. \n \nI keep finding everything from really basic small business CRM tools to newer AI native CRM platforms, and I’m more interested in something that can take some of the sales work off the team rather than just becoming another database we have to maintain. Main thing is finding a CRM we can grow into without needing a dedicated ops person just to keep it running.", "author": "NotedWhisky", "subreddit": "CRM", "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "externalUrl": null, "score": 52, "numComments": 186, "upvoteRatio": 0.96, "createdAt": "2026-09-11T14:52:16.000Z", "nsfw": false, "locked": false, "media": null }, "comments": [ { "id": "p97byh3", "fullname": "t1_p97byh3", "parentId": null, "postId": "1wdihhj", "postTitle": null, "author": "New_Dimension_5894", "body": "Since you're a small B2B team I’d seriously consider Monaco as an AI native CRM, especially if the goal is growing revenue without adding a bunch of CRM admin as the pipeline gets bigger. The agents can take ownership of parts of the sales workflow like account research, follow ups and keeping records moving forward, so the CRM is doing more of the work instead of relying on the team to constantly feed it.", "bodyTruncated": false, "score": 8, "subreddit": null, "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/p97byh3/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/p97byh3/", "createdAt": "2026-09-11T18:15:02.000Z" }, { "id": "p9636y0", "fullname": "t1_p9636y0", "parentId": null, "postId": "1wdihhj", "postTitle": null, "author": "OstrichSome3412", "body": "Just a FYI, don’t buy for the company you imagine having in 5 years. Buy for the next 12 or 18 months and make sure exporting your data isn’t painful if you eventually need something heavier.", "bodyTruncated": false, "score": 6, "subreddit": null, "permalink": "/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/p9636y0/", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/p9636y0/", "createdAt": "2026-09-11T15:02:24.000Z" } ], "unloadedReplyStubs": 0, "reportedCommentCount": 186 } ``` ### reddit.communities: Subreddit Finder GET /v1/reddit/subreddits/search · MCP name `reddit_communities` · 2 credits Find subreddits about a topic. Returns each community's name, title, description, subscriber count, creation date and NSFW flag (rules and moderators are not included; call reddit.subreddit for those). Costs 2 credits per page. Tip: search the problem your customer has, not your product name. Parameters: - `q` (query, string, required): Topic to find communities for. - `nsfw` (query, boolean,string): Include adult communities. true is billed as reddit.nsfw_communities and needs the 18+ setting. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `Subreddit[]`. Fields: `name` string, `title` string or null, `description` string or null, `subscribers` number or null, `createdAt` string or null, `nsfw` boolean or null, `url` string, `rules` object[] or null, `moderators` object[] or null, `posting` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json [ { "name": "SaaSMarketing", "title": "SaaSMarketing", "description": "A community dedicated to sharing and discussing all aspects of SaaS marketing, from super tactical stuff all the way up to overarching strategy. \n\nIf you're a SaaS founder and you're making $5K-$500K MRR, consider joining our premium mastermind community StartupSauce.com as well.", "subscribers": 37320, "createdAt": "2021-08-14T09:41:52.000Z", "nsfw": false, "url": "https://www.reddit.com/r/SaaSMarketing/", "rules": null, "moderators": null, "posting": null }, { "name": "B2BSaaS", "title": "B2B SaaS: It's big enough to deserve its own subreddit.", "description": "This subreddit is directed at anyone involved in a B2B SaaS business.\n\nTypical topics include conversions, retention, churn, metrics, analytics, engagement, inbound marketing, distribution channels and so on.\n\nShare advice, growth hacks, links, questions or personal stories that people who are working on B2B SaaS products can relate to.\n\n", "subscribers": 30565, "createdAt": "2014-02-01T19:34:22.000Z", "nsfw": false, "url": "https://www.reddit.com/r/B2BSaaS/", "rules": null, "moderators": null, "posting": null } ] ``` ### reddit.nsfw_communities: NSFW Subreddit Finder GET /v1/reddit/nsfw/subreddits/search · MCP name `reddit_nsfw_communities` · 2 credits · requires 18+ opt-in Find subreddits including adult (NSFW) communities. Requires the account's 18+ setting, otherwise returns scope_denied. Same fields as reddit.communities. Costs 2 credits per page. Tip: set nsfwOnly=true to list only communities flagged NSFW. Parameters: - `q` (query, string, required): Topic to find communities for. - `nsfwOnly` (query, boolean,string): Return only communities flagged NSFW. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `Subreddit[]`. Fields: `name` string, `title` string or null, `description` string or null, `subscribers` number or null, `createdAt` string or null, `nsfw` boolean or null, `url` string, `rules` object[] or null, `moderators` object[] or null, `posting` object or null. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "name": "photography", "title": "Photography", "description": "/r/photography is a place to politely discuss the tools, technique, art and culture of photography and to post topics that would be of interest to other photographers.", "subscribers": 5665551, "createdAt": "2008-01-25T05:32:49.000Z", "nsfw": false, "url": "https://www.reddit.com/r/photography/", "rules": null, "moderators": null, "posting": null }, { "name": "AskPhotography", "title": "Photography community ready to help.", "description": "Whether you're a seasoned professional or just starting out, this subreddit is the perfect place to ask questions, seek advice, and engage in discussions about all things photography. We're here to foster a supportive and knowledgeable community that shares a passion for capturing the world through the lens.\n\nIf you're new to photography or have a burning question, don't hesitate to make a post! Our community is filled with experienced photographers who are eager to help.", "subscribers": 761688, "createdAt": "2011-12-22T18:28:22.000Z", "nsfw": false, "url": "https://www.reddit.com/r/AskPhotography/", "rules": null, "moderators": null, "posting": null } ] ``` ### reddit.subreddit: Subreddit Stats GET /v1/reddit/subreddits/{name} · MCP name `reddit_subreddit` · 2 credits Get one subreddit's profile: title, description, subscriber count, creation date, NSFW flag, full rules, moderators and posting settings (which post types are allowed, whether posting is restricted). Costs 2 credits. Tip: read rules before drafting a post; if rules is null the data came from a fallback source that cannot see them, not because the subreddit has none. Parameters: - `name` (path, string, required): Subreddit name, r/name or URL, e.g. SaaS. Output: `Subreddit`. Fields: `name` string, `title` string or null, `description` string or null, `subscribers` number or null, `createdAt` string or null, `nsfw` boolean or null, `url` string, `rules` object[] or null, `moderators` object[] or null, `posting` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json { "name": "SaaS", "title": "Software as a Service", "description": "Discussions and useful links for SaaS owners, online business owners, and more.", "subscribers": 820451, "createdAt": "2008-07-31T21:06:38.000Z", "nsfw": false, "url": "https://www.reddit.com/r/SaaS/", "rules": [ { "title": "Submission Guidelines", "description": "Follow the Reddit site-wide rules and please treat others with respect, stay on-topic, and avoid non-productive self-promotion.\n\n", "appliesTo": "all" }, { "title": "Posting SaaS Relevant Content Only", "description": "Please keep the discussions oriented around the SaaS ecosystem, tech companies, business, operational or even personal aspects of the tech business world.\n\n- __Strict Focus:__ Content must touch on SaaS-specific topics.\n- __No Generic Business:__ General entrepreneurship or broad news without a SaaS angle will be removed.\n- __Enforcement:__ Irrelevant content will be removed to keep the sub relevant for SaaS professionals. \n- __Violation:__ Repeated infringement warrants a ban", "appliesTo": "all" }, { "title": "No Vendor Spam on posts or comments", "description": "Promotion is allowed occasionally, but accounts focused solely on it will be removed.\n- __Limit:__ Max 1 mention or 3 links can be shared every 60 days\n- __Transparency:__ Must clearly disclose affiliation at the beginning or end of the post or comment \n- __Alts:__ Secondary accounts promoting the same product count toward the limit.\n- __Value:__ Content must provide context and value, \"naked\" links or product descriptions are spam.\n- __Penalty:__ Violation leads to a ban and URL blacklisting.", "appliesTo": "all" }, { "title": "No Low-Effort / Low-Quality Content", "description": "- **Posts and comments must provide actual value:** Content that is spammy, repetitive, or lacks depth will be removed.\n- **Originality is required:** All posts must showcase original human thought, clear context, and meaningful contribution to the SaaS community.\n- **Prohibited content includes (but is not limited to):** AI-generated text (even if you \"made all the effort\" to copy-paste it yourself), unedited prompt dumps, and vague questions that could be answered by a basic search.", "appliesTo": "all" }, { "title": "No selling, soliciting, or fundraising", "description": "This community is for knowledge exchange, not a marketplace, posts or comments focused on selling services, soliciting clients, or asking for donations/funding are not allowed.\n\n- __No Solicitation:__ Do not post or comment to sell services, \"cold DM\" members, or solicit clients.\n- __No Fundraising:__ Asking for donations, crowdfunding, or pitching for VC/Angel investment is prohibited.\n- __No Lead Gen:__ Posts designed purely to gather emails or \"testers\" without community value will be removed", "appliesTo": "all" }, { "title": "AMA / Surveys / Polls require approval", "description": "All research-related posts must be vetted by moderators before being posted.\n- __What's Included:__ Academic surveys, market research, vendor polls, and \"product validation\" forms\n- __How to apply:__ Message the mods via Modmail with a link to your survey and a brief explanation of why it’s valuable to the SaaS community\n- __Excluded:__ \"Validation\" posts that are meant for lead generation or email harvesting will be rejected\n- __Enforcement:__ Polls without \"Mod Approved\" flair will be removed.", "appliesTo": "all" }, { "title": "No obfuscated, shortened or indirect URLs", "description": "All links must point directly to the final resource because indirect URLs are prone to breaking or being hijacked later. Transparency and security are mandatory.\n- __Disguised or obfuscated links:__ Lead to a direct ban for rule evasion\n- __Direct Links Only:__ Use the original, full URL. Do not use URL shorteners or landing page aggregators\n- __No Tracking/Affiliates:__ Clean links only\n- __Enforcement:__ Posts or comments containing shortened or indirect links will be automatically removed\n", "appliesTo": "all" }, { "title": "No Personal Information (Doxing)", "description": "This follows a site-wide rule, strict adherence to Reddit’s Content Policy is required.\n- __Zero Tolerance:__ Do not post real names, emails, phone numbers, or private social media profiles (yours or others).\n- __Screenshots:__ Redact all identifying info from support tickets, emails, or chat logs before posting.\n- __Business vs. Personal:__ Mentioning a company is fine; targeting a specific employee is not.\n- __Penalty:__ Doxing results in an immediate permanent ban and report to Reddit admins.", "appliesTo": "all" }, { "title": "Be excellent to eachother", "description": "We value authenticity. Whether your tone is formal, professional, informal or sarcastic, it’s welcome as long as it’s respectful.\n- __No Toxicity:__ Personal attacks, insults, harassment, or \"flame wars\" are strictly prohibited.\n- __Constructive Criticism:__ Feedback on SaaS projects should be helpful, not destructive.\n- __Hate Speech:__ Any form of discrimination results in an immediate permanent ban.\n- __Enforcement:__ Toxic behavior will lead to removal and bans.", "appliesTo": "all" }, { "title": "No \"I'll review/audit/feedback/test/roast or create something for you\" posts", "description": "Posts or comments offering free reviews, audits, roasts, or feedback on others' products/websites/pitches are prohibited, regardless of price or stated intent.\n- __No self-promotion:__ These posts function as personal or commercial branding and are considered ads.\n- __How to Help:__ We value help in context. If you want to share with the community, do so in existing comment threads.", "appliesTo": "all" }, { "title": "No Promotional or Advertising SaaS", "description": "r/SaaS does not allow promotion, recommendation, launch announcements, feedback requests, recruiting, or user acquisition for SaaS products made for advertising, promotional outreach, lead/opportunity detection, or ad/content generation.\n- __What's Included:__ Tools that generate, suggest, schedule, automate, or coordinate promotional posts, comments, DMs, replies, or campaigns on Reddit or other platforms.\n- __Penalty:__ Violation may result in a permanent ban, tool name and URL blacklisting.", "appliesTo": "all" } ], "moderators": [ { "name": "Dubinko", "since": "2026-04-13T18:27:26.000Z" }, { "name": "ergonet", "since": "2026-04-13T18:27:30.000Z" }, { "name": "bot-bouncer", "since": "2026-04-06T17:50:57.000Z" }, { "name": "FluidIdea", "since": "2026-04-13T20:46:41.000Z" }, { "name": "baganga", "since": "2026-04-13T21:47:14.000Z" }, { "name": "modmail-userinfo", "since": "2026-04-16T10:57:11.000Z" }, { "name": "evasion-guard", "since": "2026-04-16T11:00:20.000Z" }, { "name": "scanslop", "since": "2026-04-17T21:44:59.000Z" }, { "name": "AutoModerator", "since": "2026-04-24T08:36:04.000Z" } ], "posting": { "submissionType": "any", "restrictPosting": true, "linkFlairEnabled": true, "allowImages": true, "allowVideos": true, "allowPolls": false, "allowGalleries": false, "submitText": null } } ``` ### reddit.subreddit_posts: Subreddit Posts GET /v1/reddit/subreddits/{name}/posts · MCP name `reddit_subreddit_posts` · 1 credit List a subreddit's posts by hot, new, top, rising, controversial or best. Returns post objects with score, comment count and link. Costs 1 credit per page. Tip: sort=top with time=week shows what that community rewards; sort=new is the freshest feed. Parameters: - `name` (path, string, required): Subreddit name, r/name or URL, e.g. SaaS. - `sort` (query, enum, default hot, one of hot|new|top|rising|controversial|best): Feed order. - `time` (query, enum, default week, one of hour|day|week|month|year|all): Used when sort is top or controversial. - `nsfw` (query, boolean,string): When false, NSFW posts are removed. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditPost[]`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json [ { "id": "1wwnhbt", "fullname": "t3_1wwnhbt", "title": "I've created Open Source 100% Rust clean-room replacements for 7 of Adobe's apps: Photoshop, Illustrator, Premiere, Lightroom, After Effects, InDesign, and Acrobat Pro. Free, no subscription, and you own the source code", "body": "I've used Opus 5.5 to help me recreate 7 of the top Adobe apps in 100% pure native Rust:\n\n* Photoshop\n* Illustrator\n* Premiere\n* Lightroom\n* Acrobat Pro\n* After Effects\n* InDesign\n\nNo more subscriptions with cancellation fees. These are yours to own forever. You can fork them, build them. Whatever. They are yours to own. They're open source.\n\nIf you're worried this is just some one-off flash in the pan that will die, it isn't:\n\nI'm not just some casual vibe coder. I'm a 15-year industry veteran who has written everything from six-nines payment rails that move billions of dollars of transaction volume a day to advanced robotics and optics automation. I've used Rust extensively for about a decade, and I know how to build and maintain large-scale Rust projects.\n\nThis isn't going to be some orphaned small-team project either. We have a team building popular software for filmmakers, so supporting this is fully funded. Our purpose is serving every artist in the world with the best tools. We are absolutely going to bring these to full parity and squash every bug and feature request. We have a test harness so there won't be regressions.\n\nYou can help us reach parity by helping test the apps. Clone the code. Submit PRs. If you see gaps or want to help redesign pieces, let us know! You can contribute!\n\nLinks to everything - the apps, the code, etc. - are in the comments below.", "author": "ai_art_is_art", "subreddit": "SaaS", "permalink": "/r/SaaS/comments/1wwnhbt/ive_created_open_source_100_rust_cleanroom/", "url": "https://www.reddit.com/r/SaaS/comments/1wwnhbt/ive_created_open_source_100_rust_cleanroom/", "externalUrl": null, "score": 1773, "numComments": 378, "upvoteRatio": 0.9794037940379404, "createdAt": "2026-10-03T13:37:37.000Z", "nsfw": false, "locked": null, "media": null }, { "id": "1wvjgm2", "fullname": "t3_1wvjgm2", "title": "I made $7,802 today", "body": "Pretty stoked on this.\n\nI do B2B cold SMS marketing, not many of us exist.\n\nAsk me anything.\n\nMy Youtube Channel (more info):\n\nhttps://youtube.com/@mrkylebanks", "author": "OkPositive9373", "subreddit": "SaaS", "permalink": "/r/SaaS/comments/1wvjgm2/i_made_7802_today/", "url": "https://www.reddit.com/r/SaaS/comments/1wvjgm2/i_made_7802_today/", "externalUrl": null, "score": 614, "numComments": 276, "upvoteRatio": 0.9456681350954479, "createdAt": "2026-10-02T03:29:02.000Z", "nsfw": false, "locked": null, "media": null } ] ``` ### reddit.user: Reddit User Lookup GET /v1/reddit/users/{name} · MCP name `reddit_user` · up to 2 credits (1 credit, 2 with detail=full) Look up a Reddit account by username: account age, total, post and comment karma, avatar, and when available bio and badges (verified, moderator, employee, premium). Costs 1 credit. Tip: set detail=full to always get bio and badges (2 credits); the default may return them as null. Parameters: - `name` (path, string, required): Reddit username, with or without u/, or a profile URL. 3-20 characters. - `detail` (query, enum, default basic, one of basic|full): full guarantees bio and badges and costs 2 credits. Output: `RedditUser`. Fields: `username` string, `id` string or null, `createdAt` string or null, `karma` object, `bio` string or null, `avatarUrl` string or null, `badges` object or null. Example response data (recorded 2026-10-07, first 2 items): ```json { "username": "spez", "id": "t2_1w72", "createdAt": "2005-06-06T04:00:00.000Z", "karma": { "total": 941002, "post": 184509, "comment": 756493 }, "bio": null, "avatarUrl": "https://styles.redditmedia.com/t5_3k30p/styles/profileIcon_uj015iwx9s7g1.png", "badges": null } ``` ### reddit.user_status: Reddit Account Checker GET /v1/reddit/users/{name}/status · MCP name `reddit_user_status` · 2 credits Check whether a Reddit account is active, suspended, or not visible (deleted, banned or shadowbanned). Returns a state, never an error, for accounts that don't exist. Costs 2 credits. Tip: run it on your own account; not_found_or_banned on an account you can log into means Reddit has shadowbanned it. Parameters: - `name` (path, string, required): Reddit username, with or without u/, or a profile URL. 3-20 characters. Output: `UserStatus`. Fields: `username` string, `state` enum, `exists` boolean or null. Example response data (recorded 2026-10-07, first 2 items): ```json { "username": "spez", "state": "active", "exists": true } ``` ### reddit.user_comments: Reddit Comment History GET /v1/reddit/users/{name}/comments · MCP name `reddit_user_comments` · 2 credits List a Reddit user's recent comments with full text, subreddit, score, the post each one replies to, and a link. Costs 2 credits per page of up to 25. Tip: if bodyTruncated is true the data came from a fallback that only has previews; retry later for full text. Parameters: - `name` (path, string, required): Reddit username, with or without u/, or a profile URL. 3-20 characters. - `sort` (query, enum, default new, one of new|top|controversial): Order of the comment history. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditComment[]`. Fields: `id` string, `fullname` string, `parentId` string or null, `postId` string or null, `postTitle` string or null, `author` string or null, `body` string, `bodyTruncated` boolean, `score` number or null, `subreddit` string or null, `permalink` string or null, `url` string or null, `createdAt` string. Example response data (recorded 2026-10-07, first 2 items): ```json [ { "id": "p1wosm9", "fullname": "t1_p1wosm9", "parentId": "p1wd2fi", "postId": "1vgbkge", "postTitle": "Modernizing Reddit’s infrastructure with you", "author": "spez", "body": "That was the thinking. Otherwise it would be easier to just replicate the UI. ", "bodyTruncated": false, "score": 16, "subreddit": "u_spez", "permalink": "/r/u_spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/p1wosm9/", "url": "https://www.reddit.com/r/u_spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/p1wosm9/", "createdAt": "2026-08-05T18:31:50.000Z" }, { "id": "p1w9sot", "fullname": "t1_p1w9sot", "parentId": "p1w0aok", "postId": "1vgbkge", "postTitle": "Modernizing Reddit’s infrastructure with you", "author": "spez", "body": "If we replace every line of code but the output is the same, is it still old Reddit?", "bodyTruncated": false, "score": 22, "subreddit": "u_spez", "permalink": "/r/u_spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/p1w9sot/", "url": "https://www.reddit.com/r/u_spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/p1w9sot/", "createdAt": "2026-08-05T17:30:18.000Z" } ] ``` ### reddit.user_posts: Reddit Post History GET /v1/reddit/users/{name}/posts · MCP name `reddit_user_posts` · 1 credit List the posts a Reddit user has submitted, newest first by default, with subreddit, score, comment count and link. Costs 1 credit per page. Tip: combine with reddit.user_comments to see where an account is active before you reach out. Parameters: - `name` (path, string, required): Reddit username, with or without u/, or a profile URL. 3-20 characters. - `sort` (query, enum, default new, one of new|top|hot|controversial): Order of the post history. - `nsfw` (query, boolean,string): When false, NSFW posts are removed. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditPost[]`. Fields: `id` string, `fullname` string, `title` string, `body` string, `author` string or null, `subreddit` string, `permalink` string, `url` string, `externalUrl` string or null, `score` number or null, `numComments` number or null, `upvoteRatio` number or null, `createdAt` string, `nsfw` boolean, `locked` boolean or null, `media` object or null. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "id": "1vgbkge", "fullname": "t3_1vgbkge", "title": "Modernizing Reddit’s infrastructure with you", "body": "Hi everyone,\n\nLast May, I shared how we were building Reddit for its [next chapter](https://www.reddit.com/user/spez/comments/1kfciml/reddits_next_chapter_smarter_easier_still_human/). I owe you an update, including a few changes I know some people will have strong opinions about.\n\nWhile we’ve made upgrades to the platform over the last [21 years](https://www.reddit.com/user/spez/comments/1u7hraf/21_years_of_reddit/), we need to continually evolve to meet the rising expectations of everyone—mods, users, developers. Namely, starting and moderating a community should be easier than it is today. New users should be able to easily discover and participate in communities they’re interested in. And we need to make it harder for bad actors to scrape and sell Reddit data.\n\n# Where we’re heading\n\nTo thrive for another 21 years (and hopefully more), we need to rethink some of our legacy systems. None of this is changing today. We’re sharing with you early because we need your input to get it right.\n\nHere’s what’s on the table:\n\n**Old Reddit:** I know I said [last year](https://www.reddit.com/user/spez/comments/1kfciml/reddits_next_chapter_smarter_easier_still_human/) that we wouldn’t be sunsetting Old Reddit (I even made a [meme](https://www.reddit.com/media?url=https%3A%2F%2Fcf.preview.redd.it%2Freddits-next-chapter-smarter-easier-still-human-v0-prh1c0ewzyye1.png%3Fwidth%3D1080%26format%3Dpng%26auto%3Dwebp%26s%3Da7c0c1232475b695897ad9f226f6c4b50f1bef15) about it, which [r/agedlikemilk](https://www.reddit.com/r/agedlikemilk/)), but the reality is we’re getting to that time where we need to make some changes. There are four groups of people who use Old Reddit: OG users ❤️, OG mods ❤️, Admins ❤️, and everyone who spams, scrapes, or does anything bad on Reddit 🖕. In order to protect our platform, business, and users, we will need to do something. Actually, a lot of somethings. We have options: We can limit access, migrate important uses, or rebuild it on a modern tech stack, and I think we’ll probably do all of the above.\n\nI love Old Reddit. It’s the platform I largely built—as a kid, 21 years ago—that somehow turned into the amazing platform and company we have today. We will preserve as much of it as we can. My dream would be to recreate the UI, if not the guts, including the HTML+CSS itself, on a modern foundation so it can live on (note: Between when I wrote this and when I posted it, u/keysersosa made a demo of exactly this approach. Fingers crossed.).\n\nOne thing we can do in the short term to mitigate the bad behavior we see Old Reddit used for is to limit access to logged-in users and mods, and migrate critical bots and mod workflows. This will give us some time to plan the more complex follow-up steps.\n\n**Automod:** This has been one of the most important mod tools. But it’s also hard to learn, hard to maintain, and heavily dependent on brittle keyword matching, regex, and inherited configurations that only a few people on a mod team, if any, understand. We can do better.\n\nWe’re building new systems, including giving mods LLMs and AI-assisted tools to help them tackle their low-hanging (but time-consuming) fruit, so they can spend more time cultivating their community and less time policing. u/Go_JasonWaterfalls will share more in r/modnews today.\n\n**Public API:** Reddit’s public API wasn’t designed for today’s scale, automated abuse, or commercial scraping. We want useful bots, community tools, and good-faith developers to have a clear, well-supported way to build on Reddit. We don’t want bad actors to scrape Reddit indiscriminately, resell its data, or use it without accountability. \n\nTo ensure a safe and secure Reddit, we're working with developers to build exclusively on Reddit's Developer Platform. u/KeyserSosa will share more in r/redditdev today.\n\n**How people find and contribute to communities:** New users should be able to easily find relevant communities, understand their rules and norms, and make useful contributions. Today, new users encounter invisible barriers like account age and karma thresholds, unclear removals, and poor community discovery. \n\nThose safeguards exist for good reasons, including spam, brigading, and ban evasion. Our goal here is to improve Reddit’s systems and moderation tools so communities can rely less on blunt limits like karma and account age, and more on stronger abuse prevention built into the systems they use. This will make it easier for genuine new users to participate and easier for mods to welcome them with confidence.\n\n# How we’ll do this\n\nWe know announcements about APIs and legacy products come with some [baggage](https://www.reddit.com/r/place/comments/159lksc/claim_your_i_was_here_ticket/). “Trust us” isn’t good enough. If we’re asking you to move to something new, it has to be at parity or better in practice, not just in theory. Here are the principles we'll use across this work:\n\n* None of this is changing now or has a set end date\n* We won’t remove major capabilities before there is a credible replacement\n* We’ll work directly with the mods, developers, and communities that depend on these systems\n* We’ll share milestones along the way before any of these changes land\n* We’ll judge success by outcomes: better tools, less abuse, less mod work, and healthier communities\n\n# What we need from you\n\n* **Developers:** If you build or maintain an app, [register it](https://developers.reddit.com/app-registration) and tell us what support would be needed to unblock migration. More on r/redditdev here. [LINK](https://www.reddit.com/r/redditdev/comments/1vgbm9c/our_plans_for_the_future_of_reddits_public_data/)\n* **Mods:** If your community depends on a bot someone else maintains, [tell us that too](https://forms.gle/htmmJ1Rbv7fotxLP6). And if you want to test new tooling, [sign up for the Mod Early Access program](https://survey.alchemer.com/s3/8688309/Reddit-Feedback-Roster). More on r/modnews here. [LINK](https://www.reddit.com/r/modnews/comments/1vgbt2j/whats_next_for_mod_tools/)\n* **Everyone:** If you want to give us feedback as we work on any of the changes we’ve mentioned, sign up [here](https://survey.alchemer.com/s3/8688309/Reddit-Feedback-Roster). \n\nOur motivation behind all these changes is to make Reddit better for our users, mods, and communities who make Reddit what it is, and to limit the impact from those who take advantage of our platform or abuse our users and communities. \n\nWe’re sharing this early so that the people who use these systems can help shape what comes next and ensure these changes make Reddit better for everyone.\n\n\\- u/spez\n\nedit: added links", "author": "spez", "subreddit": "", "permalink": "/user/spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/", "url": "https://www.reddit.com/user/spez/comments/1vgbkge/modernizing_reddits_infrastructure_with_you/", "externalUrl": null, "score": 356, "numComments": 478, "upvoteRatio": 0.8436293436293436, "createdAt": "2026-08-05T16:03:56.000Z", "nsfw": false, "locked": null, "media": null }, { "id": "1u7hraf", "fullname": "t3_1u7hraf", "title": "21 years of Reddit", "body": "Hi everyone,\n\nReddit turns 21 next week. Funny enough, it’s the same age I was when we started it. Save your jokes about r/13or30, I’ve already [heard them](https://i.redd.it/mup6rvwj0o7h1.png).\n\nThat’s a long time in human years and an even longer time in internet years.\n\nWhen a few of us started Reddit back in 2005, the idea was simple: make it easier to find interesting things online. So we built a place where people could share links.\n\nAnd the links became prompts for conversations because people naturally like to talk about stuff. One of the first inside jokes on Reddit was, *\"I didn't read the article but… \\[insert 2000 words on the topic\\]\"* because people are more interested in the conversation than the content itself. \n\n(It’s not only [inside jokes](https://www.reddit.com/r/tifu/comments/2tdbig/tifu_by_enraging_the_parents_of_my_girlfriend_by/), though. Sometimes it’s [heartfelt condolences](https://www.reddit.com/r/AskReddit/comments/5c79n0/comment/d9uf56l/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button).)\n\nAnd what started as a place to share links evolved, for the better, into a place to form communities. What we didn’t realize at the time was that 21 years later, those communities would become one of the last places online where you can still reliably hear from real people on almost any topic imaginable.\n\nThe internet has become more powerful, automated, and optimized for attention. And on social media, everything feels performative: one big stage, one big feed, and someone (or some thing!) fighting for your attention.\n\nBut most people don’t want to perform.\n\nThey want to ask personal questions and get advice from someone who’s been there. They want to compare experiences, learn from others, and find people who care about the same things they do.\n\nReddit works because it’s not one giant conversation. It’s a constellation of communities, each with its own culture, norms, and rules.\n\nOver the last couple of decades, I’ve learned that when people gather around shared interests, they act less like performers and more like neighbors (even if sometimes the [r/neighborsfromhell](https://www.reddit.com/r/neighborsfromhell) kind). When communities set their own rules, they protect what makes those spaces valuable. And when people can speak anonymously, they’re often more honest.\n\nFor a long time, people assumed the future of the internet would be more tied to real-world identity. But one of the things Reddit has shown is that pseudonymity can create safety, honesty, and participation. On Reddit, you can openly talk about the things you care about—or are struggling with—without having your identity be part of the story.\n\nAs AI becomes more pervasive, that kind of human conversation only becomes more important. Real opinions, lived experience, and personal judgment matter more when the rest of the internet is filling up with synthetic content.\n\nI shared in [March](https://www.reddit.com/user/spez/comments/1s3ezrc/humans_welcome_bots_must_wear_name_tags/) how we’re protecting Reddit’s authenticity without sacrificing your anonymity, and we’ll keep building in that direction.\n\nSince then, we’ve continued to defend Reddit against automated/bot/spammy content, including making it[ harder to scrape Reddit at scale](https://www.reddit.com/r/modnews/comments/1tq9vxo/protecting_communities_from_scrapers_and_platform/), creating proactive moderation models that prevent up to 23 million spam views per day, and guarding against vote manipulation by revoking nearly 2 million inauthentic votes per day.\n\nBecause the value of Reddit has never been the interface (unless you’re the [Old Reddit](https://old.reddit.com/) type, I know there are still dozens of you out there). It’s never been the algorithm. And it’s never been polished, sanitized content.\n\nThe value of Reddit is you.\n\nEverything interesting about Reddit has been created by its people: the communities, the comments, the inside jokes, the rare insults, the niche expertise, the support, the debates, the brutal honesty, and the countless times someone took a minute to help a stranger for no reason other than they could.\n\nThat is the human internet that’s worth protecting.\n\nThank you for spending these last 21 years with us. I’m excited to see what the next 21 will hold.\n\n\\- u/spez", "author": "spez", "subreddit": "", "permalink": "/user/spez/comments/1u7hraf/21_years_of_reddit/", "url": "https://www.reddit.com/user/spez/comments/1u7hraf/21_years_of_reddit/", "externalUrl": null, "score": 911, "numComments": 304, "upvoteRatio": 0.9122171945701357, "createdAt": "2026-06-16T16:04:27.000Z", "nsfw": false, "locked": null, "media": null } ] ``` ### reddit.user_search: Reddit User Search GET /v1/reddit/users/search · MCP name `reddit_user_search` · 2 credits Find Reddit accounts by keyword in their name or profile. Returns profiles with karma, age, bio and badges. Costs 2 credits per page. Tip: use it to find a company's or founder's official account before calling reddit.user_posts. Parameters: - `q` (query, string, required): Keyword to match in usernames and profiles. - `nsfw` (query, boolean,string): Include adult accounts. true needs the 18+ setting. - `limit` (query, integer, default 25, 1..100): Max rows to return (1-100). Reddit pages hold about 25 rows; larger values still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `RedditUser[]`. Fields: `username` string, `id` string or null, `createdAt` string or null, `karma` object, `bio` string or null, `avatarUrl` string or null, `badges` object or null. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "username": "hubspot", "id": "t2_7lu6yhqo", "createdAt": "2020-08-07T22:01:06.000Z", "karma": { "total": 8, "post": 8, "comment": 0 }, "bio": null, "avatarUrl": "https://styles.redditmedia.com/t5_2yo33r/styles/profileIcon_ky3b0bmwxwz61.png?width=256&height=256&crop=256:256,smart&s=4077c0fc3317942a8d2af82a4cee13b887d24820", "badges": { "premium": false, "moderator": true, "employee": false, "verified": true } }, { "username": "HubSpotAMA", "id": "t2_eqytq96e", "createdAt": "2021-09-23T17:59:05.000Z", "karma": { "total": 226, "post": 145, "comment": 81 }, "bio": "We're HubSpot, a CRM platform that's both powerful and easy to use. Check us out: https://www.hubspot.com/", "avatarUrl": "https://styles.redditmedia.com/t5_52vydu/styles/profileIcon_2ku9xt7ylap71.png?width=256&height=256&crop=256:256,smart&s=2ca002ebfa95c112bf71e0256e921d5b1d2f8148", "badges": { "premium": false, "moderator": true, "employee": false, "verified": true } } ] ``` ### reddit.leads: Reddit Lead Finder GET /v1/reddit/leads · MCP name `reddit_leads` · 3 credits Find Reddit posts and comments where people ask for a recommendation, compare tools, or complain about a tool in your category. Returns leads ranked by an intent score (0 to 1) with the matched phrases, so you can see why each one was picked. Costs 3 credits per page. Tip: pass competitors to catch people switching away from them. Parameters: - `q` (query, string, required): Your product category or the problem it solves, e.g. crm or cold email. 1-60 characters. - `competitors` (query, string or array): Up to 5 tools people might switch away from, e.g. hubspot,pipedrive. - `exclude` (query, string or array): Up to 10 words that disqualify an item. - `time` (query, enum, default month, one of day|week|month|year): How far back to look. - `minScore` (query, number, default 0.3, 0..1): Minimum intent score from 0 to 1. - `intents` (query, string or array): Which intents to return. Default: all three. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. - `subreddit` (query, string): Limit the Reddit side to one subreddit. Output: `Lead[]`. Fields: `platform` enum, `kind` enum, `id` string, `url` string, `text` string, `author` string or null, `authorUrl` string or null, `community` string or null, `score` number or null, `createdAt` string or null, `intent` enum, `intentScore` number, `matchedTerms` string[]. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "platform": "reddit", "kind": "post", "id": "t3_1x56wgd", "url": "https://www.reddit.com/r/CRMSoftware/comments/1x56wgd/is_there_a_crm_that_flags_when_customers_stop/", "text": "Is there a CRM that flags when customers stop buying certain products?\n\nIs anyone using a CRM that flags when a regular customer stops ordering a particular product?\nFor food distribution, a restaurant might still order every week but stop buying dairy that they used to get regularly. The account stays active, so an alert for customers who haven’t ordered wouldn’t catch it.\nLooking for something that picks this up from purchase history so reps can ask about it on their next visit. What are you using for this?", "author": "PresentHockey9", "authorUrl": "https://www.reddit.com/user/PresentHockey9/", "community": "CRMSoftware", "score": 1, "createdAt": "2026-10-13T19:53:47.000Z", "intent": "asking_for_recommendation", "intentScore": 0.82, "matchedTerms": [ "is there a crm", "looking for" ] }, { "platform": "reddit", "kind": "post", "id": "t3_1x55bb1", "url": "https://www.reddit.com/r/PakEntrepreneursHub/comments/1x55bb1/the_middle_man_your_vision_our_execution/", "text": "🚀 THE MIDDLE MAN — Your Vision. Our Execution.\n\nLooking for a reliable business partner to bring your ideas to life? We’ve got you covered. \nWe provide versatile business and digital solutions, including: \n💳 Merchant Operations & Payment Coordination \n🎯 Lead Generation & Sales Support \n📱 Social Media Marketing & Management \n🌐 Website & Software Development \n🤖 AI Chatbots & Business Automation \n🎨 Graphic Design & Branding \n📊 Data Research & CRM Management \n🛒 E-commerce & Business Operations \n⚙️ Custom Projects & Outsourced Teams \nWhether you need a single service or a dedicated team to manage your projects, we combine human expertise, traditional coding, and AI-powered solutions to deliver customized results. \n🔥 **One Partner. Multiple Solutions. Endless Possibilitie**s. \n📩 **Contact u**s: \n📧 Email: [themiddleman298@gmail.com](mailto:themiddleman298@gmail.com) \n📸 Instagram: @themiddleman298 \n**THE MIDDLE MAN — We Connect the Dots. You Build the Empire.**", "author": "InteractionAnnual182", "authorUrl": "https://www.reddit.com/user/InteractionAnnual182/", "community": "PakEntrepreneursHub", "score": 1, "createdAt": "2026-10-13T18:54:15.000Z", "intent": "asking_for_recommendation", "intentScore": 0.74, "matchedTerms": [ "looking for a", "looking for", "need a" ] } ] ``` ### x.user: X User Lookup GET /v1/x/users/{handle} · MCP name `x_user` · 3 credits Look up an X (Twitter) account by handle: name, bio, follower and following counts, tweet count, verification, whether it accepts DMs, location, website, avatar and join date. Costs 3 credits. Tip: canDm tells you if a cold DM can reach this account before you spend on x.dm_send. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. Output: `XUser`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-13, first 2 items): ```json { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸http://levels.vc\n📸http://PhotoAI.com $86K/m\n🎮http://VibeJam.com $44K/m\n🏡http://InteriorAI.com $23K/m\n👙@X $13K/m\n🌍http://Nomads.com $7K/m\n🏩http://Hotelist.com $5K/m", "followers": 974707, "following": 3276, "tweets": 181450, "verified": false, "blueVerified": true, "canDm": false, "protected": false, "location": "📕My book $5K/m 👉", "url": "https://readMAKE.com", "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_400x400.jpg", "createdAt": "2013-07-08T09:31:59.000Z" } ``` ### x.user_search: X User Search GET /v1/x/users/search · MCP name `x_user_search` · 3 credits Find X accounts by keyword in their name or bio, for example 'founder saas' or 'growth marketer'. Returns profiles with follower counts and DM availability. Costs 3 credits per page of about 20. Tip: X search matches bios loosely; check bio text before treating a result as a fit. Parameters: - `q` (query, string, required): Keywords to match in names and bios. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "187133114", "handle": "crmfinder", "name": "CRM-Finder Schweiz", "bio": "Unabhängige Wissens- und Informationsplattform für den Schweizer CRM- und ERP-Markt. \nhttps://t.co/EkvkD7iLNw", "followers": 923, "following": 1845, "tweets": 1665, "verified": false, "blueVerified": false, "canDm": false, "protected": null, "location": "Switzerland, 8050 Zurich", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/872769982052093952/ntk1iR0W_400x400.jpg", "createdAt": "2010-09-05T10:38:19.000Z" }, { "id": "850020787423592448", "handle": "FOUNDRY2021", "name": "FOUNDRY - The World's Fastest, Most Intuitive CRM", "bio": null, "followers": 113, "following": 695, "tweets": 396, "verified": false, "blueVerified": false, "canDm": false, "protected": null, "location": "Los Angeles, CA ", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1400604081996013572/BL3Lkelt_400x400.jpg", "createdAt": "2017-04-06T16:22:03.000Z" } ] ``` ### x.followers: X Follower Exporter GET /v1/x/users/{handle}/followers · MCP name `x_followers` · 3 credits per page (20 rows by default) Export the followers of any public X account, page by page, with each follower's bio, follower count and whether they accept DMs. Costs 3 credits per page of about 20 followers. Tip: filter by canDm and followers to build an outreach list; large accounts take many pages, so set a page budget. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "197785542", "handle": "dannypostma", "name": "Danny Postma", "bio": "Founder of HeadshotPro, a Singapore-based AI photography company.", "followers": 187346, "following": 739, "tweets": 29627, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": null, "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1587046912490090496/kuBUqNkb_normal.jpg", "createdAt": "2010-10-02T13:11:54.000Z" }, { "id": "24179991", "handle": "dvassallo", "name": "Daniel Vassallo", "bio": "🚀 https://t.co/X5QMm3wlHe \n🏭 https://t.co/ZvHZp55zso \n🕹️ https://t.co/vHWIhHxTv6", "followers": 205470, "following": 2449, "tweets": 55084, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "WA, USA", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2008284492210085888/-aEKwo9U_normal.jpg", "createdAt": "2009-03-13T14:34:10.000Z" } ] ``` ### x.following: X Following Exporter GET /v1/x/users/{handle}/following · MCP name `x_following` · 3 credits per page (20 rows by default) List the accounts an X user follows, page by page, with bios, follower counts and DM availability. Costs 3 credits per page of about 20. Tip: following lists reveal the tools and people an account pays attention to, useful for competitor research. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "197785542", "handle": "dannypostma", "name": "Danny Postma", "bio": "Founder of HeadshotPro, a Singapore-based AI photography company.", "followers": 187346, "following": 739, "tweets": 29627, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": null, "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1587046912490090496/kuBUqNkb_normal.jpg", "createdAt": "2010-10-02T13:11:54.000Z" }, { "id": "24179991", "handle": "dvassallo", "name": "Daniel Vassallo", "bio": "🚀 https://t.co/X5QMm3wlHe \n🏭 https://t.co/ZvHZp55zso \n🕹️ https://t.co/vHWIhHxTv6", "followers": 205470, "following": 2449, "tweets": 55084, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "WA, USA", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2008284492210085888/-aEKwo9U_normal.jpg", "createdAt": "2009-03-13T14:34:10.000Z" } ] ``` ### x.verified_followers: Verified Follower Exporter GET /v1/x/users/{handle}/verified-followers · MCP name `x_verified_followers` · 4 credits per 20 rows Export only the verified (blue check) followers of an X account, page by page. Same fields as x.followers. Costs 4 credits per page of about 20. Tip: verified followers skew toward active, paying users, so they make a higher-intent outreach list. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "1087991852446425088", "handle": "nrb_io", "name": "norbert", "bio": "Shipping a SaaS a year from my indie software studio. Now: Titleroom, one record per book for indie authors. Also: https://t.co/Mme2yZF0Qv, https://t.co/y35c5REHiS. Notes on building.", "followers": 71, "following": 180, "tweets": 778, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": null, "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1928521185471389696/q0SJjNEO_normal.jpg", "createdAt": "2019-01-23T08:34:06.000Z" }, { "id": "14185891", "handle": "marknoble", "name": "Mark Noble //.//", "bio": "Civil Libertarian. Tech Preenactor. Agorist Anarcho-Futurist. Hurling first-principles insights to dismantle the State racket. 2011's #2 Libertarian vote-getter", "followers": 2159, "following": 1420, "tweets": 136968, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": "Columbus, OH", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1058215084672016384/LSCvXzyx_normal.jpg", "createdAt": "2008-03-20T18:22:28.000Z" } ] ``` ### x.tweets: X Timeline Scraper GET /v1/x/users/{handle}/tweets · MCP name `x_tweets` · 3 credits Get an X account's recent tweets, newest first, with likes, retweets, replies, views and media. Costs 3 credits per page of about 20 tweets. Tip: set includeRetweets=false to see only what the account wrote itself. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. - `includeRetweets` (query, boolean,string): When false, only tweets the account wrote itself. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XTweet[]`. Fields: `id` string, `text` string, `url` string, `createdAt` string or null, `lang` string or null, `likes` number or null, `retweets` number or null, `replies` number or null, `quotes` number or null, `views` number or null, `bookmarks` number or null, `isReply` boolean, `inReplyToId` string or null, `conversationId` string or null, `isRetweet` boolean, `quotedTweetId` string or null, `author` object, `media` object[]. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "2110066474513793361", "text": "✨ 200,000+ users on my computer nostalgia project @pieter\n\nSometimes it takes a few years for things to take off, in this case about 2 years!\n\nKeep creating 💖 https://t.co/Na0LXnwAjW", "url": "https://x.com/levelsio/status/2110066474513793361", "createdAt": "2026-10-13T17:53:45.000Z", "lang": "en", "likes": 129, "retweets": 4, "replies": 37, "quotes": 0, "views": 15475, "bookmarks": 9, "isReply": false, "inReplyToId": null, "conversationId": "2110066474513793361", "isRetweet": false, "quotedTweetId": "2108957488410161442", "author": { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸https://t.co/sQ0aiU7v02\n📸https://t.co/lAyoqmSBRX $86K/m\n🎮https://t.co/tF49atJ396 $44K/m\n🏡https://t.co/1oqUgfD6CZ $23K/m\n👙@X $13K/m\n🌍https://t.co/UXK5AFqCaQ $7K/m\n🏩https://t.co/4p4dzTDVN6 $5K/m", "followers": 974778, "following": 3275, "tweets": null, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "📕My book $5K/m 👉", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_normal.jpg", "createdAt": "2013-07-08T09:31:59.000Z" }, "media": [ { "type": "photo", "url": "https://pbs.twimg.com/media/HUh2NAYWQAAP7ZK.jpg" } ] }, { "id": "2110030627336540370", "text": "This is also interesting to think about\n\nRight now it still takes, let's say, 30 minutes to a few hours to build something usable with AI and then you still polish for days/weeks/months\n\nIf we assume this will keep getting faster, at some point an AI model will take a second or less to generate the whole thing\n\nImagine a future where you can create anything in less than second?\n\nHow will that change what we choose to create? Will humans even create, or will it all be AI agents coming up with ideas themselves?\n\nThe next constraints then become physical? If AI can generate for example hardware plans so fast, it will still take 30 minutes to 3d print that, so maybe the next speed and intelligence optimizations will then start happening in hardware, being able to generate an idea and producing a physical object in a minute or so\n\nI have no idea but very interesting, it's kinda like those real-time video models we saw last month (like my Infinite Slop project), how will content change if you can generate so fast?\n\n🤔", "url": "https://x.com/levelsio/status/2110030627336540370", "createdAt": "2026-10-13T15:31:18.000Z", "lang": "en", "likes": 324, "retweets": 11, "replies": 112, "quotes": 10, "views": 38339, "bookmarks": 118, "isReply": false, "inReplyToId": null, "conversationId": "2110030627336540370", "isRetweet": false, "quotedTweetId": null, "author": { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸https://t.co/sQ0aiU7v02\n📸https://t.co/lAyoqmSBRX $86K/m\n🎮https://t.co/tF49atJ396 $44K/m\n🏡https://t.co/1oqUgfD6CZ $23K/m\n👙@X $13K/m\n🌍https://t.co/UXK5AFqCaQ $7K/m\n🏩https://t.co/4p4dzTDVN6 $5K/m", "followers": 974778, "following": 3275, "tweets": null, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "📕My book $5K/m 👉", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_normal.jpg", "createdAt": "2013-07-08T09:31:59.000Z" }, "media": [] } ] ``` ### x.mentions: X Mentions Monitor GET /v1/x/users/{handle}/mentions · MCP name `x_mentions` · 3 credits Get recent tweets that mention an X handle (@name), newest first, with author profiles and engagement. Costs 3 credits per page of about 20. Tip: to catch brand mentions without the @, use x.search with the brand name or everywhere.mentions. Parameters: - `handle` (path, string, required): Handle with or without @, or a profile URL. 1-15 characters. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XTweet[]`. Fields: `id` string, `text` string, `url` string, `createdAt` string or null, `lang` string or null, `likes` number or null, `retweets` number or null, `replies` number or null, `quotes` number or null, `views` number or null, `bookmarks` number or null, `isReply` boolean, `inReplyToId` string or null, `conversationId` string or null, `isRetweet` boolean, `quotedTweetId` string or null, `author` object, `media` object[]. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "2110099793976451174", "text": "@levelsio Nothing like firing up ~ExCuRsIoN~ and that 50 cent startup track comes “If I can’t do it, homie it can’t be done”", "url": "https://x.com/vamatt/status/2110099793976451174", "createdAt": "2026-10-13T20:06:09.000Z", "lang": "en", "likes": 0, "retweets": 0, "replies": 0, "quotes": 0, "views": 1, "bookmarks": 0, "isReply": true, "inReplyToId": "2109950426590417326", "conversationId": "2109950426590417326", "isRetweet": false, "quotedTweetId": null, "author": { "id": "2181300669", "handle": "vamatt", "name": "Matthew Man e/acc ⏩", "bio": "Time is our most valuable asset. Don't underutilize the time you have. Love more, build always. Working towards AI-powered Abundance in the Far North", "followers": 190, "following": 836, "tweets": null, "verified": false, "blueVerified": false, "canDm": true, "protected": null, "location": "Tallinn, Estonia ", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/378800000740699003/e8585c55dc8b53c9c50302492b48ee4f_normal.jpeg", "createdAt": "2013-11-14T23:05:22.000Z" }, "media": [] }, { "id": "2110099175383916754", "text": "@levelsio Close to dead for the notebook maybe. Not for the baker who still sends quotes as a photo.", "url": "https://x.com/Lionheartbvs/status/2110099175383916754", "createdAt": "2026-10-13T20:03:41.000Z", "lang": "en", "likes": 0, "retweets": 0, "replies": 0, "quotes": 0, "views": 2, "bookmarks": 0, "isReply": true, "inReplyToId": "2109944044893966447", "conversationId": "2109944044893966447", "isRetweet": false, "quotedTweetId": null, "author": { "id": "1758922050985402368", "handle": "Lionheartbvs", "name": "Barry | business Automations", "bio": "I automate your business #SEO #Feyenoord #TRWstudent #Bikelife", "followers": 224, "following": 170, "tweets": null, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": "Rotterdam, Nederland", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2013346515054387200/OiK8tl5E_normal.jpg", "createdAt": "2024-02-17T18:31:32.000Z" }, "media": [] } ] ``` ### x.search: X Tweet Search GET /v1/x/tweets/search · MCP name `x_search` · 3 credits Search tweets by keyword with full X search operators (from:, to:, "exact phrase", OR, -word, min_faves:, filter:links). Returns tweets with author profiles and engagement. Costs 3 credits per page of about 20. Tip: sort=latest for monitoring, sort=top for the most-engaged tweets. Parameters: - `q` (query, string, required): Keyword(s) and X operators. - `sort` (query, enum, default latest, one of latest|top): latest for monitoring, top for the most engaged tweets. - `since` (query, string): Earliest date, YYYY-MM-DD. - `until` (query, string): Latest date, YYYY-MM-DD. - `lang` (query, string): Tweet language, 2 letters. - `includeRetweets` (query, boolean,string): Include retweets. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XTweet[]`. Fields: `id` string, `text` string, `url` string, `createdAt` string or null, `lang` string or null, `likes` number or null, `retweets` number or null, `replies` number or null, `quotes` number or null, `views` number or null, `bookmarks` number or null, `isReply` boolean, `inReplyToId` string or null, `conversationId` string or null, `isRetweet` boolean, `quotedTweetId` string or null, `author` object, `media` object[]. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "id": "2099495333231288346", "text": "meta ads: how important is the “connect to your crm” recommendation?\n\nthis essentially will tell meta if the lead was good or bad (ie converted), any experience how how is actually helps?\n\nthis particular client doesn’t have a crm, yeah, I can build a page for him to update, but is it worth the effort?", "url": "https://x.com/HesomParhizkar/status/2099495333231288346", "createdAt": "2026-09-14T13:47:48.000Z", "lang": "en", "likes": 2, "retweets": 0, "replies": 2, "quotes": 0, "views": 138, "bookmarks": 0, "isReply": false, "inReplyToId": null, "conversationId": "2099495333231288346", "isRetweet": false, "quotedTweetId": null, "author": { "id": "35363135", "handle": "HesomParhizkar", "name": "Hesom", "bio": "Startup Founder/Executive, investor, nba fan", "followers": 584, "following": 2010, "tweets": null, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": "Marietta, GA", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1871033188081942528/comvGkRg_normal.jpg", "createdAt": "2009-04-26T01:18:19.000Z" }, "media": [] }, { "id": "2040879100261458222", "text": "Here's a live audit on what happens when buyers ask AI for a CRM recommendation. You can't miss it...", "url": "https://x.com/apoorvshrm/status/2040879100261458222", "createdAt": "2026-04-05T19:47:49.000Z", "lang": "en", "likes": 4, "retweets": 0, "replies": 1, "quotes": 0, "views": 145, "bookmarks": 0, "isReply": false, "inReplyToId": null, "conversationId": "2040879100261458222", "isRetweet": false, "quotedTweetId": "2040878095415304308", "author": { "id": "1459048370371137542", "handle": "apoorvshrm", "name": "Apoorv Sharma | SEO and GEO for B2B SaaS", "bio": "SEO + GEO for B2B SaaS. I help SaaS brands rank on Google and get recommended by Claude, Gemini, and Google AI.\nCo-Founder, DerivateX", "followers": 2316, "following": 519, "tweets": null, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": "Bengaluru", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2069124654112149504/AWTErF4d_normal.jpg", "createdAt": "2021-11-12T06:40:23.000Z" }, "media": [] } ] ``` ### x.tweet_detail: X Tweet Lookup GET /v1/x/tweets/{id} · MCP name `x_tweet_detail` · 3 credits Fetch one tweet by id or URL with its full text, author profile, engagement counts, media and reply context. Costs 3 credits. Tip: use conversationId with x.replies to read the whole discussion. Parameters: - `id` (path, string, required): Tweet id or tweet URL. Output: `XTweet`. Fields: `id` string, `text` string, `url` string, `createdAt` string or null, `lang` string or null, `likes` number or null, `retweets` number or null, `replies` number or null, `quotes` number or null, `views` number or null, `bookmarks` number or null, `isReply` boolean, `inReplyToId` string or null, `conversationId` string or null, `isRetweet` boolean, `quotedTweetId` string or null, `author` object, `media` object[]. Example response data (recorded 2026-10-14, first 2 items): ```json { "id": "2099495333231288346", "text": "meta ads: how important is the “connect to your crm” recommendation?\n\nthis essentially will tell meta if the lead was good or bad (ie converted), any experience how how is actually helps?\n\nthis particular client doesn’t have a crm, yeah, I can build a page for him to update, but is it worth the effort?", "url": "https://x.com/HesomParhizkar/status/2099495333231288346", "createdAt": "2026-09-14T13:47:48.000Z", "lang": "en", "likes": 2, "retweets": 0, "replies": 2, "quotes": 0, "views": 139, "bookmarks": 0, "isReply": false, "inReplyToId": null, "conversationId": "2099495333231288346", "isRetweet": false, "quotedTweetId": null, "author": { "id": "35363135", "handle": "HesomParhizkar", "name": "Hesom", "bio": "Startup Founder/Executive, investor, nba fan", "followers": 584, "following": 2010, "tweets": null, "verified": false, "blueVerified": true, "canDm": true, "protected": null, "location": "Marietta, GA", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/1871033188081942528/comvGkRg_normal.jpg", "createdAt": "2009-04-26T01:18:19.000Z" }, "media": [] } ``` ### x.replies: Tweet Replies Exporter GET /v1/x/tweets/{id}/replies · MCP name `x_replies` · 3 credits List the replies to a tweet, page by page, with each reply's text, author profile and engagement. Costs 3 credits per page of about 20. Tip: people replying to a competitor's launch tweet are warm leads; check author.canDm. Parameters: - `id` (path, string, required): Tweet id or tweet URL. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XTweet[]`. Fields: `id` string, `text` string, `url` string, `createdAt` string or null, `lang` string or null, `likes` number or null, `retweets` number or null, `replies` number or null, `quotes` number or null, `views` number or null, `bookmarks` number or null, `isReply` boolean, `inReplyToId` string or null, `conversationId` string or null, `isRetweet` boolean, `quotedTweetId` string or null, `author` object, `media` object[]. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "2109950824549929233", "text": "Drag mouse to move it, X Player doesn't let you do pointer lock so it has to work like that", "url": "https://x.com/levelsio/status/2109950824549929233", "createdAt": "2026-10-13T10:14:12.000Z", "lang": "en", "likes": 66, "retweets": 0, "replies": 4, "quotes": 0, "views": 53186, "bookmarks": 2, "isReply": true, "inReplyToId": "2109949585737052316", "conversationId": "2109949585737052316", "isRetweet": false, "quotedTweetId": null, "author": { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸https://t.co/sQ0aiU7v02\n📸https://t.co/lAyoqmSBRX $86K/m\n🎮https://t.co/tF49atJ396 $44K/m\n🏡https://t.co/1oqUgfD6CZ $23K/m\n👙@X $13K/m\n🌍https://t.co/UXK5AFqCaQ $7K/m\n🏩https://t.co/4p4dzTDVN6 $5K/m", "followers": 974776, "following": 3275, "tweets": null, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "📕My book $5K/m 👉", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_normal.jpg", "createdAt": "2013-07-08T09:31:59.000Z" }, "media": [] }, { "id": "2109953854406099259", "text": "This is a 100% non-commercial non-profit preservation project part of the @pieter computer museum", "url": "https://x.com/levelsio/status/2109953854406099259", "createdAt": "2026-10-13T10:26:14.000Z", "lang": "en", "likes": 89, "retweets": 0, "replies": 3, "quotes": 0, "views": 47592, "bookmarks": 2, "isReply": true, "inReplyToId": "2109950824549929233", "conversationId": "2109949585737052316", "isRetweet": false, "quotedTweetId": null, "author": { "id": "1577241403", "handle": "levelsio", "name": "@levelsio", "bio": "💸https://t.co/sQ0aiU7v02\n📸https://t.co/lAyoqmSBRX $86K/m\n🎮https://t.co/tF49atJ396 $44K/m\n🏡https://t.co/1oqUgfD6CZ $23K/m\n👙@X $13K/m\n🌍https://t.co/UXK5AFqCaQ $7K/m\n🏩https://t.co/4p4dzTDVN6 $5K/m", "followers": 974776, "following": 3275, "tweets": null, "verified": false, "blueVerified": true, "canDm": false, "protected": null, "location": "📕My book $5K/m 👉", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2077111020305162240/PwddgOau_normal.jpg", "createdAt": "2013-07-08T09:31:59.000Z" }, "media": [] } ] ``` ### x.retweeters: Retweeter Exporter GET /v1/x/tweets/{id}/retweeters · MCP name `x_retweeters` · 3 credits List the accounts that retweeted a tweet, page by page, with bios, follower counts and DM availability. Costs 3 credits per page of about 20. Tip: retweeters of a post in your niche are people who already care about the topic. Parameters: - `id` (path, string, required): Tweet id or tweet URL. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "id": "1266049478563450881", "handle": "iSapphireX", "name": "Alex mason", "bio": "ظاهرا اروم ٫ باطنا شیرموز\nشیمی میخونم \nولی فعلا حسش نیست", "followers": 2963, "following": 1579, "tweets": 115999, "verified": false, "blueVerified": false, "canDm": false, "protected": null, "location": "Rasht", "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2094722817811968000/sKQBDneE_normal.jpg", "createdAt": "2020-05-28T16:51:57.000Z" }, { "id": "210072399", "handle": "sanwizh", "name": "iWish ☘️ ✨", "bio": "พยายามใจเย็น | FWB = Friend with Buffet🥓 | Pet Lover🐶 | Eco Friendly🌿 | Pop Culture BRUHHHHHHHHHHH", "followers": 368, "following": 636, "tweets": 167275, "verified": false, "blueVerified": false, "canDm": true, "protected": null, "location": null, "url": null, "avatarUrl": "https://pbs.twimg.com/profile_images/2059234511188262912/sIb0pgbU_normal.jpg", "createdAt": "2010-10-30T14:21:03.000Z" } ] ``` ### x.list_members: X List Members GET /v1/x/lists/{id}/members · MCP name `x_list_members` · 3 credits List everyone on a public X List, page by page, with profiles and DM availability. Costs 3 credits per page of about 20. Tip: curated lists (for example 'SaaS founders') are ready-made lead lists. Parameters: - `id` (path, string, required): List id or an x.com/i/lists/ URL. - `limit` (query, integer, default 20, 1..100): Max rows to return (1-100). One X page holds about 20 rows, so values above 20 still return one page. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `XUser[]`. Fields: `id` string, `handle` string, `name` string, `bio` string or null, `followers` number or null, `following` number or null, `tweets` number or null, `verified` boolean or null, `blueVerified` boolean or null, `canDm` boolean or null, `protected` boolean or null, `location` string or null, `url` string or null, `avatarUrl` string or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [] ``` ### x.leads: X Lead Finder GET /v1/x/leads · MCP name `x_leads` · 3 credits Find tweets where people ask for a recommendation, compare tools, or complain about a tool in your category. Returns leads ranked by an intent score (0 to 1) with the matched phrases and the author's handle. Costs 3 credits per page. Tip: pass competitors to catch people looking to switch. Parameters: - `q` (query, string, required): Your product category or the problem it solves, e.g. crm or cold email. 1-60 characters. - `competitors` (query, string or array): Up to 5 tools people might switch away from, e.g. hubspot,pipedrive. - `exclude` (query, string or array): Up to 10 words that disqualify an item. - `time` (query, enum, default month, one of day|week|month|year): How far back to look. - `minScore` (query, number, default 0.3, 0..1): Minimum intent score from 0 to 1. - `intents` (query, string or array): Which intents to return. Default: all three. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. - `lang` (query, string, default en): Tweet language, 2 letters. Output: `Lead[]`. Fields: `platform` enum, `kind` enum, `id` string, `url` string, `text` string, `author` string or null, `authorUrl` string or null, `community` string or null, `score` number or null, `createdAt` string or null, `intent` enum, `intentScore` number, `matchedTerms` string[]. Example response data (recorded 2026-10-13, first 2 items): ```json [ { "platform": "x", "kind": "tweet", "id": "1714670799494230401", "url": "https://x.com/HCareAdvisorGuy/status/1714670799494230401", "text": "Looking for a CRM recommendation that would sync up with outlook (or is just easy to manage). Or if you just feel really passionate about a specific CRM - send it my way. Thanks in advance!", "author": "HCareAdvisorGuy", "authorUrl": "https://x.com/HCareAdvisorGuy", "community": null, "score": 1, "createdAt": "2023-10-18T15:52:30.000Z", "intent": "asking_for_recommendation", "intentScore": 0.68, "matchedTerms": [ "looking for a", "looking for", "recommendation" ] }, { "platform": "x", "kind": "tweet", "id": "1421773603981299713", "url": "https://x.com/StartupCheckr/status/1421773603981299713", "text": "For anyone looking for a CRM recommendation, you can check out https://t.co/2Ka9dOxQVN\n😃\n\n#CRM #bizbubble", "author": "StartupCheckr", "authorUrl": "https://x.com/StartupCheckr", "community": null, "score": 5, "createdAt": "2021-08-01T10:03:37.000Z", "intent": "asking_for_recommendation", "intentScore": 0.68, "matchedTerms": [ "looking for a", "looking for", "recommendation" ] } ] ``` ### x.dm_send: Send a DM POST /v1/x/dm/send · MCP name `x_dm_send` · 10 credits Send a direct message on X from an account the user connected in the dashboard. Needs accountId, a recipient (handle or user id) and text, plus an idempotencyKey so a retry never sends twice. Costs 10 credits, charged only if X accepts the message. Tip: check the recipient with x.user first; if canDm is false the send will fail. Parameters: - `accountId` (body, string, required): Id of an X account you connected in the dashboard. - `recipientHandle` (body, string): Recipient handle. Pass this or recipientId. - `recipientId` (body, string): Recipient user id. Pass this or recipientHandle. - `text` (body, string, required, 1..10000): Message text, up to 10,000 characters. Output: `XWriteResult`. Fields: `ok` boolean, `action` enum, `accountId` string, `targetId` string or null, `resultId` string or null, `dryRun` boolean. Example response data (recorded 2026-10-14T00:00:00.000Z, first 2 items): ```json { "ok": true, "action": "dm_send", "accountId": "8b0e6a52-1f7c-4a3e-9d2b-5c1e7f0a9b11", "targetId": "1615394519473549312", "resultId": "dry_k3v9x2ma", "dryRun": true } ``` ### x.follow: Follow / unfollow POST /v1/x/actions/follow · MCP name `x_follow` · 5 credits Follow or unfollow an X account from a connected account. Needs accountId, a target (handle or user id), action follow or unfollow, and an idempotencyKey. Costs 5 credits on success. Tip: following a lead before a DM makes the DM land in their main inbox more often, but pace it; accounts have a daily action limit. Parameters: - `accountId` (body, string, required): Id of an X account you connected in the dashboard. - `action` (body, enum, default follow, one of follow|unfollow): Follow or unfollow. - `targetHandle` (body, string): Handle to act on. Pass this or targetId. - `targetId` (body, string): User id to act on. Pass this or targetHandle. Output: `XWriteResult`. Fields: `ok` boolean, `action` enum, `accountId` string, `targetId` string or null, `resultId` string or null, `dryRun` boolean. Example response data (recorded 2026-10-14T00:00:00.000Z, first 2 items): ```json { "ok": true, "action": "follow", "accountId": "8b0e6a52-1f7c-4a3e-9d2b-5c1e7f0a9b11", "targetId": "1615394519473549312", "resultId": null, "dryRun": true } ``` ### x.like: Like / retweet POST /v1/x/actions/like · MCP name `x_like` · 5 credits Like or retweet a tweet from a connected X account. Needs accountId, tweetId (or tweet URL), action like or retweet, and an idempotencyKey. Costs 5 credits on success. Tip: liking a lead's recent tweet before a DM is a light, low-risk warm-up. Parameters: - `accountId` (body, string, required): Id of an X account you connected in the dashboard. - `tweetId` (body, string, required): Tweet id or tweet URL. - `action` (body, enum, default like, one of like|retweet): Like or retweet. Output: `XWriteResult`. Fields: `ok` boolean, `action` enum, `accountId` string, `targetId` string or null, `resultId` string or null, `dryRun` boolean. Example response data (recorded 2026-10-14T00:00:00.000Z, first 2 items): ```json { "ok": true, "action": "like", "accountId": "8b0e6a52-1f7c-4a3e-9d2b-5c1e7f0a9b11", "targetId": "1845201837465319425", "resultId": null, "dryRun": true } ``` ### x.tweet: Post a tweet POST /v1/x/tweets · MCP name `x_tweet` · 5 credits Post a tweet or a reply from a connected X account. Needs accountId, text (up to 280 characters) and an idempotencyKey; pass replyToTweetId to reply. Costs 5 credits on success. Tip: never post the same text twice; X rejects duplicates and that reply fails. Parameters: - `accountId` (body, string, required): Id of an X account you connected in the dashboard. - `text` (body, string, required, 1..): Tweet text, up to 280 characters. - `replyToTweetId` (body, string): Tweet id or URL to reply to. Output: `XWriteResult`. Fields: `ok` boolean, `action` enum, `accountId` string, `targetId` string or null, `resultId` string or null, `dryRun` boolean. Example response data (recorded 2026-10-14T00:00:00.000Z, first 2 items): ```json { "ok": true, "action": "tweet", "accountId": "8b0e6a52-1f7c-4a3e-9d2b-5c1e7f0a9b11", "targetId": null, "resultId": "dry_tweet", "dryRun": true } ``` ### everywhere.search: Search Everywhere GET /v1/search · MCP name `everywhere_search` · up to 4 credits (1 for the Reddit side plus 3 for the X side; 5 with nsfw=true) Search one keyword across Reddit and X at once and get one merged list of posts and tweets, each with platform, author, community, score, link and date. Costs 4 credits for a page from both platforms (less if one platform has no more pages). Tip: sort=new for monitoring; sort=top ranks each platform's most-engaged items fairly against each other. Parameters: - `q` (query, string, required): Search text. Quotes and OR work on both platforms. - `sort` (query, enum, default relevance, one of relevance|new|top): new for monitoring; top ranks each platform's most engaged items fairly. - `time` (query, enum, default month, one of hour|day|week|month|year|all): Time window. - `limit` (query, integer, default 20, 1..50): Max rows per platform (1-50); a merged page holds up to twice this. - `nsfw` (query, boolean,string): Include adult Reddit posts. true needs the 18+ setting and costs 1 more credit. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `Mention[]`. Fields: `platform` enum, `kind` enum, `id` string, `url` string, `text` string, `author` string or null, `authorUrl` string or null, `community` string or null, `score` number or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "platform": "x", "kind": "tweet", "id": "2099495333231288346", "url": "https://x.com/HesomParhizkar/status/2099495333231288346", "text": "meta ads: how important is the “connect to your crm” recommendation?\n\nthis essentially will tell meta if the lead was good or bad (ie converted), any experience how how is actually helps?\n\nthis particular client doesn’t have a crm, yeah, I can build a page for him to update, but is it worth the effort?", "author": "HesomParhizkar", "authorUrl": "https://x.com/HesomParhizkar", "community": null, "score": 2, "createdAt": "2026-09-14T13:47:48.000Z" }, { "platform": "reddit", "kind": "post", "id": "t3_1wdihhj", "url": "https://www.reddit.com/r/CRM/comments/1wdihhj/what_crm_should_a_small_business_use/", "text": "What CRM should a small business use?\n\nWe’re a small B2B business with 6 people and sales is still pretty founder led, but revenue has grown enough that keeping leads, follow ups and customer conversations spread across spreadsheets and inboxes is starting to fall apart. I’m trying to figure out what the best CRM for a small business looks like when you need something the whole team can use without spending weeks setting it up. \n \nI keep finding everything from really basic small business CRM tools to newer AI native CRM platforms, and I’m more interested in something that can take some of the sales work off the team rather than just becoming another database we have to maintain. Main thing is finding a CRM we can grow into without needing a dedicated ops person just to keep it running.", "author": "NotedWhisky", "authorUrl": "https://www.reddit.com/user/NotedWhisky/", "community": "CRM", "score": 51, "createdAt": "2026-09-11T14:52:16.000Z" } ] ``` ### everywhere.leads: Lead Finder GET /v1/leads · MCP name `everywhere_leads` · up to 5 credits (5 when both platforms answer, 3 when only one does) Find people on Reddit and X who are asking for a recommendation, comparing tools or complaining about one in your category, ranked by an intent score from 0 to 1 with the phrases that matched. Costs 5 credits per page (3 if only one platform answers). Tip: start with your category in two or three words and add up to five competitors. Parameters: - `q` (query, string, required): Your product category or the problem it solves, e.g. crm or cold email. 1-60 characters. - `competitors` (query, string or array): Up to 5 tools people might switch away from, e.g. hubspot,pipedrive. - `exclude` (query, string or array): Up to 10 words that disqualify an item. - `time` (query, enum, default month, one of day|week|month|year): How far back to look. - `minScore` (query, number, default 0.3, 0..1): Minimum intent score from 0 to 1. - `intents` (query, string or array): Which intents to return. Default: all three. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. - `subreddit` (query, string): Limit the Reddit side to one subreddit. - `lang` (query, string, default en): Tweet language, 2 letters. Output: `Lead[]`. Fields: `platform` enum, `kind` enum, `id` string, `url` string, `text` string, `author` string or null, `authorUrl` string or null, `community` string or null, `score` number or null, `createdAt` string or null, `intent` enum, `intentScore` number, `matchedTerms` string[]. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "platform": "reddit", "kind": "post", "id": "t3_1v0xjox", "url": "https://www.reddit.com/r/CRMSoftware/comments/1v0xjox/best_crm_for_small_business_lead_management/", "text": "Best CRM for Small Business Lead Management: Affordable CRM Recommendations for Small Teams\n\nOur startup has been growing steadily, and we've reached the point where managing leads through spreadsheets and shared documents is becoming inefficient. As more inquiries come in, it's getting harder to track conversations, assign ownership, and make sure multiple team members aren't contacting the same prospect.\n\nWe're looking for a CRM that can help our small team stay organized while keeping the sales process simple and efficient.\n\nWe are looking for\n\nLead Tracking: A clear way to track every lead from the first interaction through to conversion, including notes, communication history, and follow-up activities.\n\nContact Management: A centralized contact database that prevents duplicate records and ensures everyone has access to the latest customer information.\n\nEasy to Use: We don't have a dedicated IT team, so the CRM should be intuitive, quick to set up, and easy for everyone to adopt.\n…", "author": "Life-Broccoli-6529", "authorUrl": "https://www.reddit.com/user/Life-Broccoli-6529/", "community": "CRMSoftware", "score": 10, "createdAt": "2026-07-19T18:05:54.000Z", "intent": "asking_for_recommendation", "intentScore": 1, "matchedTerms": [ "any recommendations", "looking for a", "looking for", "best crm for", "recommendations", "need a" ] }, { "platform": "reddit", "kind": "post", "id": "t3_1sv06lp", "url": "https://www.reddit.com/r/CRMSoftware/comments/1sv06lp/whats_the_best_crm_for_small_business_owners/", "text": "What’s the best CRM for small business owners that’s actually worth it\n\nI’m looking into getting a CRM for small business use and trying to sort through all the options out there.\n\nMain priorities are keeping leads and customer info organized, staying on top of follow-ups, and not ending up with a system that takes more time to manage than it saves.\n\nA lot of tools look great in demos, but I’d rather hear from people actually using them in a small business setting.\n\nIf you run a small business, what CRM did you choose and how has it worked so far?\n\nDid it genuinely help with growth and organization, or did it feel unnecessary?\n\nWould really appreciate any honest recommendations or lessons learned.", "author": "MrHungryzxc", "authorUrl": "https://www.reddit.com/user/MrHungryzxc/", "community": "CRMSoftware", "score": 18, "createdAt": "2026-04-25T02:53:42.000Z", "intent": "asking_for_recommendation", "intentScore": 0.97, "matchedTerms": [ "what's the best", "best crm for", "recommendations", "worth it" ] } ] ``` ### everywhere.mentions: Brand Mentions GET /v1/mentions · MCP name `everywhere_mentions` · up to 6 credits (1 for Reddit posts, 2 for Reddit comments and 3 for X, for the sources called) Find every recent mention of a brand or product name across Reddit posts, Reddit comments and X, merged newest first. Supports other spellings, exclusion words and your own accounts to skip. Costs 6 credits for a page from all three sources. Tip: add your own handles to excludeAuthors so you only see what others say. Parameters: - `q` (query, string, required): Brand or product name. 1-100 characters. - `aliases` (query, string or array): Up to 5 other spellings, e.g. chatterapi.io. - `exclude` (query, string or array): Up to 10 words that disqualify a mention. - `excludeAuthors` (query, string or array): Up to 20 of your own accounts to skip (Reddit usernames or X handles). - `time` (query, enum, default week, one of day|week|month): How far back to look. - `strict` (query, boolean,string): Keep only items whose text contains a term. - `cursor` (query, string, 1..2048): Opaque cursor from the previous response's page.nextCursor. Output: `Mention[]`. Fields: `platform` enum, `kind` enum, `id` string, `url` string, `text` string, `author` string or null, `authorUrl` string or null, `community` string or null, `score` number or null, `createdAt` string or null. Example response data (recorded 2026-10-14, first 2 items): ```json [ { "platform": "reddit", "kind": "post", "id": "t3_1whokz5", "url": "https://www.reddit.com/r/CRMSoftware/comments/1whokz5/best_logistics_crm_for_email_sms_and_customer/", "text": "Best logistics CRM for email, SMS, and customer management?\n\nI run a small delivery company in Florida with about 11 staff, and we’re currently managing around 2,400 customer and booking records.\n\nWe’re looking for a logistics CRM that can handle most of this in one place. Ideally, I’d like something that can:\n\nSend bulk emails and SMS to 2,000+ customers without the costs getting ridiculous.\n\nKeep customer, delivery and booking information organised so we can search, filter and pull up records easily.\n\nHandle email and SMS from the same system, or at least connect cleanly with another platform if we need two.\n\nGive us a simple way to track customer communication and delivery history without needing someone technical to manage it.\n\nAnd obviously, keep the monthly cost reasonable. Some of the platforms I’ve looked at seem affordable until you add SMS, extra contacts and automation.\n\nWe’ve been doing this with a mix of spreadsheets and separate messaging tools since late 2023, and it’s b…", "author": "L1994ala_1264", "authorUrl": "https://www.reddit.com/user/L1994ala_1264/", "community": "CRMSoftware", "score": 5, "createdAt": "2026-09-16T05:54:13.000Z" }, { "platform": "x", "kind": "tweet", "id": "2099495333231288346", "url": "https://x.com/HesomParhizkar/status/2099495333231288346", "text": "meta ads: how important is the “connect to your crm” recommendation?\n\nthis essentially will tell meta if the lead was good or bad (ie converted), any experience how how is actually helps?\n\nthis particular client doesn’t have a crm, yeah, I can build a page for him to update, but is it worth the effort?", "author": "HesomParhizkar", "authorUrl": "https://x.com/HesomParhizkar", "community": null, "score": 2, "createdAt": "2026-09-14T13:47:48.000Z" } ] ``` ## Normalized data shapes ### RedditPost | Field | Type | Nullable | Description | |---|---|---|---| | `id` | string | no | Platform id. | | `fullname` | string | no | Reddit fullname (t3_ for posts, t1_ for comments). Dedupe on this. | | `title` | string | no | Title. | | `body` | string | no | Text body. Empty for link and media posts. | | `author` | string | yes | Author username, null when deleted. | | `subreddit` | string | no | Subreddit name without r/. | | `permalink` | string | no | Path on reddit.com. | | `url` | string | no | Full URL on the platform. | | `externalUrl` | string | yes | Link the post points to, when it is a link post. | | `score` | number | yes | Score (upvotes minus downvotes) as Reddit reports it. | | `numComments` | number | yes | Comment count. | | `upvoteRatio` | number | yes | Share of upvotes, 0 to 1. | | `createdAt` | string | no | ISO 8601 UTC timestamp. | | `nsfw` | boolean | no | Marked adult content. | | `locked` | boolean | yes | Comments are locked. | | `media` | object | yes | Images, video or gallery URLs, or null. | ### RedditComment | Field | Type | Nullable | Description | |---|---|---|---| | `id` | string | no | Platform id. | | `fullname` | string | no | Reddit fullname (t3_ for posts, t1_ for comments). Dedupe on this. | | `parentId` | string | yes | Fullname of the parent comment or post. | | `postId` | string | yes | Id of the post this comment belongs to. | | `postTitle` | string | yes | Title of that post. | | `author` | string | yes | Author username, null when deleted. | | `body` | string | no | Text body. Empty for link and media posts. | | `bodyTruncated` | boolean | no | True when the text is a preview from a fallback source. | | `score` | number | yes | Score (upvotes minus downvotes) as Reddit reports it. | | `subreddit` | string | yes | Subreddit name without r/. | | `permalink` | string | yes | Path on reddit.com. | | `url` | string | yes | Full URL on the platform. | | `createdAt` | string | no | ISO 8601 UTC timestamp. | ### RedditThread | Field | Type | Nullable | Description | |---|---|---|---| | `post` | object | yes | The post, or null when it could not be loaded. | | `comments` | object[] | no | Flat list of comments; rebuild the tree with parentId. | | `unloadedReplyStubs` | number | no | Replies Reddit did not load in this page. | | `reportedCommentCount` | number | yes | Comment count Reddit reports for the post. | ### Subreddit | Field | Type | Nullable | Description | |---|---|---|---| | `name` | string | no | Name. | | `title` | string | yes | Title. | | `description` | string | yes | Description. | | `subscribers` | number | yes | Subscriber count. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | | `nsfw` | boolean | yes | Marked adult content. | | `url` | string | no | Subreddit URL. | | `rules` | object[] | yes | Subreddit rules, or null when the source cannot see them. | | `moderators` | object[] | yes | Moderators and since when, or null. | | `posting` | object | yes | Posting settings, or null. | ### RedditUser | Field | Type | Nullable | Description | |---|---|---|---| | `username` | string | no | Username without u/. | | `id` | string | yes | Platform id. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | | `karma` | object | no | Total, post and comment karma. | | `bio` | string | yes | Profile bio. | | `avatarUrl` | string | yes | Avatar image URL. | | `badges` | object | yes | Verified, employee, moderator and premium flags, or null. | ### UserStatus | Field | Type | Nullable | Description | |---|---|---|---| | `username` | string | no | Username without u/. | | `state` | enum | no | active, suspended, not_found_or_banned or unknown. | | `exists` | boolean | yes | Whether the account exists, null when unknown. | ### XUser | Field | Type | Nullable | Description | |---|---|---|---| | `id` | string | no | Platform id. | | `handle` | string | no | Handle without @. | | `name` | string | no | Name. | | `bio` | string | yes | Profile bio. | | `followers` | number | yes | Follower count. | | `following` | number | yes | Following count. | | `tweets` | number | yes | Tweet count. | | `verified` | boolean | yes | Legacy verification. | | `blueVerified` | boolean | yes | Paid blue check. | | `canDm` | boolean | yes | Whether the account accepts DMs from anyone. | | `protected` | boolean | yes | Protected (private) account. | | `location` | string | yes | Profile location. | | `url` | string | yes | Website in the profile. | | `avatarUrl` | string | yes | Avatar image URL. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | ### XTweet | Field | Type | Nullable | Description | |---|---|---|---| | `id` | string | no | Platform id. | | `text` | string | no | Text. | | `url` | string | no | Full URL on the platform. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | | `lang` | string | yes | Language code. | | `likes` | number | yes | Likes. | | `retweets` | number | yes | Retweets. | | `replies` | number | yes | Replies. | | `quotes` | number | yes | Quote tweets. | | `views` | number | yes | Views. | | `bookmarks` | number | yes | Bookmarks. | | `isReply` | boolean | no | Is a reply. | | `inReplyToId` | string | yes | Tweet this replies to. | | `conversationId` | string | yes | Root tweet id of the conversation. | | `isRetweet` | boolean | no | Is a retweet. | | `quotedTweetId` | string | yes | Tweet this quotes. | | `author` | object | no | Author profile (XUser). | | `media` | object[] | no | Images, video or gallery URLs, or null. | ### Mention | Field | Type | Nullable | Description | |---|---|---|---| | `platform` | enum | no | reddit or x. | | `kind` | enum | no | post, comment or tweet. | | `id` | string | no | Platform id. | | `url` | string | no | Full URL on the platform. | | `text` | string | no | Text. | | `author` | string | yes | Author username, null when deleted. | | `authorUrl` | string | yes | Author profile URL. | | `community` | string | yes | Subreddit for Reddit items, null for X. | | `score` | number | yes | Score (upvotes minus downvotes) as Reddit reports it. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | ### Lead | Field | Type | Nullable | Description | |---|---|---|---| | `platform` | enum | no | reddit or x. | | `kind` | enum | no | post, comment or tweet. | | `id` | string | no | Platform id. | | `url` | string | no | Full URL on the platform. | | `text` | string | no | Text. | | `author` | string | yes | Author username, null when deleted. | | `authorUrl` | string | yes | Author profile URL. | | `community` | string | yes | Subreddit for Reddit items, null for X. | | `score` | number | yes | Score (upvotes minus downvotes) as Reddit reports it. | | `createdAt` | string | yes | ISO 8601 UTC timestamp. | | `intent` | enum | no | asking_for_recommendation, comparing_tools, complaining_about_tool or other. | | `intentScore` | number | no | Intent score from 0 to 1. | | `matchedTerms` | string[] | no | Phrases that made this a lead. | --- ChatterAPI is independent and not affiliated with Reddit, Inc. or X Corp. Contact: piyushh@amplifyxlabs.com