编写、调试与调优 Playwright 测试,涵盖定位器策略、追踪诊断与 CI 友好的超时配置。
记忆
Scavio Reddit API
试用Search Reddit, read posts and threaded comments, and pull subreddit, user, popular, and trending data as structured JSON. 12 endpoints for discussion research, brand monitoring, sentiment analysis, and RAG.
它能做什么
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.
技能文档
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")
相关技能
scavio-ai 的更多技能
浏览全部技能通过托管 OAuth 接入 GitHub REST API,覆盖仓库、Issue、PR、Commit、分支与用户等接口。
Search Google News for headlines by keyword, topic, or publication as structured JSON — headline, source, date, and link. Use for current events, monitoring, and news research. v2 engine, 1 credit per request.
Pull a Facebook page's profile, posts, reels and photos, one post with its comments, a single reel/video with downloadable URLs, a public group and its posts, an event, and hashtag posts. 11 endpoints, 1 credit each, structured JSON.
Search the Meta Ad Library by keyword or Facebook Page id and walk full cursor pagination through every ad, with creative, run dates, platforms and political spend. 3 endpoints, 1 credit per page.
Search YouTube and retrieve videos, shorts, comments, transcripts, streams, channel data, and community posts with their comments as structured JSON. 17 endpoints across video and channel surfaces.
Search live or SOLD eBay listings, read a listing in full, and look up a seller's profile card as structured JSON. 3 endpoints, 1 credit each. Sold-listing search is the price-research feature eBay itself hides.