Reddit Subreddit API. Send a subreddit or its link.
Rules, description and weekly visitors. We handle the proxies, blocks and platform changes.
Reddit Subreddit API at a glance
Returns a public subreddit from its name or link: title, description, rules with their explanations, creation date, privacy, NSFW flag and icon. It also has the banner, what the subreddit calls its members, and the weekly visitors and contributions Reddit shows.
GET /v1/reddit/subreddit
- 1 credit per request, $0.75–$1.97 per 1,000 requests
- 17 typed fields null when unknown
urlis all it needs, e.g.https://www.reddit.com/r/golang/- 100 credits free when you sign up, no card, so you can build before you spend
Send one request. Get 17 fields back.
Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.
$ npm install socialtapurl = https://www.reddit.com/r/golang/const params = new URLSearchParams({
url: "https://www.reddit.com/r/golang/",
});
const res = await fetch(`https://socialtap.dev/v1/reddit/subreddit?${params}`, {
headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);import os
import requests
res = requests.get(
"https://socialtap.dev/v1/reddit/subreddit",
params={"url": "https://www.reddit.com/r/golang/"},
headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])require "json"
require "net/http"
uri = URI("https://socialtap.dev/v1/reddit/subreddit")
uri.query = URI.encode_www_form('url' => 'https://www.reddit.com/r/golang/')
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = ENV.fetch("SOCIALTAP_API_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(req) }
body = JSON.parse(res.body)
raise "#{body["error"]["code"]}: #{body["error"]["message"]}" unless res.is_a?(Net::HTTPSuccess)
pp body["data"]
puts body["meta"]["credits_charged"]<?php
$query = http_build_query([
'url' => 'https://www.reddit.com/r/golang/',
]);
$ch = curl_init('https://socialtap.dev/v1/reddit/subreddit?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: ' . getenv('SOCIALTAP_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) >= 400) {
throw new RuntimeException($body['error']['code'] . ': ' . $body['error']['message']);
}
print_r($body['data']);
echo $body['meta']['credits_charged'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"os"
)
func main() {
q := url.Values{}
q.Set("url", "https://www.reddit.com/r/golang/")
req, err := http.NewRequest("GET", "https://socialtap.dev/v1/reddit/subreddit?"+q.Encode(), nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var body struct {
Data json.RawMessage `json:"data"`
Meta map[string]any `json:"meta"`
Error *struct {
Code string `json:"code"`
Message string `json:"message"`
} `json:"error"`
}
if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
log.Fatal(err)
}
if body.Error != nil {
log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
}
fmt.Println(string(body.Data), body.Meta["credits_charged"])
}curl -G 'https://socialtap.dev/v1/reddit/subreddit' \
--data-urlencode 'url=https://www.reddit.com/r/golang/' \
-H "x-api-key: $SOCIALTAP_API_KEY"{
"data": {
"approximate_fields": [],
"avatar_url": "https://styles.redditmedia.com/t5_2rc7j/styles/communityIcon_wy4riduoe9k11.png?width=128&frame=1&auto=webp&s=a9c9b6dba0f0655d79102b24e34b9d04706eb0d6",
"banner_url": "https://styles.redditmedia.com/t5_2rc7j/styles/bannerBackgroundImage_k15p9ugyd9k11.png?frame=1&auto=webp&s=d0fe21082f615ee236e0aff56e7f3c884565c48a",
"categories": [],
"created_at": "2009-11-11T00:54:28Z",
"description": "Ask questions and post articles about the Go programming language and related tools, events etc.",
"id": "t5_2rc7j",
"is_nsfw": false,
"metrics": {
"member_count": null
},
"moderators": [],
"name": "golang",
"platform": "reddit",
"platform_specific": {
"reddit": {
"is_quarantined": false,
"member_nickname": "gophers",
"weekly_contribution_count": 680,
"weekly_visitor_count": 74052
}
},
"privacy": "public",
"rules": [
{
"description": "Post is not in keeping with an inclusive and friendly technical atmosphere.",
"title": "Be friendly and welcoming."
},
{
"description": "Remember that people have varying communication styles and that not everyone is using their native language. (Meaning and tone can be lost in translation.)",
"title": "Be patient."
},
{
"description": "Productive communication requires effort. Think about how your words will be interpreted. Remember that sometimes it is best to refrain entirely from commenting.\n\nCheck for your answer in the subreddit FAQs and the Tour of Go before posting common questions, please.",
"title": "Be thoughtful."
}
],
"title": "The Go Programming Language",
"unknown_fields": [
"categories",
"moderators"
],
"url": "https://www.reddit.com/r/golang/"
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "reddit",
"source": "page",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 513,
"fetched_at": "2026-10-25T12:00:00Z",
"input": {
"kind": "community",
"id": "t5_2rc7j",
"url": "https://www.reddit.com/r/golang/"
},
"credits_remaining": 9999,
"client_request_id": null,
"warnings": []
}
}import { SocialTap } from "socialtap";
const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY
const res = await client.reddit.subreddit.get({ url: "https://www.reddit.com/r/golang/" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "url=" + encode("https://www.reddit.com/r/golang/");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://socialtap.dev/v1/reddit/subreddit?" + query))
.header("x-api-key", System.getenv("SOCIALTAP_API_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
// An error is {"error": {"code", "message", ...}}; success is {data, meta}, meta.credits_charged its price.
if (response.statusCode() >= 400) throw new RuntimeException(response.body());
System.out.println(response.body());
}
static String encode(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}
}using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("SOCIALTAP_API_KEY"));
var query = string.Join("&",
"url=" + Uri.EscapeDataString("https://www.reddit.com/r/golang/"));
var res = await http.GetAsync("https://socialtap.dev/v1/reddit/subreddit?" + query);
using var body = JsonDocument.Parse(await res.Content.ReadAsStringAsync());
if (!res.IsSuccessStatusCode)
{
var error = body.RootElement.GetProperty("error");
throw new Exception($"{error.GetProperty("code")}: {error.GetProperty("message")}");
}
Console.WriteLine(body.RootElement.GetProperty("data"));
Console.WriteLine(body.RootElement.GetProperty("meta").GetProperty("credits_charged"));// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::Client::new()
.get("https://socialtap.dev/v1/reddit/subreddit")
.query(&[("url", "https://www.reddit.com/r/golang/")])
.header("x-api-key", env::var("SOCIALTAP_API_KEY")?)
.send()?;
let ok = res.status().is_success();
let body: serde_json::Value = res.json()?;
if !ok {
return Err(format!("{}: {}", body["error"]["code"], body["error"]["message"]).into());
}
println!("{} {}", body["data"], body["meta"]["credits_charged"]);
Ok(())
}200 OK · GET https://socialtap.dev/v1/reddit/subredditLong arrays and strings are shortened here. Real responses are complete.Docs One schema on 3 platforms.
The response reference lists every field, its type and when it is null. See the full schema.
Null means unknown
A field Reddit doesn't show is null, never zero or an empty string, so a real zero always means zero.
What it accepts
The subreddit: its link on any reddit.com host (www, old, new, np, m, sh), any of its tabs included (/about, /new, /top, /wiki), r/<name>, or its bare name (golang).
Write one parser
Reddit, Facebook and X answer in these fields, so the code that reads one reads them all.
platformstring- Platform ID (reddit, facebook, …).
idstring- Platform-native community ID (string): Reddit's subreddit ID with its t5_ prefix, Facebook's numeric group ID.
namestring- The name its links use, without a prefix (golang for r/golang; a Facebook group's vanity name); null when it has none (a Facebook group known only by its number).
titlestring- The community's title as its page shows it ("The Go Programming Language"; what Facebook calls a group's name); null when it has none.
descriptionstring- Its short description as plain text; null when it has none.
urlstring- Canonical community URL (https://www.reddit.com/r/golang/, https://www.facebook.com/groups/<id>/).
avatar_urlstring- The community's icon or picture; null when it has none. Platform CDN URLs can expire.
banner_urlstring- Header or cover image URL; null when it has none.
Live data from 33 platforms.
What teams build with the Reddit Subreddit API.
Check a subreddit's rules before posting
Track a subreddit's weekly visitors over time
Enrich subreddit names with titles and icons
Good to know before you build.
- Moderators and the subreddit's topic categories aren't shown logged out, so moderators and categories are [] and listed in unknown_fields.
- A private, quarantined or members-only subreddit returns private_or_unavailable. A banned or unregistered name returns not_found.
- r/popular and r/all are Reddit's feeds, not subreddits. The Reddit Subreddit Posts API reads their posts.
- Reddit shows no privacy for an archived subreddit, so privacy is null there.
1 credit per request. Failed requests are free.
Buy credits once and spend them on any endpoint, on any platform.
| Source | Price per successful request | Per 1,000 requests |
|---|---|---|
Public page page | 1 credit | $0.75–$1.97 |
- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.
Questions about the Reddit Subreddit API.
More in the API reference.
Does it return the subscriber count?
How much does the Reddit Subreddit API cost?
Try it on a link you already have.
Paste it in the playground, or copy the request into your code.
- No credit card
- Failed requests are free
- Works on all 218 endpoints