String docs
Site integrations

Reddit

Reddit posts with their full comment trees, post search with subreddit, sort and time filters, and a subreddit's hot, new, top, rising or controversial listing.

Call these actions with your String API key; see Authentication. Every call answers with the envelope described in Responses & errors, whose data holds the rows below.

  • Site: reddit
  • Version: 1.0.1
  • Reads from: www.reddit.com
ActionDescriptionListed price
postRead one Reddit post and its full comment tree: every reply, however deep, including the branches Reddit collapses behind "more replies". Returns one row: the post (title, author, body, score, comment count, flair, link) and its comments depth first, each with its parent, depth, author, body, score and time. Large threads take several pages; maxPages bounds them, and complete says whether the tree was read to the end. A post id Reddit has no post for fails as not found.Billed per request at your plan's rates
searchSearch Reddit posts by keyword, across Reddit or within one subreddit, sorted by relevance, hot, top, new or most comments, optionally limited to the last hour, day, week, month or year. Each row is a full post: title, author, subreddit, body, link, score, upvote ratio, comment count and flair. One search returns up to 500 posts, all Reddit serves for it; narrow the query, subreddit or time window to reach others. Results exclude NSFW posts, as Reddit's logged-out search does.Billed per request at your plan's rates
subredditList a subreddit's posts in the order Reddit shows them: hot, new, top, rising, controversial or best, with a time range for top and controversial. Each row is a full post, the same as search returns: title, author, body, link, score, upvote ratio, comment count and flair. About 25 posts per page after a short first page; pinned posts come first, as on the site. A subreddit that does not exist, or that Reddit bans, keeps private or quarantines, fails with that reason.Billed per request at your plan's rates

post

Read one Reddit post and its full comment tree: every reply, however deep, including the branches Reddit collapses behind "more replies". Returns one row: the post (title, author, body, score, comment count, flair, link) and its comments depth first, each with its parent, depth, author, body, score and time. Large threads take several pages; maxPages bounds them, and complete says whether the tree was read to the end. A post id Reddit has no post for fails as not found.

POST https://request.usestring.ai/v1/integrations/reddit/post

Input

Unknown fields are rejected.

FieldTypeDescription
poststringRequired. The post: its URL, such as https://www.reddit.com/r/technology/comments/1xapaw7/, a redd.it link, its id 1xapaw7 or its fullname t3_1xapaw7. A URL ending in .json works too. At least 1 character.
sortbest top new old controversial qaComment order: best (the default, Reddit's own), top, new, old, controversial or qa.
maxPagesintegerThe most comment pages to read, 1 to 100. A page is up to 200 comments, or one collapsed reply branch. Defaults to 20. From 1 to 100.

Output

data is an array of rows, one per result. Each row has:

FieldTypeDescription
postobject—
post.idstringThe post's base36 id, as in reddit.com/comments/<id>.
post.fullnamestringThe post's fullname, t3_<id>.
post.subredditstringThe subreddit's name without r/.
post.subredditIdstringThe subreddit's fullname, t5_<id>.
post.titlestring—
post.authorstring | nullThe author's username; null when the account is deleted or suspended.
post.authorIdstring | nullThe author's fullname, t2_<id>.
post.createdAtstringWhen the post was submitted, ISO 8601 in UTC.
post.editedAtstring | nullWhen the post was last edited, ISO 8601 in UTC; null if never.
post.scoreintegerUpvotes minus downvotes, as Reddit shows it.
post.upvoteRationumber | nullThe share of votes that are upvotes, 0 to 1.
post.commentCountinteger—
post.permalinkstringThe post's page on www.reddit.com.
post.urlstringWhat the post links to; the post's own page for a text post.
post.domainstringThe linked site's domain, or self.<subreddit> for a text post.
post.isSelfbooleanTrue for a text post.
post.bodystring | nullA text post's body as Markdown; null for a link, image or video post without text.
post.flairstring | nullThe post's flair text.
post.thumbnailstring | nullThe post's thumbnail image URL.
post.isNsfwboolean—
post.isSpoilerboolean—
post.isLockedboolean—
post.isStickiedboolean—
post.isArchivedboolean—
post.distinguishedstring | nullmoderator or admin when the author posted in that role.
post.removedBystring | nullWhy the post is removed, such as moderator, author or deleted; null when it is not.
post.languagestring | nullThe post's language as Reddit detected it, such as en; und (undetermined) when Reddit could not tell, as for many link and image posts with little text.
commentsobject[]Every comment read, depth first in the chosen order: each comment is followed by its replies.
comments[].idstringThe comment's base36 id.
comments[].fullnamestringThe comment's fullname, t1_<id>.
comments[].postIdstringThe post's fullname, t3_<id>.
comments[].parentIdstringThe parent comment's fullname, or the post's for a top-level comment.
comments[].depthinteger0 for a top-level comment, 1 for a reply to one, and so on.
comments[].authorstring | nullThe author's username; null when the account is deleted or suspended.
comments[].authorIdstring | nullThe author's fullname, t2_<id>.
comments[].bodystring | nullThe comment as Markdown; null when it is deleted or removed.
comments[].createdAtstringISO 8601 in UTC.
comments[].editedAtstring | nullISO 8601 in UTC; null if never edited.
comments[].scoreinteger | nullUpvotes minus downvotes; null while the subreddit hides a new comment's score.
comments[].isSubmitterbooleanTrue when the post's author wrote the comment.
comments[].isStickiedboolean—
comments[].distinguishedstring | nullmoderator or admin when the author commented in that role.
comments[].removedBystring | nullWhy the comment is removed; null when it is not.
comments[].permalinkstringThe comment's page on www.reddit.com.
comments[].replyCountintegerDirect replies Reddit counts for the comment, loaded or not.
completebooleanTrue when every comment Reddit serves for the post was read; false when maxPages ran out first.

Example

curl https://request.usestring.ai/v1/integrations/reddit/post \
  -H "Authorization: Bearer $STRING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "post": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/",
    "maxPages": 3
  }'

data starts with these rows:

[
  {
    "post": {
      "id": "1wxjx5g",
      "fullname": "t3_1wxjx5g",
      "subreddit": "MaticRobots",
      "subredditId": "t5_9uh9zm",
      "title": "Bag Pass and Matic Care are getting more expensive tomorrow",
      "author": "IrishSpring",
      "authorId": "t2_64j5h",
      "createdAt": "2026-10-04T16:30:47Z",
      "editedAt": null,
      "score": 16,
      "upvoteRatio": 0.9444444444444444,
      "commentCount": 31,
      "permalink": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/",
      "url": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/",
      "domain": "self.MaticRobots",
      "isSelf": true,
      "body": "I just got an email from Matic that the bag pass and Matic Care extended warranty are getting more expensive due to tariffs and components costs.\n\n\"Annual Bag P…",
      "flair": "Discussion",
      "thumbnail": null,
      "isNsfw": false,
      "isSpoiler": false,
      "isLocked": false,
      "isStickied": false,
      "isArchived": false,
      "distinguished": null,
      "removedBy": null,
      "language": "en"
    },
    "comments": [
      {
        "id": "pdvm9qq",
        "fullname": "t1_pdvm9qq",
        "postId": "t3_1wxjx5g",
        "parentId": "t3_1wxjx5g",
        "depth": 0,
        "author": "branden3112",
        "authorId": "t2_6jssp",
        "body": "Can bag passes be stacked to have multiple years worth?",
        "createdAt": "2026-10-04T20:13:43Z",
        "editedAt": null,
        "score": 6,
        "isSubmitter": false,
        "isStickied": false,
        "distinguished": null,
        "removedBy": null,
        "permalink": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/pdvm9qq/",
        "replyCount": 1
      },
      {
        "id": "pdwqaxr",
        "fullname": "t1_pdwqaxr",
        "postId": "t3_1wxjx5g",
        "parentId": "t1_pdvm9qq",
        "depth": 1,
        "author": "IrishSpring",
        "authorId": "t2_64j5h",
        "body": "+1",
        "createdAt": "2026-10-04T23:16:55Z",
        "editedAt": null,
        "score": 2,
        "isSubmitter": true,
        "isStickied": false,
        "distinguished": null,
        "removedBy": null,
        "permalink": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/pdwqaxr/",
        "replyCount": 0
      },
      {
        "id": "pdu3k7k",
        "fullname": "t1_pdu3k7k",
        "postId": "t3_1wxjx5g",
        "parentId": "t3_1wxjx5g",
        "depth": 0,
        "author": "IrishSpring",
        "authorId": "t2_64j5h",
        "body": "Here's the full email\n\n![img](vx9xv17j9hth1)",
        "createdAt": "2026-10-04T16:31:36Z",
        "editedAt": null,
        "score": 2,
        "isSubmitter": true,
        "isStickied": false,
        "distinguished": null,
        "removedBy": null,
        "permalink": "https://www.reddit.com/r/MaticRobots/comments/1wxjx5g/bag_pass_and_matic_care_are_getting_more/pdu3k7k/",
        "replyCount": 0
      }
    ],
    "complete": true
  }
]

Requests and billing

  • Requests: 1 Web Access request per result page, plus up to 2 setup requests per call.
  • Billing: passthrough. Each request the action makes bills at its own rate on your plan; there is no separate charge for the action. See Pricing.

Search Reddit posts by keyword, across Reddit or within one subreddit, sorted by relevance, hot, top, new or most comments, optionally limited to the last hour, day, week, month or year. Each row is a full post: title, author, subreddit, body, link, score, upvote ratio, comment count and flair. One search returns up to 500 posts, all Reddit serves for it; narrow the query, subreddit or time window to reach others. Results exclude NSFW posts, as Reddit's logged-out search does.

POST https://request.usestring.ai/v1/integrations/reddit/search

Input

Unknown fields are rejected.

FieldTypeDescription
querystringRequired. What to search for, as typed in Reddit's search box. At least 1 character.
subredditstringOnly posts in this subreddit: its name, such as technology, or r/technology.
sortrelevance hot top new commentsrelevance (the default), hot, top, new or comments (most commented)
timehour day week month year allOnly posts from the last hour, day, week, month or year, or all (the default)
limitintegerThe most posts to return, 1 to 500. Defaults to 500, all Reddit serves for one search. From 1 to 500.

Output

data is an array of rows, one per result. Each row has:

FieldTypeDescription
idstringThe post's base36 id, as in reddit.com/comments/<id>.
fullnamestringThe post's fullname, t3_<id>.
subredditstringThe subreddit's name without r/.
subredditIdstringThe subreddit's fullname, t5_<id>.
titlestring—
authorstring | nullThe author's username; null when the account is deleted or suspended.
authorIdstring | nullThe author's fullname, t2_<id>.
createdAtstringWhen the post was submitted, ISO 8601 in UTC.
editedAtstring | nullWhen the post was last edited, ISO 8601 in UTC; null if never.
scoreintegerUpvotes minus downvotes, as Reddit shows it.
upvoteRationumber | nullThe share of votes that are upvotes, 0 to 1.
commentCountinteger—
permalinkstringThe post's page on www.reddit.com.
urlstringWhat the post links to; the post's own page for a text post.
domainstringThe linked site's domain, or self.<subreddit> for a text post.
isSelfbooleanTrue for a text post.
bodystring | nullA text post's body as Markdown; null for a link, image or video post without text.
flairstring | nullThe post's flair text.
thumbnailstring | nullThe post's thumbnail image URL.
isNsfwboolean—
isSpoilerboolean—
isLockedboolean—
isStickiedboolean—
isArchivedboolean—
distinguishedstring | nullmoderator or admin when the author posted in that role.
removedBystring | nullWhy the post is removed, such as moderator, author or deleted; null when it is not.
languagestring | nullThe post's language as Reddit detected it, such as en; und (undetermined) when Reddit could not tell, as for many link and image posts with little text.

Example

curl https://request.usestring.ai/v1/integrations/reddit/search \
  -H "Authorization: Bearer $STRING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "robot vacuum",
    "subreddit": "MaticRobots",
    "sort": "new"
  }'

data starts with these rows:

[
  {
    "id": "1x8dyli",
    "fullname": "t3_1x8dyli",
    "subreddit": "MaticRobots",
    "subredditId": "t5_9uh9zm",
    "title": "Brand new Mattic Robot making clicking noise",
    "author": "Pingfao",
    "authorId": "t2_104igt",
    "createdAt": "2026-10-17T16:06:18Z",
    "editedAt": null,
    "score": 5,
    "upvoteRatio": 0.8571428571428571,
    "commentCount": 19,
    "permalink": "https://www.reddit.com/r/MaticRobots/comments/1x8dyli/brand_new_mattic_robot_making_clicking_noise/",
    "url": "https://v.redd.it/q0y3v9luw1wh1",
    "domain": "v.redd.it",
    "isSelf": false,
    "body": "Sharing to see if this is normal. We just got our Matic yesterday. The vacuuming and mopping itself is quiet but there's a weird clicking noise when it's cleani…",
    "flair": "Bug / Issue",
    "thumbnail": "https://external-preview.redd.it/cmg3MmIzanV3MXdoMU32WJgmPKSvMfnYrsqG86Pw_3Wngtej-loEIkZAe9N3.png?width=140&height=140&crop=1%3A1%2Csmart&format=jpg&auto=webp&s=f25ebd6a9472f4b688e6a87e834f55ad1c517b48",
    "isNsfw": false,
    "isSpoiler": false,
    "isLocked": false,
    "isStickied": false,
    "isArchived": false,
    "distinguished": null,
    "removedBy": null,
    "language": "en"
  }
]

Requests and billing

  • Requests: 1 Web Access request per call, plus up to 1 setup request per call.
  • Billing: passthrough. Each request the action makes bills at its own rate on your plan; there is no separate charge for the action. See Pricing.

subreddit

List a subreddit's posts in the order Reddit shows them: hot, new, top, rising, controversial or best, with a time range for top and controversial. Each row is a full post, the same as search returns: title, author, body, link, score, upvote ratio, comment count and flair. About 25 posts per page after a short first page; pinned posts come first, as on the site. A subreddit that does not exist, or that Reddit bans, keeps private or quarantines, fails with that reason.

POST https://request.usestring.ai/v1/integrations/reddit/subreddit

Input

Unknown fields are rejected.

FieldTypeDescription
subredditstringRequired. The subreddit: its name, such as technology, r/technology, or its URL. A URL ending in .json works too. At least 1 character.
sorthot new top rising controversial besthot (the default), new, top, rising, controversial or best.
timehour day week month year allFor top and controversial: the last hour, day, week, month or year, or all. Reddit's default is day.
maxPagesintegerThe most listing pages to read, 1 to 40, the first about 7 posts and each later one about 25. Defaults to 5 (about 100 posts) From 1 to 40.

Output

data is an array of rows, one per result. Each row has:

FieldTypeDescription
idstringThe post's base36 id, as in reddit.com/comments/<id>.
fullnamestringThe post's fullname, t3_<id>.
subredditstringThe subreddit's name without r/.
subredditIdstringThe subreddit's fullname, t5_<id>.
titlestring—
authorstring | nullThe author's username; null when the account is deleted or suspended.
authorIdstring | nullThe author's fullname, t2_<id>.
createdAtstringWhen the post was submitted, ISO 8601 in UTC.
editedAtstring | nullWhen the post was last edited, ISO 8601 in UTC; null if never.
scoreintegerUpvotes minus downvotes, as Reddit shows it.
upvoteRationumber | nullThe share of votes that are upvotes, 0 to 1.
commentCountinteger—
permalinkstringThe post's page on www.reddit.com.
urlstringWhat the post links to; the post's own page for a text post.
domainstringThe linked site's domain, or self.<subreddit> for a text post.
isSelfbooleanTrue for a text post.
bodystring | nullA text post's body as Markdown; null for a link, image or video post without text.
flairstring | nullThe post's flair text.
thumbnailstring | nullThe post's thumbnail image URL.
isNsfwboolean—
isSpoilerboolean—
isLockedboolean—
isStickiedboolean—
isArchivedboolean—
distinguishedstring | nullmoderator or admin when the author posted in that role.
removedBystring | nullWhy the post is removed, such as moderator, author or deleted; null when it is not.
languagestring | nullThe post's language as Reddit detected it, such as en; und (undetermined) when Reddit could not tell, as for many link and image posts with little text.

Example

curl https://request.usestring.ai/v1/integrations/reddit/subreddit \
  -H "Authorization: Bearer $STRING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subreddit": "MaticRobots",
    "sort": "new",
    "maxPages": 1
  }'

data starts with these rows:

[
  {
    "id": "1xafajp",
    "fullname": "t3_1xafajp",
    "subreddit": "MaticRobots",
    "subredditId": "t5_9uh9zm",
    "title": "Holiday Sales?",
    "author": "Jazzlike_Rich_9275",
    "authorId": "t2_co3yzo0u",
    "createdAt": "2026-10-20T01:37:33Z",
    "editedAt": null,
    "score": 3,
    "upvoteRatio": 1,
    "commentCount": 4,
    "permalink": "https://www.reddit.com/r/MaticRobots/comments/1xafajp/holiday_sales/",
    "url": "https://www.reddit.com/r/MaticRobots/comments/1xafajp/holiday_sales/",
    "domain": "self.MaticRobots",
    "isSelf": true,
    "body": "Any plans for Black Friday or holiday sales this year? I’ve been considering purchasing a Matic for a while and really regret not pulling the trigger before the…",
    "flair": "Other",
    "thumbnail": null,
    "isNsfw": false,
    "isSpoiler": false,
    "isLocked": false,
    "isStickied": false,
    "isArchived": false,
    "distinguished": null,
    "removedBy": null,
    "language": "en"
  },
  {
    "id": "1xad50k",
    "fullname": "t3_1xad50k",
    "subreddit": "MaticRobots",
    "subredditId": "t5_9uh9zm",
    "title": "Need More Convenient “Job” Options",
    "author": "Muhahahahaz",
    "authorId": "t2_i3w9f",
    "createdAt": "2026-10-19T23:57:44Z",
    "editedAt": null,
    "score": 8,
    "upvoteRatio": 1,
    "commentCount": 2,
    "permalink": "https://www.reddit.com/r/MaticRobots/comments/1xad50k/need_more_convenient_job_options/",
    "url": "https://i.redd.it/tp9mjxssiiwh1.jpeg",
    "domain": "i.redd.it",
    "isSelf": false,
    "body": "It would be really nice to have a “Start Now” option for this impending job. (Or at the very least, let me schedule it for any arbitrary time I want? Rather tha…",
    "flair": "New Feature",
    "thumbnail": "https://preview.redd.it/tp9mjxssiiwh1.jpeg?width=140&height=140&crop=1%3A1%2Csmart&auto=webp&s=ff0ca09058aa38b48b6c0c5d4d67b917c1ce26d1",
    "isNsfw": false,
    "isSpoiler": false,
    "isLocked": false,
    "isStickied": false,
    "isArchived": false,
    "distinguished": null,
    "removedBy": null,
    "language": "en"
  }
]

Requests and billing

  • Requests: 1–2 Web Access requests per result page, plus up to 1 setup request per call.
  • Billing: passthrough. Each request the action makes bills at its own rate on your plan; there is no separate charge for the action. See Pricing.