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 connection.
Requires an API key, sent as Authorization: Bearer <key>.
Request
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. |