# Get a Reddit post's content and stats

Returns one Reddit post's title, body, subreddit, author, score and comment count. Use it to read a known post.

Tool `reddit.post.detail` on Reddit. Contract version 1, released 2026-10-30.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/reddit.post.detail/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"url":"https://www.reddit.com/r/Python/comments/1xbnrhi/litellm_11070_on_pypi_is_compromised/"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/reddit.post.detail/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={
        "input": {
            "url": "https://www.reddit.com/r/Python/comments/1xbnrhi/litellm_11070_on_pypi_is_compromised/",
        },
    },
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/reddit.post.detail/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "input": {
      "url": "https://www.reddit.com/r/Python/comments/1xbnrhi/litellm_11070_on_pypi_is_compromised/",
    },
  }),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "reddit.post.detail",
    "input": {
      "url": "https://www.reddit.com/r/Python/comments/1xbnrhi/litellm_11070_on_pypi_is_compromised/"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `url` | string | Yes |  | Address of the post, https://www.reddit.com/r/<subreddit>/comments/<post id>/, as the url of a post from reddit.search.posts. reddit.com, old.reddit.com and new.reddit.com work too, over http or https, with or without the title slug, trailing slash, query string or fragment. A redd.it short link does not. Format `uri`. Matches `^https?://(?:(?:www\|old\|new)\.)?reddit\.com/r/([A-Za-z0-9_]{2,21})/comments/([a-z0-9]{1,20})(?:/[A-Za-z0-9_-]*)?/?(?:[?#]\S*)?$`. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### post

One object. Can be `null`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | Reddit's full name of the post, t3_ followed by the post id in its address. |
| `url` | string | Yes | Address of the post on www.reddit.com. Format `uri`. |
| `title` | string | No |  |
| `text` | string | No | The body of a text post, in Markdown. Null for a link post. |
| `link_url` | string | No | Address a link post points at, such as an article or an image. Null for a text post. |
| `subreddit` | string | Yes | Name of the subreddit the post is in, without r/. |
| `flair` | string | No | Text of the post's flair, the label its subreddit gives it. |
| `published_at` | string | No | When the post was published, in ISO 8601. |
| `author_id` | string | No | Reddit's full name of the author's account, t2_ followed by its id. |
| `author_username` | string | No | The author's username, without u/. |
| `score` | integer | No | Upvotes minus downvotes, as Reddit shows it. Reddit fuzzes it slightly. |
| `upvote_ratio` | number | No | Share of the votes that are upvotes, from 0 to 1. Reddit fuzzes it slightly. |
| `comment_count` | integer | No |  |
| `nsfw` | boolean | No | Whether the post is marked NSFW (not safe for work). |
| `spoiler` | boolean | No | Whether the post is marked as a spoiler. |
| `locked` | boolean | No | Whether the post is locked to new comments. |
| `stickied` | boolean | No | Whether the post is pinned to the top of its subreddit. |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "post": {
    "id": "t3_1xbnrhi",
    "url": "https://www.reddit.com/r/Python/comments/1xbnrhi/litellm_11070_on_pypi_is_compromised/",
    "title": "litellm 1.107.0 on PyPI is compromised",
    "text": "the payloads run on every python start on the machine and not just when you import litellm. Your IDE, pip, CI jobs everything python on that host is affected.\n\nIt steals ssh keys, aws credentials, browser passwords, shell history and AI coding tool configs. The backdoor runs as a daemon and executes whatever code the attacker’s server returns every hour.\n\nPin to 1.106.2.\n\ncomplete breakdown: [safedep.io/litellm-pypi-compromise-credential-stealer-backdoor](http://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor)",
    "link_url": null,
    "subreddit": "Python",
    "flair": null,
    "published_at": "2026-10-21T13:52:24Z",
    "author_id": null,
    "author_username": "BattleRemote3157",
    "score": null,
    "upvote_ratio": null,
    "comment_count": null,
    "nsfw": null,
    "spoiler": null,
    "locked": null,
    "stickied": null
  }
}
```
