crawlora-reddit 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd335fb8738ac4f6426210045ca2da771e3ebaa27667f5755a2882508e7aadc3
4
- data.tar.gz: 98cee1e6f1a8c9a9c6ef59b65a23fc0c145f05d3d5e4ce152c7f566af0c53582
3
+ metadata.gz: 65fb33c95869a83acb80a6b75e9893fc8fac4b9971e992c88910cacdb1048fc5
4
+ data.tar.gz: bd22849dd6fcd03df6dc6546175e78c6270e6fbb86349d111df1c796cc38c2df
5
5
  SHA512:
6
- metadata.gz: 0e21572cc86ad7fc2b7e87c09ff56ccfd6d7d52356225b0be372b83ec34ef3c730fce4b40dcf08daaf8ef01524541688271414e6c205ec2b5ce005f911ff3339
7
- data.tar.gz: d847189d240b5617e06eb85eb2b1bea83470f0faaa26a90141cb2b9e633689116be115a6fe5026a49ce06b16bf6c130f1123342cb1aebf019fd6cbd856d43be4
6
+ metadata.gz: b31df29616726a36bb0fed7f4bc628d90677dbd93baebfb418d6546c2d28c1a78ff91c165d78662a31cc76bff3c7fd442142b5320a0fd4622f6a85c77f2889ed
7
+ data.tar.gz: d8495d2b726bba61264d907a614f9b3ed410447ac4958d73180172f462e7775f9ba7f57399b24e281c18a57eece1ba8ccb23b065b2d710f46dbc8624aa22dc39
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Crawlora Reddit API client for Ruby (`crawlora-reddit`)
2
2
 
3
- This Ruby gem calls Crawlora's hosted Reddit API at `https://api.crawlora.net/api/v1`. It exposes 12 endpoints covering search, post and comment details, subreddit feeds, user history, domain listings, trends, and leads; it does not call or scrape Reddit directly. Requests require your Crawlora API key and use your account's service plan.
3
+ This Ruby gem calls Crawlora's hosted Reddit API at `https://api.crawlora.net/api/v1`. It exposes 39 endpoints covering search, post and comment details, subreddit feeds, user history, domain listings, trends, and leads; it does not call or scrape Reddit directly. Requests require your Crawlora API key and use your account's service plan.
4
4
 
5
5
  ## Install
6
6
 
@@ -20,7 +20,7 @@ puts result
20
20
  client.close
21
21
  ```
22
22
 
23
- Use an operation-specific method for normal calls. `request(operation_id, params = {}, response_type: :auto)` is available for every operation. `response_type: :text` returns raw response text. This gem includes 12 API operations.
23
+ Use an operation-specific method for normal calls. `request(operation_id, params = {}, response_type: :auto)` is available for every operation. `response_type: :text` returns raw response text. This gem includes 39 API operations.
24
24
 
25
25
  ```ruby
26
26
  client = Crawlora::Reddit::Client.new(api_key: ENV.fetch("CRAWLORA_API_KEY"), timeout: 30)
@@ -36,17 +36,44 @@ Browse every route included in this gem. The [endpoint reference](https://github
36
36
 
37
37
  | Method | Endpoint | API operation | Description |
38
38
  | --- | --- | --- | --- |
39
+ | `GET` | `/reddit/archive/comments/ids` | `reddit-archive-comments-ids` | Look up archived Reddit comments by ids |
40
+ | `GET` | `/reddit/archive/comments/search` | `reddit-archive-comments-search` | Search archived Reddit comments |
41
+ | `GET` | `/reddit/archive/comments/{id}/tree` | `reddit-archive-comments-tree` | Get an archived Reddit comment tree |
42
+ | `GET` | `/reddit/archive/posts/ids` | `reddit-archive-posts-ids` | Look up archived Reddit posts by ids |
43
+ | `GET` | `/reddit/archive/posts/search` | `reddit-archive-posts-search` | Search archived Reddit posts |
44
+ | `GET` | `/reddit/archive/subreddits/search` | `reddit-archive-subreddits-search` | Search Reddit's archived subreddit directory |
45
+ | `GET` | `/reddit/archive/time-series` | `reddit-archive-time-series` | Get historical Reddit archive time series |
46
+ | `GET` | `/reddit/comment/{id}` | `reddit-comment` | Get a Reddit comment |
47
+ | `GET` | `/reddit/comment/{id}/awards` | `reddit-comment-awards` | Get Reddit comment awards |
39
48
  | `GET` | `/reddit/comments/{id}` | `reddit-comments` | Get Reddit post comments |
40
49
  | `GET` | `/reddit/domain/{domain}/posts` | `reddit-domain-posts` | List Reddit domain posts |
41
50
  | `GET` | `/reddit/leads` | `reddit-leads` | Find Reddit buying-intent leads |
51
+ | `GET` | `/reddit/popular` | `reddit-popular` | List Reddit popular posts |
42
52
  | `GET` | `/reddit/post/{id}` | `reddit-post` | Get Reddit post |
53
+ | `GET` | `/reddit/post/{id}/awards` | `reddit-post-awards` | Get Reddit post awards |
54
+ | `GET` | `/reddit/posts/ids` | `reddit-posts-by-ids` | Get Reddit posts by ids |
43
55
  | `GET` | `/reddit/search` | `reddit-search` | Search Reddit posts |
56
+ | `GET` | `/reddit/search/comments` | `reddit-search-comments` | Search Reddit comments |
57
+ | `GET` | `/reddit/search/people` | `reddit-search-people` | Search Reddit people |
44
58
  | `GET` | `/reddit/subreddit/{subreddit}/about` | `reddit-subreddit-about` | Get Reddit subreddit metadata |
45
59
  | `GET` | `/reddit/subreddit/{subreddit}/comments` | `reddit-subreddit-comments` | List Reddit subreddit comments |
60
+ | `GET` | `/reddit/subreddit/{subreddit}/flairs` | `reddit-subreddit-flairs` | List Reddit community post flairs |
61
+ | `GET` | `/reddit/subreddit/{subreddit}/highlights` | `reddit-subreddit-highlights` | List Reddit community highlights |
62
+ | `GET` | `/reddit/subreddit/{subreddit}/leaderboard/categories` | `reddit-subreddit-leaderboard-categories` | List Reddit community leaderboard categories |
46
63
  | `GET` | `/reddit/subreddit/{subreddit}/posts` | `reddit-subreddit-posts` | List Reddit subreddit posts |
64
+ | `GET` | `/reddit/subreddit/{subreddit}/rules` | `reddit-subreddit-rules` | Get Reddit community rules |
65
+ | `GET` | `/reddit/subreddit/{subreddit}/user-flairs` | `reddit-subreddit-user-flairs` | List Reddit community user flairs |
66
+ | `GET` | `/reddit/subreddit/{subreddit}/wiki` | `reddit-subreddit-wiki` | Get Reddit community wiki |
67
+ | `GET` | `/reddit/subreddits/discover` | `reddit-subreddits-discover` | List Reddit community discovery feeds |
47
68
  | `GET` | `/reddit/subreddits/posts` | `reddit-subreddits-posts` | List Reddit multi-subreddit posts |
69
+ | `GET` | `/reddit/subreddits/search` | `reddit-subreddits-search` | Search Reddit communities |
70
+ | `GET` | `/reddit/subreddits/suggest` | `reddit-subreddits-suggest` | Suggest Reddit communities |
71
+ | `GET` | `/reddit/topics` | `reddit-topics` | List Reddit taxonomy topics |
72
+ | `GET` | `/reddit/topics/broad` | `reddit-topics-broad` | List Reddit broad topics |
73
+ | `GET` | `/reddit/topics/search` | `reddit-topics-search` | Search Reddit topics |
48
74
  | `GET` | `/reddit/trends` | `reddit-trends` | List Reddit trends |
49
75
  | `GET` | `/reddit/user/{username}/comments` | `reddit-user-comments` | List Reddit user comments |
50
76
  | `GET` | `/reddit/user/{username}/posts` | `reddit-user-posts` | List Reddit user posts |
77
+ | `GET` | `/reddit/user/{username}/profile` | `reddit-user-profile` | Get a Reddit user profile |
51
78
 
52
79
  See [Crawlora](https://crawlora.net/?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=reddit-ruby-homepage), the [API documentation](https://crawlora.net/docs?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=reddit-ruby-api-docs), and [the package repository](https://github.com/Crawlora-org/crawlora-reddit) for account setup, the API operation reference, and release history.
@@ -19,17 +19,17 @@ module Crawlora
19
19
  end
20
20
 
21
21
  OPERATIONS = JSON.parse(<<~'JSON').freeze
22
- {"reddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comments", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1tka90t"}, {"default": "confidence", "description": "Comment order: confidence, top, new, controversial, old, or qa. Applied to the anonymous HTML request when metrics are enabled.", "enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"default": 3, "description": "Maximum flat comment depth returned in metrics mode.", "in": "query", "name": "depth", "type": "integer"}, {"default": false, "description": "Include public post and per-comment engagement metrics; costs 3 credits instead of 1", "in": "query", "name": "include_metrics", "type": "boolean"}], "path": "/reddit/comments/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "depth", "type": "integer"}, {"in": "query", "name": "include_metrics", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "reddit-domain-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-domain-posts", "method": "GET", "params": [{"description": "Domain hostname, without scheme or path", "in": "path", "name": "domain", "required": true, "type": "string", "x-example": "openai.com"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/domain/{domain}/posts", "pathParams": ["domain"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-leads": {"bodyParam": null, "bodyRequired": false, "id": "reddit-leads", "method": "GET", "params": [{"description": "What you offer, in plain language", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "crm for small teams"}, {"description": "Restrict the search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"default": "month", "description": "Time window: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum leads returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Minimum buying-intent score to return, 0-10, defaults to 4", "in": "query", "name": "min_score", "type": "integer"}, {"default": "auto", "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", "enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "path": "/reddit/leads", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "min_score", "type": "integer"}, {"enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-post": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}, {"default": false, "description": "Include public engagement metrics; costs 3 credits instead of 1", "in": "query", "name": "include_metrics", "type": "boolean"}], "path": "/reddit/post/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "include_metrics", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "reddit-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "gpt"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-about": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-about", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/subreddit/{subreddit}/about", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-comments", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/comments", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-posts", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/posts", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-posts", "method": "GET", "params": [{"description": "Comma-separated subreddit names, without r/, maximum 10", "in": "query", "name": "subreddits", "required": true, "type": "string", "x-example": "OpenAI,MachineLearning"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/posts", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "subreddits", "required": true, "type": "string"}, {"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-trends": {"bodyParam": null, "bodyRequired": false, "id": "reddit-trends", "method": "GET", "params": [{"default": "hot", "description": "Sort: hot, new, rising, or top", "enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/trends", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-comments", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/comments", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-posts", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/posts", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}}
22
+ {"reddit-archive-comments-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-ids", "method": "GET", "params": [{"description": "Comma-separated Reddit comment ids (1-1,000); optional t1_ prefixes are accepted", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "c60n05h,abc123"}], "path": "/reddit/archive/comments/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-archive-comments-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-search", "method": "GET", "params": [{"description": "Public Reddit username filter", "in": "query", "name": "author", "type": "string"}, {"description": "Subreddit name filter", "in": "query", "name": "subreddit", "type": "string"}, {"description": "Full-text search within comment bodies; requires author, subreddit, link_id, or parent_id", "in": "query", "name": "query", "type": "string"}, {"description": "Reddit post id to scope comments", "in": "query", "name": "link_id", "type": "string"}, {"description": "Parent comment id; an explicitly empty value selects top-level comments", "in": "query", "name": "parent_id", "type": "string"}, {"description": "Creation-time lower bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_after", "type": "string"}, {"description": "Creation-time upper bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_before", "type": "string"}, {"default": "desc", "description": "Sort by creation time", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/comments/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "author", "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "link_id", "type": "string"}, {"in": "query", "name": "parent_id", "type": "string"}, {"in": "query", "name": "created_after", "type": "string"}, {"in": "query", "name": "created_before", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-comments-tree": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-comments-tree", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "7cff0b"}, {"description": "Parent comment id; an explicitly empty value selects top-level comments", "in": "query", "name": "parent_id", "type": "string"}, {"description": "Maximum archive comment nodes to expand, defaults to 50 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Initial breadth, defaults to 2 and must be between 0 and 8", "in": "query", "name": "start_breadth", "type": "integer"}, {"description": "Initial depth, defaults to 3 and must be between 0 and 8", "in": "query", "name": "start_depth", "type": "integer"}], "path": "/reddit/archive/comments/{id}/tree", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "parent_id", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "start_breadth", "type": "integer"}, {"in": "query", "name": "start_depth", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-posts-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-posts-ids", "method": "GET", "params": [{"description": "Comma-separated Reddit post ids (1-1,000); optional t3_ prefixes are accepted", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "1wwa2ff,z1c9z"}], "path": "/reddit/archive/posts/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-archive-posts-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-posts-search", "method": "GET", "params": [{"description": "Text search across archived post titles and selftext", "in": "query", "name": "query", "type": "string"}, {"description": "Public Reddit username filter", "in": "query", "name": "author", "type": "string"}, {"description": "Subreddit name filter", "in": "query", "name": "subreddit", "type": "string"}, {"description": "Linked URL prefix filter", "in": "query", "name": "url", "type": "string"}, {"description": "Require an exact URL match; requires url", "in": "query", "name": "url_exact", "type": "boolean"}, {"description": "Creation-time lower bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_after", "type": "string"}, {"description": "Creation-time upper bound; accepts epoch seconds or milliseconds, ISO 8601 dates, or relative offsets such as 1year, 2d, or 5min", "in": "query", "name": "created_before", "type": "string"}, {"default": "desc", "description": "Sort by creation time", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/posts/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "author", "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"in": "query", "name": "url", "type": "string"}, {"in": "query", "name": "url_exact", "type": "boolean"}, {"in": "query", "name": "created_after", "type": "string"}, {"in": "query", "name": "created_before", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-subreddits-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-subreddits-search", "method": "GET", "params": [{"description": "Subreddit name prefix, with or without r/", "in": "query", "name": "query", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Minimum archived subscriber count", "in": "query", "name": "min_subscribers", "type": "integer"}, {"description": "Maximum archived subscriber count", "in": "query", "name": "max_subscribers", "type": "integer"}, {"description": "Filter by archived NSFW status", "in": "query", "name": "over_18", "type": "boolean"}, {"default": "subscribers", "description": "Sort field", "enum": ["created_utc", "subscribers", "subreddit"], "in": "query", "name": "sort_by", "type": "string"}, {"default": "desc", "description": "Sort direction", "enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum subreddits, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/archive/subreddits/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "required": true, "type": "string"}, {"in": "query", "name": "min_subscribers", "type": "integer"}, {"in": "query", "name": "max_subscribers", "type": "integer"}, {"in": "query", "name": "over_18", "type": "boolean"}, {"enum": ["created_utc", "subscribers", "subreddit"], "in": "query", "name": "sort_by", "type": "string"}, {"enum": ["asc", "desc"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-archive-time-series": {"bodyParam": null, "bodyRequired": false, "id": "reddit-archive-time-series", "method": "GET", "params": [{"description": "Archive metric", "enum": ["posts_count", "comments_count", "posts_score_sum", "comments_score_sum", "posts_retrieval_delay_seconds_sum", "comments_retrieval_delay_seconds_sum", "subreddit_subscribers"], "in": "query", "name": "metric", "required": true, "type": "string", "x-example": "posts_count"}, {"description": "Optional subreddit scope; required for subreddit_subscribers, and unsupported for retrieval-delay metrics", "in": "query", "name": "subreddit", "type": "string", "x-example": "OpenAI"}, {"description": "Time bucket precision", "enum": ["year", "quarter", "month", "week", "day", "hour", "minute"], "in": "query", "name": "precision", "required": true, "type": "string", "x-example": "year"}, {"description": "Absolute start time: epoch seconds/milliseconds or ISO 8601", "in": "query", "name": "created_after", "required": true, "type": "string", "x-example": "2024-01-01"}, {"description": "Absolute end time: epoch seconds/milliseconds or ISO 8601", "in": "query", "name": "created_before", "required": true, "type": "string", "x-example": "2025-01-01"}], "path": "/reddit/archive/time-series", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["posts_count", "comments_count", "posts_score_sum", "comments_score_sum", "posts_retrieval_delay_seconds_sum", "comments_retrieval_delay_seconds_sum", "subreddit_subscribers"], "in": "query", "name": "metric", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["year", "quarter", "month", "week", "day", "hour", "minute"], "in": "query", "name": "precision", "required": true, "type": "string"}, {"in": "query", "name": "created_after", "required": true, "type": "string"}, {"in": "query", "name": "created_before", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-comment": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comment", "method": "GET", "params": [{"description": "Comment id with or without t1_, or a comment URL", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "p8402di"}], "path": "/reddit/comment/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-comment-awards": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comment-awards", "method": "GET", "params": [{"description": "Comment id with or without t1_, or a comment URL", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "19shpw8bwhfnn"}], "path": "/reddit/comment/{id}/awards", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-comments", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1tka90t"}, {"default": "confidence", "description": "Comment order: confidence, top, new, controversial, old, or qa.", "enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum comments returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"default": 3, "description": "Maximum flat comment depth returned.", "in": "query", "name": "depth", "type": "integer"}], "path": "/reddit/comments/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [{"enum": ["confidence", "top", "new", "controversial", "old", "qa"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "depth", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-domain-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-domain-posts", "method": "GET", "params": [{"description": "Domain hostname, without scheme or path", "in": "path", "name": "domain", "required": true, "type": "string", "x-example": "openai.com"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/domain/{domain}/posts", "pathParams": ["domain"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-leads": {"bodyParam": null, "bodyRequired": false, "id": "reddit-leads", "method": "GET", "params": [{"description": "What you offer, in plain language", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "crm for small teams"}, {"description": "Restrict the search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"default": "month", "description": "Time window: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum leads returned, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Minimum buying-intent score to return, 0-10, defaults to 4", "in": "query", "name": "min_score", "type": "integer"}, {"default": "auto", "description": "Classifier: auto uses the model when configured, heuristic skips it, llm requires it", "enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "path": "/reddit/leads", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "min_score", "type": "integer"}, {"enum": ["auto", "heuristic", "llm"], "in": "query", "name": "classifier", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-popular": {"bodyParam": null, "bodyRequired": false, "id": "reddit-popular", "method": "GET", "params": [{"default": "hot", "description": "Sort order: hot or top", "enum": ["hot", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/popular", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-post": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}], "path": "/reddit/post/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-post-awards": {"bodyParam": null, "bodyRequired": false, "id": "reddit-post-awards", "method": "GET", "params": [{"description": "Reddit post id or t3_ id", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1v8hy3q"}], "path": "/reddit/post/{id}/awards", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-posts-by-ids": {"bodyParam": null, "bodyRequired": false, "id": "reddit-posts-by-ids", "method": "GET", "params": [{"description": "Comma-separated post ids, with or without the t3_ prefix (maximum 100)", "in": "query", "name": "ids", "required": true, "type": "string", "x-example": "1v8hy3q,1tka90t"}], "path": "/reddit/posts/ids", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "ids", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "gpt"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search-comments", "method": "GET", "params": [{"description": "Search keywords", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang generics"}, {"description": "Restrict search to a subreddit name, without r/", "in": "query", "name": "subreddit", "type": "string"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top/comments sorts: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search/comments", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "subreddit", "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-search-people": {"bodyParam": null, "bodyRequired": false, "id": "reddit-search-people", "method": "GET", "params": [{"description": "Username or profile keyword", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "spez"}, {"default": "relevance", "description": "Sort: relevance, hot, new, top, or comments", "enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum people, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/search/people", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"enum": ["relevance", "hot", "new", "top", "comments"], "in": "query", "name": "sort", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-about": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-about", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum sample posts inspected, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}], "path": "/reddit/subreddit/{subreddit}/about", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-comments", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/comments", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-flairs": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-flairs", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/flairs", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-highlights": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-highlights", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/highlights", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-leaderboard-categories": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-leaderboard-categories", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/leaderboard/categories", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-posts", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "OpenAI"}, {"default": "hot", "description": "Sort: hot, new, top, rising, or controversial", "enum": ["hot", "new", "top", "rising", "controversial"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddit/{subreddit}/posts", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "top", "rising", "controversial"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddit-rules": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-rules", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddit/{subreddit}/rules", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-user-flairs": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-user-flairs", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "nba"}], "path": "/reddit/subreddit/{subreddit}/user-flairs", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-subreddit-wiki": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddit-wiki", "method": "GET", "params": [{"description": "Subreddit name, without r/", "in": "path", "name": "subreddit", "required": true, "type": "string", "x-example": "golang"}, {"description": "Wiki page path, defaults to index", "in": "query", "name": "page", "type": "string", "x-example": "index"}], "path": "/reddit/subreddit/{subreddit}/wiki", "pathParams": ["subreddit"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "page", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-discover": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-discover", "method": "GET", "params": [{"default": "popular", "description": "Community feed: popular, new, or default", "enum": ["popular", "new", "default"], "in": "query", "name": "feed", "type": "string"}, {"description": "Maximum communities, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/discover", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["popular", "new", "default"], "in": "query", "name": "feed", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-posts", "method": "GET", "params": [{"description": "Comma-separated subreddit names, without r/, maximum 10", "in": "query", "name": "subreddits", "required": true, "type": "string", "x-example": "OpenAI,MachineLearning"}, {"default": "hot", "description": "Sort: hot, new, top, or rising", "enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/posts", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "subreddits", "required": true, "type": "string"}, {"enum": ["hot", "new", "top", "rising"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-search", "method": "GET", "params": [{"description": "Community name search query", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}, {"description": "Maximum communities, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/subreddits/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-subreddits-suggest": {"bodyParam": null, "bodyRequired": false, "id": "reddit-subreddits-suggest", "method": "GET", "params": [{"description": "Community name or prefix", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/subreddits/suggest", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-topics": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics", "method": "GET", "params": [{"description": "Maximum topics, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Opaque app pagination cursor from a previous response", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/topics", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-topics-broad": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics-broad", "method": "GET", "params": [], "path": "/reddit/topics/broad", "pathParams": [], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "reddit-topics-search": {"bodyParam": null, "bodyRequired": false, "id": "reddit-topics-search", "method": "GET", "params": [{"description": "Topic search query", "in": "query", "name": "q", "required": true, "type": "string", "x-example": "golang"}], "path": "/reddit/topics/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "q", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-trends": {"bodyParam": null, "bodyRequired": false, "id": "reddit-trends", "method": "GET", "params": [{"default": "hot", "description": "Sort: hot, new, rising, or top", "enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"description": "Time window for top sort: hour, day, week, month, year, or all", "enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/trends", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["hot", "new", "rising", "top"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["hour", "day", "week", "month", "year", "all"], "in": "query", "name": "time", "type": "string"}, {"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-comments": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-comments", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum comments, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/comments", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-posts": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-posts", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "reddit"}, {"description": "Maximum posts, defaults to 25 and clamps to 100", "in": "query", "name": "limit", "type": "integer"}, {"description": "Reddit pagination token", "in": "query", "name": "after", "type": "string"}], "path": "/reddit/user/{username}/posts", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "limit", "type": "integer"}, {"in": "query", "name": "after", "type": "string"}], "security": ["ApiKeyAuth"]}, "reddit-user-profile": {"bodyParam": null, "bodyRequired": false, "id": "reddit-user-profile", "method": "GET", "params": [{"description": "Public Reddit username, without u/", "in": "path", "name": "username", "required": true, "type": "string", "x-example": "spez"}], "path": "/reddit/user/{username}/profile", "pathParams": ["username"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}}
23
23
  JSON
24
24
  OPERATION_IDS = JSON.parse(<<~'JSON').freeze
25
- ["reddit-comments", "reddit-domain-posts", "reddit-leads", "reddit-post", "reddit-search", "reddit-subreddit-about", "reddit-subreddit-comments", "reddit-subreddit-posts", "reddit-subreddits-posts", "reddit-trends", "reddit-user-comments", "reddit-user-posts"]
25
+ ["reddit-archive-comments-ids", "reddit-archive-comments-search", "reddit-archive-comments-tree", "reddit-archive-posts-ids", "reddit-archive-posts-search", "reddit-archive-subreddits-search", "reddit-archive-time-series", "reddit-comment", "reddit-comment-awards", "reddit-comments", "reddit-domain-posts", "reddit-leads", "reddit-popular", "reddit-post", "reddit-post-awards", "reddit-posts-by-ids", "reddit-search", "reddit-search-comments", "reddit-search-people", "reddit-subreddit-about", "reddit-subreddit-comments", "reddit-subreddit-flairs", "reddit-subreddit-highlights", "reddit-subreddit-leaderboard-categories", "reddit-subreddit-posts", "reddit-subreddit-rules", "reddit-subreddit-user-flairs", "reddit-subreddit-wiki", "reddit-subreddits-discover", "reddit-subreddits-posts", "reddit-subreddits-search", "reddit-subreddits-suggest", "reddit-topics", "reddit-topics-broad", "reddit-topics-search", "reddit-trends", "reddit-user-comments", "reddit-user-posts", "reddit-user-profile"]
26
26
  JSON
27
27
  OPERATION_COUNT = OPERATION_IDS.length
28
28
 
29
29
  class Client
30
30
  attr_reader :base_url
31
31
 
32
- def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-reddit-ruby/0.1.2", transport: nil)
32
+ def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-reddit-ruby/0.3.0", transport: nil)
33
33
  @api_key = api_key
34
34
  @base_url = base_url.to_s.sub(%r{/+$}, "")
35
35
  @timeout = Float(timeout)
@@ -114,7 +114,43 @@ module Crawlora
114
114
  OPERATIONS
115
115
  end
116
116
 
117
- define_method('comments') do |**params|
117
+ define_method('archive_comments_ids') do |**params|
118
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
119
+ request('reddit-archive-comments-ids', params, response_type: response_type)
120
+ end
121
+ define_method('archive_comments_search') do |**params|
122
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
123
+ request('reddit-archive-comments-search', params, response_type: response_type)
124
+ end
125
+ define_method('archive_comments_tree') do |**params|
126
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
127
+ request('reddit-archive-comments-tree', params, response_type: response_type)
128
+ end
129
+ define_method('archive_posts_ids') do |**params|
130
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
131
+ request('reddit-archive-posts-ids', params, response_type: response_type)
132
+ end
133
+ define_method('archive_posts_search') do |**params|
134
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
135
+ request('reddit-archive-posts-search', params, response_type: response_type)
136
+ end
137
+ define_method('archive_subreddits_search') do |**params|
138
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
139
+ request('reddit-archive-subreddits-search', params, response_type: response_type)
140
+ end
141
+ define_method('archive_time_series') do |**params|
142
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
143
+ request('reddit-archive-time-series', params, response_type: response_type)
144
+ end
145
+ define_method('comment') do |**params|
146
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
147
+ request('reddit-comment', params, response_type: response_type)
148
+ end
149
+ define_method('comment_awards') do |**params|
150
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
151
+ request('reddit-comment-awards', params, response_type: response_type)
152
+ end
153
+ define_method('comments') do |**params|
118
154
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
119
155
  request('reddit-comments', params, response_type: response_type)
120
156
  end
@@ -126,14 +162,34 @@ module Crawlora
126
162
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
127
163
  request('reddit-leads', params, response_type: response_type)
128
164
  end
165
+ define_method('popular') do |**params|
166
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
167
+ request('reddit-popular', params, response_type: response_type)
168
+ end
129
169
  define_method('post') do |**params|
130
170
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
131
171
  request('reddit-post', params, response_type: response_type)
132
172
  end
173
+ define_method('post_awards') do |**params|
174
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
175
+ request('reddit-post-awards', params, response_type: response_type)
176
+ end
177
+ define_method('posts_by_ids') do |**params|
178
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
179
+ request('reddit-posts-by-ids', params, response_type: response_type)
180
+ end
133
181
  define_method('search') do |**params|
134
182
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
135
183
  request('reddit-search', params, response_type: response_type)
136
184
  end
185
+ define_method('search_comments') do |**params|
186
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
187
+ request('reddit-search-comments', params, response_type: response_type)
188
+ end
189
+ define_method('search_people') do |**params|
190
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
191
+ request('reddit-search-people', params, response_type: response_type)
192
+ end
137
193
  define_method('subreddit_about') do |**params|
138
194
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
139
195
  request('reddit-subreddit-about', params, response_type: response_type)
@@ -142,14 +198,62 @@ module Crawlora
142
198
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
143
199
  request('reddit-subreddit-comments', params, response_type: response_type)
144
200
  end
201
+ define_method('subreddit_flairs') do |**params|
202
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
203
+ request('reddit-subreddit-flairs', params, response_type: response_type)
204
+ end
205
+ define_method('subreddit_highlights') do |**params|
206
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
207
+ request('reddit-subreddit-highlights', params, response_type: response_type)
208
+ end
209
+ define_method('subreddit_leaderboard_categories') do |**params|
210
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
211
+ request('reddit-subreddit-leaderboard-categories', params, response_type: response_type)
212
+ end
145
213
  define_method('subreddit_posts') do |**params|
146
214
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
147
215
  request('reddit-subreddit-posts', params, response_type: response_type)
148
216
  end
217
+ define_method('subreddit_rules') do |**params|
218
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
219
+ request('reddit-subreddit-rules', params, response_type: response_type)
220
+ end
221
+ define_method('subreddit_user_flairs') do |**params|
222
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
223
+ request('reddit-subreddit-user-flairs', params, response_type: response_type)
224
+ end
225
+ define_method('subreddit_wiki') do |**params|
226
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
227
+ request('reddit-subreddit-wiki', params, response_type: response_type)
228
+ end
229
+ define_method('subreddits_discover') do |**params|
230
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
231
+ request('reddit-subreddits-discover', params, response_type: response_type)
232
+ end
149
233
  define_method('subreddits_posts') do |**params|
150
234
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
151
235
  request('reddit-subreddits-posts', params, response_type: response_type)
152
236
  end
237
+ define_method('subreddits_search') do |**params|
238
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
239
+ request('reddit-subreddits-search', params, response_type: response_type)
240
+ end
241
+ define_method('subreddits_suggest') do |**params|
242
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
243
+ request('reddit-subreddits-suggest', params, response_type: response_type)
244
+ end
245
+ define_method('topics') do |**params|
246
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
247
+ request('reddit-topics', params, response_type: response_type)
248
+ end
249
+ define_method('topics_broad') do |**params|
250
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
251
+ request('reddit-topics-broad', params, response_type: response_type)
252
+ end
253
+ define_method('topics_search') do |**params|
254
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
255
+ request('reddit-topics-search', params, response_type: response_type)
256
+ end
153
257
  define_method('trends') do |**params|
154
258
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
155
259
  request('reddit-trends', params, response_type: response_type)
@@ -162,6 +266,10 @@ module Crawlora
162
266
  response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
163
267
  request('reddit-user-posts', params, response_type: response_type)
164
268
  end
269
+ define_method('user_profile') do |**params|
270
+ response_type = params.delete(:response_type) || params.delete(:_response_type) || :auto
271
+ request('reddit-user-profile', params, response_type: response_type)
272
+ end
165
273
 
166
274
  private
167
275
 
@@ -1,5 +1,5 @@
1
1
  module Crawlora
2
2
  module Reddit
3
- VERSION = "0.1.2"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crawlora-reddit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crawlora
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-12 00:00:00.000000000 Z
11
+ date: 2026-11-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby client for Crawlora's hosted Reddit API. Covers search, post and
14
14
  comment details, subreddit feeds, user history, domain listings, trends, and leads
15
- across 12 endpoints.
15
+ across 39 endpoints.
16
16
  email:
17
17
  executables: []
18
18
  extensions: []
@@ -49,5 +49,5 @@ requirements: []
49
49
  rubygems_version: 3.4.19
50
50
  signing_key:
51
51
  specification_version: 4
52
- summary: Reddit API client for Crawlora (12 endpoints)
52
+ summary: Reddit API client for Crawlora (39 endpoints)
53
53
  test_files: []