Developer API

Query the Subrift database from your own stack.

A REST API over our full database of tracked subreddits — search, filter by Claim Score, pull posting-time recommendations, and more. JSON over HTTPS, no SDK required.

Introduction

What the Subrift API gives you

The base URL for every endpoint is https://subrift.org/api/v1. All requests and responses are JSON over HTTPS.

Our advantage

The Subrift API is built around one insight Reoogle doesn't have: the Claim Score. Every subreddit in our database carries a 0–100 score combining mod inactivity, member activity, and community size — so you can filter not just by “inactive mods” but by actual opportunity quality. Use min_claim_score=70 to get only communities worth your time.

Authentication

Bearer tokens

Every endpoint except GET /categories requires an API key, passed as a Bearer token. Keys are prefixed sub_live_ and are only available on the Monthly and Lifetime plans — generate one from your dashboard. The full key is shown once at creation time; only its hash is stored, so if you lose it you'll need to revoke it and generate a new one.

Authorization: Bearer sub_live_a1b2c3d4e5f6...

Rate Limiting

60 requests/minute · 1,000 requests/day

Every response includes headers showing your current usage against both limits, so you can back off before hitting a 429.

HeaderDescription
X-RateLimit-LimitRequests allowed per minute (60).
X-RateLimit-RemainingRequests left in the current minute.
X-RateLimit-ResetUnix timestamp when the per-minute window resets.
X-RateLimit-Daily-LimitRequests allowed per day (1,000).
X-RateLimit-Daily-RemainingRequests left today.

Check your current usage anytime at GET /me/usage.

Errors

Error format

Failed requests return a consistent shape with an HTTP status code and a short machine-readable code:

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded: 60 requests per minute."
  }
}
StatusCodeMeaning
400bad_requestMalformed or unsupported query parameter.
401unauthorizedMissing or invalid API key.
403forbiddenValid key, but your plan doesn't include API access.
404not_foundThe requested subreddit isn't in the database.
429rate_limitedYou've hit the per-minute or per-day request limit.
500internal_errorSomething went wrong on our end.
GET/subreddits

List subreddits

Search and filter the full tracked database. Combine any of the parameters below freely.

ParameterTypeDescription
searchstringPartial match on name or description.
nichestringExact match on niche/category.
min_membersintegerMinimum subscriber count.
max_membersintegerMaximum subscriber count.
inactive_modsbooleantrue = only subreddits with 60+ days of mod inactivity.
claimablebooleantrue = only subreddits with claim_score >= 70.
min_claim_scoreintegerMinimum Claim Score, 0–100.
min_posts_per_dayintegerMinimum posts per day.
langstringDefaults to "en" — currently the only supported value.
sort_bystringclaim_score | members | mod_inactive_days | posts_per_day
orderstringasc | desc (default desc)
pageintegerPage number, default 1.
per_pageintegerResults per page, max 100, default 25.

Response

{
  "data": [
    {
      "id": 1,
      "name": "digitalnomad",
      "members": 482000,
      "niche": "Lifestyle",
      "mod_inactive_days": 2,
      "claim_score": 91,
      "claim_tier": "Prime",
      "member_activity": "Very High",
      "posts_per_day": 18,
      "topic_tags": ["remote work", "travel", "freelance"],
      "description": "Community for digital nomads and remote workers worldwide.",
      "last_checked": "2026-07-01T00:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 15000,
    "total_pages": 600
  }
}

Example request

curl "https://subrift.org/api/v1/subreddits?min_claim_score=70&sort_by=claim_score&order=desc" \
  -H "Authorization: Bearer sub_live_YOUR_KEY"
GET/subreddits/claimable

List claimable subreddits

Shortcut for the most common query: subreddits with a Claim Score of 70 or higher, mod inactivity confirmed. Accepts the same parameters as GET /subreddits, minus claimable and min_claim_score, which are fixed.

ParameterTypeDescription
searchstringPartial match on name or description.
nichestringExact match on niche/category.
min_membersintegerMinimum subscriber count.
max_membersintegerMaximum subscriber count.
inactive_modsbooleantrue = only subreddits with 60+ days of mod inactivity.
min_posts_per_dayintegerMinimum posts per day.
langstringDefaults to "en" — currently the only supported value.
sort_bystringclaim_score | members | mod_inactive_days | posts_per_day
orderstringasc | desc (default desc)
pageintegerPage number, default 1.
per_pageintegerResults per page, max 100, default 25.

Response

{
  "data": [ /* same shape as GET /subreddits */ ],
  "pagination": { "page": 1, "per_page": 25, "total": 312, "total_pages": 13 },
  "filters_applied": { "min_claim_score": 70 }
}

Example request

curl "https://subrift.org/api/v1/subreddits/claimable?niche=Technology" \
  -H "Authorization: Bearer sub_live_YOUR_KEY"
GET/subreddits/{name}

Get a single subreddit

Full detail for one subreddit by name. Matching is case-insensitive.

ParameterTypeDescription
namestring (path)The subreddit name, without r/.

Response

{
  "id": 1,
  "name": "digitalnomad",
  "members": 482000,
  "niche": "Lifestyle",
  "mod_inactive_days": 2,
  "claim_score": 91,
  "claim_tier": "Prime",
  "member_activity": "Very High",
  "posts_per_day": 18,
  "topic_tags": ["remote work", "travel", "freelance"],
  "description": "Community for digital nomads and remote workers worldwide.",
  "last_checked": "2026-07-01T00:00:00Z"
}

Example request

curl "https://subrift.org/api/v1/subreddits/digitalnomad" \
  -H "Authorization: Bearer sub_live_YOUR_KEY"
GET/subreddits/{name}/activity

Best posting times

Aggregate activity by day of week and hour of day (UTC), plus the top 5 recommended posting windows.

ParameterTypeDescription
namestring (path)The subreddit name, without r/.

Response

{
  "subreddit": "digitalnomad",
  "best_times": [
    { "day": "thursday", "utc_hour": 19, "score": 39 },
    { "day": "friday", "utc_hour": 20, "score": 38 },
    { "day": "wednesday", "utc_hour": 19, "score": 37 },
    { "day": "tuesday", "utc_hour": 18, "score": 35 },
    { "day": "monday", "utc_hour": 19, "score": 34 }
  ],
  "heatmap": [
    { "day": "monday", "utc_hour": 0, "score": 12 }
    /* ... 168 entries total — 7 days × 24 hours */
  ]
}

Example request

curl "https://subrift.org/api/v1/subreddits/digitalnomad/activity" \
  -H "Authorization: Bearer sub_live_YOUR_KEY"
GET/categories

List categories

All niches tracked in the database along with how many subreddits fall under each.

This is the only public endpoint — no API key required.

Response

{
  "data": [
    { "niche": "Technology", "count": 1240 },
    { "niche": "Finance", "count": 980 },
    { "niche": "Lifestyle", "count": 760 }
  ]
}

Example request

curl "https://subrift.org/api/v1/categories"
GET/me/usage

Check your rate limit

Current usage for the calling API key against both the per-minute and per-day limits. Like any other endpoint, calling this counts as one request.

Response

{
  "key_name": "Production",
  "limits": {
    "per_minute": { "limit": 60, "used": 3, "resets_at": "2026-07-13T18:41:00Z" },
    "per_day": { "limit": 1000, "used": 48, "resets_at": "2026-07-14T00:00:00Z" }
  }
}

Example request

curl "https://subrift.org/api/v1/me/usage" \
  -H "Authorization: Bearer sub_live_YOUR_KEY"

Webhooks

Coming soon

Coming Soon

We're building webhook support so you can get notified the moment a subreddit crosses your Claim Score threshold, instead of polling for it.

Versioning

/v1 and beyond

The current API is versioned at /api/v1. Breaking changes will always ship under a new version prefix (/api/v2, etc.) rather than changing v1's behavior out from under you — existing integrations keep working indefinitely.