Reddit .json 403 Forbidden: what changed and what to use now

Why unauthenticated Reddit .json requests return 403, which deadlines apply to RSS and the public API, and the compliant routes for public post data.

403 Forbidden on reddit.com/.../.json

Short answer

Reddit’s public `.json` URLs return Forbidden as Reddit closes unauthenticated access to public data. Continued access requires a registered Developer Platform app within its permitted scope or a commercial data agreement.

Diagnosis checked 2026-11-12; sources below.

Why it happens

Reddit is closing unauthenticated access to public data: new public API requests stopped on October 31, 2026, RSS support ends November 13, 2026, and removal of access for unregistered apps begins January 12, 2027. A 403 on a .json URL is that closure reaching your request. Source: Reddit infrastructure update.

Do this now

  1. Fix 1, documented: If you already have a registered script app: authenticate and call oauth.reddit.com. Script apps only reach the developer's own account context, and Reddit requires apps to register with the Developer Platform before January 12, 2027. Source: Reddit OAuth2 quick start (script apps).

    # 1. token (script app: your client id and secret, your Reddit username and password)
    curl -X POST -d 'grant_type=password&username=<USER>&password=<PASS>' \
      --user '<CLIENT_ID>:<CLIENT_SECRET>' -A 'my-app/0.1 by <USER>' \
      https://www.reddit.com/api/v1/access_token
    
    # 2. requests go to oauth.reddit.com with the bearer token and a unique User-Agent
    curl -H 'Authorization: bearer <ACCESS_TOKEN>' -A 'my-app/0.1 by <USER>' \
      'https://oauth.reddit.com/r/<SUBREDDIT>/new?limit=100'
  2. If the data is yours or your use fits the official terms: Reddit Data API (Limited access). Commercial use requires a data agreement. Pricing is not published as a public rate card.
  3. Fix 2, hosted: For new posts from a subreddit at volume, run a hosted route instead of patching your own requests: Reddit Subreddit Post & Comment Harvester. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
  4. Compare every route, with fields and prices, on the Reddit page.

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
    "subreddits": [
        "python"
    ],
    "maxPosts": 25,
    "maxItems": 10000,
    "sort": "new",
    "timeFilter": "day",
    "includeComments": False,
    "maxCommentsPerPost": 0,
    "commentSort": "confidence",
    "includeNSFW": False,
    "onlyWithFlair": False,
    "excludeStickied": False,
    "excludeCrossposts": False,
    "excludeSpoilers": False,
    "excludeDeletedAuthor": False,
    "fullSubreddit": False
}

run = client.actor("vexaloom-labs/reddit-subreddit-post-and-comment-harvester").call(run_input=run_input)
if run is None:
    raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

pip install apify-client

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
    "subreddits": [
        "python"
    ],
    "maxPosts": 25,
    "maxItems": 10000,
    "sort": "new",
    "timeFilter": "day",
    "includeComments": false,
    "maxCommentsPerPost": 0,
    "commentSort": "confidence",
    "includeNSFW": false,
    "onlyWithFlair": false,
    "excludeStickied": false,
    "excludeCrossposts": false,
    "excludeSpoilers": false,
    "excludeDeletedAuthor": false,
    "fullSubreddit": false
};

const run = await client.actor("vexaloom-labs/reddit-subreddit-post-and-comment-harvester").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

npm install apify-client

cURL

curl -X POST "https://api.apify.com/v2/actors/vexaloom-labs~reddit-subreddit-post-and-comment-harvester/run-sync-get-dataset-items"   -H "Authorization: Bearer $APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"subreddits":["python"],"maxPosts":25,"maxItems":10000,"sort":"new","timeFilter":"day","includeComments":false,"maxCommentsPerPost":0,"commentSort":"confidence","includeNSFW":false,"onlyWithFlair":false,"excludeStickied":false,"excludeCrossposts":false,"excludeSpoilers":false,"excludeDeletedAuthor":false,"fullSubreddit":false}'

Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).

MCP (AI agents)

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vexaloom-labs/reddit-subreddit-post-and-comment-harvester",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}

Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.

Open Reddit Subreddit Post & Comment Harvester in Apify Store

Routes that work for Reddit data

The official route first, then the catalogue Actors that fit this problem (new posts from a subreddit), by their published fields. Store figures are the publisher's public numbers.

Routes for Reddit data
RouteCore fieldsPrice / 1KSuccess, 30 daysLink
Limited accessReddit Data APInot comparedbelowOfficial docs
Reddit Subreddit Post & Comment Harvester5/7$0.9918 runs, too few to rateOpen in Apify Store
Reddit Multi-Mode Scraper for Posts, Comments & Profiles5/7$0.995 runs, too few to rateOpen in Apify Store
Reddit Multi-Mode Scraper with Advanced Pro Filters5/7$0.995 runs, too few to rateOpen in Apify Store

Official price: Commercial use requires a data agreement. Pricing is not published as a public rate card. Compare all 17 Reddit routes.

The facts behind the error

FactValue
What changedReddit is closing unauthenticated public data access
RSS support endsNovember 13, 2026
Remaining public API endsMarch 2027
Compliant routeRegistered Developer Platform app or commercial data agreement
Unregistered app access removalBegins January 12, 2027

Why the request now fails

Reddit is withdrawing the unauthenticated access that public `.json` collectors relied on. The infrastructure announcement describes this closure, so treat the response as an access change when planning repairs.

What an existing script app can do

If you already have a registered script app, authenticate and send requests to `oauth.reddit.com`, following the OAuth quick start. Script apps are limited to the developer’s own account context, and apps must register with the Developer Platform before January 12, 2027.

When to stop fighting the error

Stop patching an anonymous `.json` collector when its operation depends on continued public access without registration. For ongoing subreddit posts, move to a registered Developer Platform app that permits the job or arrange commercial data access.

Questions people ask

Will changing the user agent restore anonymous access?

Changing a request header leaves the request unauthenticated. Move the collector to a permitted access route instead of relying on header changes.

Can an existing script app collect arbitrary public Reddit data?

The script app route is limited to the developer’s own account context. Check that scope against the collection job before migrating the requests.

Is RSS a useful replacement for the failed request?

Reddit RSS support ends November 13, 2026. It offers no lasting migration path for a collector that needs continuing subreddit updates.

Can an existing public API integration stay unchanged?

Reddit’s migration schedule ends the remaining public API in March 2027. Use the developer migration guidance to move to the registered route appropriate to the application.

Sources

Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.

Content updated 2026-11-12Data checked 2026-11-12

Get Reddit data with a catalogue Actor

Reddit Comment Thread Scraper with Score & Keyword Filters returns 6 of 7 core Reddit fields at $0.99 per 1,000 results. Compare all 17 Reddit routes.

Open in Apify Store