{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Shorts Competitor & Viral Trend Radar",
    "description": "Track YouTube Shorts from competitor channels and search queries. Collect public views and likes, save history, and measure view growth between runs. Identify rising and accelerating videos with transparent metrics. No YouTube API key required.",
    "version": "0.1",
    "x-build-id": "xWNbEQJH2Y9NXFes0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nexascout~youtube-shorts-trend-radar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nexascout-youtube-shorts-trend-radar",
        "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/nexascout~youtube-shorts-trend-radar/runs": {
      "post": {
        "operationId": "runs-sync-nexascout-youtube-shorts-trend-radar",
        "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/nexascout~youtube-shorts-trend-radar/run-sync": {
      "post": {
        "operationId": "run-sync-nexascout-youtube-shorts-trend-radar",
        "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": {
          "channelUrls": {
            "title": "Competitor channel URLs",
            "type": "array",
            "description": "Public YouTube channel URLs or @handles. With no channels and no queries, the NASA Shorts channel is used as a demo.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchQueries": {
            "title": "Search queries or niches",
            "type": "array",
            "description": "Up to 10 queries. Searches YouTube Shorts shelves; results are a bounded sample.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "country": {
            "title": "YouTube localization",
            "pattern": "^[A-Z]{2}$",
            "type": "string",
            "description": "Two-letter country code. This localizes YouTube results; it does not identify audience or creator country.",
            "default": "US"
          },
          "maxAgeDays": {
            "title": "Maximum video age (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Default 0 disables age filtering, so Shorts with unknown publication dates remain visible. A positive value strictly excludes older videos AND videos whose date is unavailable.",
            "default": 0
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "maximum": 1000000000000,
            "type": "integer",
            "description": "Minimum exact public view counter. Filtered observations can still be saved to history.",
            "default": 0
          },
          "maxShorts": {
            "title": "Maximum output Shorts",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum paid dataset rows. Collection stops once this limit is reached.",
            "default": 25
          },
          "maxCandidatesPerSource": {
            "title": "Discovery candidates per source",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum Shorts discovered per channel or query. Does not promise full coverage.",
            "default": 30
          },
          "maxPagesPerSource": {
            "title": "Discovery pages per source",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Bounded pagination. Continuations depend on YouTube availability.",
            "default": 2
          },
          "maxDetailRequests": {
            "title": "Maximum video detail requests",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Hard cap, including failed and filtered detail requests. Larger values increase usage.",
            "default": 80
          },
          "maxRunSeconds": {
            "title": "Collection budget (seconds)",
            "minimum": 30,
            "maximum": 240,
            "type": "integer",
            "description": "Stops collection early enough to write output and history. Platform timeout should be at least 300 seconds.",
            "default": 180
          },
          "minIntervalMinutes": {
            "title": "Minimum measurement interval (minutes)",
            "minimum": 1,
            "maximum": 1440,
            "type": "integer",
            "description": "Do not compute view velocity from observations closer than this interval.",
            "default": 60
          },
          "maxComparisonHours": {
            "title": "Maximum comparison interval (hours)",
            "minimum": 1,
            "maximum": 720,
            "type": "integer",
            "description": "Older baselines are marked stale. Keep this greater than the minimum interval.",
            "default": 72
          },
          "risingViewsPerHour": {
            "title": "Rising threshold (views/hour)",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Measured velocity threshold for RISING. This is configurable, not a universal viral threshold.",
            "default": 100
          },
          "accelerationFactor": {
            "title": "Acceleration ratio threshold",
            "minimum": 1.1,
            "maximum": 10,
            "type": "number",
            "description": "ACCELERATING requires at least this ratio of successive measured velocities and a current velocity above the rising threshold.",
            "default": 1.5
          },
          "saveHistory": {
            "title": "Remember observations between runs",
            "type": "boolean",
            "description": "Save only verified observations. Reuse the profile and sources for comparisons.",
            "default": true
          },
          "historyProfile": {
            "title": "History profile",
            "pattern": "^[a-zA-Z0-9-]{1,32}$",
            "type": "string",
            "description": "Separate experiments with separate names. Source lists and country also form part of the history identity.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Direct requests by default. Configure your proxy if YouTube blocks cloud traffic; proxy usage may add cost.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}