{
  "openapi": "3.0.1",
  "info": {
    "title": "Bilibili Scraper: Videos, Creators, Comments & Danmaku",
    "description": "Scrape Bilibili (哔哩哔哩): videos by keyword, link, creator, collection or trending list, with exact counts, creator profiles, comments, danmaku and subtitles. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "LOKK28tYScaVwCeMl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~bilibili-videos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-bilibili-videos-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/nice_dev~bilibili-videos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-bilibili-videos-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/nice_dev~bilibili-videos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-bilibili-videos-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": {
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Bilibili search, as in the site's search box (Chinese or Latin: `原神`, `minecraft`). One result = one video (or one creator with **Search for** = Creators). Up to 1,000 results per search on the site: when **Max videos** is above 1,000 (or 0), the Actor splits the search into date windows to go past it, with or without dates (the order is then the windows', the most recent first)."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword. Added to **Search keyword**; videos found by several searches are saved once. A search page URL (`search.bilibili.com/all?keyword=…&order=…`) is accepted too: its keyword, sort, duration and category are used.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "Search for",
            "enum": [
              "video",
              "creator"
            ],
            "type": "string",
            "description": "Videos (default) or creators (UP主: one profile row per creator, with followers, video count, level and verification).",
            "default": "video"
          },
          "videoUrls": {
            "title": "Video URLs or IDs",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Videos to read directly: `bilibili.com/video/BV…` links, bare `BV…` or `av…` ids, `b23.tv` short links, mobile links. One video row each (always with the full video page data).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "profileUrls": {
            "title": "Creator URLs or UIDs",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Creators (UP主) to read: `space.bilibili.com/<uid>` links or bare numeric UIDs. One profile row each; set **Max videos per creator** to also get their uploads.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "collectionUrls": {
            "title": "Collection / series URLs",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "A creator's collections (合集) and series (系列): `space.bilibili.com/<uid>/lists/<id>?type=season` or `?type=series` links, or `space.bilibili.com/<uid>/channel/collectiondetail?sid=<id>`. Every video of each, in the creator's order.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerProfile": {
            "title": "Max videos per creator",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Uploads to read for each creator of **Creator URLs or UIDs**, newest first (the full list, not a name search). 0 = profile row only.",
            "default": 0
          },
          "trending": {
            "title": "Trending lists",
            "type": "array",
            "description": "Bilibili's own lists, read as the site's pages show them now: Popular (热门, about 600 videos), Top 100 ranking (排行榜, the all-site Top 100 or one per category below, as on the ranking page), Weekly must-watch (每周必看, latest issue), All-time must-watch (入站必刷) and Hot searches (热搜, one keyword row each). Each video keeps its `rank`.",
            "items": {
              "type": "string",
              "enum": [
                "popular",
                "ranking",
                "weekly",
                "precious",
                "hotSearch"
              ],
              "enumTitles": [
                "Popular (热门)",
                "Top 100 ranking (排行榜)",
                "Weekly must-watch (每周必看)",
                "All-time must-watch (入站必刷)",
                "Hot searches (热搜)"
              ]
            },
            "default": []
          },
          "rankingCategories": {
            "title": "Ranking categories",
            "type": "array",
            "description": "Categories of the Top 100 ranking, as on the site's ranking page (one Top 100 each, the videos it shows now). Empty = the all-site Top 100.",
            "items": {
              "type": "string",
              "enum": [
                "1005",
                "1008",
                "1007",
                "1003",
                "1004",
                "1001",
                "1002",
                "1010",
                "1012",
                "1020",
                "1013",
                "1014",
                "1018",
                "1024"
              ],
              "enumTitles": [
                "Animation (动画)",
                "Gaming (游戏)",
                "Kichiku / remix (鬼畜)",
                "Music (音乐)",
                "Dance (舞蹈)",
                "Film & TV (影视)",
                "Entertainment (娱乐)",
                "Knowledge (知识)",
                "Tech (科技)",
                "Food (美食)",
                "Cars (汽车)",
                "Fashion (时尚)",
                "Sports (运动)",
                "Animals (动物圈)"
              ]
            },
            "default": []
          },
          "rankingType": {
            "title": "Ranking type",
            "enum": [
              "all",
              "rookie",
              "origin"
            ],
            "type": "string",
            "description": "Which all-site Top 100 ranking (排行榜) to read: all videos, newcomers' videos (新人) or original videos only (原创). Only the all-site Top 100 has these types: a category's Top 100 is the same whatever you choose.",
            "default": "all"
          },
          "weeklyIssues": {
            "title": "Weekly must-watch issues",
            "maxItems": 500,
            "uniqueItems": true,
            "type": "array",
            "description": "Issue numbers of Weekly must-watch (每周必看) to read, e.g. `290` or `280-290`. Empty = the latest issue only. Needs **Weekly must-watch** in **Trending lists**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "creatorSort": {
            "title": "Creator search order",
            "enum": [
              "default",
              "fans",
              "level"
            ],
            "type": "string",
            "description": "Order of the creators found by a search with **Search for** = Creators, as on the site.",
            "default": "default"
          },
          "maxItems": {
            "title": "Max videos",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of videos (or creators) to save for the whole run (after deduplication and filters). Creators read from **Creator URLs or UIDs**, profiles of video authors, comments, danmaku and keyword rows are not counted: they have their own caps below. 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max videos per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH search, creator or trending list, so that the first one cannot use up the whole **Max videos** budget. 0 = no per-search cap.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "totalrank",
              "click",
              "pubdate",
              "dm",
              "stow",
              "scores"
            ],
            "type": "string",
            "description": "Order of the search results, as on the site.",
            "default": "totalrank"
          },
          "duration": {
            "title": "Duration",
            "enum": [
              "all",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Video length filter of the site's search.",
            "default": "all"
          },
          "category": {
            "title": "Category",
            "enum": [
              "all",
              "1",
              "3",
              "4",
              "5",
              "36",
              "119",
              "129",
              "155",
              "160",
              "168",
              "177",
              "181",
              "188",
              "211",
              "217",
              "223",
              "234"
            ],
            "type": "string",
            "description": "Search only one category (the site's zone filter).",
            "default": "all"
          },
          "cookie": {
            "title": "Bilibili cookie",
            "type": "string",
            "description": "Your `SESSDATA` cookie (or the whole cookie header) from a logged-in bilibili.com tab. Stored encrypted, used only for comments and subtitles, never written to the results or the log."
          },
          "includeVideoDetails": {
            "title": "Full video details",
            "type": "boolean",
            "description": "Read each video page: coins, shares, exact duration, parts (分P) with their cid, resolution, honors (weekly / ranking badges), original or repost, rights, tags with ids, subtitle languages. Always on for **Video URLs**.",
            "default": false
          },
          "includeChaptersAndMusic": {
            "title": "Chapters and background music",
            "type": "boolean",
            "description": "Adds to each video row its chapters (start, end, title) and the background music Bilibili recognized (title, artist, link), when the video has them.",
            "default": false
          },
          "includeAuthorProfile": {
            "title": "Creator profiles",
            "type": "boolean",
            "description": "One profile row per creator met (followers, following, uploads, total likes, level, verification, VIP, live room, bio).",
            "default": false
          },
          "includeBioContacts": {
            "title": "Contacts from creator bios",
            "type": "boolean",
            "description": "Adds to profile rows the e-mails, phone numbers, links and social handles (WeChat, Weibo, QQ, Douyin, RedNote, YouTube…) written in the creator's bio and live-room announcement. Needs **Creator profiles** or creator rows.",
            "default": false
          },
          "includeCreatorPosts": {
            "title": "Creator posts (动态)",
            "type": "boolean",
            "description": "Posts (动态 / opus) of each creator of **Creator URLs or UIDs**, newest first: text, image, date, likes, comments, shares, favorites. One post row each; the date and the counts come from the post's own page (1 extra page per post).",
            "default": false
          },
          "maxPostsPerProfile": {
            "title": "Max posts per creator",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Posts read per creator, newest first (1 extra page each). 0 = all the feed serves, up to 10 000 posts.",
            "default": 20
          },
          "includeFavorites": {
            "title": "Creator public favorites",
            "type": "boolean",
            "description": "Videos saved in the public favorite folders (收藏夹) of each creator of **Creator URLs or UIDs**, as video rows with `favoriteFolder`. Private folders are not visible.",
            "default": false
          },
          "maxFavoritesPerProfile": {
            "title": "Max favorites per creator",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Favorite videos per creator, all folders together. 0 = all the site serves.",
            "default": 100
          },
          "includeComments": {
            "title": "Comments",
            "type": "boolean",
            "description": "Comment rows for each video: the top-level comments with text, likes, number of replies, date, author level and VIP. Without a cookie Bilibili shows a visitor about 3 top comments per sort order: the hot and newest lists are merged, the pinned comment first, so expect about 6 to 8 a video. With your cookie the full list is read. The IP region (IP属地) is given only with your cookie.",
            "default": false
          },
          "maxCommentsPerVideo": {
            "title": "Max comments per video",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Top-level comments per video. 0 = all the site serves. Without a cookie a video gives only about 6 to 8, whatever you set.",
            "default": 20
          },
          "commentSort": {
            "title": "Comment order",
            "enum": [
              "hot",
              "newest"
            ],
            "type": "string",
            "description": "Order of the comments. With your cookie: the full list in this order. Without: the few top comments of the hot and newest lists are merged, this one first.",
            "default": "hot"
          },
          "includeReplies": {
            "title": "Comment replies",
            "type": "boolean",
            "description": "Replies under each top comment, as comment rows with `parentCommentId` and `rootCommentId`, after the top comments. Open to visitors: no cookie needed. Each reply is a comment row.",
            "default": false
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Replies read under each top comment (20 a page, in the site's order). 0 = all the site serves. Only used with Comment replies.",
            "default": 10
          },
          "includeDanmaku": {
            "title": "Danmaku (弹幕)",
            "type": "boolean",
            "description": "Bullet comments (弹幕) of each video, one row each: text, second of the video, send time, color, mode, pool, weight and the sender's hash (left out with **Anonymize commenters and danmaku senders**). First part (分P) of a video only. Open to visitors: no cookie needed.",
            "default": false
          },
          "maxDanmakuPerVideo": {
            "title": "Max danmaku per video",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Danmaku rows per video: the first N in the order of the video (by second). 0 = all the site's file holds. That file holds the danmaku currently shown, so a very busy video gives fewer than its danmaku counter says. Only used with Danmaku.",
            "default": 200
          },
          "includeDanmakuSummary": {
            "title": "Danmaku summary",
            "type": "boolean",
            "description": "Adds to each video row a summary of all the danmaku the site's file holds, whatever **Max danmaku per video** says: count, unique senders, busiest minute, per-minute curve (the first 1,440 minutes), the 20 most said terms and the oldest / newest send time. No row per danmaku needed. First part (分P) of a video only; a video without danmaku gets `count` 0.",
            "default": false
          },
          "includeSubtitles": {
            "title": "Subtitles (needs your cookie)",
            "type": "boolean",
            "description": "CC and AI subtitles of each video: languages, timed lines and full text. Bilibili shows them to logged-in viewers only: skipped with a message without **Bilibili cookie**.",
            "default": false
          },
          "includeRelatedVideos": {
            "title": "Related videos",
            "type": "boolean",
            "description": "Also save the videos Bilibili recommends next to each video you get (up to 40 each) as video rows: `source` `related`, `relatedTo` = the BV id of the video they are recommended next to. They are videos like any other: they count in **Max videos** and take its places as the run goes (when Max videos is smaller than the search, the recommended videos of the first videos can take places before the next pages of the search are read: to get the whole search first, set Max videos above the size of the search or leave this option unticked), they are charged as videos, a video already in the results is not saved again, and the filters (views, likes, dates, excluded words) apply. They come as the cards of a list: video details, chapters, subtitles, danmaku, comments and author profile are not read for them, and a recommended video has no recommended videos of its own.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only videos and creator posts published on or after this date: `2026-09-01` (a date without a time is read at Beijing time, UTC+8, while the publication date in the results is in UTC), or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). Searches send it to the site (date window), lists and creators are filtered by the Actor; a creator's posts stop being read at the first page whose posts are all older."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only videos and creator posts published on or before this date (same formats as **Posted after**: a date without a time is read at Beijing time, UTC+8, while the publication date in the results is in UTC)."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the videos whose title, the creators whose name and the posts whose text contain one of these words (case and accents ignored).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minViews": {
            "title": "Min views",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Drop the videos with fewer views (播放). 0 = no minimum.",
            "default": 0
          },
          "minLikes": {
            "title": "Min likes",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Drop the videos with fewer likes. 0 = no minimum. The videos of a collection, a series or a favorites folder have no likes on their card: without Full video details, this filter lets them through; with it, they are judged on their page.",
            "default": 0
          },
          "minFollowers": {
            "title": "Min followers",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Creator rows (creator search, creator profiles): drop the creators with fewer followers. 0 = no minimum.",
            "default": 0
          },
          "maxFollowers": {
            "title": "Max followers",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Creator rows: drop the creators with more followers (to find small and mid-size creators). 0 = no maximum.",
            "default": 0
          },
          "anonymizeUsers": {
            "title": "Anonymize commenters and danmaku senders",
            "type": "boolean",
            "description": "Replace the name, UID, avatar and page link of commenters with a stable anonymous hash (same person = same hash). Comment pictures whose address carries the UID are left out. Danmaku rows leave out the sender's hash (the danmaku summary still counts the senders). Video creators are kept.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new videos",
            "type": "boolean",
            "description": "Skip the videos that a previous run (same **Memory key**) already delivered: they are not saved and not charged. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new videos**. Give each schedule / task its own key (e.g. `genshin-daily`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every video again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the site in any 60 seconds, all of them counted: results pages, video pages and the extra page read for a video. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}