Install
openclaw skills install @scavio-ai/scavio-reddit-apiSearch 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.
openclaw skills install @scavio-ai/scavio-reddit-apiSearch 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.
Use this skill when the user asks to:
Note: Reddit requests take 5-15 seconds. Set a client timeout of at least 30 seconds.
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
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 |
/reddit/search with query. Read results[].post_id./reddit/search/suggestions with query for typeahead strings./reddit/post with post_id (a t3_... fullname or bare id) or a full Reddit url./reddit/post/comments with post_id. Each comment carries a reply_cursor; pass it to /reddit/post/comments/replies as cursor (with the same post_id) to expand that thread./reddit/subreddit for metadata, /reddit/subreddit/posts for the feed./reddit/user for the profile, /reddit/user/posts and /reddit/user/comments for their activity./reddit/popular for the front-page feed and /reddit/trending for trending search queries.Paginated endpoints return next_cursor; pass it back as cursor for the next page. Stop when next_cursor is null.
/search)| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | required | Search query (1-500 chars) |
cursor | string | -- | Pagination cursor from a prior next_cursor |
/search/suggestions)query* (1-500 chars).
/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)| 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 |
/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* — a subreddit name (1-100 chars), e.g. AskReddit.
/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)username* — a redditor username (1-100 chars), without u/.
/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)cursor (optional) — pagination cursor.
/trending)No parameters.
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()
Every response uses the envelope { data, response_time, credits_used, credits_remaining }. Key data fields per endpoint:
results[] (post_id, title, url, text, subreddit, author, score, num_comments, created_at, is_nsfw), next_cursor.suggestions[] (strings).post_id, title, text, url, subreddit, author, score, upvote_ratio, num_comments, created_at, is_nsfw, is_video, thumbnail, media.comments[] (comment_id, text, author, score, created_at, reply_cursor), next_cursor.replies[] (same item shape as a comment), next_cursor.id, name, title, description, subscribers, type, is_nsfw, icon, banner, created_at, primary_color.posts[] (post_id, title, url, subreddit, author, score, num_comments, created_at, is_nsfw), next_cursor.id, name, is_employee, is_verified, account_type, is_accepting_pms.posts[] (same item shape as a feed post), next_cursor.comments[] (comment_id, text, author, post{id,title}, score, created_at), next_cursor.posts[] (post_id, title, subreddit, author, score, num_comments, url, created_at), next_cursor.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
}
is_nsfw flag so the user can decide.post_id and that comment's reply_cursor (passed as cursor).400 means an invalid or missing parameter (e.g. no post_id/url) — fix and retry.401 means the API key is invalid or missing. Check SCAVIO_API_KEY.429 means rate or usage limit exceeded. Wait before retrying. See https://scavio.dev/docs/rate-limits.502 / 503 mean upstream is temporarily unavailable. Wait a few seconds before retrying.SCAVIO_API_KEY is not set, prompt the user to export it before continuing.pip install langchain-scavio
from langchain_scavio import ScavioSearchTool
tool = ScavioSearchTool(engine="reddit")