Social media API: search Reddit and X in one call
A social media API call that searches Reddit and X at once: merged results, how sorting works, partial results when one platform fails, and lead finding.
Piyushh · October 14, 2026 · 6 min read
A social media API that covers Reddit and X lets you search both platforms with one request and get back one list, so you don't have to run two integrations with two sets of keys. With ChatterAPI, that's a single call to GET /v1/search. You send a query, it searches Reddit posts and X tweets in parallel, and it returns one merged list, with each item labeled by the platform it came from. Each page costs 5 credits.
Below is the call with a real response, then how the two platforms get merged and sorted, what happens when one platform fails, and how to switch from search to lead finding. If you're comparing "social media APIs" in general, start with the first section, which sorts out the three different things the term covers.
What "social media API" usually means
Search results for "social media API" mix three kinds of product:
| Type | What it does | Example jobs |
|---|---|---|
| Publishing APIs | Post and schedule content to your own accounts | Cross-post a launch to five networks |
| Analytics APIs | Read metrics for accounts you own | Pull follower growth and post reach |
| Data and listening APIs | Read public posts and conversations from anyone | Find mentions, research a market, spot leads |
This post is about the third kind: reading public conversations on Reddit and X, the two places where people ask strangers for recommendations in public.
Going the official route means building two integrations. Reddit's Data API requires a registered OAuth app, and Reddit says traffic "not using OAuth or login credentials will be blocked" (Data API Wiki, checked 2026-10-14). X's API runs on pay-per-use credits through its own developer console (X pricing, checked 2026-10-14). You end up with two approvals, two auth flows, two response shapes and two bills. Our guides on the Reddit API key and the X API key walk through each one.
Search Reddit and X in one call
ChatterAPI's cross-platform search (everywhere.search, GET /v1/search) runs a Reddit post search and an X tweet search in parallel, then merges the results. It takes these parameters:
q: the search text. Quotes andORwork on both platforms.sort:relevance(default),newortop.time:hour,day,week,month(default),yearorall.limit: rows per platform, 1 to 50 (default 20). A merged page can hold up to twice that.cursor: taken from the previous response'spage.nextCursor.
The response below was recorded with a test key, which returns one sample per endpoint for free. We cut it down to three of its 40 items:
curl -G "https://api.chatterapi.com/v1/search" \
-H "Authorization: Bearer $CHATTERAPI_KEY" \
--data-urlencode 'q=crm recommendation' \
--data-urlencode 'sort=new' \
--data-urlencode 'time=all'
{
"data": [
{
"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? ...",
"author": "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 ...",
"author": "NotedWhisky",
"community": "CRM",
"score": 51,
"createdAt": "2026-09-11T14:52:16.000Z"
},
{
"platform": "reddit",
"kind": "post",
"id": "t3_1vu3iuu",
"text": "Custom CRM Development Cost for a Small Business ...",
"community": "CRMSoftware",
"createdAt": "2026-08-21T02:22:22.000Z"
}
],
"page": { "nextCursor": "AcRq-4gh0FZ3…", "hasMore": true },
"credits": { "charged": 0, "remaining": 719 },
"requestId": "req_01M4X1HYJQCZ5JYSAE1T",
"cached": true
}
That page held 20 Reddit posts and 20 tweets in a single list, newest first, going from September 2026 back to 2019. On a live key it costs 5 credits: 2 for the Reddit side and 3 for the X side. The free search everywhere tool makes the same call from a browser.
Items have the same shape on both platforms. platform is reddit or x, kind is post or tweet, and community holds the subreddit for Reddit items and null for X. On Reddit, score means upvotes minus downvotes. On X it's the like count. The two aren't the same unit, so don't sort the merged list by raw score yourself.
How the merge and sorting work
The two platforms differ in volume and in how engagement is counted, so the merge rules matter.
sort=newputs everything in one timeline bycreatedAt, newest first. Use it for monitoring.sort=relevanceinterleaves each platform's own relevance ranking, so neither one fills the page.sort=top, in the docs' words, "ranks each platform's most engaged items fairly against each other." A tweet with 50,000 likes and a Reddit post with 2,000 upvotes can each be the top item on its platform, and sorting by raw numbers would bury Reddit.
Two filters run before the merge. Retweets are dropped from the X side so the same text doesn't keep reappearing. Adult Reddit posts are removed unless you pass nsfw=true, which requires the 18+ setting on your account.
Partial results: when one platform fails
With two platforms, either one can fail. The docs explain how the cross-platform API handles that: "Partial answers still return. If one platform fails, you get the other one's results plus a warnings entry, and you're only charged for what came back."
In practice, a page where X didn't answer looks like this (illustrative, not a recorded sample):
{
"data": [ { "platform": "reddit", "kind": "post", "...": "..." } ],
"page": { "nextCursor": "Ab9…", "hasMore": true },
"credits": { "charged": 2, "remaining": 24713 },
"warnings": [ { "code": "platform_unavailable", "platform": "x" } ]
}
Three rules make this predictable:
- You pay for each side that answered. Reddit alone costs 2 credits and X alone costs 3. A side with no more pages isn't charged either.
- The cursor remembers which side failed. Pass
nextCursoras usual. A side that failed before its first answer starts again on the next page, so you don't silently lose its results. - If both sides fail, the call returns an error, and failed calls cost 0 credits.
Check warnings in your code. A monitoring job that ignores it will report "no X mentions today" on a day when X didn't answer. Log the warning and retry that side later.
import os, requests
def search_both(q, sort="new", time="day"):
r = requests.get(
"https://api.chatterapi.com/v1/search",
headers={"Authorization": f"Bearer {os.environ['CHATTERAPI_KEY']}"},
params={"q": q, "sort": sort, "time": time},
timeout=60,
)
r.raise_for_status()
body = r.json()
for w in body.get("warnings", []):
print(f"warning: {w['code']} {w.get('platform', '')}") # retry this side later
return body["data"], body["credits"]
items, credits = search_both('"notion alternative"')
for it in items:
where = f"r/{it['community']}" if it["platform"] == "reddit" else "X"
print(it["createdAt"][:10], where, it["score"], it["url"])
print("charged", credits["charged"], "left", credits["remaining"])
From search to leads
Search returns everything that matches. For sales and marketing you usually want the subset where someone is about to choose a tool. everywhere.leads (GET /v1/leads) finds that subset on both platforms: posts and tweets where people ask for a recommendation, compare tools or complain about one. It ranks them by an intent score from 0 to 1 and returns the phrases that triggered each match.
curl -G "https://api.chatterapi.com/v1/leads" \
-H "Authorization: Bearer $CHATTERAPI_KEY" \
--data-urlencode 'q=crm'
The top item from the recorded sample, trimmed:
{
"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 ...",
"community": "CRMSoftware",
"createdAt": "2026-07-19T18:05:54.000Z",
"intent": "asking_for_recommendation",
"intentScore": 1,
"matchedTerms": ["any recommendations", "looking for a", "best crm for", "recommendations", "need a"]
}
The sample page held 39 leads, 19 from Reddit and 20 from X, with intent values of asking_for_recommendation, comparing_tools, complaining_about_tool or other. A page costs 6 credits when both platforms answer and 4 when only one does. Optional parameters include competitors (up to 5), exclude (up to 10 disqualifying words) and time (day to year). The free lead finder shows the same output.
Finding a lead is the easy part. Read the thread, answer the question if you can help, and follow each subreddit's rules on self-promotion. On X, the automation rules prohibit unsolicited DMs "in a bulk or automated manner." Treat the list as threads to read and reply to one at a time, not as addresses to message in bulk.
When one merged feed is the wrong choice
Merging isn't always better, and people who buy listening tools say so. In r/growthmarketing, a marketer about to buy a Reddit monitoring tool listed what they were wary of, including "dashboards that bury reddit inside a generic social feed with twitter and linkedin" (thread). One reply warned that "A lot f tools have patchy coverage of comments and only do well with main post."
Both points apply here. everywhere.search searches Reddit posts, not comments, so a discussion that lives in a comment thread won't show up. When you need those, use everywhere.mentions (7 credits: Reddit posts, Reddit comments and X), or call the per-platform endpoints directly. The cross-platform docs say to use the per-platform APIs "when you need fields only one platform has, such as subreddit rules, full comment trees, follower lists or DM availability."
Freshness is a separate question, and you may not need real time at all. When someone pitched an hourly Reddit and X monitor in r/AppIdeas, one reply asked: "Why does it need to run real-time? To me, once a day would be sufficient" (thread). Running one merged search daily costs 5 credits, or 150 a month. Running it hourly costs 3,600 a month. Start with a daily run and go faster only for the terms where speed matters.
People are also wiring these feeds into agents. @ayushtweetshere described a homemade "social listening API" that pings him on Discord "every morning" with relevant posts (post). If you're building something similar, ChatterAPI's hosted MCP server exposes the same call as everywhere_search. See our guide to giving an AI agent Reddit and X data, and why AI can't read Reddit and X for why agents need help reaching both platforms in the first place.
Try it
ChatterAPI gives your code and your agents Reddit and X data through one key, over REST or MCP, and you don't have to apply for a developer account. Sign up with Google to get 100 free credits without adding a card. That covers 20 cross-platform searches. Run the call above with your own category in q. Plans start at $19 a month for 25,000 credits.