Reddit API endpoint
Returns a Reddit post with its public comments. The default mode is 1 credit. Set `include_metrics=true` to return the comments with public net score and award count plus post engagement metrics for 3 credits. Large threads may expose only an initial comment subset. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. A post that exists but has no comments yet returns a 200 response with an empty comments list; a post that does not exist returns 404, and a temporary block or upstream failure returns 503 (retryable) rather than 404. If source.type is redlib, public fields and credit weights are preserved.
/reddit/comments/{id}Returns flat public comment entries from a Reddit post. The default mode costs 1 credit. Set include_metrics=true to return post engagement metrics plus public net score and award count for each returned comment; this mode costs 3 credits.
Path parameters: id is required and accepts a Reddit post id or a t3_ id.
Query parameters: limit defaults to 25 and clamps to 100. sort must be one of confidence, top, new, controversial, old, or qa; metrics mode passes it to the anonymous HTML page. depth must be between 0 and 10; metrics mode filters the flat response to that maximum depth. include_metrics defaults to false; true selects the 3-credit HTML mode.
Notable response behavior: malformed ids, sort values, limits, depth values, or include_metrics values return 400. A post that does not exist returns 404. A valid post that has no comments yet (common when polling the newest posts) returns 200 with an empty comments list and the post metadata populated — it is not a 404. Reddit block or challenge pages, malformed upstream responses, and transport failures return 503 (a retryable error) rather than 404, so a temporary block is not mistaken for a deleted post. When Reddit rate limits the request, the response is 503 with a Retry-After header giving the number of seconds to wait; clients should back off for that long and retry. Reddit does not expose per-comment upvote ratios or exact upvote/downvote totals anonymously. The initial page may contain only a subset of a large thread, so metrics mode returns that bounded subset.
Redlib comment fallback preserves flat entries with actual parent_id and depth, caps the total returned comments at limit, and returns the bounded upstream subset without expanding more nodes.
When the native Reddit source fails, the service can use the internal Redlib provider. Fallback responses retain the same fields and credit weights and report source.type=redlib with a public Reddit URL. Listing cursors use the upstream JSON cursor; results remain bounded by limit. Temporary provider, authentication, rate-limit and parser failures return 503, while confirmed missing resources return 404. Provider selection is server configuration.
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| id | 3 | |
| name | 3 | |
| parent_id | 3 | |
| author | 3 | |
| body | 3 | median 111 characters |
| permalink | 3 | reddit.com |
| score | 3 | 2 to 8, median 2 |
| award_count | 3 | 0 |
| created_utc | 3 | 2026-05-22 |
| created | 3 | 2026-05-22 |
| depth | 2 | 1 to 2, median 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Reddit post id or t3_ id | 1tka90t | |
| sort | string | No | Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled. Allowed values: confidence, top, new, controversial, old, qa. | ||
| limit | integer | No | 25 and clamps to 100 | Maximum comments returned, defaults to 25 and clamps to 100 | |
| depth | integer | No | Maximum flat comment depth returned in metrics mode. | ||
| include_metrics | boolean | No | Include public post and per-comment engagement metrics; costs 3 credits instead of 1 | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/reddit/comments/1tka90t?sort=confidence&limit=10&include_metrics=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"post": {
"id": "1tka90t",
"name": "t3_1tka90t",
"score": 78,
"upvote_ratio": 1,
"comment_count": 15
},
"comments": [
{
"id": "on8jv87",
"name": "t1_on8jv87",
"parent_id": "t3_1tka90t",
"body": "well done! I am working on reversing Turnstile as well.",
"score": 7,
"award_count": 0
}
],
"source": {
"type": "html",
"url": "https://www.reddit.com/comments/1tka90t/"
},
"metrics_source": {
"type": "html",
"url": "https://www.reddit.com/comments/1tka90t/"
}
}
}Request schema
No body schema
Response schema
#/definitions/reddit.commentsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | reddit.CommentsResponse | No | ||||
| data.comments | array | No | Comments on the post. | |||
| data.comments[].author | object | No | Reddit user who wrote the comment. | |||
| data.comments[].author.name | string | No | reddit_user | Reddit username of the author. | ||
| data.comments[].author.profile_url | string | No | https://www.reddit.com/user/reddit_user/ | URL of the author's Reddit profile page. | ||
| data.comments[].award_count | integer | No | Number of awards the comment received. Set only when metrics are requested. | |||
| data.comments[].body | string | No | I agree with this post. | Text of the comment as written by the author. | ||
| data.comments[].created | string | No | 2024-04-19T00:00:00Z | Time the comment was posted, in UTC (RFC 3339). | ||
| data.comments[].created_utc | integer | No | 1713484800 | Time the comment was posted, in Unix seconds. | ||
| data.comments[].depth | integer | No | 1 | Nesting level of the comment in the thread. | ||
| data.comments[].id | string | No | kabc123 | Reddit comment id. | ||
| data.comments[].name | string | No | t1_kabc123 | Reddit full name of the comment, the id prefixed with `t1_`. | ||
| data.comments[].parent_id | string | No | t3_1abcxyz | Full name of the post or comment this comment replies to, for example `t3_1abcxyz`. | ||
| data.comments[].permalink | string | No | https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/kabc123/ | Reddit URL of the comment. | ||
| data.comments[].replies | array | No | Replies to this comment, in the same shape. | |||
| data.comments[].score | integer | No | Net score of the comment. Set only when metrics are requested. | |||
| data.metrics_source | object | No | Source the engagement metrics were read from, with its type and URL. Set only when metrics are requested. | |||
| data.metrics_source.type | string | No | rss | Kind of Reddit source the data was read from. | ||
| data.metrics_source.url | string | No | https://www.reddit.com/r/OpenAI/.rss | Reddit URL the data was read from. | ||
| data.post | object | No | Post the comments belong to. | |||
| data.post.author | object | No | Reddit user who submitted the post. | |||
| data.post.author.name | string | No | reddit_user | Reddit username of the author. | ||
| data.post.author.profile_url | string | No | https://www.reddit.com/user/reddit_user/ | URL of the author's Reddit profile page. | ||
| data.post.award_count | integer | No | Number of awards the post received. Set only when metrics are requested. | |||
| data.post.comment_count | integer | No | Number of comments on the post. Set only when metrics are requested. | |||
| data.post.created | string | No | 2024-04-19T00:00:00Z | Time the post was submitted, in UTC (RFC 3339). | ||
| data.post.created_utc | integer | No | 1713484800 | Time the post was submitted, in Unix seconds. | ||
| data.post.domain | string | No | self.OpenAI | Domain of the linked content, or `self.<subreddit>` for text posts. | ||
| data.post.estimated_downvotes | integer | No | Approximate downvote total worked out from the score and upvote ratio. Reddit does not publish exact counts. | |||
| data.post.estimated_upvotes | integer | No | Approximate upvote total worked out from the score and upvote ratio. Reddit does not publish exact counts. | |||
| data.post.flair | string | No | Discussion | Flair text attached to the post. | ||
| data.post.id | string | No | 1abcxyz | Reddit post id. | ||
| data.post.is_self | boolean | No | Whether the post is a text post rather than a link. | |||
| data.post.is_video | boolean | No | Whether the post is a video. | |||
| data.post.locked | boolean | No | Whether the post is locked against new comments. | |||
| data.post.name | string | No | t3_1abcxyz | Reddit full name of the post, the id prefixed with `t3_`. | ||
| data.post.over_18 | boolean | No | Whether the post is marked as 18+ content. | |||
| data.post.permalink | string | No | https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/ | Reddit URL of the post's comments page. | ||
| data.post.score | integer | No | Net score of the post, upvotes minus downvotes as Reddit shows it. Set only when metrics are requested. | |||
| data.post.selftext | string | No | Discussion body | Body text of a text post. | ||
| data.post.source_feed_url | string | No | https://www.reddit.com/r/OpenAI/.rss | URL of the Reddit feed the post was read from. | ||
| data.post.stickied | boolean | No | Whether the post is pinned to the top of its subreddit. | |||
| data.post.subreddit | string | No | OpenAI | Name of the subreddit the post belongs to, without `r/`. | ||
| data.post.thumbnail | string | No | https://b.thumbs.redditmedia.com/example.jpg | URL of the post thumbnail image. | ||
| data.post.title | string | No | OpenAI discussion thread | Title of the post as submitted. | ||
| data.post.upvote_ratio | number | No | Share of votes that are upvotes, from 0 to 1. Set only when metrics are requested. | |||
| data.post.url | string | No | https://www.reddit.com/r/OpenAI/comments/1abcxyz/openai_discussion_thread/ | Reddit URL of the post. | ||
| data.post.vote_counts_estimated | boolean | No | Whether `estimated_upvotes` and `estimated_downvotes` are estimates. | |||
| data.source | object | No | Reddit page the comments were read from. | |||
| data.source.type | string | No | rss | Kind of Reddit source the data was read from. | ||
| data.source.url | string | No | https://www.reddit.com/r/OpenAI/.rss | Reddit URL the data was read from. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/reddit/comments/1tka90t?sort=confidence&limit=10&include_metrics=true" \
-H "x-api-key: $CRAWLORA_API_KEY"