{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper - Posts, Feeds, Comments, Subreddits & Raw JSON",
    "description": "Scrape Reddit subreddit, user and domain feeds without a Reddit account or API key. Get posts with comments (comments per post, reply depth) or comments only. Include raw JSON (every Reddit field). Filter by score, upvote ratio and comments.",
    "version": "0.1",
    "x-build-id": "cbHMYLAtaGXLjzqjh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/watcharin~reddit-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-watcharin-reddit-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/watcharin~reddit-scraper/runs": {
      "post": {
        "operationId": "runs-sync-watcharin-reddit-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/watcharin~reddit-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-watcharin-reddit-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "includeRaw": {
            "title": "Include raw JSON (every Reddit field)",
            "type": "boolean",
            "description": "Works for every kind of row: posts, comments under posts and the comments of the section \"Comments only\". When enabled, each row gets an extra \"raw\" field with the complete original Reddit JSON of that one item, so you can use any Reddit field that is not in the default columns (flair details, awards, media, gallery data, edit and removal info, moderation flags, and so on). For a comment, \"raw\" is the comment without its replies, because each reply is its own row. Makes the output much larger."
          },
          "filterKeywords": {
            "title": "Keep only items containing",
            "type": "array",
            "description": "Optional. Keep only the posts whose title or post text contains these words, or, for the comments-only feeds, the comments whose text (or post title) contains them. Checked by this Actor after the items are read. Several words in one item must all appear (use double quotes for an exact phrase); a post is kept if it fits ANY of the items. Capital letters do not matter and a word also matches inside a longer word (camp matches camping). Not applied to a single post URL you give explicitly. When this list is not empty, each row gets a \"keyword\" column with the item(s) it matched.",
            "items": {
              "type": "string"
            }
          },
          "listingSubreddits": {
            "title": "Subreddit feeds",
            "type": "array",
            "description": "Optional. Subreddits whose posts you want, written with or without the \"r/\" prefix (for example \"camping\"; \"all\" and \"popular\" work too). Each subreddit is read in the order chosen in \"Feed sort\" and gets its own limit \"Max posts per subreddit\". Reddit limits how deep a feed goes, and the depth differs by sort (\"rising\" gives only a few posts). Pages are read until Reddit has no more. A name that does not exist is skipped with a warning. To get only the comments of a subreddit, use \"Subreddits\" in the section \"Comments only\" instead.",
            "items": {
              "type": "string"
            }
          },
          "listingUsers": {
            "title": "User feeds",
            "type": "array",
            "description": "Optional. Reddit user names, written with or without the \"u/\" prefix (for example \"spez\"). Each user's own posts are read in the order chosen in \"Feed sort\" (\"rising\" does not exist for users, new is used) and each user gets the limit \"Max posts per user\". Reddit returns only what the public user page shows (which can be only a few posts). A name that does not exist is skipped with a warning. To get the comments a user wrote, use \"Users\" in the section \"Comments only\" instead.",
            "items": {
              "type": "string"
            }
          },
          "listingDomains": {
            "title": "Domain feeds",
            "type": "array",
            "description": "Optional. Domains whose links you want, for example \"youtube.com\" (a whole link or a leading \"www.\" is cut down to the host name). Returns the posts anywhere on Reddit that link to the domain, including its sub-domains (youtube.com also gives m.youtube.com), in the order chosen in \"Feed sort\" (\"rising\" does not exist for domains, new is used). Each domain gets the limit \"Max posts per domain\". Reddit limits how deep a domain feed goes. Reddit has no feed of the comments of a domain: use \"Include comments of each post\" to get the comments of these posts.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Reddit page URLs",
            "type": "array",
            "description": "Optional. Reddit pages to read directly. Subreddit, user and domain names are easier to type in the fields above; use these URLs for a single post or when one page needs its own sort or time. Accepted: a subreddit (https://www.reddit.com/r/camping/), a subreddit with a sort and time (https://www.reddit.com/r/camping/top/?t=week), a user page (https://www.reddit.com/user/spez/), a domain page (https://www.reddit.com/domain/youtube.com/new/) and a single post (https://www.reddit.com/r/camping/comments/1xakl25/title/). A sort or time written in the URL wins over \"Feed sort\" and \"Time range\". old.reddit.com and r/all also work. The limit of a URL follows its kind: a subreddit URL uses \"Max posts per subreddit\", a user URL \"Max posts per user\", a domain URL \"Max posts per domain\". A user's comments page (https://www.reddit.com/user/spez/comments/) returns the comments the user wrote and a subreddit's comments page (https://www.reddit.com/r/camping/comments/) the newest comments written there, one row each (like the section \"Comments only\"; only \"Keep only items containing\", Minimum score / Maximum score of the comment, the date range and NSFW apply). Search, wiki and multireddit pages are not supported and are skipped with a warning; short redd.it links are skipped too. A post URL returns the post and, with \"Include comments of each post\", its comments (\"Keep only items containing\" and the filters are not applied to a post URL you give explicitly). Write each URL as a plain string or as an object, in a JSON list: [\"https://www.reddit.com/r/camping/\"] or [{\"url\": \"https://www.reddit.com/r/camping/\"}] (both can be mixed)."
          },
          "listingSort": {
            "title": "Feed sort",
            "enum": [
              "new",
              "hot",
              "top",
              "rising",
              "controversial"
            ],
            "type": "string",
            "description": "Order of the posts in the subreddit, user and domain feeds and in Reddit page URLs that do not state a sort: hot, new, top, rising or controversial. \"top\" and \"controversial\" use \"Time range\"; hot, new and rising ignore it. \"rising\" exists only for subreddits and returns only a few posts: for user and domain feeds the Actor reads \"new\" instead (a warning is written to the log). It does not apply to the section \"Comments only\": those comments are always read newest first.",
            "default": "top"
          },
          "includeComments": {
            "title": "Include comments of each post",
            "type": "boolean",
            "description": "When enabled, the comments of every post that passes the filters are read too (one extra request per post). The dataset then holds the post row followed by its comment rows (column \"type\" tells them apart; \"postId\" is in both, so a comment points back to its post). Posts are filtered first, then the comments are read, limited by \"Max comments per post\" and \"Max reply depth\" (section \"Post limits\"). Comments are read in the sort Reddit suggests for the post, or in Reddit's own default order when the post has none. Posts without comments give only their post row. Each comment row counts toward \"Max results (total)\" and is one result you pay for. The Include and Exclude filters apply to the posts only, not to these comments. Does not apply to the section \"Comments only\"."
          },
          "subreddits": {
            "title": "Subreddits (comments)",
            "type": "array",
            "description": "Optional. Subreddits whose newest comments you want (instead of their posts), written with or without the \"r/\" prefix (for example \"camping\"). Each subreddit is read as its own feed, newest first (Reddit limits how far back a feed goes), so \"Max comments per subreddit\" counts each one separately. A name that does not exist is skipped with a warning. One row per comment (the post is only identified by its id, title and link). Only these filters apply: \"Keep only items containing\" (comment text or post title), Authors and Exclude authors (the author of the comment), Title contains and Exclude title contains (the title of the post), Post text contains and Exclude post text contains (the text of the comment), NSFW, Minimum score / Maximum score (the score of the COMMENT) and Posted after / Posted before (the date of the comment) apply; the other filters and the post limits do not.",
            "items": {
              "type": "string"
            }
          },
          "users": {
            "title": "Users (comments)",
            "type": "array",
            "description": "Optional. Reddit user names (with or without \"u/\") whose comments you want, newest first (Reddit limits how many it gives per user). One feed per user, counted separately by \"Max comments per user\". A name that does not exist is skipped with a warning. One row per comment; the same filters as \"Subreddits\" in this section apply.",
            "items": {
              "type": "string"
            }
          },
          "authors": {
            "title": "Authors",
            "type": "array",
            "description": "Reddit usernames (with or without the \"u/\" prefix). Only posts written by these users are kept. In the section \"Comments only\" the filter works on the comments: only the comments written by these users are kept. A post or comment matches if its author is any of the listed values. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "titles": {
            "title": "Title contains",
            "type": "array",
            "description": "Words or phrases that must appear in the post title (for example \"camp stove\"). Multi-word phrases are matched exactly. A post matches if it fits any of the listed values. In the section \"Comments only\" it checks the title of the post the comment belongs to. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "selftexts": {
            "title": "Post text contains",
            "type": "array",
            "description": "Words or phrases that must appear in the post body text. Multi-word phrases are matched exactly. A post matches if it fits any of the listed values. In the section \"Comments only\" it checks the text of the comment. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "flairs": {
            "title": "Post flairs",
            "type": "array",
            "description": "Post flair labels to match (for example \"Gear Review\"). Multi-word flairs are matched exactly. A post matches if it fits any of the listed values. Does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Linked domains",
            "type": "array",
            "description": "Domain names that the post links to (for example \"youtube.com\"), written without \"https://\". Only link posts can match. A post matches if it fits any of the listed values. Does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Linked URL contains",
            "type": "array",
            "description": "Text that must appear in the URL the post links to. Use values without spaces. A post matches if it fits any of the listed values. Does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "textPosts": {
            "title": "Text (self) posts only",
            "type": "boolean",
            "description": "When enabled, only text posts (posts with their own text, no outside link) are kept. Cannot be combined with \"Exclude text posts\" in the section \"Exclude filters\"."
          },
          "nsfw": {
            "title": "Adult (NSFW) content only",
            "type": "boolean",
            "description": "When enabled, only items marked NSFW (not safe for work, 18+) are kept. Uses the adult flag of the post (or of the comment in the section \"Comments only\"). Cannot be combined with \"Exclude adult (NSFW) content\" in the section \"Exclude filters\"."
          },
          "excludeAuthors": {
            "title": "Exclude authors",
            "type": "array",
            "description": "Reddit usernames (with or without \"u/\") whose posts are removed, for example \"AutoModerator\" to drop the bot. In the section \"Comments only\" the filter works on the comments: the comments written by these users are removed. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitles": {
            "title": "Exclude title contains",
            "type": "array",
            "description": "Words or phrases: a post whose title contains any of them is removed (case-insensitive, for example \"giveaway\"). In the section \"Comments only\" it checks the title of the post the comment belongs to. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeSelftexts": {
            "title": "Exclude post text contains",
            "type": "array",
            "description": "Words or phrases: a post whose text contains any of them is removed (case-insensitive). In the section \"Comments only\" it checks the text of the comment. The filter is applied after the items are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeFlairs": {
            "title": "Exclude post flairs",
            "type": "array",
            "description": "Post flair labels to remove (for example \"Meme\"). A post whose flair contains a listed value is removed. Posts only: does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeDomains": {
            "title": "Exclude linked domains",
            "type": "array",
            "description": "Domain names to remove (for example \"imgur.com\"), written without \"https://\". Sub-domains are included. Posts only: does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeUrls": {
            "title": "Exclude linked URL contains",
            "type": "array",
            "description": "Text that removes a post when the URL it links to contains it (for example \"imgur.com/a/\"). Use values without spaces. Posts only: does not apply to the section \"Comments only\". The filter is applied after the posts are read.",
            "items": {
              "type": "string"
            }
          },
          "excludeTextPosts": {
            "title": "Exclude text (self) posts",
            "type": "boolean",
            "description": "When enabled, text posts (posts with their own text) are removed, so only posts that link elsewhere are kept. Cannot be combined with \"Text (self) posts only\" in the section \"Include filters\"."
          },
          "excludeNsfw": {
            "title": "Exclude adult (NSFW) content",
            "type": "boolean",
            "description": "When enabled, items marked NSFW (not safe for work, 18+) are removed. Uses the adult flag of the post (or of the comment in the section \"Comments only\"). Cannot be combined with \"Adult (NSFW) content only\" in the section \"Include filters\"."
          },
          "timeRange": {
            "title": "Time range",
            "enum": [
              "all",
              "year",
              "month",
              "week",
              "day",
              "hour"
            ],
            "type": "string",
            "description": "Only include posts published within this period: \"hour\", \"day\", \"week\", \"month\", \"year\" (default) or \"all\". It is used only when \"Feed sort\" is top or controversial (a time in a Reddit page URL, for example ?t=week, wins).",
            "default": "year"
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Optional. Keep only items created on or after this date (00:00 UTC), or within a relative period counted back from the run start, for example \"7 days\" for a weekly schedule (units: days, weeks, months, years). Leave empty for no start date. For posts it is the date of the post; in the section \"Comments only\" it is the date of the comment. With a newest-first source (a feed sorted by new, or comments only) paging stops at the first page that reaches older items, which saves requests."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Optional. Keep only items created on or before this date (up to 23:59:59 UTC of that day), or at least that old when relative, for example \"7 days\" keeps only items that are 7 days old or older. Leave empty for no end date. Dates are read like \"Posted after\". Reddit lists the newest items first, so older items are reached by paging: set \"Max pages\" or \"Max posts per ...\" to limit how far back the Actor reads."
          },
          "minScore": {
            "title": "Minimum score",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only posts whose score (upvotes minus downvotes) is at least this value. Leave empty for no score filter. With \"Include comments of each post\" it filters the posts, not their comments; in the section \"Comments only\" it is the score of the comment."
          },
          "maxScore": {
            "title": "Maximum score",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only posts whose score (upvotes minus downvotes) is at most this value, for example 5 to find posts that got little attention. Leave empty for no upper limit. With \"Include comments of each post\" it filters the posts, not their comments; in the section \"Comments only\" it is the score of the comment."
          },
          "minUpvoteRatio": {
            "title": "Minimum upvote ratio",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Optional. Keep only posts where the share of upvotes is at least this value, from 0 to 1 (for example 0.5 means at least 50% upvoted). Leave empty for no upvote-ratio filter."
          },
          "minComments": {
            "title": "Minimum comments",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only posts that have at least this many comments (Reddit's comment count of the post). Useful for finding posts people actually discussed and for dropping posts nobody answered, which saves time when you want real opinions. Leave empty for no comment filter. With \"Include comments of each post\", posts below the value are not opened. Not used in the section \"Comments only\"."
          },
          "maxComments": {
            "title": "Maximum comments",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only posts that have at most this many comments (0 keeps only posts nobody has commented on yet). Leave empty for no upper limit. With \"Include comments of each post\", posts above the value are not opened. Not used in the section \"Comments only\". Different from \"Max comments per post\", which limits how many comments are read under each post."
          },
          "maxPostsPerSubreddit": {
            "title": "Max posts per subreddit",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most posts read from each subreddit (from \"Subreddit feeds\" and from subreddit URLs). Counted after the filters; the subreddit is no longer read once it is reached. Leave empty for no limit. This limit is per source. \"Max pages (total)\" below is one limit for the whole run: the run stops at whichever is reached first."
          },
          "maxPostsPerUser": {
            "title": "Max posts per user",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most posts read from each user (from \"User feeds\" and from user URLs). Counted after the filters. Leave empty for no limit."
          },
          "maxPostsPerDomain": {
            "title": "Max posts per domain",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most posts read from each domain (from \"Domain feeds\" and from domain URLs). Counted after the filters. Leave empty for no limit."
          },
          "maxCommentsPerPost": {
            "title": "Max comments per post",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "The most comments read under each post when \"Include comments of each post\" is enabled (replies count too). Up to 500. Sent to Reddit as the limit of the request, so a small value is also faster. Ignored in the section \"Comments only\".",
            "default": 10
          },
          "maxCommentDepth": {
            "title": "Max reply depth",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many levels of replies are read: 1 = only the top-level comments, 3 = comments, replies and replies to replies. Reddit goes down to 10 levels at most. Ignored in the section \"Comments only\".",
            "default": 3
          },
          "maxCommentsPerSubreddit": {
            "title": "Max comments per subreddit",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most comments read from each subreddit of the section \"Comments only\" (and from subreddit comment URLs such as reddit.com/r/camping/comments/). Counted after the filters; the subreddit is no longer read once it is reached. Leave empty for no limit. This limit is per source. \"Max pages\" below is one limit for the whole run: the run stops at whichever is reached first."
          },
          "maxCommentsPerUser": {
            "title": "Max comments per user",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most comments read from each user of the section \"Comments only\" (and from user comment URLs such as reddit.com/user/spez/comments/). Counted after the filters. Leave empty for no limit."
          },
          "maxItems": {
            "title": "Max results (total)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. The most results (rows of the dataset) the whole run returns, counted after all filters and over all feeds and URLs together. Post rows and comment rows both count. Reading stops as soon as the limit is reached, which saves requests. Leave empty for no limit. It works together with \"Max pages\" and the per-source limits: the run stops at whichever is reached first. It is also limited by the \"maximum cost per run\" of Apify."
          },
          "maxPages": {
            "title": "Max pages",
            "type": "integer",
            "description": "Optional. The most pages of posts (or comments in \"Comments only\") read in TOTAL for the whole run, counted over all feeds and URLs together (not per source). One page holds up to 100 items and costs one request. The requests that read the comments under a post are not counted. Leave empty for no page limit (paging then stops when Reddit has no more items). Different from \"Max posts per ...\": those limits count posts per subreddit, user or domain, this one counts pages of the whole run; sources that come after the limit is used up are skipped. Set to 1 to read only the first page of the first source."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}