openapi: 3.2.0 info: title: Monocrawl Reddit API version: 0.1.0 description: One key, one envelope, one credit meter across social, search, commerce and web data. contact: name: Monocrawl support url: https://www.monocrawl.com/contact termsOfService: https://www.monocrawl.com/legal/terms-and-conditions servers: - url: https://www.monocrawl.com security: - ApiKeyHeader: [] tags: - name: Reddit paths: /v1/reddit/omni-search: get: operationId: reddit_omni_search tags: - Reddit summary: Reddit omni-search description: 'One keyword swept across Reddit: the matching threads, the top-level comments on each, and the communities they sit in with subscriber and activity figures. Costs 5 credits per successful live response.' parameters: - name: query in: query required: true schema: type: string example: notion alternatives description: Keyword or phrase to sweep across Reddit - name: subreddit in: query required: false schema: type: string example: '' description: Limit the sweep to one subreddit - name: threads in: query required: false schema: type: string example: '5' description: Threads to return, 1 to 10 - name: comments_per_thread in: query required: false schema: type: string example: '5' description: Top-level comments per thread, 0 to 15 - name: include in: query required: false schema: type: array items: type: string enum: - comments - subreddits - none style: form explode: false example: - comments - subreddits description: 'comments, subreddits, or none Accepted values (comma-separated): comments, subreddits, none. Case, spaces, hyphens and underscores are interchangeable.' - name: sort in: query required: false schema: type: string enum: - relevance - hot - top - new - comments x-value-aliases: newest: new latest: new example: relevance description: 'relevance, hot, top, new or comments Accepted values: relevance, hot, top, new, comments. Case, spaces, hyphens and underscores are interchangeable.' - name: timeframe in: query required: false schema: type: string enum: - hour - day - week - month - year - all example: year description: 'hour, day, week, month, year or all Accepted values: hour, day, week, month, year, all. Case, spaces, hyphens and underscores are interchangeable.' - name: cursor in: query required: false schema: type: string example: '' description: Opaque continuation from this operation. Keep the same query, subreddit, sort and timeframe. It advances source pages; each response contains only the requested thread sample, not every source record. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/omni-search.json title: reddit/omni-search data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: _warnings: description: Optional warnings supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - string - 'null' count: description: Number of records in this response, not lifetime or total matches. type: - number - 'null' cursor: description: Opaque next-page token; pass it back unchanged. Null does not prove complete history. type: - string - 'null' query: description: Optional query supplied by this operation. Null means unknown. type: - string - 'null' sort: description: Optional sort supplied by this operation. Null means unknown. type: - string - 'null' sources: description: Optional sources supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: error: description: Optional error supplied by this operation. Null means unknown. type: - string - 'null' funding_reason: description: Optional funding reason supplied by this operation. Null means unknown. type: - string - 'null' latency_ms: description: Optional latency ms supplied by this operation. Null means unknown. type: - number - 'null' ok: description: Optional ok supplied by this operation. Null means unknown. type: - boolean - 'null' source: description: Optional source supplied by this operation. Null means unknown. type: - string - 'null' additionalProperties: true subreddits: description: Optional subreddits supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: description: description: Source description; null or absent means not supplied. type: - string - 'null' name: description: Optional name supplied by this operation. Null means unknown. type: - string - 'null' subscribers: description: Optional subscribers supplied by this operation. Null means unknown. type: - number - 'null' thread_count: description: Optional thread count supplied by this operation. Null means unknown. type: - number - 'null' title: description: Source title when supplied. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true threads: description: Optional threads supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: author: description: Public author information supplied with this record. type: - string - 'null' author_id: description: Optional author id supplied by this operation. Null means unknown. type: - string - 'null' comments_count: description: Optional comments count supplied by this operation. Null means unknown. type: - number - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' gallery: description: Source array was empty in the reviewed captures; item fields remain unspecified. type: - array - 'null' items: {} id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' is_video: description: Optional is video supplied by this operation. Null means unknown. type: - boolean - 'null' over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - 'null' score: description: Optional score supplied by this operation. Null means unknown. type: - number - 'null' selftext: description: Optional selftext supplied by this operation. Null means unknown. type: - string - 'null' selftext_html: description: Optional selftext html supplied by this operation. Null means unknown. type: - string - 'null' spoiler: description: Optional spoiler supplied by this operation. Null means unknown. type: - boolean - 'null' subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string - 'null' title: description: Source title when supplied. type: - string - 'null' top_comments: description: Optional top comments supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: {} additionalProperties: true url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true totals: description: Optional totals supplied by this operation. Null means unknown. type: - object - 'null' properties: comments_sampled: description: Optional comments sampled supplied by this operation. Null means unknown. type: - number - 'null' communities: description: Optional communities supplied by this operation. Null means unknown. type: - number - 'null' threads: description: Optional threads supplied by this operation. Null means unknown. type: - number - 'null' additionalProperties: true additionalProperties: true allOf: - anyOf: - required: - sort properties: sort: description: Optional sort supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - sources properties: sources: description: Optional sources supplied by this operation. Null means unknown. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: error: description: Optional error supplied by this operation. Null means unknown. type: - string - 'null' funding_reason: description: Optional funding reason supplied by this operation. Null means unknown. type: - string - 'null' latency_ms: description: Optional latency ms supplied by this operation. Null means unknown. type: - number - 'null' ok: description: Optional ok supplied by this operation. Null means unknown. type: - boolean - 'null' source: description: Optional source supplied by this operation. Null means unknown. type: - string - 'null' additionalProperties: true - required: - subreddits properties: subreddits: description: Optional subreddits supplied by this operation. Null means unknown. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: description: description: Source description; null or absent means not supplied. type: - string - 'null' name: description: Optional name supplied by this operation. Null means unknown. type: - string - 'null' subscribers: description: Optional subscribers supplied by this operation. Null means unknown. type: - number - 'null' thread_count: description: Optional thread count supplied by this operation. Null means unknown. type: - number - 'null' title: description: Source title when supplied. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true - required: - threads properties: threads: description: Optional threads supplied by this operation. Null means unknown. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: author: description: Public author information supplied with this record. type: - string - 'null' author_id: description: Optional author id supplied by this operation. Null means unknown. type: - string - 'null' comments_count: description: Optional comments count supplied by this operation. Null means unknown. type: - number - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' gallery: description: Source array was empty in the reviewed captures; item fields remain unspecified. type: - array - 'null' items: {} id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' is_video: description: Optional is video supplied by this operation. Null means unknown. type: - boolean - 'null' over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - 'null' score: description: Optional score supplied by this operation. Null means unknown. type: - number - 'null' selftext: description: Optional selftext supplied by this operation. Null means unknown. type: - string - 'null' selftext_html: description: Optional selftext html supplied by this operation. Null means unknown. type: - string - 'null' spoiler: description: Optional spoiler supplied by this operation. Null means unknown. type: - boolean - 'null' subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string - 'null' title: description: Source title when supplied. type: - string - 'null' top_comments: description: Optional top comments supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - object - 'null' properties: {} additionalProperties: true url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true - required: - totals properties: totals: description: Optional totals supplied by this operation. Null means unknown. type: - object properties: comments_sampled: description: Optional comments sampled supplied by this operation. Null means unknown. type: - number - 'null' communities: description: Optional communities supplied by this operation. Null means unknown. type: - number - 'null' threads: description: Optional threads supplied by this operation. Null means unknown. type: - number - 'null' additionalProperties: true x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - _warnings: - example count: 0 cursor: null query: example sort: example sources: - error: example funding_reason: example latency_ms: 0 ok: false source: example subreddits: - description: example name: example subscribers: 0 thread_count: 0 title: example url: https://example.com/example threads: - author: example author_id: example comments_count: 0 created_at: '2026-09-01T12:00:00Z' gallery: [] id: example is_video: false over_18: false score: 0 selftext: example selftext_html: example spoiler: false subreddit: example title: example top_comments: - {} url: https://example.com/example totals: comments_sampled: 0 communities: 0 threads: 0 default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 5 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/post: get: operationId: reddit_post tags: - Reddit summary: Reddit post description: Title, author, score, flags and body for a single Reddit post by URL. Costs 1 credit per successful live response. parameters: - name: url in: query required: true schema: type: string example: https://www.reddit.com/r/Python/comments/1w6latb/it_seems_like_there_was_a_change_for_how_hex/ description: Full Reddit post URL (permalink, redd.it or gallery link) - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/post.json title: reddit/post data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. url: type: - string - 'null' description: Original source URL when supplied. title: type: - string - 'null' description: Discussion title. author: type: - string - 'null' description: Reddit username, not an author object. subreddit: type: - string - 'null' description: Community name. text: type: - string - 'null' description: Post body when included. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. score: type: - number - 'null' description: Net score; can be negative and is not a like count. comments_count: type: - number - 'null' description: Comments reported by the source; null or absent is unknown, not zero. upvote_ratio: type: - number - 'null' description: Source upvote ratio on a 0–1 scale. selftext: type: - string - 'null' description: Full self-post text when supplied. flair: type: - string - 'null' description: Post flair text. _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 - required: - title properties: title: type: - string description: Discussion title. minLength: 1 - required: - author properties: author: type: - string description: Reddit username, not an author object. minLength: 1 - required: - subreddit properties: subreddit: type: - string description: Community name. minLength: 1 - required: - text properties: text: type: - string description: Post body when included. minLength: 1 - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative and is not a like count. - required: - comments_count properties: comments_count: type: - number description: Comments reported by the source; null or absent is unknown, not zero. - required: - upvote_ratio properties: upvote_ratio: type: - number description: Source upvote ratio on a 0–1 scale. - required: - selftext properties: selftext: type: - string description: Full self-post text when supplied. minLength: 1 - required: - flair properties: flair: type: - string description: Post flair text. minLength: 1 x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - id: example1 title: What improved your desk setup? author: example_reader subreddit: example_community url: null score: 42 comments_count: 18 text: null selftext: A fictional discussion for this example. default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/post-transcript: get: operationId: reddit_post_transcript tags: - Reddit summary: Video transcript description: The spoken words of a Reddit-hosted video as text. transcript is null when the video has no speech — that is the honest answer, not an error. Costs 5 credits per successful live response. parameters: - name: url in: query required: true schema: type: string example: https://www.reddit.com/r/youseeingthisshit/comments/1oiu9xm/football_nostalgiasaints_punter_head_coach_cant/ description: Reddit post URL containing a video. - name: language in: query required: false schema: type: string example: en description: Transcript language. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/post-transcript.json title: reddit/post-transcript data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: has_transcript: description: Optional has transcript supplied by this operation. Null means unknown. type: - boolean - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' platform: description: Optional platform supplied by this operation. Null means unknown. type: - string - 'null' transcript: description: Optional transcript supplied by this operation. Null means unknown. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true allOf: - anyOf: - required: - has_transcript properties: has_transcript: description: Optional has transcript supplied by this operation. Null means unknown. type: - boolean - required: - id properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string minLength: 1 - required: - transcript properties: transcript: description: Optional transcript supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - url properties: url: description: Original source URL when supplied. type: - string minLength: 1 x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - has_transcript: false id: example platform: example transcript: example url: https://example.com/example default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 5 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/post/comments: get: operationId: reddit_post_comments tags: - Reddit summary: Reddit post comments description: Retrieve a bounded, flattened comment tree for a Reddit post. Preserve parent_id and depth, and inspect truncated and unexpanded_replies. This operation has no supported next-page cursor. Costs 5 credits per successful live response. parameters: - name: url in: query required: true schema: type: string example: https://www.reddit.com/r/Python/comments/1w6latb/it_seems_like_there_was_a_change_for_how_hex/ description: Full Reddit post URL (permalink, redd.it or gallery link) - name: cursor in: query required: false schema: type: string example: '' description: Reserved compatibility parameter. This bounded comment-tree response has no supported continuation; inspect truncated and unexpanded_replies instead. - name: trim in: query required: false schema: type: string example: 'false' description: true to truncate comment bodies to 500 characters - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/post/comments.json title: reddit/post/comments data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: items: type: array items: type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. parent_id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. depth: type: - number - 'null' description: Depth within the returned comment tree. author: type: - string - 'null' description: Reddit username. body: type: - string - 'null' description: Comment text. score: type: - number - 'null' description: Net score; can be negative. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. url: type: - string - 'null' description: Original source URL when supplied. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - parent_id properties: parent_id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - depth properties: depth: type: - number description: Depth within the returned comment tree. - required: - author properties: author: type: - string description: Reddit username. minLength: 1 - required: - body properties: body: type: - string description: Comment text. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative. - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 description: Records in this response page. count: type: - number - 'null' description: Returned row count when supplied; not the full source total. cursor: type: - string - 'null' description: Opaque next-page token. A missing token does not prove full history was retrieved. has_more: type: - boolean - 'null' description: Source continuation indicator; null means unknown. truncated: type: - boolean - 'null' description: The returned tree is incomplete. unexpanded_replies: type: array items: type: object properties: parent_id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. count: type: - number - 'null' description: Unexpanded replies reported by the source; null or absent is unknown, not zero. ids: type: array items: type: string additionalProperties: true _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - items: - id: example_comment parent_id: null depth: 0 author: example_reader body: Useful guide score: 3 cursor: null has_more: null truncated: true unexpanded_replies: - parent_id: example_comment count: 1 ids: - example_reply default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 5 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/search: get: operationId: reddit_search tags: - Reddit summary: Reddit search description: Search posts across all of Reddit by keyword, with sort and time filters. Costs 1 credit per successful live response. parameters: - name: query in: query required: true schema: type: string example: customer feedback description: Keyword or phrase to search for - name: sort in: query required: false schema: type: string enum: - relevance - hot - top - new - comments x-value-aliases: newest: new latest: new example: relevance description: 'relevance, hot, top, new or comments (default relevance) Accepted values: relevance, hot, top, new, comments. Case, spaces, hyphens and underscores are interchangeable.' - name: timeframe in: query required: false schema: type: string enum: - hour - day - week - month - year - all example: month description: 'hour, day, week, month, year or all Accepted values: hour, day, week, month, year, all. Case, spaces, hyphens and underscores are interchangeable.' - name: after in: query required: false schema: type: string example: t3_1abcd2 description: Reddit fullname to continue after (alias of cursor) - name: cursor in: query required: false schema: type: string example: t3_1abcd2 description: Opaque cursor from the previous page - name: limit in: query required: false schema: type: string example: '25' description: Results per page, 1-100 (default 25) - name: include_body in: query required: false schema: type: string example: 'true' description: Include supplied selftext and HTML bodies (default true). Set false to omit them; trim=true also omits bodies. No additional supplier call. - name: trim in: query required: false schema: type: string example: 'false' description: true to force selftext bodies off - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/search.json title: reddit/search data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: items: type: array items: type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. url: type: - string - 'null' description: Original source URL when supplied. title: type: - string - 'null' description: Discussion title. author: type: - string - 'null' description: Reddit username, not an author object. subreddit: type: - string - 'null' description: Community name. text: type: - string - 'null' description: Post body when included. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. score: type: - number - 'null' description: Net score; can be negative and is not a like count. comments_count: type: - number - 'null' description: Comments reported by the source; null or absent is unknown, not zero. upvote_ratio: type: - number - 'null' description: Source upvote ratio on a 0–1 scale. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 - required: - title properties: title: type: - string description: Discussion title. minLength: 1 - required: - author properties: author: type: - string description: Reddit username, not an author object. minLength: 1 - required: - subreddit properties: subreddit: type: - string description: Community name. minLength: 1 - required: - text properties: text: type: - string description: Post body when included. minLength: 1 - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative and is not a like count. - required: - comments_count properties: comments_count: type: - number description: Comments reported by the source; null or absent is unknown, not zero. - required: - upvote_ratio properties: upvote_ratio: type: - number description: Source upvote ratio on a 0–1 scale. description: Records in this response page. count: type: - number - 'null' description: Returned row count when supplied; not the full source total. cursor: type: - string - 'null' description: Opaque next-page token. A missing token does not prove full history was retrieved. has_more: type: - boolean - 'null' description: Source continuation indicator; null means unknown. _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - items: - id: example1 title: What improved your desk setup? author: example_reader subreddit: example_community url: null score: 42 comments_count: 18 text: null cursor: null has_more: null default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/search-comments: get: operationId: reddit_search_comments tags: - Reddit summary: Search Reddit comments description: Global comment search. Returns comment text, author, signed score, timestamp, subreddit and source link. One page; follow cursor. Costs 1 credit per successful live response. parameters: - name: query in: query required: true schema: type: string example: NASA description: Search phrase; ranked platform search, not a strict local substring match. - name: cursor in: query required: false schema: type: string description: Opaque continuation from the previous response. Preserve query or identity. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/search-comments.json title: reddit/search-comments data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: count: description: Number of records in this response, not lifetime or total matches. type: - number - 'null' cursor: description: Opaque next-page token; pass it back unchanged. Null does not prove complete history. type: - string - 'null' dropped: description: Optional dropped supplied by this operation. Null means unknown. type: - number - 'null' has_more: description: Source continuation indicator; null means unknown. type: - boolean - 'null' items: description: Returned records. Source coverage and completeness vary. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: object properties: author: description: Public author information supplied with this record. type: - string - 'null' body: description: Optional body supplied by this operation. Null means unknown. type: - string - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' parent_id: description: Optional parent id supplied by this operation. Null means unknown. type: - string - 'null' post: description: Optional post supplied by this operation. Null means unknown. type: - object - 'null' properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' title: description: Source title when supplied. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true post_id: description: Optional post id supplied by this operation. Null means unknown. type: - string - 'null' score: description: Optional score supplied by this operation. Null means unknown. type: - number - 'null' subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true allOf: - anyOf: - required: - author properties: author: description: Public author information supplied with this record. type: - string minLength: 1 - required: - body properties: body: description: Optional body supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - created_at properties: created_at: description: Source creation time, not the API retrieval time. type: - string minLength: 1 - required: - id properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string minLength: 1 - required: - parent_id properties: parent_id: description: Optional parent id supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - post properties: post: description: Optional post supplied by this operation. Null means unknown. type: - object properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' title: description: Source title when supplied. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true - required: - post_id properties: post_id: description: Optional post id supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - score properties: score: description: Optional score supplied by this operation. Null means unknown. type: - number - required: - subreddit properties: subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - url properties: url: description: Original source URL when supplied. type: - string minLength: 1 query: description: Optional query supplied by this operation. Null means unknown. type: - string - 'null' additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - count: 0 cursor: null dropped: 0 has_more: false items: - author: example body: example created_at: '2026-09-01T12:00:00Z' id: example parent_id: example post: id: example title: example url: https://example.com/example post_id: example score: 0 subreddit: example url: https://example.com/example query: example default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/search-subreddits: get: operationId: reddit_search_subreddits tags: - Reddit summary: Find subreddits description: Native subreddit discovery by search phrase, with public community metadata and pagination. Costs 1 credit per successful live response. parameters: - name: query in: query required: true schema: type: string example: NASA description: Search phrase; ranked platform search, not a strict local substring match. - name: cursor in: query required: false schema: type: string description: Opaque continuation from the previous response. Preserve query or identity. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/search-subreddits.json title: reddit/search-subreddits data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: _warnings: description: Optional warnings supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - string - 'null' count: description: Number of records in this response, not lifetime or total matches. type: - number - 'null' cursor: description: Opaque next-page token; pass it back unchanged. Null does not prove complete history. type: - string - 'null' dropped: description: Optional dropped supplied by this operation. Null means unknown. type: - number - 'null' has_more: description: Source continuation indicator; null means unknown. type: - boolean - 'null' items: description: Returned records. Source coverage and completeness vary. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: object properties: _warnings: description: Source array was empty in the reviewed captures; item fields remain unspecified. type: - array - 'null' items: {} banner_url: description: Optional banner url supplied by this operation. Null means unknown. type: - string - 'null' category: description: Optional category supplied by this operation. Null means unknown. type: - string - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' description: description: Source description; null or absent means not supplied. type: - string - 'null' icon_url: description: Optional icon url supplied by this operation. Null means unknown. type: - string - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' language: description: Optional language supplied by this operation. Null means unknown. type: - string - 'null' name: description: Optional name supplied by this operation. Null means unknown. type: - string - 'null' over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - 'null' subscribers: description: Optional subscribers supplied by this operation. Null means unknown. type: - number - 'null' title: description: Source title when supplied. type: - string - 'null' type: description: Optional type supplied by this operation. Null means unknown. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true allOf: - anyOf: - required: - banner_url properties: banner_url: description: Optional banner url supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - category properties: category: description: Optional category supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - created_at properties: created_at: description: Source creation time, not the API retrieval time. type: - string minLength: 1 - required: - description properties: description: description: Source description; null or absent means not supplied. type: - string minLength: 1 - required: - icon_url properties: icon_url: description: Optional icon url supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - id properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string minLength: 1 - required: - language properties: language: description: Optional language supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - name properties: name: description: Optional name supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - over_18 properties: over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - required: - subscribers properties: subscribers: description: Optional subscribers supplied by this operation. Null means unknown. type: - number - required: - title properties: title: description: Source title when supplied. type: - string minLength: 1 - required: - url properties: url: description: Original source URL when supplied. type: - string minLength: 1 query: description: Optional query supplied by this operation. Null means unknown. type: - string - 'null' additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - _warnings: - example count: 0 cursor: null dropped: 0 has_more: false items: - _warnings: [] banner_url: https://example.com/example category: example created_at: '2026-09-01T12:00:00Z' description: example icon_url: https://example.com/example id: example language: example name: example over_18: false subscribers: 0 title: example type: example url: https://example.com/example query: example default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/subreddit: get: operationId: reddit_subreddit tags: - Reddit summary: Subreddit posts description: Hot, new, top or rising posts from a subreddit, with cursor pagination. Costs 2 credits per successful live response. parameters: - name: subreddit in: query required: true schema: type: string example: programming description: Subreddit name, with or without the r/ prefix - name: sort in: query required: false schema: type: string enum: - hot - new - top - rising x-value-aliases: newest: new latest: new example: hot description: 'Listing order: hot, new, top or rising (default hot) Accepted values: hot, new, top, rising. Case, spaces, hyphens and underscores are interchangeable.' - name: timeframe in: query required: false schema: type: string enum: - hour - day - week - month - year - all example: week description: 'Window for sort=top: hour, day, week, month, year or all Accepted values: hour, day, week, month, year, all. Case, spaces, hyphens and underscores are interchangeable.' - name: after in: query required: false schema: type: string example: t3_1abcd2 description: Reddit fullname to continue after (alias of cursor) - name: trim in: query required: false schema: type: string example: 'false' description: true to omit post selftext bodies - name: limit in: query required: false schema: type: string example: '5' description: Requested rows per response, 1–1000. The source may return fewer. Remaining rows from an already purchased page use a saved cursor and cost zero to retrieve for up to one hour; further native source pages use this endpoint’s normal price. - name: cursor in: query required: false schema: type: string example: '' description: Use the returned cursor unchanged, retaining the original query, filters and limit. Saved mlo1. cursors retrieve already purchased rows at zero credits for up to one hour. A native source cursor, when supplied, starts a normally priced source page. Quote with dry_run before continuing. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/subreddit.json title: reddit/subreddit data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: items: type: array items: type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. url: type: - string - 'null' description: Original source URL when supplied. title: type: - string - 'null' description: Discussion title. author: type: - string - 'null' description: Reddit username, not an author object. subreddit: type: - string - 'null' description: Community name. text: type: - string - 'null' description: Post body when included. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. score: type: - number - 'null' description: Net score; can be negative and is not a like count. comments_count: type: - number - 'null' description: Comments reported by the source; null or absent is unknown, not zero. upvote_ratio: type: - number - 'null' description: Source upvote ratio on a 0–1 scale. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 - required: - title properties: title: type: - string description: Discussion title. minLength: 1 - required: - author properties: author: type: - string description: Reddit username, not an author object. minLength: 1 - required: - subreddit properties: subreddit: type: - string description: Community name. minLength: 1 - required: - text properties: text: type: - string description: Post body when included. minLength: 1 - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative and is not a like count. - required: - comments_count properties: comments_count: type: - number description: Comments reported by the source; null or absent is unknown, not zero. - required: - upvote_ratio properties: upvote_ratio: type: - number description: Source upvote ratio on a 0–1 scale. description: Records in this response page. count: type: - number - 'null' description: Returned row count when supplied; not the full source total. cursor: type: - string - 'null' description: Opaque next-page token. A missing token does not prove full history was retrieved. has_more: type: - boolean - 'null' description: Source continuation indicator; null means unknown. _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - items: - id: example1 title: What improved your desk setup? author: example_reader subreddit: example_community url: null score: 42 comments_count: 18 text: null cursor: null has_more: null default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 2 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/subreddit/details: get: operationId: reddit_subreddit_details tags: - Reddit summary: Subreddit details description: Subscribers, active users, description and metadata for a subreddit. Costs 1 credit per successful live response. parameters: - name: subreddit in: query required: false schema: type: string example: programming description: Subreddit name, with or without the r/ prefix - name: url in: query required: false schema: type: string example: https://www.reddit.com/r/programming/ description: Any reddit.com subreddit URL (alternative to subreddit) - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/subreddit/details.json title: reddit/subreddit/details data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. category: description: Optional category supplied by this operation. Null means unknown. type: - string - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' description: description: Source description; null or absent means not supplied. type: - string - 'null' icon_url: description: Optional icon url supplied by this operation. Null means unknown. type: - string - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' language: description: Optional language supplied by this operation. Null means unknown. type: - string - 'null' name: description: Optional name supplied by this operation. Null means unknown. type: - string - 'null' over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - 'null' subscribers: type: - number - 'null' description: Subscriber total reported by the source; null or absent is unknown, not zero. title: description: Source title when supplied. type: - string - 'null' type: description: Optional type supplied by this operation. Null means unknown. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' active_users: type: - number - 'null' description: Legacy online-user count only when explicitly supplied. Often unavailable; null is unknown, not zero. Never a weekly activity total or a guaranteed live count. weekly_active_users: type: - number - 'null' description: Source-reported weekly activity count, separate from online users and subscribers. No exact averaging window is guaranteed by this field. weekly_contributions: type: - number - 'null' description: Source-reported weekly post/comment contribution count; null when unavailable. additionalProperties: true allOf: - anyOf: - required: - category properties: category: description: Optional category supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - created_at properties: created_at: description: Source creation time, not the API retrieval time. type: - string minLength: 1 - required: - description properties: description: description: Source description; null or absent means not supplied. type: - string minLength: 1 - required: - icon_url properties: icon_url: description: Optional icon url supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - id properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string minLength: 1 - required: - language properties: language: description: Optional language supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - name properties: name: description: Optional name supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - over_18 properties: over_18: description: Optional over 18 supplied by this operation. Null means unknown. type: - boolean - required: - subscribers properties: subscribers: type: - number description: Subscriber total reported by the source; null or absent is unknown, not zero. - required: - title properties: title: description: Source title when supplied. type: - string minLength: 1 - required: - url properties: url: description: Original source URL when supplied. type: - string minLength: 1 - required: - active_users properties: active_users: type: - number description: Legacy online-user count only when explicitly supplied. Often unavailable; null is unknown, not zero. Never a weekly activity total or a guaranteed live count. - required: - weekly_active_users properties: weekly_active_users: type: - number description: Source-reported weekly activity count, separate from online users and subscribers. No exact averaging window is guaranteed by this field. - required: - weekly_contributions properties: weekly_contributions: type: - number description: Source-reported weekly post/comment contribution count; null when unavailable. x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - _warnings: [] category: example created_at: '2026-09-01T12:00:00Z' description: example icon_url: https://example.com/example id: example language: example name: example over_18: false subscribers: null title: example type: example url: https://example.com/example active_users: null weekly_active_users: null weekly_contributions: null default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/subreddit/search: get: operationId: reddit_subreddit_search tags: - Reddit summary: Subreddit search description: Search posts within a single subreddit by keyword. Costs 1 credit per successful live response. parameters: - name: subreddit in: query required: true schema: type: string example: programming description: Subreddit to search within (without r/) - name: query in: query required: true schema: type: string example: javascript description: Search text within this subreddit. Required; use reddit/subreddit for recent posts without a query. - name: sort in: query required: false schema: type: string enum: - relevance - hot - top - new - comments x-value-aliases: newest: new latest: new example: relevance description: 'relevance, hot, top, new or comments Accepted values: relevance, hot, top, new, comments. Case, spaces, hyphens and underscores are interchangeable.' - name: timeframe in: query required: false schema: type: string enum: - hour - day - week - month - year - all example: month description: 'hour, day, week, month, year or all Accepted values: hour, day, week, month, year, all. Case, spaces, hyphens and underscores are interchangeable.' - name: cursor in: query required: false schema: type: string example: '' description: Continue a previous page (after also accepted) - name: include_body in: query required: false schema: type: string example: 'true' description: Include post selftext bodies - name: trim in: query required: false schema: type: string example: 'true' description: Trim bodies out of the response - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/subreddit/search.json title: reddit/subreddit/search data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: items: type: array items: type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. url: type: - string - 'null' description: Original source URL when supplied. title: type: - string - 'null' description: Discussion title. author: type: - string - 'null' description: Reddit username, not an author object. subreddit: type: - string - 'null' description: Community name. text: type: - string - 'null' description: Post body when included. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. score: type: - number - 'null' description: Net score; can be negative and is not a like count. comments_count: type: - number - 'null' description: Comments reported by the source; null or absent is unknown, not zero. upvote_ratio: type: - number - 'null' description: Source upvote ratio on a 0–1 scale. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 - required: - title properties: title: type: - string description: Discussion title. minLength: 1 - required: - author properties: author: type: - string description: Reddit username, not an author object. minLength: 1 - required: - subreddit properties: subreddit: type: - string description: Community name. minLength: 1 - required: - text properties: text: type: - string description: Post body when included. minLength: 1 - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative and is not a like count. - required: - comments_count properties: comments_count: type: - number description: Comments reported by the source; null or absent is unknown, not zero. - required: - upvote_ratio properties: upvote_ratio: type: - number description: Source upvote ratio on a 0–1 scale. description: Records in this response page. count: type: - number - 'null' description: Returned row count when supplied; not the full source total. cursor: type: - string - 'null' description: Opaque next-page token. A missing token does not prove full history was retrieved. has_more: type: - boolean - 'null' description: Source continuation indicator; null means unknown. _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - items: - id: example1 title: What improved your desk setup? author: example_reader subreddit: example_community url: null score: 42 comments_count: 18 text: null cursor: null has_more: null default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/user: get: operationId: reddit_user tags: - Reddit summary: Reddit user profile description: Karma split, cake day and profile flags for a redditor. Costs 1 credit per successful live response. parameters: - name: handle in: query required: true schema: type: string example: spez - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/user.json title: reddit/user data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: _warnings: description: Optional warnings supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - string - 'null' author: description: Public author information supplied with this record. type: - object - 'null' properties: avatar_url: description: Optional avatar url supplied by this operation. Null means unknown. type: - string - 'null' bio: description: Optional bio supplied by this operation. Null means unknown. type: - string - 'null' display_name: description: Optional display name supplied by this operation. Null means unknown. type: - string - 'null' ext: description: Optional ext supplied by this operation. Null means unknown. type: - object - 'null' properties: comment_karma: description: Optional comment karma supplied by this operation. Null means unknown. type: - number - 'null' is_gold: description: Optional is gold supplied by this operation. Null means unknown. type: - boolean - 'null' is_mod: description: Optional is mod supplied by this operation. Null means unknown. type: - boolean - 'null' link_karma: description: Optional link karma supplied by this operation. Null means unknown. type: - number - 'null' additionalProperties: true followers: description: Optional followers supplied by this operation. Null means unknown. type: - number - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' joined_at: description: Optional joined at supplied by this operation. Null means unknown. type: - string - 'null' likes_count: description: Optional likes count supplied by this operation. Null means unknown. type: - number - 'null' private: description: Optional private supplied by this operation. Null means unknown. type: - boolean - 'null' url: description: Original source URL when supplied. type: - string - 'null' username: description: Optional username supplied by this operation. Null means unknown. type: - string - 'null' verified: description: Optional verified supplied by this operation. Null means unknown. type: - boolean - 'null' additionalProperties: true computed: description: Optional computed supplied by this operation. Null means unknown. type: - object - 'null' properties: {} additionalProperties: true additionalProperties: true allOf: - anyOf: - required: - author properties: author: description: Public author information supplied with this record. type: - object properties: avatar_url: description: Optional avatar url supplied by this operation. Null means unknown. type: - string - 'null' bio: description: Optional bio supplied by this operation. Null means unknown. type: - string - 'null' display_name: description: Optional display name supplied by this operation. Null means unknown. type: - string - 'null' ext: description: Optional ext supplied by this operation. Null means unknown. type: - object - 'null' properties: comment_karma: description: Optional comment karma supplied by this operation. Null means unknown. type: - number - 'null' is_gold: description: Optional is gold supplied by this operation. Null means unknown. type: - boolean - 'null' is_mod: description: Optional is mod supplied by this operation. Null means unknown. type: - boolean - 'null' link_karma: description: Optional link karma supplied by this operation. Null means unknown. type: - number - 'null' additionalProperties: true followers: description: Optional followers supplied by this operation. Null means unknown. type: - number - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' joined_at: description: Optional joined at supplied by this operation. Null means unknown. type: - string - 'null' likes_count: description: Optional likes count supplied by this operation. Null means unknown. type: - number - 'null' private: description: Optional private supplied by this operation. Null means unknown. type: - boolean - 'null' url: description: Original source URL when supplied. type: - string - 'null' username: description: Optional username supplied by this operation. Null means unknown. type: - string - 'null' verified: description: Optional verified supplied by this operation. Null means unknown. type: - boolean - 'null' additionalProperties: true - required: - computed properties: computed: description: Optional computed supplied by this operation. Null means unknown. type: - object properties: {} additionalProperties: true x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - _warnings: - example author: avatar_url: https://example.com/example bio: example display_name: example ext: comment_karma: 0 is_gold: false is_mod: false link_karma: 0 followers: 0 id: example joined_at: '2026-09-01T12:00:00Z' likes_count: 0 private: false url: https://example.com/example username: example verified: false computed: {} default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/user-comments: get: operationId: reddit_user_comments tags: - Reddit summary: Recent user comments description: One source page of a public Reddit user history. Follow cursor to continue; no claim of complete or real-time history. Costs 1 credit per successful live response. parameters: - name: handle in: query required: true schema: type: string example: GovSchwarzenegger description: Public Reddit username. - name: sort in: query required: false schema: type: string enum: - new x-value-aliases: newest: new latest: new example: new description: 'Only new ordering is supported. Accepted values: new. Case, spaces, hyphens and underscores are interchangeable.' - name: cursor in: query required: false schema: type: string description: Opaque continuation from the previous response. Preserve query or identity. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/user-comments.json title: reddit/user-comments data fields description: Optional data supplied by this operation. Null means unknown. type: object properties: _warnings: description: Optional warnings supplied by this operation. Null means unknown. type: - array - 'null' items: description: Optional record supplied by this operation. Null means unknown. type: - string - 'null' count: description: Number of records in this response, not lifetime or total matches. type: - number - 'null' cursor: description: Opaque next-page token; pass it back unchanged. Null does not prove complete history. type: - string - 'null' dropped: description: Optional dropped supplied by this operation. Null means unknown. type: - number - 'null' handle: description: Optional handle supplied by this operation. Null means unknown. type: - string - 'null' has_more: description: Source continuation indicator; null means unknown. type: - boolean - 'null' items: description: Returned records. Source coverage and completeness vary. type: - array items: description: Optional record supplied by this operation. Null means unknown. type: object properties: author: description: Public author information supplied with this record. type: - string - 'null' body: description: Optional body supplied by this operation. Null means unknown. type: - string - 'null' created_at: description: Source creation time, not the API retrieval time. type: - string - 'null' id: description: Source identifier. Preserve the supplied type and exact value. type: - string - 'null' is_submitter: description: Optional is submitter supplied by this operation. Null means unknown. type: - boolean - 'null' parent_id: description: Optional parent id supplied by this operation. Null means unknown. type: - string - 'null' post_id: description: Optional post id supplied by this operation. Null means unknown. type: - string - 'null' score: description: Optional score supplied by this operation. Null means unknown. type: - number - 'null' stickied: description: Optional stickied supplied by this operation. Null means unknown. type: - boolean - 'null' subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string - 'null' url: description: Original source URL when supplied. type: - string - 'null' additionalProperties: true allOf: - anyOf: - required: - author properties: author: description: Public author information supplied with this record. type: - string minLength: 1 - required: - body properties: body: description: Optional body supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - created_at properties: created_at: description: Source creation time, not the API retrieval time. type: - string minLength: 1 - required: - id properties: id: description: Source identifier. Preserve the supplied type and exact value. type: - string minLength: 1 - required: - is_submitter properties: is_submitter: description: Optional is submitter supplied by this operation. Null means unknown. type: - boolean - required: - parent_id properties: parent_id: description: Optional parent id supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - post_id properties: post_id: description: Optional post id supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - score properties: score: description: Optional score supplied by this operation. Null means unknown. type: - number - required: - stickied properties: stickied: description: Optional stickied supplied by this operation. Null means unknown. type: - boolean - required: - subreddit properties: subreddit: description: Optional subreddit supplied by this operation. Null means unknown. type: - string minLength: 1 - required: - url properties: url: description: Original source URL when supplied. type: - string minLength: 1 sort: description: Optional sort supplied by this operation. Null means unknown. type: - string - 'null' additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - _warnings: - example count: 0 cursor: null dropped: 0 handle: example has_more: false items: - author: example body: example created_at: '2026-09-01T12:00:00Z' id: example is_submitter: false parent_id: example post_id: example score: 0 stickied: false subreddit: example url: https://example.com/example sort: example default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true /v1/reddit/user-posts: get: operationId: reddit_user_posts tags: - Reddit summary: Recent user posts description: One source page of a public Reddit user history. Follow cursor to continue; no claim of complete or real-time history. Costs 1 credit per successful live response. parameters: - name: handle in: query required: true schema: type: string example: GovSchwarzenegger description: Public Reddit username. - name: sort in: query required: false schema: type: string enum: - new x-value-aliases: newest: new latest: new example: new description: 'Only new ordering is supported. Accepted values: new. Case, spaces, hyphens and underscores are interchangeable.' - name: cursor in: query required: false schema: type: string description: Opaque continuation from the previous response. Preserve query or identity. - name: dry_run in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: judgments in: query required: false schema: type: string enum: - 'on' - 'off' example: 'on' description: 'Add bounded AI labels to eligible returned records (default on). off preserves the original data shape. Unclassified records remain present; labels depend on evidence, time, capacity and the existing request budget. No label surcharge. Accepted values: on, off. Case, spaces, hyphens and underscores are interchangeable.' - name: label in: query required: false schema: type: string enum: - default - none example: none description: 'Set none to disable labels; default enables the endpoint’s label set. Equivalent to judgments=off. Accepted values: default, none. Case, spaces, hyphens and underscores are interchangeable.' - name: label_evidence in: query required: false schema: type: string enum: - '1' - '0' - 'true' - 'false' example: '1' description: 'Include exact supporting sentences and zero-based sentence indexes when a label has validated evidence. No extra charge or change to decisions. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable.' - name: exclude in: query required: false schema: type: string enum: - engagement_bait example: engagement_bait description: 'Optionally remove confidently labelled engagement bait. Uncertain and unclassified records stay; removed IDs and an owner-bound recall reference are returned. Accepted values: engagement_bait. Case, spaces, hyphens and underscores are interchangeable.' - name: fit in: query required: false schema: type: string enum: - goal example: goal description: 'Use goal to replace confidently irrelevant records with recall stubs. Keeps first, last, relevant and uncertain records; preserves order. Full evidence is stored for 24 hours when available. Accepted values: goal. Case, spaces, hyphens and underscores are interchangeable.' - name: goal in: query required: false schema: type: string example: Find concrete product complaints description: 'Required with fit=goal: describe the task in at most 600 characters. Supplied text is task context, never permission to act on posts.' - name: tokens in: query required: false schema: type: string example: '4000' description: Optional soft response target for fit=goal, 256–32000. Safety and evidence retention take priority, so the returned result may exceed it. - name: X-Max-Credits in: header required: false schema: type: integer minimum: 0 maximum: 9007199254740991 example: 5 description: Optional credit reservation ceiling for this individual request. Send a non-negative integer in decimal digits. Live execution checks the required reservation after resolving free cache hits or buffered continuation, before charging or calling a supplier. A higher reservation returns HTTP 422 INVALID_PARAMETERS with reason max_credits_exceeded and charges nothing. Invalid header values also return 422. Zero permits only a zero-credit reservation; omitting the header uses normal pricing. dry_run remains a free preview. This does not cap later requests, batches or scheduled runs. security: - ApiKeyHeader: [] - BearerKey: [] responses: '200': description: 'The common success envelope; `data` is endpoint-specific. Many lists use items/count/cursor; bundles use named collections and their documented continuation metadata. HTTP 200 can contain a partial bundle: inspect complete, partial and legs where supplied.' content: application/json: schema: allOf: - $ref: '#/components/schemas/Success' - type: object properties: data: $schema: https://json-schema.org/draft/2020-12/schema $id: https://www.monocrawl.com/schemas/reddit/user-posts.json title: reddit/user-posts data fields description: Required core structure for successful data, with optional source fields. Additional fields are allowed. This is not a completeness guarantee. type: object properties: items: type: array items: type: object properties: id: type: - string - 'null' description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. url: type: - string - 'null' description: Original source URL when supplied. title: type: - string - 'null' description: Discussion title. author: type: - string - 'null' description: Reddit username, not an author object. subreddit: type: - string - 'null' description: Community name. text: type: - string - 'null' description: Post body when included. created_at: type: - string - 'null' description: Source publication time, normalized to an ISO date-time when available. score: type: - number - 'null' description: Net score; can be negative and is not a like count. comments_count: type: - number - 'null' description: Comments reported by the source; null or absent is unknown, not zero. upvote_ratio: type: - number - 'null' description: Source upvote ratio on a 0–1 scale. additionalProperties: true allOf: - anyOf: - required: - id properties: id: type: - string description: Source identifier. Preserve its exact string value; do not convert large IDs to numbers. minLength: 1 - required: - url properties: url: type: - string description: Original source URL when supplied. minLength: 1 - required: - title properties: title: type: - string description: Discussion title. minLength: 1 - required: - author properties: author: type: - string description: Reddit username, not an author object. minLength: 1 - required: - subreddit properties: subreddit: type: - string description: Community name. minLength: 1 - required: - text properties: text: type: - string description: Post body when included. minLength: 1 - required: - created_at properties: created_at: type: - string description: Source publication time, normalized to an ISO date-time when available. minLength: 1 - required: - score properties: score: type: - number description: Net score; can be negative and is not a like count. - required: - comments_count properties: comments_count: type: - number description: Comments reported by the source; null or absent is unknown, not zero. - required: - upvote_ratio properties: upvote_ratio: type: - number description: Source upvote ratio on a 0–1 scale. description: Records in this response page. count: type: - number - 'null' description: Returned row count when supplied; not the full source total. cursor: type: - string - 'null' description: Opaque next-page token. A missing token does not prove full history was retrieved. has_more: type: - boolean - 'null' description: Source continuation indicator; null means unknown. _warnings: type: array items: type: string description: Collection limitations or component warnings. Read before interpreting coverage. additionalProperties: true required: - items x-contract-version: '2026-09-22' x-validation-scope: Required success payload structure; optional fields and source completeness remain separate. examples: - items: - id: example1 title: What improved your desk setup? author: example_reader subreddit: example_community url: null score: 42 comments_count: 18 text: null cursor: null has_more: null default: description: The error envelope — the same shape for every non-2xx status. content: application/json: schema: $ref: '#/components/schemas/Error' x-credits: 1 x-production-available: true x-capacity: status: not_assessed message: Capacity is workload-dependent; configured routes do not establish sustained throughput or an availability guarantee. x-availability-scope: Structural check of the effective registered chain, production permission, adapter, configured cost and quality floor without request parameters. True is not a live-health, credential, quota, subscription-entitlement, complete-data or deployment-exposure guarantee. False means no structurally eligible candidate; null means metadata could not establish availability. Composite child capability still depends on its component routes. x-live-proven: true components: schemas: Error: type: object required: - success - error - credits_used - request_id properties: success: const: false error: type: object required: - type - message - status properties: type: type: string enum: - UNAUTHORIZED - KEY_REVOKED - KEY_LIMIT_EXCEEDED - RATE_LIMITED - INSUFFICIENT_CREDITS - RESOURCE_NOT_FOUND - INVALID_PARAMETERS - TARGET_ACCESS_DENIED - UPSTREAM_ERROR - UPSTREAM_TIMEOUT - FREE_CAPACITY_UNAVAILABLE - CAPACITY_UNAVAILABLE - ENDPOINT_NOT_FOUND - ENDPOINT_NOT_AVAILABLE - FAIR_USE_EXCEEDED - INTERNAL_ERROR message: type: string status: type: integer doc_url: type: string description: Deep link to the exact section of the errors guide for this type. details: type: object credits_used: type: - integer - 'null' description: Confirmed net charge; null when billing is pending reconciliation. Inspect error.details.billing_status and retain request_id. credits_remaining: type: integer request_id: type: string Success: type: object required: - success - platform - endpoint - data - credits_used - credits_remaining - request_id properties: _completeness: type: object description: Reported response completeness, not a guarantee of complete platform history. Missing source assertions remain unknown. properties: state: type: string enum: - complete - partial - unknown scope: type: string inspection_limited: type: boolean success: const: true platform: type: string endpoint: type: string description: The resolved path, e.g. `/v1/github/profile`. data: description: Amazon responses include marketplace.country and marketplace.domain (resolved request marketplace, UK by default). X profiles preserve location, bio_link and cover_url when supplied. TikTok profiles preserve commerce_user, seller, region, location and business_category when supplied; region identifies the account region rather than personal residence. TikTok comments use platform_default selection, which can change between fetches; keep the same video and options when following cursors. Amazon review variant is readable text. Facebook profiles preserve cover_url, following and created_at when supplied; likes_count and followers are distinct and follower totals may be rounded. Endpoint-specific normalized payload, not one universal post/profile schema. Many lists use items/count/cursor; a null cursor means no usable next cursor was supplied, not proof that all history was retrieved. Check has_more and warnings where present. Social full-profile bundles use posts_cursor and posts_pagination.next_params; retain all returned next parameters. YouTube channel bundles instead use recent_videos, cursor and recent_videos_pagination. Inspect complete/partial/legs where supplied for bounded or failed components. Optional model-derived fields are labelled, not source facts. credits_used: type: integer credits_remaining: type: integer request_id: type: string cached: type: boolean stale: type: boolean description: True only for an explicitly labelled, zero-credit reference snapshot served after a temporary upstream failure. age_seconds: type: integer minimum: 0 description: Age of a stale snapshot since its original retrieval; not reset by outage recovery. fetched_at: type: string format: date-time description: Original retrieval time of a stale snapshot, in UTC. synthetic: type: boolean description: Present and true only on the explicitly requested /sandbox surface. Synthetic responses are representative and charged 0 credits; production /v1 never returns them. degraded: type: boolean description: Reserved for sandbox compatibility. Production /v1 reports upstream failure as an error and never serves a representative fallback. securitySchemes: ApiKeyHeader: type: apiKey in: header name: x-api-key description: Your API key (`mn_…`), from the console. The recommended style. BearerKey: type: http scheme: bearer description: The same key as a Bearer token, for clients that only expose an Authorization field. Keys are never accepted in the query string — URLs leak into logs and referrers. x-provenance: method: harvested publisher: Monocrawl source: https://www.monocrawl.com/openapi.json note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json); stamped by stamp-openapi-provenance.py (roadmap#793)