Reddit Post Comments (by Post ID)
omnial/reddit-app-fetch-post-comments
Given a Reddit post ID, returns that post's title and subreddit plus its comment tree: each comment's text, author username, score, timestamps, and reply nesting (depth/parent), along with pagination markers for loading additional or deeper comments. Returns an empty object `{}` when the post ID does not exist.
Price
Up to $0.00205 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
Data from Reddit.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/reddit-app-fetch-post-comments" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/reddit-app-fetch-post-comments" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/reddit-app-fetch-post-comments", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/reddit-app-fetch-post-comments", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.00205 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"post_id"
],
"properties": {
"after": {
"type": "string",
"maxLength": 4096,
"description": "Pagination parameter for fetching next page"
},
"post_id": {
"type": "string",
"pattern": "^t3_[a-z0-9]{1,17}$",
"examples": [
"t3_1ojnvca"
],
"maxLength": 20,
"minLength": 4,
"description": "Post ID"
},
"language": {
"type": "string",
"default": "en-US",
"pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
"maxLength": 16,
"minLength": 2,
"description": "Preferred response language as an IETF language tag; default: en-US"
},
"sort_type": {
"enum": [
"CONFIDENCE",
"NEW",
"TOP",
"HOT",
"CONTROVERSIAL",
"OLD",
"RANDOM"
],
"type": "string",
"default": "CONFIDENCE",
"examples": [
"CONFIDENCE"
],
"description": "Sort method: CONFIDENCE, NEW, TOP, HOT, CONTROVERSIAL, OLD, RANDOM"
},
"need_format": {
"type": "boolean",
"default": false,
"description": "Whether to clean and format the data"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Echoes the queried post_id, e.g. 't3_1ojnvca'."
},
"title": {
"type": "string"
},
"subreddit": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Reddit's internal subreddit id, e.g. 't5_2qh0u'."
},
"name": {
"type": "string",
"description": "The subreddit's own name, e.g. 'pics'."
},
"prefixedName": {
"type": "string",
"description": "e.g. 'r/pics'."
},
"isQuarantined": {
"type": "boolean"
},
"allowedMediaInComments": {
"type": "array",
"items": {
"type": "string"
},
"description": "Media types this subreddit permits inside comments, e.g. 'GIPHY', 'STATIC', 'EXPRESSION', 'VIDEO'."
}
},
"additionalProperties": true
},
"commentCount": {
"type": "number",
"description": "Reddit's own headline total comment count for the post as a whole -- can exceed `commentForest.pageInfo.commentCount` and the number of comment entries actually returned in `commentForest.trees`, since not every comment is loaded in one call."
},
"commentForest": {
"type": "object",
"properties": {
"trees": {
"type": "array",
"items": {
"type": "object",
"properties": {
"more": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "number"
},
"cursor": {
"type": "string",
"description": "An opaque continuation token for this collapsed branch. Its exact use with this tool's own `after` input parameter is not documented, so treat it as opaque rather than assume it is directly interchangeable with `after`."
},
"isTooDeepForCount": {
"type": "boolean"
}
},
"description": "Present instead of a real comment when this entry represents additional, not-yet-loaded replies.",
"additionalProperties": true
},
"node": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"score": {
"type": "number"
},
"content": {
"type": "object",
"properties": {
"preview": {
"type": "string",
"description": "Plain-text rendering with markdown/links stripped."
},
"markdown": {
"type": "string",
"description": "Raw Reddit markdown source."
},
"typeHint": {
"type": "string",
"description": "e.g. 'TEXT' for plain text, or 'RTJSON' for rich content such as an embedded gif (see `richtextMedia`)."
},
"richtextMedia": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "null",
"description": "URL withheld -- always returned as null in this tool's output even though the endpoint returns a real address; only whether media is attached is observable, not its location."
},
"large": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as `url` above."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"description": "Null on some media entries (only small/medium populated); otherwise an object with the same shape as `small`/`medium`.",
"additionalProperties": true
},
"small": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as `url` above."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"medium": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as `url` above."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"status": {
"type": "string",
"description": "e.g. 'VALID'."
},
"userId": {
"type": [
"string",
"null"
],
"description": "Usually null; the shape of a populated value is not documented."
},
"mimetype": {
"type": "string",
"description": "e.g. 'image/gif'."
}
},
"additionalProperties": true
},
"description": "Populated only for RTJSON comments that embed media (e.g. a gif); an empty array otherwise."
},
"translationInfo": {
"type": "object",
"properties": {
"isTranslated": {
"type": "boolean"
},
"translatedLanguage": {
"type": [
"string",
"null"
],
"description": "Usually null -- no translated comment has been observed."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"isSaved": {
"type": "boolean"
},
"editedAt": {
"type": [
"string",
"null"
],
"description": "ISO 8601 timestamp of the comment's last edit; null when it has never been edited."
},
"isLocked": {
"type": "boolean"
},
"createdAt": {
"type": "string",
"description": "ISO 8601 with UTC offset."
},
"isRemoved": {
"type": "boolean"
},
"permalink": {
"type": "string",
"description": "Path only, no host, e.g. '/r/pics/comments/1ojnvca/.../nm4jkk6/' -- prefix with 'https://www.reddit.com' for a browsable link."
},
"voteState": {
"type": "string",
"description": "e.g. 'NONE' -- the calling account's own vote state on this comment, not the comment's net score."
},
"authorInfo": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Reddit's internal account id for the commenter, e.g. 't2_z1uiu'."
},
"name": {
"type": "string",
"description": "The commenter's public Reddit username, exactly as displayed on the public comment page itself."
},
"newIcon": {
"type": "object",
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as `iconSmall.url`."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"profile": {
"type": "object",
"properties": {
"isNsfw": {
"type": "boolean"
}
},
"additionalProperties": true
},
"iconSmall": {
"type": "object",
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as the media `url` fields above."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"isBlocked": {
"type": "boolean"
},
"accountType": {
"type": "string",
"description": "e.g. 'USER'."
},
"isCakeDayNow": {
"type": "boolean"
},
"snoovatarIcon": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "null",
"description": "Withheld, same as `iconSmall.url`."
},
"dimensions": {
"type": "object",
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": true
}
},
"description": "Null when the account has not set a custom snoovatar.",
"additionalProperties": true
},
"isPremiumAvatarTreatment": {
"type": "boolean"
}
},
"additionalProperties": true
},
"isArchived": {
"type": "boolean"
},
"isGildable": {
"type": "boolean"
},
"isStickied": {
"type": "boolean"
},
"languageCode": {
"type": "string",
"description": "e.g. 'en', or 'und' when undetermined."
},
"isScoreHidden": {
"type": "boolean"
},
"isTranslatable": {
"type": "boolean"
},
"distinguishedAs": {
"type": [
"string",
"null"
],
"description": "e.g. 'MODERATOR' when the author posted with special standing; null otherwise."
},
"isAdminTakedown": {
"type": "boolean"
},
"removedByCategory": {
"type": [
"string",
"null"
],
"description": "Usually null; the shape of a populated value (an actually-removed comment) is not documented."
},
"isInitiallyCollapsed": {
"type": "boolean"
},
"initiallyCollapsedReason": {
"type": [
"string",
"null"
],
"description": "e.g. 'STICKY_AUTOMOD' for an auto-collapsed sticky bot comment; null otherwise."
},
"isCommercialCommunication": {
"type": "boolean"
}
},
"description": "The comment itself; null when this tree entry is a 'more' placeholder instead (see `more`).",
"additionalProperties": true
},
"depth": {
"type": "number",
"description": "0 for a top-level comment."
},
"parentId": {
"type": [
"string",
"null"
],
"description": "The parent comment's id; null for a top-level comment."
},
"childCount": {
"type": "number"
}
},
"additionalProperties": true
},
"description": "A flat list of comment-tree entries, not a nested object tree -- `depth` and `parentId` describe reply nesting. An entry with `more` populated and `node` null is a 'load more comments' placeholder rather than an actual comment, confirmed against several entries in a real thread."
},
"pageInfo": {
"type": "object",
"properties": {
"hasNextPage": {
"type": "boolean"
},
"commentCount": {
"type": "number",
"description": "Comment count for the current page/thread state -- distinct from the post-level `commentCount` above, and observed as a different (smaller) number in testing."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"description": "The post-and-comments record, returned directly (not wrapped in a `postInfoById` key). `{}` (no keys at all) when `post_id` does not resolve to an existing post -- never `{ postInfoById: null }`.",
"additionalProperties": true
}