{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Video Views Tracker & Monitor - Views, Likes, Shares",
    "description": "Track TikTok video views, likes, comments, shares and saves from video URLs, with engagement rate and the rounding TikTok applies. Monitoring mode returns a video only when its view count changes, with each change. Deleted and private videos come back free with the reason.",
    "version": "0.1",
    "x-build-id": "MOLV2AZgWaGjR4ybv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~tiktok-video-views-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-tiktok-video-views-monitor",
        "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/neverempty~tiktok-video-views-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-tiktok-video-views-monitor",
        "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/neverempty~tiktok-video-views-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-tiktok-video-views-monitor",
        "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": {
          "videos": {
            "title": "TikTok video URLs or ids",
            "type": "array",
            "description": "Videos to read: https://www.tiktok.com/@name/video/1234567890123456789 (with or without the scheme), the numeric video id, or a vm.tiktok.com / vt.tiktok.com / tiktok.com/t/ short link. A repeated video is read and charged once and the repeat gets a free 'duplicate' row. If you leave this field out with monitoring off, two example videos are read; with monitoring on it is required. An empty list is rejected.",
            "items": {
              "type": "string"
            }
          },
          "maxVideos": {
            "title": "Maximum rows to return",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "With monitoring off, reading stops once this many charged rows have been returned, and a free row says how many entries at the end of the list were not read. Deleted, private and unreadable videos do not count. In monitoring mode it does not limit the changes returned: every video in the list is checked, as far as the run's maximum total charge allows. Up to 1,000 entries are read per run.",
            "default": 100
          },
          "monitoringMode": {
            "title": "Monitoring mode: return a video only when its counts change",
            "type": "boolean",
            "description": "Off = every video comes back with its current counts, charged per row. On = the Actor remembers each video's counts and, on later runs, returns a video only when its shown view count changed since the row last returned for it (or any count, with changeOn), with each change and the range it could be in given TikTok's rounding. The first run returns every video once to set the baseline. **In monitoring mode every video whose counts are read costs $0.30 per 1,000 checks, changed or not** (deleted, private and unreadable videos and bot checks are free), plus the row price for the rows returned. Example: 50 videos every hour = 36,000 checks a month = $10.80. The Actor reads only as many videos as the run's maximum total charge can pay for with a check and a change row each. Counts are remembered per video; do not put the same video in two schedules that can run at the same time.",
            "default": false
          },
          "changeOn": {
            "title": "In monitoring mode, return a video when",
            "enum": [
              "views",
              "any-count"
            ],
            "type": "string",
            "description": "views = only when the shown view count changed (the default). any-count = when the shown view, like, comment, share or save count changed. Save counts are not rounded by TikTok, and 3 of 4 videos re-checked from Apify 20 minutes apart on 2026-09-14 UTC had new save counts, 2 of them with an unchanged view count, so with any-count a video that is still being watched can come back, and is charged the row price, on every run. A video that is not returned keeps the counts of the row last returned for it, so the next row's changes add up from there.",
            "default": "views"
          },
          "resetMonitoringState": {
            "title": "Forget what was remembered and start over",
            "type": "boolean",
            "description": "Clears every remembered count for this Actor, so the next monitoring run returns each video once again as a first check. This affects all your monitoring runs, because counts are stored per video rather than per list. Turn it off again after one run: left on in a schedule, every run returns every video as a first check and charges the row price for it.",
            "default": false
          },
          "useProxy": {
            "title": "Use a proxy if TikTok answers with a bot check",
            "type": "boolean",
            "description": "Every video page is requested directly first. Only if TikTok answers a page with a bot check, an empty response or no response is that page retried through a proxy session; the next video is requested directly again. With it off, that answer is retried directly and then returned as a free 'blocked' row, and no proxy is paid for.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}