Search Reddit Image, Video, and Gallery Posts
Search Reddit posts that carry an image, video, or gallery, with a kind filter and direct media URLs. Includes the pre-filter count so you can page accurately.
/api/reddit/search/media$0.002 / callSearch posts that carry media, and get the media URL back with each result.
Reach for this instead of Search Posts when you only
want posts with an image, video, or gallery attached, and you want the direct
media_url without re-deriving it per post. It is the same underlying Reddit
search, narrowed to media and reshaped for it.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | Yes | Search query |
kind | string | No | image | video | gallery | all (default all) |
sort | string | No | relevance | new | hot | top | comments (default relevance) |
t | string | No | hour | day | week | month | year | all |
nsfw | boolean | No | true to include NSFW (Safe Search off) |
limit | number | No | Posts to fetch before the media filter, 1-100 (default 25) |
after | string | No | Pagination cursor (a t3_ post fullname) |
kind is the parameter that distinguishes this endpoint from its siblings.
It maps to Reddit's own post classification: image is post_hint=image,
video covers both Reddit-hosted and embedded third-party video, and gallery
is a multi-image album post.
limit applies before the filter
Read this before you build pagination on top of the endpoint.
limit bounds how many posts we ask Reddit for. The media filter runs after
that, on our side, so a request for 25 returns 25 or fewer, and the shortfall is
the non-media posts that were dropped. filtered_from reports the pre-filter
count so you can tell the two apart.
Measured on q=golden retriever, limit=25:
kind | posts returned | filtered_from |
|---|---|---|
image | 4 | 25 |
video | 17 | 25 |
gallery | 3 | 25 |
all | 24 | 25 |
A short page is normal and does not mean the results are exhausted. Keep paging
on after until it comes back null, and count what you have kept rather than
counting pages.
Example
curl -H "Authorization: Bearer $TOKEN" \
"https://api.redditapis.com/api/reddit/search/media?q=golden+retriever&kind=image"const response = await fetch(
"https://api.redditapis.com/api/reddit/search/media?q=golden+retriever&kind=image",
{ headers: { Authorization: "Bearer TOKEN" } }
);import requests
response = requests.get(
"https://api.redditapis.com/api/reddit/search/media",
params={"q": "golden retriever", "kind": "image"},
headers={"Authorization": "Bearer TOKEN"},
)Response Shape
{
"posts": [
{
"id": "1nv8cae",
"title": "Some advice and cautions for those thinking about getting a golden retriever.",
"author": "rowsdowers_mustache",
"subreddit": "goldenretrievers",
"upvotes": 6064,
"comments": 305,
"url": "https://reddit.com/r/goldenretrievers/comments/1nv8cae/some_advice_and_cautions_for_those_thinking_about/",
"kind": "gallery",
"media_url": "https://www.reddit.com/gallery/1nv8cae",
"thumbnail": "https://b.thumbs.redditmedia.com/ElL5U5oScVGf0WgCWhPEgqf8H-e9sUzgaA3ayyXPIrY.jpg",
"is_video": false,
"is_gallery": true,
"created": "2025-10-01T13:33:40.000Z"
}
],
"after": "t3_1idundv",
"filtered_from": 25
}Response Fields
| Field | Type | Notes |
|---|---|---|
id | string | Post id without the t3_ prefix |
title | string | Post title |
author | string | Username, no u/ prefix |
subreddit | string | Subreddit name, no r/ prefix |
upvotes | number | Post score |
comments | number | Comment count |
url | string | Permalink on reddit.com |
kind | string | "image", "video", or "gallery". Resolved per post, so it is set even when you queried kind=all. |
media_url | string | Direct media URL. For a gallery this is the album page, not a single image. |
thumbnail | string | null | Thumbnail URL. null when Reddit returns a placeholder such as self or nsfw rather than a real URL. |
is_video | boolean | Reddit-hosted or embedded video |
is_gallery | boolean | Multi-image album post |
created | string | ISO-8601 post creation time |
after | string | null | Pagination cursor for the next page |
filtered_from | number | How many posts came back from Reddit before the media filter |
Reaching media past the listing cap
A subreddit listing stops at roughly 1000 posts, which is the cap described in
Pagination depth. Search is a separate
listing with its own budget, so a media search reaches media posts that paging
/api/reddit/posts will not. Narrowing with t splits
the range further, since each timeframe is its own listing.
This endpoint has no subreddit parameter, so it always searches site-wide.
To confine it to one subreddit, put Reddit's subreddit: operator in the query:
q=subreddit:goldenretrievers puppyThat returns media posts from r/goldenretrievers only. If you want a
subreddit-restricted search over all posts rather than media, use
/api/reddit/search, which does take a subreddit
parameter.
Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.
Search Communities
Search subreddits by name or topic — the Communities tab on reddit.com. Verified to match Reddit's UI rank order for SFW and NSFW queries, with pagination.
Search Users
Search Reddit accounts by username, the People tab on reddit.com search. Returns karma totals, avatar, account age, and profile blurb, with pagination.
