Reddit Media API: Fetch Images, Videos and Galleries Programmatically (2026)
How to fetch Reddit images, videos and galleries over a plain REST call. What i.redd.it, v.redd.it and gallery_data mean, why videos split audio from video, and how to pull media at scale for datasets in 2026.

If you have ever tried to pull images out of a subreddit, or download a video someone posted, and found the API hands you a web page instead of a file, you are not doing it wrong. Reddit stores media across three hosts in three different shapes, and none of them is a single ready-to-download field. A photo lives on i.redd.it, a Reddit-hosted video lives on v.redd.it as split audio and video tracks, and a multi-image gallery returns a gallery_data map you have to resolve yourself. This guide explains exactly what each media type looks like, how to fetch images, videos, and galleries over a plain REST call, and how to pull Reddit media at scale in 2026.
Not affiliated with Reddit Inc. redditapis.com is an independent, third-party REST layer built on Reddit's official API.
Last updated 2026-08-02.
TL;DR: Reddit media comes in three shapes and each needs different handling. Single images sit on
i.redd.itas the posturl. Reddit-hosted videos sit onv.redd.itand split audio from video behind a DASH manifest, so a naive download is silent until you mux the tracks. Galleries return agallery_datalist ofmedia_idvalues plus amedia_metadatamap you resolve into image links. A managed media endpoint flattens all three:GET /api/reddit/search/media?q=...&kind=image|video|gallery|allreturns each post with amedia_url, akind, andis_video/is_galleryflags. Use /signup to test it, or read the pricing guide.
- Images live on
i.redd.it; the posturlis the full-resolution file - Videos live on
v.redd.itas split DASH tracks; you mux audio and video to get sound - Galleries return
gallery_dataplusmedia_metadata, not direct image URLs - One media endpoint returns
media_url+kindand handles all three cases
Does the Reddit API let you download images, videos, and galleries?
Yes, the Reddit API exposes media on every post, but it does not give you one clean download field that works for all three types. Instead it returns a media type per post and points you at the right host: a single image post carries its file on i.redd.it, a Reddit-hosted video post points at v.redd.it, and a gallery post points at a reddit.com/gallery/<id> page while the real images sit in a separate metadata block. The work is in knowing which shape you have and handling each one. Developers hit this constantly, usually while trying to pull every image from a subreddit, in threads like this one asking whether the Reddit API even allows downloading images rather than scraping.
The three media shapes split cleanly by what the post object hands back, and a media search returns a normalized version of each so you branch on one field instead of three.
The practical takeaway is that "download Reddit media" is really three jobs wearing one name. Getting an image is a direct download; getting a video means dealing with split streams; getting a gallery means resolving a metadata map into a list. A media endpoint does the classification for you and returns a media_url plus a kind, so the rest of this guide walks each type and shows the one call that covers all of them. A short visual overview of pulling images from Reddit with Python sets the scene:
The one call: /search/media for images, videos and galleries
To fetch Reddit media over REST, you send one authenticated request to a media search endpoint and read back a normalized list of media posts. There is no OAuth app to register, no HTML to parse, and no per-type branching before you even have the data: the endpoint runs a Reddit search, keeps only the posts that carry media, classifies each one, and returns a clean object. The call takes a query plus an optional kind filter and an optional sort and time window, and it is built on Reddit's own documented search endpoint so the query syntax is the same one you already know. Here it is in curl, using your API key in place of the placeholder:
curl -s "https://api.redditapis.com/api/reddit/search/media?q=subreddit%3AEarthPorn&kind=image&limit=3&sort=top&t=week" \
-H "Authorization: Bearer YOUR_API_KEY"
Run against the live API on 2026-08-02, that call returned three image posts from r/EarthPorn, each with a media_url on i.redd.it, a thumbnail on preview.redd.it, and the flags below. The same request in Python, printing each post's media link:
import requests
API_KEY = "YOUR_API_KEY"
resp = requests.get(
"https://api.redditapis.com/api/reddit/search/media",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"q": "subreddit:EarthPorn", "kind": "image", "limit": 3, "sort": "top", "t": "week"},
timeout=30,
)
resp.raise_for_status()
data = resp.json()
for p in data["posts"]:
print(f"[{p['kind']:>7}] r/{p['subreddit']} {p['media_url']}")
The response is a posts array plus an after cursor and a filtered_from count that tells you how many raw results were narrowed to media. A first-party call on 2026-08-02 returned the top r/EarthPorn image as https://i.redd.it/g3yalyfgn5gh1.jpeg, titled "Screaming Face, Madeira / Portugal", with a preview.redd.it thumbnail and is_video/is_gallery both false. The one endpoint replaces the three-way branch you would otherwise write against Reddit's raw post objects, and it pairs with the Reddit search API tutorial for the text-search side.
The media response, field by field
A media API is only as useful as the fields it hands back, and the media endpoint returns a flat, predictable object per post rather than the sprawling raw Reddit shape. Every media post comes back with the identifiers you need to attribute it, the media host URL you download from, a small preview for grids, and the two boolean flags that tell you which handling branch to take. Knowing the shape upfront means you never probe the response by trial and error.
The media search response returns these fields per post.
Two fields do most of the work. media_url is the hosted asset: an i.redd.it file for an image, a v.redd.it base for a video, or a reddit.com/gallery/<id> page for a gallery. kind is the classification (image, video, or gallery) that tells you how to treat media_url, and it is backed by is_video and is_gallery booleans if you prefer to branch on those. Alongside the posts array, the response carries an after cursor for pagination and a filtered_from count so you always know how aggressively the media filter trimmed the raw search. Because everything arrives as clean JSON, you drop it straight into a pipeline without an HTML-stripping step, unlike the RSS feed path which returns presentation markup.
Start building with Redditapis
Reads $0.002, votes $0.005, writes $0.012, DMs $0.025. $0.50 free credits.
Images: from i.redd.it to the full-resolution file
An image post is the simplest media type, because Reddit hands you the full-resolution file directly. For a single-image submission, post_hint is "image" and the post's url is the https://i.redd.it/<id>.jpeg (or .png) source, which is the actual upload at full size. Reddit also generates a set of resized copies under preview.images[0].resolutions, from small thumbnails up to a capped source, which are handy when you want a grid without downloading every original. A media endpoint returns the full-size i.redd.it link as media_url and the small crop as thumbnail, so you never confuse the two.
Here is what an image post actually returns, using the live r/EarthPorn result.
The one thing worth knowing is the difference between the source and the preview. The i.redd.it URL in media_url is the original file, so that is what you download when you want the real image. The preview.redd.it URL in thumbnail is a resized, cropped, and re-encoded copy Reddit made for feeds, and it carries query parameters and a signature, so it is not a clean original. For a dataset you want the source; for a fast visual index you want the preview.
On Reddit's own raw JSON, documented in the Reddit Data API reference, the resized variants live under preview.images[].resolutions, each an object with a url, a width, and a height, ordered from smallest to largest, so you can pick the size that fits your layout without downloading the full-resolution original. There is one edge to watch: the preview block is only enabled when Reddit has generated previews, and cross-posted or externally hosted images can carry an external-preview.redd.it URL instead of an i.redd.it source, which is a preview rather than a real upload. A media endpoint smooths this by always putting the best download URL in media_url, but if you parse the raw JSON yourself, prefer the post url for an i.redd.it image and fall back to preview only when the source is not a direct upload. The scraping guide covers why pulling these over the API beats parsing them out of HTML that changes shape without warning.
Videos: the v.redd.it split-stream problem
Video is where most Reddit media downloaders trip, because a Reddit-hosted video is not a single MP4 file. Reddit stores the picture track and the audio track separately and serves them through a DASH manifest, so if you grab the obvious URL you get a clip with no sound. In the raw post the details sit under media.reddit_video: a fallback_url pointing at the highest-quality video track (no audio), a dash_url ending in DASHPlaylist.mpd, and an hls_url ending in HLSPlaylist.m3u8. To get a playable file with audio you either let a DASH-aware player read the manifest, or you download both tracks and mux them with a tool like FFmpeg. A media endpoint returns the v.redd.it base as media_url and sets is_video: true, so you know to run that step.
The split is the single most-reported Reddit media surprise, and it has spawned a small industry of tools that exist only to glue the two tracks back together.
I built a website that allows you to download v.redd.it videos
Once you know the tracks are separate, the fix is mechanical, but it is a real pipeline rather than a single download.
The recurring question in the developer community is exactly this: how do you turn a v.redd.it link into a real file, and why is the sound missing when you do it the naive way.
How to download video from reddit
The reason the split exists is that Reddit serves video with MPEG-DASH, the same adaptive-streaming approach big video platforms use: the picture is offered at several bitrates and the audio is a separate track, and a player picks the right video rendition for the viewer's connection at play time. That is great for streaming and awkward for downloading, because "the file" is really a manifest that references several files. If you build the pipeline yourself with a wrapper like PRAW, you read submission.media["reddit_video"]["fallback_url"] for the top video track, then fetch the audio track referenced by the dash_url manifest, then mux the two. The DASH audio track is not always at a predictable path across older and newer posts, which is exactly why so many hand-rolled downloaders return silent clips on some posts and correct ones on others.
The honest summary is that video is two downloads plus a mux, and there is no way around the split because it is how Reddit serves adaptive streaming. A media endpoint cannot make the audio and video one file for you at the CDN, but it can hand you the classified v.redd.it base and the is_video flag so your pipeline branches correctly, instead of you sniffing post_hint and domain yourself. For a longer discussion of when to build this versus buy it, the Reddit scraper build-versus-buy guide runs the tradeoff.
Galleries: resolving gallery_data into image URLs
Galleries are the other place the API surprises people, because a gallery post hides its images behind a metadata map instead of putting them in url. For a multi-image submission, is_gallery is true, url points at a https://www.reddit.com/gallery/<id> page, and the actual images are described by two fields: gallery_data.items, an ordered list of objects each carrying a media_id, and media_metadata, a map from each media_id to that image's type, dimensions, and hosted URLs on i.redd.it. To build the list of image links you walk gallery_data.items in order and look up each media_id in media_metadata. A media endpoint flags the post is_gallery: true and returns the gallery media_url, so you know to run the resolution step.
The pain is common enough that the "gallery URL is an HTML page, not an image" problem is a standing question about converting gallery URLs into image links in the community.
Laid out, the resolution is a small ordered join between the two fields.
The detail that trips people is ordering and format. The media_metadata map is keyed by media_id and is not ordered, so you must take the order from gallery_data.items, not from the map's key order, or the images come back shuffled. Each media_metadata entry also carries the mime type (m, for example image/jpeg) and a set of resized copies (p) plus the source (s), so you can pick the resolution you want the same way you do for a single image. Two more edges are worth knowing before you ship gallery handling. First, an individual gallery item can be a GIF or even an animated image, in which case its media_metadata entry has a different e type and its own URL fields, so branching only on "image" can drop a frame. Second, a gallery item that a moderator or the author removed shows up with a status other than valid, and you skip it rather than treating a missing URL as an error. A first-party kind=all search on 2026-08-02 returned a real gallery, "Alien space rock" in r/whatsthisrock, with media_url https://www.reddit.com/gallery/1v93535 and is_gallery: true, which is the flag that tells your code to run this join. This gallery-resolution pain is one of the most recurring questions in r/redditdev, and the comments endpoint uses a similar resolve-the-tree pattern for discussion data.
Filtering by media type: image, video, gallery, or all
When you only want one kind of media, you filter at the API instead of pulling everything and discarding most of it. The media endpoint takes a kind parameter with four values: kind=image returns only image posts, kind=video returns only Reddit-hosted videos, kind=gallery returns only multi-image galleries, and kind=all (the default) returns every media post mixed together. Under the hood the filter reads Reddit's own signals, matching post_hint == "image" for images, is_video or a hosted-video post_hint for videos, and is_gallery for galleries, so the classification is Reddit's, not a guess.
The four filters map to the four handling paths cleanly.
The practical value of filtering server-side is cost and clarity. If you are building an image dataset, kind=image means every returned post is directly downloadable and you never spend a branch on video muxing or gallery resolution. If you are collecting short clips, kind=video means every post is a v.redd.it base ready for the mux step. The default kind=all is right when you want the full media picture of a subreddit or query and will branch on kind per post anyway. Combine the filter with Reddit's search operators, covered in the advanced search filters guide, to scope by subreddit, author, or exact phrase before the media filter even runs.
The cheapest Reddit API. Try it free.
Reads from $0.002 per call. $0.50 free credits. No credit card required.
Pulling Reddit media at scale for a dataset
Bulk media extraction is the reason a media endpoint earns its place: pulling one image is a curiosity, but pulling a labeled set of thousands is a real build. Reddit's images and videos have become a standard corpus for training and research, which is part of why access tightened in the first place, and the demand for structured media at scale has only grown.

Aakash Gupta
@aakashgupta
50% of all relationship advice on Reddit is “leave.” 15 years of data, 52 million comments, and the trend line only goes one direction. A researcher filtered r/relationship_advice down to 1,166,592 quality comments and tracked what people actually recommend. In 2010, “End https:… Show more

Reddit's usefulness as a data source is exactly why so much tooling now points at it, from research corpora to multimodal training sets.

Bearly AI
@bearlyai
Scott Alexander on AI agents emergent behaviour on Moltbook: “Reddit is one of the prime sources for AI training data. So AIs ought to be unusually good at simulating Redditors, compared to other tasks. Put them in a Reddit-like environment and let them cook, and they can https… Show more

The pattern for a dataset run is a metadata pass followed by a download pass. First you page through the media search collecting media_url, kind, and attribution for every post; then you download the files in a separate, parallelizable pass, sending images straight to disk, videos into the mux step, and galleries into the resolve step.
The pagination itself is a cursor loop. Each call returns an after value; you pass it back as after= on the next call to fetch the next batch, and you stop when the cursor stops advancing or you reach your target count. Splitting the metadata pass from the download pass matters because the two have different failure modes: the search calls are cheap reads you can retry freely, while the file downloads are large transfers you want to parallelize and resume. Keeping them separate means a failed download never forces you to re-run the search, and it lets you dedupe by media_url before spending any bandwidth. The pagination guide covers the cursor mechanics in full, including how it interacts with rate limits, and Reddit as a RAG data source covers feeding the results downstream.
What a media API costs, and its honest limits
Media search is priced like any other read, and it is honest about where the endpoint's job ends. A media search call is a standard read, billed around $0.002, the same tier as any other read request, and that covers the metadata pass that finds the posts and returns their media URLs. Downloading the actual image and video bytes from Reddit's CDN is a separate transfer that the API does not bill, because those bytes come straight from i.redd.it or v.redd.it. So the cost of a dataset run is roughly the number of search reads you make, not the size of the media you pull.
The cost is only half the picture; the limits matter just as much.
The honest limits are worth stating plainly. The endpoint returns media metadata and classification, not finished files: a video still needs the mux step to carry audio, and a gallery still needs the resolve step to become a list of images. Media search reads Reddit's current, reachable results, so it surfaces the media that a search returns rather than a full historical archive of everything ever posted. And over-18 content is excluded unless you opt in with nsfw=true, which keeps a default index safe but means you make that choice deliberately. None of this is hidden, because the response tells you the kind and the flags for every post.
One more limit is legal rather than technical, and it applies no matter how you pull the media: the images, videos, and galleries you fetch are user content served under Reddit's Data API Terms, and commercial or high-volume use is governed by them and by the guidance in Reddit's Data API Wiki. A managed API handles the access mechanics, but honoring the usage rules for the media you collect, and respecting the rights of the people who posted it, stays your responsibility. That matters most for dataset builds, where the temptation is to grab everything; scope the pull to what you actually need and keep the attribution the response already hands you. For a full cost comparison against running your own access or a general scraping platform, see the pricing guide and the pricing versus general scraping platforms breakdown.
What builders do with Reddit media
Media search is not an academic feature; it powers a specific set of real builds that text search cannot serve. The common thread is that the value is in the pixels and frames, not the title: the training corpus, the trend monitor, the archive, and the moderation model all need the actual media, structured and at scale. Being able to pull images, videos, and galleries by query, filtered by type, turns a set of subreddits into a queryable media source.
The recurring use cases cluster into a handful of patterns.
- Dataset building: pull labeled image or video sets from topic-specific subreddits for training
- Trend and brand monitoring: watch for images and clips mentioning a product or logo
- Archival and backup: capture a subreddit's media before posts age out or get removed
- Multimodal AI context: feed images and video frames into a model alongside the discussion
- Content aggregation: build a themed feed of the top visual posts across communities
Dataset building is the heaviest user, because a media endpoint with a kind filter and pagination is exactly the shape a training pipeline wants. Trend monitoring watches for a logo or product in images and clips, not just in text. Archival captures a community's visual history before removal or decay takes it. Multimodal AI feeds the media alongside the comments so a model reasons about the whole post, which is the same job the Reddit API for AI agents guide covers on the text side. And aggregation builds a themed visual feed from the best posts across a set of subreddits, which starts with finding the right subreddits in the first place.
When you need something else, and the next step
Media search covers images, videos, and galleries, but it is not the answer to every Reddit-data question, and being honest about the edges saves you from forcing the wrong tool. If you want the text of a discussion rather than its media, that is post search or the comment search endpoints. If you already know a post and want its full comment tree, that is the comments endpoint. If you need a full historical archive of everything ever posted rather than what a search surfaces now, an archive like the ones covered in best Pushshift alternatives is the better fit. And if raw scraping is where you started, the death of the free JSON endpoint explains why the managed path keeps winning.
For the job this guide is about, fetching Reddit images, videos, and galleries by query over live data, a managed REST media endpoint is the path that handles all three shapes without you writing separate logic for each.
- Read the Reddit data API guide for the full access picture
- Compare the paths in dollars in the pricing guide
- Get an API key to test
/search/mediadirectly, with free credit at signup
Need to pull Reddit images, videos, and galleries, not just text? redditapis.com gives you media search behind one bearer token: GET /search/media with a kind filter for images, videos, or galleries, a clean media_url per post, and pagination for dataset-scale pulls. See pricing or get an API key with free credit at signup to fetch the media Reddit's raw JSON makes you resolve by hand.
Where these numbers come from.
Each row is a figure in this post and the artefact it was read from. Reddit's access rules and the third-party archives around them keep moving, so check the date on a source before you build against it.
- Reddit Data API documentation
- The official API whose post objects expose media through url, post_hint, media.reddit_video, and gallery_data.
- Reddit search endpoint reference (/dev/api)
- The GET /search documentation the media search is built on, including the type and include_over_18 parameters.
- Reddit Data API Terms
- The terms that govern how Reddit media and data may be accessed and used.
- MPEG-DASH (adaptive streaming)
- The adaptive-streaming format Reddit uses to serve v.redd.it video as split audio and video tracks.
- FFmpeg
- The tool used to mux Reddit's separate video and audio tracks into one playable file.
- redditapis.com API docs
- The managed /search/media endpoint and response shape referenced throughout.
Frequently asked questions.
Yes, but not in one clean field. Reddit's API returns a media type per post and points you at the hosted asset: single images live on `i.redd.it`, Reddit-hosted videos live on `v.redd.it` as split audio and video streams, and multi-image galleries return a `gallery_data` block plus a `media_metadata` map you have to resolve into individual image URLs yourself. There is no single `media` field that hands back a ready file for every type. A managed media endpoint flattens the three cases into one shape: `GET /api/reddit/search/media?q=...&kind=image|video|gallery|all` returns each matching post with a `media_url`, a `kind`, and `is_video`/`is_gallery` flags. Our [Reddit scraping guide](/blogs/how-to-scrape-reddit-2026) covers the wider data-access picture.
A single image post carries its full-resolution file on `i.redd.it`, and the API exposes it as the post's `url`. With a managed media endpoint you call `GET /api/reddit/search/media?q=your+query&kind=image` and read back each post's `media_url`, which is the `https://i.redd.it/<id>.jpeg` source, plus a smaller `thumbnail` on `preview.redd.it` for grids. On Reddit's own API the same file sits at `data.url` for `post_hint == "image"` posts, and the resized variants live under `preview.images[0].resolutions`. Either way you get a direct link to download. See the [Reddit search API tutorial](/blogs/reddit-search-api-tutorial-2026) for how the query side works.
A Reddit-hosted video on `v.redd.it` is not a single MP4. Reddit stores the picture track and the audio track separately and serves them through a DASH manifest, so a naive download of the fallback URL gives you video with no sound. In the raw Reddit JSON the details live under `media.reddit_video`: a `fallback_url` (the highest MP4 video track, no audio), a `dash_url` ending in `DASHPlaylist.mpd`, and an `hls_url` ending in `HLSPlaylist.m3u8`. To get a playable file with sound you mux the DASH audio and video tracks together with a tool like [FFmpeg](https://ffmpeg.org/). A managed media endpoint returns the `v.redd.it` base as `media_url` and flags `is_video: true`, so you know to run the mux step. The [comments guide](/blogs/reddit-api-comments-2026) covers a different fetch shape.
A gallery post (multiple images in one submission) does not put its images in `url`. Instead `url` points at a `https://www.reddit.com/gallery/<id>` page, `is_gallery` is `true`, and the actual images are described by two fields: `gallery_data.items`, an ordered list of `media_id` values, and `media_metadata`, a map from each `media_id` to that image's type and hosted URLs on `i.redd.it`. To resolve the gallery you walk `gallery_data.items` in order and look up each `media_id` in `media_metadata` to build the list of image links. A managed media endpoint flags the post `is_gallery: true` and returns the gallery `media_url`, so you can branch on gallery handling. This is the single most common Reddit media question in [r/redditdev](https://www.reddit.com/r/redditdev/).
They are three different Reddit media hosts with three different jobs. `i.redd.it` serves full-resolution single images uploaded to Reddit, and it is what you download for an image post. `v.redd.it` serves Reddit-hosted video as split DASH streams, so it needs a mux step to become a playable file with audio. `preview.redd.it` (and `external-preview.redd.it`) serves resized, cropped preview thumbnails that Reddit generates for feeds, useful for a grid but not the original asset. A media endpoint returns the source host in `media_url` and the small preview in `thumbnail`, so you never confuse the download URL with the thumbnail. The [RSS versus API guide](/blogs/reddit-rss-feed-vs-api-2026) contrasts how each surface exposes media.
Yes. A media endpoint takes a `kind` parameter that filters the result set to a single media type: `kind=image` returns only image posts, `kind=video` returns only Reddit-hosted videos, `kind=gallery` returns only multi-image galleries, and `kind=all` (the default) returns every media post mixed together. Under the hood the filter matches on Reddit's own signals: `post_hint == "image"` for images, `is_video` or a hosted-video `post_hint` for videos, and `is_gallery` for galleries. That lets you pull, say, only the videos from a subreddit search without post-filtering the response yourself. Pair it with the [advanced search filters](/blogs/reddit-advanced-search-filters-api-2026) to scope by subreddit or author.
You page through a media search and collect the asset URLs, then download the files in a separate pass. Each call returns a bounded batch plus an `after` cursor; you pass that cursor back as `after=` to fetch the next page, and you repeat until the cursor stops advancing or you hit your target count. Because the endpoint returns a clean `media_url` and `kind` per post, you can queue image downloads directly, branch video posts into a mux step, and expand galleries into their member images. This is the standard pattern for building an image or video dataset from a set of subreddits. The [pagination guide](/blogs/reddit-api-pagination-2026) covers the cursor mechanics, and [Reddit as a RAG data source](/blogs/reddit-rag-data-source-2026) covers feeding the results into a pipeline.
Because Reddit splits the audio and video into separate streams and you only downloaded one of them. The `fallback_url` under `media.reddit_video` points at the highest-quality video track, which carries no audio, so saving it directly gives you a silent clip. The audio lives in a separate track referenced by the DASH manifest at `dash_url`. To get sound you either let a DASH-aware player read the `.mpd` manifest, or you download the video track and the audio track and mux them with [FFmpeg](https://ffmpeg.org/). This split is the most common surprise when building a [Reddit scraper](/blogs/reddit-scraper-api-python-build-vs-buy-2026), and it is why so many downloader tools exist just to glue the two tracks back together.
For Reddit's own API, yes: reading media through the official Data API runs on an authenticated app, and since 2023 that app needs approval under the Responsible Builder Policy, which has become a common blocker in [r/redditdev](https://www.reddit.com/r/redditdev/). The media files themselves on `i.redd.it` and `v.redd.it` are served from Reddit's CDN, but discovering which posts have media, and getting the structured URLs, is an API job that runs through that access. A managed REST API sits in front of this: you authenticate with a single bearer token to the provider and skip running your own OAuth app and approval queue. The [authentication guide](/blogs/reddit-api-authentication-oauth-2026) covers the OAuth path in full.
On a managed REST API, a media search is a standard read, billed around $0.002 per call, the same tier as any other read request. That covers the metadata pass that returns the media URLs; downloading the actual image or video files from Reddit's CDN is a separate transfer that the API does not charge for, because those bytes come straight from `i.redd.it` or `v.redd.it`. So a run that finds ten thousand image posts costs about the price of ten thousand reads on the search side, and the file downloads are on you. Free credit at [signup](/signup) lets you measure the exact cost for your query shape, and the [pricing guide](/blogs/reddit-api-pricing-2026) breaks down the read tier.
Only if you explicitly ask for it. Media search defaults to excluding over-18 content, and you opt in per call with an `nsfw=true` parameter, which maps to Reddit's own `include_over_18` flag on the search. This mirrors Reddit's behavior, where age-restricted content is filtered out of default listings unless a request opts in. Leaving the flag off keeps results safe for a general index; turning it on is a deliberate choice you make per query. Whatever you build, the content still falls under Reddit's [Data API Terms](https://redditinc.com/policies/data-api-terms), so honor the usage rules for the media you pull.
Scraping HTML means fetching a page, parsing the markup, and guessing which tags hold the real image versus a thumbnail or an ad, and it breaks every time Reddit ships a layout change. A media endpoint returns structured JSON: a `media_url`, a `kind`, and the flags you branch on, with no HTML parsing and no layout coupling. It also handles the three media shapes for you, so you are not writing separate logic for `i.redd.it` images, `v.redd.it` DASH videos, and gallery resolution. For the full build-versus-buy tradeoff, the [Reddit scraper guide](/blogs/reddit-scraper-api-python-build-vs-buy-2026) walks the numbers, and the [death of the free JSON endpoint](/blogs/reddit-json-endpoint-dead-2026) explains why raw scraping keeps getting harder.
Keep reading.
Continue exploring related pages.
Reddit API documentation
The complete 2026 reference: auth, all 38 endpoints, and code.
Get a Reddit API key
Instant bearer token, no waitlist and no enterprise contract.
Reddit Responsible Builder Policy
Why Reddit denies API applications, and the managed REST bypass.
Reddit API use cases
14 use cases from AI training to brand monitoring and DMs.
Reddit Search API
Search posts, comments, users, and communities over one REST endpoint.
Reddit MCP server
Wrap the REST API as MCP tools for Claude, Cursor, and any MCP client.
Reddit API for AI agents
Live Reddit context for tool calls, MCP servers, and RAG pipelines.
Redditapis pricing
Endpoint-level costs and quick monthly totals - reads from $0.002 / call.
Reddit API cost calculator
Estimate monthly spend using your request volume.
Reddit API guides and tutorials
Tutorials, walkthroughs, and API deep-dives for developers.
Reddit API alternatives
Evaluate alternatives by cost model, limits, and integration fit.
Cheap Reddit API
The cheapest way to get Reddit data: $0.002 per call, no contract, no minimum.
Official Reddit API vs Redditapis
Access, setup, rate limits, and pricing, side by side.
PRAW alternative
A hosted Reddit REST API for any language, no app registration or OAuth.
Reddapi alternative
A maintained Reddit REST API with published pricing and write endpoints.
Reddit comment scraper alternative
The raw comment API: search and filter comments, historical and live, clean JSON.
Reddit scraper API
Hosted scraper API vs building your own: managed proxies, clean JSON.
RapidAPI Reddit alternative
A direct, maintained Reddit API with published pricing and write endpoints.
Bright Data Reddit alternative
A purpose-built Reddit API vs a general scraping platform: structured JSON, plus writes.
ScraperAPI Reddit alternative
A Reddit-native API vs a generic HTML fetcher: auth and pagination handled, typed JSON.
Reddit monitoring API
Build your own keyword and brand-mention monitor: search, comment search, and subreddit streams over REST.
Affiliate program
Earn 20% lifetime commissions - capped at $5,000/yr.
Reddit Vote API tutorial
Upvote and downvote a post programmatically via the REST API.
Reddit Data API: REST, no PRAW
REST endpoints for Reddit data with no PRAW and no OAuth dance.
Reddit scraping benchmarks
Real throughput, error rates, and cost benchmarks for Reddit scraping.
Reddit API answers
Direct answers on cost, access, rate limits, endpoints, and auth.
How much the Reddit API costs
Per-call pricing from $0.002 a read, with $0.50 in free credits.
Reddit API in Python
One requests call with a bearer token, no PRAW and no OAuth flow.
Reddit shadowban checker
Check if a Reddit account is shadowbanned in seconds, free and no login.
Similar reads.
More guides on the Reddit API, scraping, pricing, and MCP servers.








