Bulk-Fetch Reddit Posts by Fullname (t3_ IDs)
Bulk-fetch posts by comma-separated t3_ fullnames, up to 100 per call. Hydrate post IDs you already have, or backfill fields, without one request per post.
/api/reddit/by_id/:fullnames$0.002 / callBulk-fetch posts by their t3_ fullnames in a single call, up to 100, instead
of a request per post. Returns the same post shape as
/api/reddit/posts, so every post field is identical.
This is the equivalent of Reddit's own /api/info (info.json) for posts, and it
takes the same up-to-100 batch of t3_ fullnames.
Looking for a single post?
This page is the bulk lookup, for many IDs at once. To fetch one post by its
id, use /api/reddit/post/{id} instead.
When to use this
Use it to hydrate IDs you already have: a search or listing hands you post fullnames, and this resolves them all in one read rather than one call each. Ordering follows Reddit; an unknown id is simply absent from the result, so compare what you asked for against what came back. One read, any batch size.
A common case is a backfill: you already stored post IDs but are missing a
field, most often created_utc, the post's publish date, and you need to fill
it in for a large set of posts. At 100 IDs per call, 10,000 posts is 100 calls.
Because the unit is the call, not the row, a 100-ID request costs the same
$0.002 as a 1-ID request. Batching at 100 is therefore 100x cheaper than one
call per post.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fullnames | string | Yes | Comma-separated post fullnames, each a t3_ prefix (e.g. t3_abc123,t3_def456). Up to 100. |
Each id must be a post fullname (t3_ followed by the base-36 id); a malformed
id returns 400, and more than 100 ids returns 400.
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://api.redditapis.com/api/reddit/by_id/t3_1tkez6e,t3_1sgjld3"const response = await fetch(
"https://api.redditapis.com/api/reddit/by_id/t3_1tkez6e,t3_1sgjld3",
{ headers: { Authorization: "Bearer TOKEN" } }
);
const data = await response.json();import requests
response = requests.get(
"https://api.redditapis.com/api/reddit/by_id/t3_1tkez6e,t3_1sgjld3",
headers={"Authorization": "Bearer TOKEN"},
)Response Shape
{
"posts": [
{
"id": "1tkez6e",
"name": "t3_1tkez6e",
"title": "...",
"author": "spez",
"permalink": "/r/announcements/comments/1tkez6e/...",
"url": "https://reddit.com/r/announcements/comments/1tkez6e/...",
"link_url": null,
"text": "...",
"subreddit": "announcements",
"upvotes": 4210,
"comments": 1200,
"created_utc": 1779445765,
"created": "2026-05-22T10:29:25.000Z"
}
],
"meta": {
"listing_status": "complete",
"fullnames_requested": 100,
"posts_returned": 100,
"truncated": false,
"missing_fullnames": [],
"upstream_calls": 1,
"hint": null
}
}Same post object as /api/reddit/posts,
see that page for the full per-post field reference (author_info,
upvote_ratio, is_crosspost, crosspost_origin, and the post flags).
Response Fields
| Field | Type | Notes |
|---|---|---|
id | string | Post id without prefix |
name | string | Full id with t3_ prefix |
title | string | Post title |
author | string | Username (no u/ prefix) |
permalink | string | Path on reddit.com |
url | string | Full reddit.com URL |
link_url | string | null | External link / media URL. null for self/text posts. |
text | string | Self-post body (empty for link/image posts) |
subreddit | string | Subreddit the post is in (no r/ prefix) |
upvotes | number | Net votes (upvotes − downvotes) |
comments | number | Comment count |
created | string | ISO-8601 timestamp of the post |
Completeness
The result is not guaranteed to be one-to-one with your request. Reddit drops
a fullname it will not serve, and a listing endpoint can cut a batch short. Every
response carries a meta block so you never have to diff the response against
your own request to find out.
| Field | Type | Notes |
|---|---|---|
listing_status | complete | truncated | unknown | The field to branch on. |
fullnames_requested | number | Distinct fullnames you asked for, after duplicates are dropped. |
posts_returned | number | Posts actually delivered. Never greater than fullnames_requested. |
truncated | boolean | true whenever you got fewer posts than fullnames. |
missing_fullnames | string[] | Exactly which ids did not come back, in request order. |
upstream_calls | number | Reads spent at Reddit for this request. Normally 1. |
hint | string | null | Plain-language explanation, safe to show a human. null when complete. |
completemeans every fullname you asked for came back. Nothing is missing.truncatedmeans Reddit was still handing over more posts when this request reached its upstream read budget. The ids inmissing_fullnameswere not fetched, and asking for them again in a smaller batch will get them.unknownmeans Reddit returned nothing for those ids and would not say why. A deleted, removed, or private post looks exactly like one Reddit withheld, so we do not guess. Treat them as unresolved rather than as posts that do not exist.
Billing is unchanged: the unit is the call you made, so a request that needed a
second read to deliver your full batch still costs $0.002.
Until 2026-08-14 this endpoint sent no limit to Reddit, so Reddit applied its
listing default of 25 and a request for 100 fullnames returned 25 with nothing
to indicate the rest had been dropped. It now sends limit, fetches a cut tail,
and reports what it could not deliver.
Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.
Visibility
Find out whether a Reddit post is still publicly visible or was quietly removed, filtered or hidden, in one call that compares the post against its author's public listing.
Comments
Fetch the full comment tree for a Reddit post by permalink, every top-level comment, nested reply, upvotes, and author metadata in one HTTP GET call.
