RedditapisRedditapis
Posts

Check if a Reddit Post Was Removed or Filtered

Find out whether a Reddit post is still publicly visible or was quietly removed, filtered or hidden, in one call that compares the post against its author's public listing.

GET/api/reddit/post/:id/visibility$0.004 / call

A removed Reddit post does not tell its author. Fetch it by id and it still comes back, with its title, its body and its score. It simply stops appearing where other people would find it.

So this question cannot be answered by reading the post. It is answered by reading somewhere the post ought to appear and noticing that it does not. This endpoint makes both reads and compares them: the post by id, then one page of its author's submitted listing.

What it will not tell you

It never names a cause, and that is deliberate rather than a limitation we plan to remove. A moderator removal, an admin removal, an automated spam filter and an author who has simply switched their post history off all look identical from outside Reddit. Only one of them is "removed". Reporting the observation and refusing the cause is the difference between a useful answer and a confident wrong one.

Verdicts

verdictWhat it means
liveThe post appears in its author's listing, which is where a reader would find it.
not_visibleThe post exists but is absent from that listing, and the absence is not a paging artefact.
undecidableTwo calls cannot settle it. See below.

undecidable is a real answer rather than a failure. Reddit caps how far back a listing goes, so for an author with a long history one page cannot prove a post is missing. When the listing does not certify itself complete and the post is not on it, you get undecidable instead of a guess.

Every response also carries a confident boolean and a plain-language reason, plus a checked block naming exactly what was read.

When the post resolves but the second read, the author's listing, cannot be read, the call still answers: verdict undecidable, checked.author_listing is false and checked.listing_error names why in one of three words. upstream_unavailable and upstream_timeout mean the listing read was refused or timed out on the way to Reddit; that call is not billed. listing_unavailable means Reddit answered the listing with 403 or 404 (a suspended or deleted author); both reads were served, so that call is billed as usual. A rate limit on the listing read is returned as 429 with Retry-After, never as an answer. A first read that fails is an error as before, since nothing resolved to answer with.

Which way this fails

Ambiguity always resolves away from live. A false live is the expensive answer, because you stop checking. A false not_visible costs you one manual look at the post.

Path Parameters

ParameterTypeRequiredDescription
idstringYesReddit post id (e.g. 1sgjld3), with or without the t3_ prefix

Example

curl -H "Authorization: Bearer $TOKEN" \
  "https://api.redditapis.com/api/reddit/post/1sgjld3/visibility"
const response = await fetch(
  "https://api.redditapis.com/api/reddit/post/1sgjld3/visibility",
  { headers: { Authorization: "Bearer TOKEN" } }
);
const { verdict, reason, confident } = await response.json();
import requests

response = requests.get(
    "https://api.redditapis.com/api/reddit/post/1sgjld3/visibility",
    headers={"Authorization": "Bearer TOKEN"},
)
data = response.json()
print(data["verdict"], data["reason"])

Response

{
  "post": { "id": "1sgjld3", "author": "example_user", "title": "..." },
  "verdict": "not_visible",
  "reason": "the post exists but is absent from its author's submitted listing, and that listing reported itself complete, so the absence is not a paging artefact. This does not say why: a removal, a spam filter and an author who has hidden their history are indistinguishable from here",
  "confident": true,
  "checked": {
    "by_id": true,
    "author_listing": true,
    "author": "example_user",
    "listing_items": 41,
    "listing_status": "complete",
    "degraded": false
  }
}

Cost

Two upstream calls, billed as one request at $0.004. That is twice the read rate because it does twice the work, rather than hiding the second call inside the single-read price. An undecidable answer whose checked.listing_error is upstream_unavailable or upstream_timeout is not billed.

Independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by Reddit, Inc.

On this page