Coding with AI?
Connect your agent to our MCP and let it integrate any endpoint for you in one shot.
Reddit Trending Posts
Get the posts trending across Reddit (r/popular, or r/all), worldwide or in one country, sorted hot, new, top, rising or controversial. Returns the same post fields as Post Details, 25 per page.
Endpoint
GET /v1/reddit/trending
Price: $0.003 per page Free tier: 50 requests/month
Parameters
| Parameter | Required | Description |
|---|---|---|
sort_by |
No | Sort order: hot, most_recent, top, rising, or controversial (default: hot) |
posted_ago |
No | Time window for sort_by=top or sort_by=controversial: 1h, 24h, 7d, 30d, 12m, or all (default: 24h). Rejected with any other sort_by. |
feed |
No | popular (r/popular: the most active posts in public, non-NSFW communities) or all (r/all: every community) (default: popular) |
country |
No | One country’s r/popular, as on reddit.com: AR, AU, BG, CA, CL, CO, CZ, DE, ES, FI, FR, GB, GR, HR, HU, IE, IN, IS, IT, JP, MX, MY, NZ, PH, PL, PR, PT, RO, RS, SE, SG, TH, TR, TW or US (default: worldwide). Only with feed=popular. |
pages |
No | Number of pages to fetch, 1-20 (default: 1). Each page returns up to 25 posts. |
get_sentiment |
No | Set to true to add AI emotion analysis (Plutchik’s Wheel) to each result. Adds +$0.001 per page to the cost. Returns emotion scores, dominant emotion, intensity, and polarity. |
Response Fields
| Field | Type | Description |
|---|---|---|
posts |
array | Trending posts |
posts[].post_id |
string | Post ID (the base-36 ID in the post URL) |
posts[].title |
string | Post title |
posts[].url |
string | Direct link to the post |
posts[].date |
string | Publication date and time (UTC) |
posts[].author |
string | Author’s Reddit username ([deleted] for a deleted account) |
posts[].author_url |
string | Link to the author’s profile (empty for a deleted account) |
posts[].source |
string | "Reddit" |
posts[].domain |
string | "reddit.com" |
posts[].snippet |
string | Post text (the title for link, image and video posts) |
posts[].subreddit |
string | Subreddit name |
posts[].upvotes |
integer | Net upvotes (upvotes minus downvotes) |
posts[].upvote_ratio |
number | Fraction of votes that are upvotes, between 0 and 1 |
posts[].comments |
integer | Number of comments |
posts[].crossposts |
integer | Number of times the post has been crossposted |
posts[].flair |
string | Post flair text, or empty string |
posts[].link_url |
string | The URL a link, image or video post shares (empty for text posts) |
posts[].thumbnail |
string | Thumbnail image URL, or empty string |
posts[].is_video |
boolean | Whether the post is a Reddit-hosted video |
posts[].nsfw |
boolean | Whether the post is marked NSFW |
posts[].spoiler |
boolean | Whether the post is marked as a spoiler |
posts[].locked |
boolean | Whether the post is locked to new comments |
posts[].stickied |
boolean | Whether the post is pinned in its subreddit |
posts[].video_url |
string | MP4 file of a Reddit-hosted video, or empty string. It can be silent (Reddit stores most video sound separately), so use video_hls_url for video with sound. Reddit can expire video links, so use them soon after fetching |
posts[].video_hls_url |
string | HLS stream (with sound) of a Reddit-hosted video, or empty string. Reddit can expire this link too |
posts[].images |
array | Image URLs: every image of a gallery post, in order, or the image of an image post (empty otherwise) |
posts[].sentiment |
object/null | Emotion analysis results. Only present when get_sentiment=true. Returns null if analysis fails. |
posts[].sentiment.emotions |
object | Plutchik emotion scores (0-100) for: joy, trust, fear, surprise, sadness, disgust, anger, anticipation. |
posts[].sentiment.dominant_emotion |
string | The emotion with the highest score. |
posts[].sentiment.emotional_intensity |
integer | Overall emotional intensity on a scale of 0-10. |
posts[].sentiment.polarity |
string | Overall sentiment polarity: positive, negative, or neutral. |
sort_by |
string | The sort order used |
pages |
integer | Number of pages returned |
count |
integer | Number of posts returned |
Example Request
cURL
curl "https://apidirect.io/v1/reddit/trending?sort_by=hot&pages=2" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
response = requests.get(
"https://apidirect.io/v1/reddit/trending",
headers={"X-API-Key": "YOUR_API_KEY"},
params={
"sort_by": "hot",
"pages": 2
}
)
print(response.json())
Example Response
{
"posts": [
{
"post_id": "1x91fou",
"title": "Tommy asked a question. Abdul El-Sayed answered and no one physically harmed Tommy.",
"url": "https://www.reddit.com/r/BlackPeopleofReddit/comments/1x91fou/tommy_asked_a_question_abdul_elsayed_answered_and/",
"date": "2026-10-18 11:58:02",
"author": "Damiana1111",
"author_url": "https://www.reddit.com/user/Damiana1111",
"source": "Reddit",
"domain": "reddit.com",
"snippet": "**\"Answer the question, Tommy. Everybody knows the answer to it.\"**",
"subreddit": "BlackPeopleofReddit",
"upvotes": 12357,
"upvote_ratio": 0.98,
"comments": 871,
"crossposts": 11,
"flair": "Politics",
"link_url": "https://v.redd.it/2krz9t3ht7wh1",
"thumbnail": "https://external-preview.redd.it/MDU3ZnhwMmh0N3doMVwiL369t9IGvDaBgYRPof2vTwA6JFUwNQ-nlvrN4aju.png?width=140&height=140&crop=1:1,smart&format=jpg&auto=webp&s=dd43b4c3a370f0dbcf009a0de277bacdbd839ccc",
"is_video": true,
"nsfw": false,
"spoiler": false,
"locked": false,
"stickied": false,
"video_url": "https://v.redd.it/2krz9t3ht7wh1/CMAF_480.mp4?source=fallback",
"video_hls_url": "https://v.redd.it/2krz9t3ht7wh1/HLSPlaylist.m3u8?a=1794925761%2COGE5NGZlNjIxNzhkYmE4Y2ZiMzU1MDU3NmIzNDViMGJjNzZjZWU5MTkyMjEzYWMxM2EwM2Y4N2JiOWQ3ZTdjZQ%3D%3D&v=1&f=sd",
"images": [],
"sentiment": {
"emotions": {
"joy": 40,
"trust": 55,
"fear": 0,
"surprise": 10,
"sadness": 0,
"disgust": 0,
"anger": 0,
"anticipation": 30
},
"dominant_emotion": "trust",
"emotional_intensity": 5,
"polarity": "positive"
}
}
],
"sort_by": "hot",
"pages": 2,
"count": 50
}