# Get a Reddit comment tree as a flat list, page by page

`GET /v1/reddit/posts/{id}/comments`

A post's comments, flattened depth-first: each carries `depth` (0 is top-level) and
`parentId`, so the tree can be rebuilt. The first page is the thread as Reddit lays it out,
up to `limit` comments and `depth` levels.

Large threads do not fit on one page: Reddit stands in for the rest with "load more"
links, and `meta.moreCount` estimates how many comments sit behind them. Pass
`meta.nextCursor` back to load them, up to 100 per page, until it is null. Later pages
contain only the newly loaded comments, each still carrying its `depth` and `parentId`.

`comment` focuses the thread on one comment, as its permalink does, with `context`
ancestors above it.

**Price:** 1 credit per call, plus 3 credits per Reddit comment returned. Failed and refused calls cost nothing.

**Rate limit:** Counts as 4 requests against your per-minute rate limit.

**MCP tool:** `get_reddit_comments`, on every [MCP](/mcp) connection.

Requires an API key, sent as `Authorization: Bearer <key>`.

## Request

```bash
curl --request GET \
  --url https://api.weirapp.io/v1/reddit/posts/ID/comments \
  --header "Authorization: Bearer $WEIR_API_KEY"
```

### Path parameters

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `id` | string | yes | Reddit's base-36 post id, without the `t3_` prefix: `1vdo8we` in a post URL. · matches `^[A-Za-z0-9]{1,13}$` |

### Query parameters

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `limit` | integer | no | Comments on the first page; Reddit's own ceiling is 500. Each later page loads up to 100 more of the comments Reddit left behind "load more" links. · 1–500, default `50` |
| `depth` | integer | no | Reply levels to include; 1 is top-level comments only. · 1–10, default `3` |
| `sort` | string | no | `confidence` is Reddit's "best"; `new` puts the latest first. · `confidence`, `top`, `new`, `controversial`, `old`, `random`, `qa`, `live`, default `"confidence"` |
| `comment` | string | no | Focus on one comment (its id, without `t1_`): returns it, up to `context` of its ancestors, and its replies — the view a comment's permalink opens. · matches `^[A-Za-z0-9]{1,13}$` |
| `context` | integer or null | no | Ancestors to include above `comment`. Default 3. · 0–8 |
| `cursor` | string | no | `meta.nextCursor` from the previous page, unchanged. Opaque, signed, and bound to the other parameters: change any of them and start again without a cursor. · 1–4096 chars |

## Response

Comments ordered by Reddit with depth and parent IDs.

### `200`

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `data` | array of object | yes |  |
| `data[].id` | string | yes | Reddit's base-36 comment id, without the `t1_` prefix. |
| `data[].postId` | string | yes | The post this comment belongs to, without `t3_`. |
| `data[].parentId` | string | yes | The comment or post this replies to. |
| `data[].author` | string | yes | Username without the `u/` prefix. `[deleted]` if removed. |
| `data[].body` | string | yes | Markdown. `[removed]` or `[deleted]` once taken down. |
| `data[].score` | integer | yes |  |
| `data[].permalink` | string | yes | Absolute URL of the comment. |
| `data[].createdUtc` | number | yes |  |
| `data[].createdAt` | string (date-time) | yes |  |
| `data[].subreddit` | string | yes | Community name without the `r/` prefix. |
| `data[].isSubmitter` | boolean | yes | The commenter is the post's author (OP). |
| `data[].edited` | number or null | yes | When the comment was last edited, in epoch seconds. Null if it never was. |
| `data[].distinguished` | string or null | yes | `moderator` or `admin` when posted in an official capacity; otherwise null. |
| `data[].stickied` | boolean | yes | Pinned under the post by a moderator. |
| `data[].scoreHidden` | boolean | yes | Reddit is hiding this comment's score for now; `score` means nothing while true. |
| `data[].depth` | integer | yes | 0 for a top-level comment. · min 0 |
| `meta` | object | yes |  |
| `meta.requestId` | string | yes |  |
| `meta.nextCursor` | string or null | no |  |
| `meta.moreCount` | integer | yes | Reddit's estimate of the comments not loaded yet. 0 once `nextCursor` is null. · min 0 |
| `meta.focalCommentId` | string | no | The comment the thread is focused on, when `comment` was given. |

## Errors

| Status | Meaning | What to do |
| --- | --- | --- |
| `400` | The request failed validation. | The request was malformed. The `details` object names the field. |
| `401` | The API key is missing, malformed, expired, or revoked. | The key is missing, malformed, revoked, or expired. |
| `402` | The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes. | Out of credits. **Never retry.** Only a person can clear it, by adding credits at https://weirapp.io/dashboard/billing. Retrying never will. |
| `403` | The API key does not carry the scope this route requires. | The key is valid but lacks the scope this operation needs. |
| `404` | The requested resource does not exist. | No such resource, or it is not public. |
| `429` | The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again. | Rate limited. Retryable: wait for `Retry-After`, then try again. |
| `500` | An unexpected error occurred. | Something failed on our side. Retryable with backoff. |
| `503` | The source is temporarily unavailable. The request is safe to retry. | A source was unreachable. Retryable with backoff. |
