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.
