Reddit API endpoint
Returns a public Reddit post. The default mode is 1 credit. Set `include_metrics=true` to return public net score, upvote ratio, comment count, award count, and estimated upvote/downvote totals for 3 credits. Reddit fuzzes voting data, so estimates are approximate; share, repost/crosspost, and view counts are not exposed anonymously. If source.type is redlib, public fields and credit weights are preserved.
/reddit/post/{id}Returns a normalized public Reddit post entry, with optional engagement metrics.
Path parameters: id is required and accepts a Reddit post id or a t3_ id.
Query parameters: include_metrics is optional and defaults to false. The default mode makes one RSS request and costs 1 credit. When true, the endpoint makes one anonymous HTML content request instead of requesting RSS first, costs 3 credits, and returns Reddit's public net score, upvote_ratio, comment_count, award_count, approximate estimated_upvotes and estimated_downvotes, and vote_counts_estimated. Reddit may occasionally require a verification replay before serving that HTML page.
Notable response behavior: malformed ids or invalid boolean values return 400. Missing posts return 404. Reddit block pages, verification changes, malformed upstream responses, and transport failures return 503. When Reddit rate limits the request, the response is 503 with a Retry-After header giving the number of seconds to wait. Reddit fuzzes voting data and does not expose exact upvote/downvote totals, so vote estimates are approximate and may be omitted when the public values are indeterminate. Anonymous pages do not expose share, repost/crosspost, or view counts.
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 | In the sample | Value in the sample |
|---|---|---|
| post.id | Has a value | |
| post.name | Has a value | |
| post.subreddit | Has a value | |
| post.title | Has a value | 119 characters |
| post.url | Has a value | reddit.com |
| post.permalink | Has a value | reddit.com |
| post.author | Has a value | |
| post.score | Has a value | 17,312 |
| post.upvote_ratio | Has a value | 0.94 |
| post.estimated_upvotes | Has a value | 18,492 |
| post.estimated_downvotes | Has a value | 1,180 |
| post.vote_counts_estimated | Has a value | true |
| post.comment_count | Has a value | 1,296 |
| post.created_utc | Has a value | 2026-07-28 |
| post.created | Has a value | 2026-07-28 |
| post.domain | Has a value | |
| post.selftext | Has a value | 2,268 characters |
| post.thumbnail | Has a value | |
| post.is_self | Has a value | true |
| post.locked | Has a value | true |
| post.flair | Has a value | |
| source.type | Has a value | |
| source.url | Has a value | reddit.com |
| metrics_source.type | Has a value | |
| metrics_source.url | Has a value | reddit.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Reddit post id or t3_ id | 1v8hy3q | |
| include_metrics | boolean | No | Include public 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/post/1v8hy3q?include_metrics=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"post": {
"id": "1v8hy3q",
"name": "t3_1v8hy3q",
"subreddit": "AmIOverreacting",
"title": "Book club discussion",
"url": "https://www.reddit.com/r/AmIOverreacting/comments/1v8hy3q/",
"score": 7130,
"upvote_ratio": 0.9376,
"estimated_upvotes": 7630,
"estimated_downvotes": 500,
"vote_counts_estimated": true,
"comment_count": 1031,
"award_count": 0
},
"source": {
"type": "html",
"url": "https://www.reddit.com/comments/1v8hy3q/"
},
"metrics_source": {
"type": "html",
"url": "https://www.reddit.com/comments/1v8hy3q/"
}
}
}Request schema
No body schema
Response schema
#/definitions/reddit.postResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | reddit.PostResponse | No | ||||
| 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 | The requested post. | |||
| 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 post was 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/post/1v8hy3q?include_metrics=true" \
-H "x-api-key: $CRAWLORA_API_KEY"