RedditapisRedditapis
Posts

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.

GET/api/reddit/by_id/:fullnames$0.002 / call

Bulk-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

ParameterTypeRequiredDescription
fullnamesstringYesComma-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

FieldTypeNotes
idstringPost id without prefix
namestringFull id with t3_ prefix
titlestringPost title
authorstringUsername (no u/ prefix)
permalinkstringPath on reddit.com
urlstringFull reddit.com URL
link_urlstring | nullExternal link / media URL. null for self/text posts.
textstringSelf-post body (empty for link/image posts)
subredditstringSubreddit the post is in (no r/ prefix)
upvotesnumberNet votes (upvotes − downvotes)
commentsnumberComment count
createdstringISO-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.

FieldTypeNotes
listing_statuscomplete | truncated | unknownThe field to branch on.
fullnames_requestednumberDistinct fullnames you asked for, after duplicates are dropped.
posts_returnednumberPosts actually delivered. Never greater than fullnames_requested.
truncatedbooleantrue whenever you got fewer posts than fullnames.
missing_fullnamesstring[]Exactly which ids did not come back, in request order.
upstream_callsnumberReads spent at Reddit for this request. Normally 1.
hintstring | nullPlain-language explanation, safe to show a human. null when complete.
  • complete means every fullname you asked for came back. Nothing is missing.
  • truncated means Reddit was still handing over more posts when this request reached its upstream read budget. The ids in missing_fullnames were not fetched, and asking for them again in a smaller batch will get them.
  • unknown means 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.

On this page