Reddit via Scavio
Search Reddit, read a post with its threaded comment tree, expand comment replies, and pull subreddit metadata and feeds, redditor profiles with their posts and comments, the site-wide popular feed, and trending search queries. All endpoints return structured JSON.
When to trigger
Use this skill when the user asks to:
- Search Reddit for opinions, discussions, or public sentiment on a topic
- Fetch the full text and comments of a Reddit post by id or URL
- Expand the reply tree under a specific comment
- Look up a subreddit's metadata or browse its post feed
- Look up a redditor and read their submitted posts or comments
- Browse the site-wide popular feed or current trending searches
- Research how developers or communities talk about a product, library, or issue
- Build RAG pipelines that need discussion-sourced context
- Monitor brand or competitor mentions across Reddit
Note: Reddit requests take 5-15 seconds. Set a client timeout of at least 30 seconds.
Setup
Get a free API key at https://scavio.dev (50 free credits to get started, no card required):
export SCAVIO_API_KEY=sk_live_your_key
Every request is a POST with a JSON body and:
Authorization: Bearer $SCAVIO_API_KEY
Endpoints
Base URL: https://api.scavio.dev. All paths are under /api/v1/reddit. Every endpoint costs 1 credit.
| Endpoint | Credits | Description |
|---|---|---|
POST /api/v1/reddit/search |
1 | Search Reddit posts by query |
POST /api/v1/reddit/search/suggestions |
1 | Autocomplete suggestions for a query |
POST /api/v1/reddit/post |
1 | Full details for a single post |
POST /api/v1/reddit/post/comments |
1 | Top-level comments for a post |
POST /api/v1/reddit/post/comments/replies |
1 | Replies to a specific comment |
POST /api/v1/reddit/subreddit |
1 | Metadata for a subreddit |
POST /api/v1/reddit/subreddit/posts |
1 | A subreddit's post feed |
POST /api/v1/reddit/user |
1 | A redditor's profile |
POST /api/v1/reddit/user/posts |
1 | A redditor's submitted posts |
POST /api/v1/reddit/user/comments |
1 | A redditor's comments |
POST /api/v1/reddit/popular |
1 | The site-wide popular feed |
POST /api/v1/reddit/trending |
1 | Current trending search queries |
Workflow
- Find discussions: call
/reddit/searchwithquery. Readresults[].post_id. - Autocomplete: call
/reddit/search/suggestionswithqueryfor typeahead strings. - Read a post: call
/reddit/postwithpost_id(at3_...fullname or bare id) or a full Redditurl. - Comments: call
/reddit/post/commentswithpost_id. Each comment carries areply_cursor; pass it to/reddit/post/comments/repliesascursor(with the samepost_id) to expand that thread. - Subreddits: call
/reddit/subredditfor metadata,/reddit/subreddit/postsfor the feed. - Redditors: call
/reddit/userfor the profile,/reddit/user/postsand/reddit/user/commentsfor their activity. - Discovery: call
/reddit/popularfor the front-page feed and/reddit/trendingfor trending search queries.
Paginated endpoints return next_cursor; pass it back as cursor for the next page. Stop when next_cursor is null.
Parameters
Search (/search)
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Search query (1-500 chars) |
cursor |
string | -- | Pagination cursor from a prior next_cursor |
Search suggestions (/search/suggestions)
query* (1-500 chars).
Post (/post)
| Parameter | Type | Default | Description |
|---|---|---|---|
post_id |
string | one of | Post fullname (t3_...) or bare id |
url |
string | one of | Full Reddit post URL |
Provide post_id or url (at least one is required).
Post comments (/post/comments)
| Parameter | Type | Default | Description |
|---|---|---|---|
post_id |
string | required | Post fullname (t3_...) |
sort |
string | TOP |
HOT, NEW, TOP, BEST, CONTROVERSIAL |
cursor |
string | -- | Pagination cursor from a prior next_cursor |
Comment replies (/post/comments/replies)
| Parameter | Type | Default | Description |
|---|---|---|---|
post_id |
string | required | Post fullname (t3_...) |
cursor |
string | required | A comment's reply_cursor from the comments endpoint |
sort |
string | TOP |
HOT, NEW, TOP, BEST, CONTROVERSIAL |
Subreddit (/subreddit)
subreddit* — a subreddit name (1-100 chars), e.g. AskReddit.
Subreddit posts (/subreddit/posts)
| Parameter | Type | Default | Description |
|---|---|---|---|
subreddit |
string | required | Subreddit name |
sort |
string | HOT |
BEST, HOT, NEW, TOP, CONTROVERSIAL, RISING |
cursor |
string | -- | Pagination cursor |
User (/user)
username* — a redditor username (1-100 chars), without u/.
User posts / comments (/user/posts, /user/comments)
| Parameter | Type | Default | Description |
|---|---|---|---|
username |
string | required | Redditor username |
sort |
string | NEW |
HOT, NEW, TOP, BEST, CONTROVERSIAL |
cursor |
string | -- | Pagination cursor |
Popular (/popular)
cursor (optional) — pagination cursor.
Trending (/trending)
No parameters.
Examples
import os, requests
BASE = "https://api.scavio.dev"
HEADERS = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"}
# 1. Search Reddit
results = requests.post(f"{BASE}/api/v1/reddit/search", headers=HEADERS,
json={"query": "serpapi alternative"}).json()
post_id = results["data"]["results"][0]["post_id"]
# 2. Full post detail
post = requests.post(f"{BASE}/api/v1/reddit/post", headers=HEADERS,
json={"post_id": post_id}).json()
# 3. Top comments, then expand one thread
comments = requests.post(f"{BASE}/api/v1/reddit/post/comments", headers=HEADERS,
json={"post_id": post_id, "sort": "TOP"}).json()
reply_cursor = comments["data"]["comments"][0]["reply_cursor"]
replies = requests.post(f"{BASE}/api/v1/reddit/post/comments/replies", headers=HEADERS,
json={"post_id": post_id, "cursor": reply_cursor}).json()
# 4. Subreddit feed
feed = requests.post(f"{BASE}/api/v1/reddit/subreddit/posts", headers=HEADERS,
json={"subreddit": "Python", "sort": "TOP"}).json()
Response shapes
Every response uses the envelope { data, response_time, credits_used, credits_remaining }. Key data fields per endpoint:
- search —
results[](post_id,title,url,text,subreddit,author,score,num_comments,created_at,is_nsfw),next_cursor. - search/suggestions —
suggestions[](strings). - post —
post_id,title,text,url,subreddit,author,score,upvote_ratio,num_comments,created_at,is_nsfw,is_video,thumbnail,media. - post/comments —
comments[](comment_id,text,author,score,created_at,reply_cursor),next_cursor. - post/comments/replies —
replies[](same item shape as a comment),next_cursor. - subreddit —
id,name,title,description,subscribers,type,is_nsfw,icon,banner,created_at,primary_color. - subreddit/posts —
posts[](post_id,title,url,subreddit,author,score,num_comments,created_at,is_nsfw),next_cursor. - user —
id,name,is_employee,is_verified,account_type,is_accepting_pms. - user/posts —
posts[](same item shape as a feed post),next_cursor. - user/comments —
comments[](comment_id,text,author,post{id,title},score,created_at),next_cursor. - popular —
posts[](post_id,title,subreddit,author,score,num_comments,url,created_at),next_cursor. - trending —
trending[](query,raw_query).
{
"data": {
"results": [
{
"post_id": "t3_1v6ngaf",
"title": "Best SerpAPI alternative for an agent pipeline in 2026?",
"url": "https://www.reddit.com/r/webscraping/comments/1v6ngaf/best_serpapi_alternative/",
"text": "We outgrew our current provider and need something cheaper...",
"subreddit": "webscraping",
"author": "data_plumber",
"score": 128,
"num_comments": 43,
"created_at": "2026-05-11T14:22:07+0000",
"is_nsfw": false
}
],
"next_cursor": "eyJjYW5kaWRhdGVzX3JldH..."
},
"credits_used": 1,
"credits_remaining": 999
}
Guardrails
- Every Reddit endpoint costs 1 credit (this changed from 2 in an earlier version — all Reddit calls are now 1 credit each).
- Never fabricate post titles, authors, scores, or comment content. Only return API data.
- Requests take 5-15 seconds. If the user's UX is time-sensitive, recommend async or streaming patterns.
- Do not filter out NSFW posts silently — surface the
is_nsfwflag so the user can decide. - When summarizing comment threads, preserve the author attribution.
- To expand a comment thread, the replies endpoint needs both the
post_idand that comment'sreply_cursor(passed ascursor).
Failure handling
400means an invalid or missing parameter (e.g. nopost_id/url) — fix and retry.401means the API key is invalid or missing. CheckSCAVIO_API_KEY.429means rate or usage limit exceeded. Wait before retrying. See https://scavio.dev/docs/rate-limits.502/503mean upstream is temporarily unavailable. Wait a few seconds before retrying.- If search returns no results, suggest different keywords.
- If
SCAVIO_API_KEYis not set, prompt the user to export it before continuing.
LangChain
pip install langchain-scavio
from langchain_scavio import ScavioSearchTool
tool = ScavioSearchTool(engine="reddit")
