{
  "components": {
    "schemas": {
      "YoutubeChannelCommunityListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeHashtagListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.hashtag.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "published": "10 months ago",
                        "title": "Ages 1 - 100 Fight For $500,000",
                        "type": "video",
                        "video_id": "Tn6-PIqcHd4",
                        "views": "165M views"
                      }
                    ],
                    "summary": {
                      "has_more": false,
                      "hashtag": "mrbeast",
                      "pages": 1,
                      "total_items": 1,
                      "view": "all"
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelLiveListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-live.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "is_live": true,
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/3PFJ9SETS4M/hq720.jpg?v=6aac2920&sqp=-[redacted:token]==&rs=AOn4CLCmeps9ISbV3poKt4cVSiQKwEMANQ",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/3PFJ9SETS4M/hq720.jpg?v=6aac2920&sqp=-[redacted:token]==&rs=AOn4CLDkXfFkwL3BxQKnAlUMefPMYcHkMg",
                            "width": 720
                          }
                        ],
                        "title": "lofi house radio 🌅  lounge music to vibe/chill to",
                        "type": "video",
                        "video_id": "3PFJ9SETS4M",
                        "view_count": 2200,
                        "view_count_approximate": true,
                        "views": "2.2K watching"
                      },
                      {
                        "is_live": true,
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/rFZHOHl-L8A/hq720.jpg?v=6aac24f4&sqp=-[redacted:token]==&rs=AOn4CLDN3Yy-Dw3B9x_HYcTaGXq7gEVppA",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/rFZHOHl-L8A/hq720.jpg?v=6aac24f4&sqp=-[redacted:token]==&rs=AOn4CLCdekX1ygqqUJynjbliA5ayfR7tlw",
                            "width": 720
                          }
                        ],
                        "title": "lofi hip hop radio 📚 beats to relax/study to",
                        "type": "video",
                        "video_id": "rFZHOHl-L8A",
                        "view_count": 13000,
                        "view_count_approximate": true,
                        "views": "13K watching"
                      }
                    ],
                    "summary": {
                      "channel_id": "UCSJ4gkVC6NrvII8umztf0Ow",
                      "has_more": true,
                      "pages": 1,
                      "tab": "live",
                      "total_items": 2
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelShortsListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-shorts.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "accessibility_text": "Can We Build an Entire Village?, 17 million views - play Short",
                        "entity_id": "shorts-shelf-item-T_SMf9j50uc",
                        "headline": "Can We Build an Entire Village?",
                        "thumbnails": [
                          {
                            "height": 1920,
                            "url": "https://i.ytimg.com/vi/T_SMf9j50uc/frame0.jpg",
                            "width": 1080
                          }
                        ],
                        "type": "short",
                        "video_id": "T_SMf9j50uc",
                        "view_count": 17000000,
                        "view_count_approximate": true,
                        "views": "17M views"
                      },
                      {
                        "accessibility_text": "World’s Largest Tennis Match, 14 million views - play Short",
                        "entity_id": "shorts-shelf-item-5mU6SRS2Bxo",
                        "headline": "World’s Largest Tennis Match",
                        "thumbnails": [
                          {
                            "height": 1920,
                            "url": "https://i.ytimg.com/vi/5mU6SRS2Bxo/frame0.jpg",
                            "width": 1080
                          }
                        ],
                        "type": "short",
                        "video_id": "5mU6SRS2Bxo",
                        "view_count": 14000000,
                        "view_count_approximate": true,
                        "views": "14M views"
                      },
                      {
                        "accessibility_text": "Can You Pass This Classroom Quiz?, 53 million views - play Short",
                        "entity_id": "shorts-shelf-item-LiH-P4rSkLI",
                        "headline": "Can You Pass This Classroom Quiz?",
                        "thumbnails": [
                          {
                            "height": 1920,
                            "url": "https://i.ytimg.com/vi/LiH-P4rSkLI/frame0.jpg",
                            "width": 1080
                          }
                        ],
                        "type": "short",
                        "video_id": "LiH-P4rSkLI",
                        "view_count": 53000000,
                        "view_count_approximate": true,
                        "views": "53M views"
                      }
                    ],
                    "summary": {
                      "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
                      "has_more": true,
                      "pages": 1,
                      "tab": "shorts",
                      "total_items": 30
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeFeedTrendingExecuteRequest": {
        "additionalProperties": false,
        "description": "Anonymous region-based Shorts recommendation feed; each call returns a fresh, non-deterministic sample (not a ranked or complete list).",
        "example": {
          "capability": "youtube.feed.trending",
          "input": {
            "count": 5
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.feed.trending"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeFeedTrendingInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "JobPendingResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-community.list",
              "youtube.channel-live.list",
              "youtube.channel-playlists.list",
              "youtube.channel-shorts.list",
              "youtube.channel-videos.list",
              "youtube.channel.get",
              "youtube.comments.list",
              "youtube.feed.trending",
              "youtube.hashtag.list",
              "youtube.playlist.get",
              "youtube.post.get",
              "youtube.search.query",
              "youtube.search.typeahead",
              "youtube.video.get"
            ],
            "type": "string"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "poll_after_ms": {
            "description": "Wait at least this long before polling.",
            "minimum": 0,
            "type": "integer"
          },
          "poll_url": {
            "description": "GET this URL with the same API key to read the job.",
            "format": "uri",
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "state": {
            "enum": [
              "queued",
              "running",
              "retrying"
            ],
            "type": "string"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state"
        ],
        "type": "object"
      },
      "YoutubeChannelShortsListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeChannelPlaylistsListExecuteRequest": {
        "additionalProperties": false,
        "description": "Stream playlists from a channel's playlists tab.",
        "example": {
          "capability": "youtube.channel-playlists.list",
          "input": {
            "limit": 2,
            "max_pages": 1,
            "url": "@NASA"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-playlists.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelPlaylistsListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeFeedTrendingInput": {
        "additionalProperties": false,
        "properties": {
          "count": {
            "default": 10,
            "description": "Requested number of Shorts in the sample. The source is a non-deterministic feed, so fewer may be returned.",
            "maximum": 35,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "YoutubeChannelLiveListExecuteRequest": {
        "additionalProperties": false,
        "description": "Stream current, scheduled, and archived broadcasts from a channel's Live tab.",
        "example": {
          "capability": "youtube.channel-live.list",
          "input": {
            "limit": 2,
            "max_pages": 1,
            "url": "@LofiGirl"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-live.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelLiveListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeChannelCommunityListExecuteRequest": {
        "additionalProperties": false,
        "description": "Stream community posts from a channel's community tab.",
        "example": {
          "capability": "youtube.channel-community.list",
          "input": {
            "limit": 3,
            "url": "https://www.youtube.com/@MrBeast"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-community.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelCommunityListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeSearchTypeaheadInput": {
        "additionalProperties": false,
        "properties": {
          "language": {
            "description": "Optional language code for the suggestion surface",
            "maxLength": 35,
            "type": "string"
          },
          "query": {
            "description": "Partial search query",
            "maxLength": 200,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "YoutubeVideoGetCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.video.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "available_countries": [
                      "AD",
                      "AE",
                      "AF"
                    ],
                    "category": "Music",
                    "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
                    "channel_name": "Rick Astley",
                    "channel_subscriber_count": "4.54M subscribers",
                    "channel_thumbnail": [
                      {
                        "height": 48,
                        "url": "https://yt3.ggpht.com/[redacted:token]=s48-c-k-c0x00ffffff-no-rj",
                        "width": 48
                      },
                      {
                        "height": 88,
                        "url": "https://yt3.ggpht.com/[redacted:token]=s88-c-k-c0x00ffffff-no-rj",
                        "width": 88
                      },
                      {
                        "height": 176,
                        "url": "https://yt3.ggpht.com/[redacted:token]=s176-c-k-c0x00ffffff-no-rj",
                        "width": 176
                      }
                    ],
                    "channel_url": "/@RickAstleyYT",
                    "date_text": "Oct 24, 2009",
                    "description": "The official video for “Never Gonna Give You Up” by Rick Astley. \n\nNever: The Autobiography 📚 OUT NOW! \nFollow this link to get your copy and listen to Rick’s ‘Never’ playlist ❤️ #RickAstleyNever\nhttps://linktr.ee/rickastleynever\n\n“Never Gonna Give You Up” was a global smash on its release in July 1987, topping the charts in 25 countries including Rick’s native UK and the US Billboard Hot 100.  It …",
                    "duration_seconds": 213,
                    "embed_url": "https://www.youtube.com/embed/dQw4w9WgXcQ",
                    "full_description": "The official video for “Never Gonna Give You Up” by Rick Astley. \n\nNever: The Autobiography 📚 OUT NOW! \nFollow this link to get your copy and listen to Rick’s ‘Never’ playlist ❤️ #RickAstleyNever\nhttps://linktr.ee/rickastleynever\n\n“Never Gonna Give You Up” was a global smash on its release in July 1987, topping the charts in 25 countries including Rick’s native UK and the US Billboard Hot 100.  It …",
                    "is_family_safe": true,
                    "is_live": false,
                    "is_live_content": false,
                    "is_private": false,
                    "is_unlisted": false,
                    "keywords": [
                      "rick astley",
                      "Never Gonna Give You Up",
                      "nggyu"
                    ],
                    "like_count": 19404903,
                    "like_count_a11y": "like this video along with 19,404,903 other people",
                    "like_count_text": "19M",
                    "metadata_complete": true,
                    "most_replayed": {
                      "segments": [
                        {
                          "duration_seconds": 2.14,
                          "intensity": 1,
                          "start_seconds": 0
                        },
                        {
                          "duration_seconds": 2.14,
                          "intensity": 0.4230315549340408,
                          "start_seconds": 2.14
                        }
                      ],
                      "video_id": "dQw4w9WgXcQ"
                    },
                    "publish_date": "2009-10-24T23:57:33-07:00",
                    "related_videos": [
                      {
                        "channel": "Beluga",
                        "duration": "3:16",
                        "published": "4y ago",
                        "title": "Smartest way to RickRoll anyone...",
                        "video_id": "UZ7a7ufLllo",
                        "views": ""
                      },
                      {
                        "channel": "Madonna",
                        "duration": "4:02",
                        "published": "16y ago",
                        "title": "Madonna - La Isla Bonita (Official Video)",
                        "video_id": "zpzdgmqIHOQ",
                        "views": ""
                      },
                      {
                        "channel": "Britney Spears",
                        "duration": "3:57",
                        "published": "16y ago",
                        "title": "Britney Spears - ...Baby One More Time (Official Video)",
                        "video_id": "C-u5WLJ9Yk4",
                        "views": ""
                      }
                    ],
                    "thumbnails": [
                      {
                        "height": 94,
                        "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLDd2KtelLHaNSXrI9_5K-NvTscKNw",
                        "width": 168
                      },
                      {
                        "height": 110,
                        "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLBUpEOOWUXWkNyijQuZ4UPzp2BE-w",
                        "width": 196
                      },
                      {
                        "height": 138,
                        "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?sqp=-[redacted:token]==&rs=AOn4CLBCyhr8AqpJ1SxKVU6SyK5ODJ_IpA",
                        "width": 246
                      }
                    ],
                    "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
                    "upload_date": "2009-10-24T23:57:33-07:00",
                    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
                    "video_id": "dQw4w9WgXcQ",
                    "view_count": 1818815735,
                    "view_count_text": "1,818,815,735 views"
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelPlaylistsListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeCommentsListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "parent_comment_id": {
            "description": "Comment ID whose replies_continuation is being fetched.",
            "maxLength": 512,
            "minLength": 1,
            "type": "string"
          },
          "replies_continuation": {
            "description": "The replies_continuation from a returned comment. Supply its parent_comment_id and the same video URL.",
            "maxLength": 16384,
            "minLength": 1,
            "type": "string"
          },
          "sort": {
            "default": "top",
            "description": "Top comments or newest first. Applies to top-level comments.",
            "enum": [
              "top",
              "newest"
            ],
            "type": "string"
          },
          "url": {
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeHashtagListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "description": "Hashtag hub URL or bare tag",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          },
          "view": {
            "description": "Hashtag hub view. Defaults to all; a /shorts URL selects shorts.",
            "enum": [
              "all",
              "shorts"
            ],
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeChannelVideosListExecuteRequest": {
        "additionalProperties": false,
        "description": "List channel videos with pagination. Dates retain displayed relative text or are omitted. Rounded numeric counts are marked approximate.",
        "example": {
          "capability": "youtube.channel-videos.list",
          "input": {
            "limit": 2,
            "max_pages": 1,
            "url": "@NASA"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-videos.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelVideosListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeCommentsListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.comments.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee."
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelGetInput": {
        "additionalProperties": false,
        "properties": {
          "url": {
            "description": "YouTube channel URL, handle, or channel ID",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubePlaylistGetExecuteRequest": {
        "additionalProperties": false,
        "description": "Fetch playlist metadata and videos with pagination. Dates retain displayed text or are omitted. Rounded numeric counts are marked approximate.",
        "example": {
          "capability": "youtube.playlist.get",
          "input": {
            "limit": 10,
            "max_pages": 1,
            "url": "PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.playlist.get"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubePlaylistGetInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "JobBilling": {
        "additionalProperties": false,
        "properties": {
          "credits_charged": {
            "anyOf": [
              {
                "description": "Actual credits charged, which may be a part of a credit such as 0.25. Null only when retained historical facts cannot establish the amount.",
                "minimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "credits_per_unit": {
            "anyOf": [
              {
                "description": "Snapshotted price for one billed unit, which may be a part of a credit such as 0.25. Zero only for historical free work; null when unknown.",
                "minimum": 0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "model": {
            "enum": [
              "per_request",
              "per_record",
              "free",
              "unknown"
            ],
            "type": "string"
          },
          "pricing": {
            "additionalProperties": false,
            "properties": {
              "rule_id": {
                "anyOf": [
                  {
                    "minLength": 1,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "scope": {
                "anyOf": [
                  {
                    "enum": [
                      "module",
                      "platform",
                      "capability"
                    ],
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "source": {
                "enum": [
                  "manifest",
                  "price_book"
                ],
                "type": "string"
              },
              "version": {
                "anyOf": [
                  {
                    "minimum": 1,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "source",
              "scope",
              "version",
              "rule_id"
            ],
            "type": "object"
          },
          "settlement": {
            "description": "Why this job did or did not produce a credit debit. `cache_hit` means the same request was answered again from a recent result, and `credits_charged` is 0. A zero charge is not implicitly described as free.",
            "enum": [
              "prepaid_credits",
              "included_subscription",
              "out_of_band_contract",
              "free",
              "cache_hit",
              "not_billable",
              "zero_charge_requires_review",
              "unknown"
            ],
            "type": "string"
          },
          "units": {
            "anyOf": [
              {
                "description": "Billed units under the stated model. Null when units do not apply or cannot be established.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "model",
          "units",
          "credits_per_unit",
          "credits_charged",
          "settlement",
          "pricing"
        ],
        "type": "object"
      },
      "UnauthorizedError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "unauthorized",
                "type": "string"
              },
              "message": {
                "enum": [
                  "authentication required",
                  "invalid or revoked API key; check it under API keys in the console, sent as Authorization: Bearer <your key>",
                  "missing API key; send it as the header Authorization: Bearer <your key>"
                ],
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubeSearchQueryInput": {
        "additionalProperties": false,
        "properties": {
          "duration": {
            "description": "short: under 3 minutes; medium: 3–20 minutes; long: over 20 minutes, as defined by the source.",
            "enum": [
              "short",
              "long",
              "medium"
            ],
            "type": "string"
          },
          "filter": {
            "description": "Legacy single selector. Do not combine with type, upload_date, duration or sort.",
            "enum": [
              "videos",
              "channels",
              "playlists",
              "live",
              "shorts",
              "today",
              "week",
              "month",
              "year"
            ],
            "type": "string"
          },
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "Search query",
            "maxLength": 200,
            "pattern": "\\S+",
            "type": "string"
          },
          "sort": {
            "description": "Source relevance or popularity order; view_count and views are aliases for popularity. Source order is preserved and may vary between calls. Upload-date and rating sorting are unavailable.",
            "enum": [
              "relevance",
              "popularity",
              "view_count",
              "views"
            ],
            "type": "string"
          },
          "type": {
            "description": "Restrict results to one content type. Plural forms are accepted aliases for the same type.",
            "enum": [
              "video",
              "videos",
              "channel",
              "channels",
              "playlist",
              "playlists",
              "movie",
              "movies"
            ],
            "type": "string"
          },
          "upload_date": {
            "description": "Restrict results to a recent upload window.",
            "enum": [
              "hour",
              "today",
              "week",
              "month",
              "year"
            ],
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "JobStats": {
        "additionalProperties": false,
        "properties": {
          "attempts": {
            "description": "Number of execution attempts made for the job.",
            "minimum": 0,
            "type": "integer"
          },
          "duration_ms": {
            "anyOf": [
              {
                "description": "Duration of the final execution attempt.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "failed": {
            "const": 0,
            "type": "integer"
          },
          "passed": {
            "const": 1,
            "type": "integer"
          },
          "processing_duration_ms": {
            "anyOf": [
              {
                "description": "Total job processing time, including retries and retry backoff.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "queue_duration_ms": {
            "anyOf": [
              {
                "description": "Time between job acceptance and the first execution attempt.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "run_duration_ms": {
            "anyOf": [
              {
                "description": "Canonical run time from job acceptance to completion. Use this for customer-facing timing.",
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "total": {
            "const": 1,
            "type": "integer"
          }
        },
        "required": [
          "total",
          "passed",
          "failed",
          "run_duration_ms",
          "duration_ms",
          "processing_duration_ms",
          "queue_duration_ms",
          "attempts"
        ],
        "type": "object"
      },
      "YoutubeChannelLiveListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "description": "YouTube channel URL, handle, or channel ID",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "YoutubeVideoGetExecuteRequest": {
        "additionalProperties": false,
        "description": "Get public video details, approximate counts and the replay heatmap when the source supplies it. Shorts duration may be null. Transcripts are held.",
        "example": {
          "capability": "youtube.video.get",
          "input": {
            "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.video.get"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeVideoGetInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "UnavailableError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "temporarily_unavailable",
                "type": "string"
              },
              "message": {
                "const": "this capability is temporarily unavailable; try again later or use another capability",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubeSearchTypeaheadExecuteRequest": {
        "additionalProperties": false,
        "description": "Return YouTube's public anonymous search suggestions for a partial query. Suggestions are surface strings, not popularity metrics.",
        "example": {
          "capability": "youtube.search.typeahead",
          "input": {
            "query": "golang"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.search.typeahead"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeSearchTypeaheadInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 30000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "InternalError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "internal_error",
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "CredentialsRequiredError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "credentials_required",
                "type": "string"
              },
              "message": {
                "const": "this capability requires authentication credentials; save them via POST /credentials",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubePlaylistGetCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.playlist.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "has_more": false,
                    "is_editable": false,
                    "last_updated": "Last updated on Jun 9, 2024",
                    "owner": "Andrej Karpathy",
                    "owner_channel_id": "UCXUPKJO5MZQN11PqgIvyuvQ",
                    "pages": 1,
                    "playlist_id": "PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ",
                    "thumbnails": [
                      {
                        "height": 94,
                        "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLB2Op623ufQGhBzpdmt6ovG3_J-Tg",
                        "width": 168
                      },
                      {
                        "height": 110,
                        "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLB8mnZInXcm0G9Ug_Ry5sc6NY6HmA",
                        "width": 196
                      },
                      {
                        "height": 138,
                        "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCe-ObbwJ6qnfCEYl3iQjTKcjNKRQ",
                        "width": 246
                      }
                    ],
                    "title": "Neural Networks: Zero to Hero",
                    "total_videos_text": "10 videos",
                    "total_views_text": "3,178,754 views",
                    "url": "https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ",
                    "video_count": 10,
                    "videos": [
                      {
                        "channel": "Andrej Karpathy",
                        "duration": "2:25:52",
                        "index": 1,
                        "is_playable": true,
                        "thumbnails": [
                          {
                            "height": 94,
                            "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLANKRlma8t_6suMaQQeluqO_rIi1A",
                            "width": 168
                          },
                          {
                            "height": 110,
                            "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLCGj5_X_S6heDlwv-aZPswkWjPA0g",
                            "width": 196
                          },
                          {
                            "height": 138,
                            "url": "https://i.ytimg.com/vi/VMj-3S1tku0/hqdefault.jpg?sqp=-[redacted:token]==&rs=AOn4CLCXO28zt5LWW5gxohv9TRcz9gSVDA",
                            "width": 246
                          }
                        ],
                        "title": "The spelled-out intro to neural networks and backpropagation: building micrograd",
                        "video_id": "VMj-3S1tku0"
                      },
                      {
                        "channel": "Andrej Karpathy",
                        "duration": "1:57:45",
                        "index": 2,
                        "is_playable": true,
                        "thumbnails": [
                          {
                            "height": 94,
                            "url": "https://i.ytimg.com/vi/PaCmpygFfXo/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLAIKvVhG_WMZzYYqxo5eb3-Y6AXMw",
                            "width": 168
                          },
                          {
                            "height": 110,
                            "url": "https://i.ytimg.com/vi/PaCmpygFfXo/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLBCNBf_IYMCCseYVC5e0M605B96uA",
                            "width": 196
                          },
                          {
                            "height": 138,
                            "url": "https://i.ytimg.com/vi/PaCmpygFfXo/hqdefault.jpg?sqp=-[redacted:token]==&rs=AOn4CLAeNwcwHd21b_0fERSPOriNYrWnUQ",
                            "width": 246
                          }
                        ],
                        "title": "The spelled-out intro to language modeling: building makemore",
                        "video_id": "PaCmpygFfXo"
                      },
                      {
                        "channel": "Andrej Karpathy",
                        "duration": "1:15:40",
                        "index": 3,
                        "is_playable": true,
                        "thumbnails": [
                          {
                            "height": 94,
                            "url": "https://i.ytimg.com/vi/TCH_1BHY58I/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLBtHwoPJHZc413cxmAqSkEfIdn3Ig",
                            "width": 168
                          },
                          {
                            "height": 110,
                            "url": "https://i.ytimg.com/vi/TCH_1BHY58I/hqdefault.jpg?sqp=-[redacted:token]&rs=AOn4CLALpfrU3EXRW5BcIamGzjDAzvgzsA",
                            "width": 196
                          },
                          {
                            "height": 138,
                            "url": "https://i.ytimg.com/vi/TCH_1BHY58I/hqdefault.jpg?sqp=-[redacted:token]==&rs=AOn4CLAHg1bSakbEadmofBmsSGTNfsyVmQ",
                            "width": 246
                          }
                        ],
                        "title": "Building makemore Part 2: MLP",
                        "video_id": "TCH_1BHY58I"
                      }
                    ]
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeSearchQueryExecuteRequest": {
        "additionalProperties": false,
        "description": "Search videos, Shorts, channels, playlists and live broadcasts using the legacy filter or composable type, upload_date, duration and sort selectors.",
        "example": {
          "capability": "youtube.search.query",
          "input": {
            "filter": "videos",
            "limit": 40,
            "max_pages": 3,
            "query": "noise cancelling headphones review"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.search.query"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeSearchQueryInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeFeedTrendingCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.feed.trending"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "count": 1,
                    "shorts": [
                      {
                        "channel": "@HoopsEmpire_Official",
                        "channel_id": "UC1nubW_LylhVtQN6gSfrRug",
                        "like_count": 431000,
                        "like_count_approximate": true,
                        "like_count_text": "431K",
                        "published": "3 weeks ago",
                        "thumbnails": [
                          {
                            "height": 1920,
                            "url": "https://i.ytimg.com/vi/hitjAtT7Ij4/frame0.jpg",
                            "width": 1080
                          }
                        ],
                        "title": "1 in a trillion #basketball #shorts",
                        "url": "https://www.youtube.com/shorts/hitjAtT7Ij4",
                        "video_id": "hitjAtT7Ij4"
                      }
                    ]
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "JobErrorObject": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "description": "Machine-readable error code (e.g. forbidden, not_found, invalid_input, upstream_timeout, upstream_error).",
            "type": "string"
          },
          "message": {
            "description": "Human-readable error description.",
            "type": "string"
          },
          "reason": {
            "description": "A stable machine-readable reason when the code alone is not specific enough, for example country_unverified on a forbidden response where the requested country could not be verified. Present only for reviewed reasons; never a raw upstream diagnostic.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "YoutubeHashtagListExecuteRequest": {
        "additionalProperties": false,
        "description": "List the ranked public All or Shorts view of a hashtag hub, with source continuation. This is not exhaustive hashtag membership.",
        "example": {
          "capability": "youtube.hashtag.list",
          "input": {
            "limit": 3,
            "url": "https://www.youtube.com/hashtag/mrbeast"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.hashtag.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeHashtagListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeSearchTypeaheadCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.search.typeahead"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "count": 3,
                    "query": "golang",
                    "suggestions": [
                      "golang tutorial",
                      "golang vs rust",
                      "golang course"
                    ]
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelGetCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "available_countries": [
                      "SZ",
                      "LK",
                      "TO"
                    ],
                    "available_tabs": [
                      "Home",
                      "Videos",
                      "Shorts"
                    ],
                    "avatar": [
                      {
                        "height": 72,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=s72-c-k-c0x00ffffff-no-rj",
                        "width": 72
                      },
                      {
                        "height": 120,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=s120-c-k-c0x00ffffff-no-rj",
                        "width": 120
                      },
                      {
                        "height": 160,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=s160-c-k-c0x00ffffff-no-rj",
                        "width": 160
                      }
                    ],
                    "banner": [
                      {
                        "height": 175,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
                        "width": 1060
                      },
                      {
                        "height": 188,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=w1138-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
                        "width": 1138
                      },
                      {
                        "height": 283,
                        "url": "https://yt3.googleusercontent.com/[redacted:token]=w1707-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
                        "width": 1707
                      }
                    ],
                    "channel_handle": "@NASA",
                    "channel_id": "UCLA_DiR1FfKNvjuUpBHmylQ",
                    "description": "NASA's mission is to pioneer the future in space exploration, scientific discovery, and aeronautics research.\r\n\r\nTo do that, we have worked around the world—and off it—for more than 60 years, searching for answers to fundamental questions about our place in the universe. We're exploring space and discovering Earth. Join us on this exciting and important journey.\n",
                    "external_id": "UCLA_DiR1FfKNvjuUpBHmylQ",
                    "is_family_safe": true,
                    "keywords": "nasa space iss shuttle 50th astronauts planets earth rockets hubble telescopes NASA TV galaxy apollo gemini mercury sta Moon Artemis \"solar system\"",
                    "rss_url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCLA_DiR1FfKNvjuUpBHmylQ",
                    "subscriber_count": 15100000,
                    "subscriber_count_approximate": true,
                    "subscriber_count_text": "15.1M subscribers",
                    "title": "NASA",
                    "url": "https://www.youtube.com/channel/UCLA_DiR1FfKNvjuUpBHmylQ",
                    "vanity_url": "http://www.youtube.com/@NASA",
                    "video_count": 6100,
                    "video_count_approximate": true,
                    "video_count_text": "6.1K videos"
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubePostGetCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.post.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "author": "MrBeast",
                    "content": "All the YouTube Play Buttons",
                    "post_id": "Ugkx1LonSRBBUqASv-J8j9_FesxwlMAhT3_e",
                    "published": "3 months ago",
                    "url": "https://www.youtube.com/post/Ugkx1LonSRBBUqASv-J8j9_FesxwlMAhT3_e",
                    "vote_count": 2000000,
                    "vote_count_approximate": true,
                    "vote_count_text": "2M"
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "ValidationErrors": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "description": "The standard error envelope, as on every other failure. Branch on `error.code`.",
            "properties": {
              "code": {
                "const": "invalid_input",
                "type": "string"
              },
              "fields": {
                "additionalProperties": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "description": "Failed fields and their messages.",
                "type": "object"
              },
              "message": {
                "description": "One-line summary of the failed fields.",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message",
              "fields"
            ],
            "type": "object"
          },
          "errors": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "description": "Retained for compatibility: the same field map as `error.fields`. New integrations should read `error`.",
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "errors",
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubeChannelVideosListInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "QuotaError": {
        "oneOf": [
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "account_inactive",
                    "type": "string"
                  },
                  "message": {
                    "const": "an active paid account is required",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              },
              "request_id": {
                "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "error",
              "request_id"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "quota_exhausted",
                    "type": "string"
                  },
                  "message": {
                    "const": "request quota exhausted for current billing period",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              },
              "request_id": {
                "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "error",
              "request_id"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "quota_exhausted",
                    "type": "string"
                  },
                  "message": {
                    "const": "not enough credits for this request; buy credits at https://app.upscrape.com/app/billing to continue",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              },
              "request_id": {
                "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "error",
              "request_id"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "error": {
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "const": "account_inactive",
                    "type": "string"
                  },
                  "message": {
                    "const": "this account is not active; buy credits at https://app.upscrape.com/app/billing to activate it, or contact support if it was suspended",
                    "type": "string"
                  }
                },
                "required": [
                  "code",
                  "message"
                ],
                "type": "object"
              },
              "request_id": {
                "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "error",
              "request_id"
            ],
            "type": "object"
          }
        ]
      },
      "YoutubeSearchQueryCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.search.query"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "has_more": true,
                    "pages": 2,
                    "query": "noise cancelling headphones review",
                    "results": [
                      {
                        "channel": "Marques Brownlee",
                        "channel_id": "UCBJycsmduvYEL83R_U4JriQ",
                        "duration": "9:17",
                        "duration_seconds": 557,
                        "published": "1 year ago",
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/XbXXKhfvSF0/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLB87KfIDb7ytn6HL5hPxD88M_ESeA",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/XbXXKhfvSF0/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLCXavhz42l_gDmYPTgJblsuF6v9fg",
                            "width": 720
                          }
                        ],
                        "title": "Sony WH-1000XM6 Review: Back on the Throne!",
                        "type": "video",
                        "video_id": "XbXXKhfvSF0",
                        "view_count": 4925722,
                        "views": "4,925,722 views"
                      },
                      {
                        "channel": "Mark Ellis Reviews",
                        "channel_id": "UCwwuSBYcErVlOpveYubHv4g",
                        "duration": "18:37",
                        "duration_seconds": 1117,
                        "published": "2 months ago",
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/ljV1iOJmE_E/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLCpNkS6Reob0ie3m6SvCvkpwa34XQ",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/ljV1iOJmE_E/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLBj_hP1aVy6il25dZS8kD2m0kqdbQ",
                            "width": 720
                          }
                        ],
                        "title": "The Only ANC Headphones Worth Buying in 2026",
                        "type": "video",
                        "video_id": "ljV1iOJmE_E",
                        "view_count": 132845,
                        "views": "132,845 views"
                      },
                      {
                        "channel": "RTINGS Audio",
                        "channel_id": "UCz4geqN2YY6gktLikAKMvlw",
                        "duration": "8:59",
                        "duration_seconds": 539,
                        "published": "6 months ago",
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/-eLeP7MdoHI/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLCyD0ak8GBG-8knA_YNCw_wBUEkcg",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/-eLeP7MdoHI/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLBmbWkLjQOds6j5pUMz0ayejFe40A",
                            "width": 720
                          }
                        ],
                        "title": "The Best Noise Cancelling Headphones To Buy In 2026",
                        "type": "video",
                        "video_id": "-eLeP7MdoHI",
                        "view_count": 77487,
                        "views": "77,487 views"
                      }
                    ],
                    "results_count": 40
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "JobFailedResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-community.list",
              "youtube.channel-live.list",
              "youtube.channel-playlists.list",
              "youtube.channel-shorts.list",
              "youtube.channel-videos.list",
              "youtube.channel.get",
              "youtube.comments.list",
              "youtube.feed.trending",
              "youtube.hashtag.list",
              "youtube.playlist.get",
              "youtube.post.get",
              "youtube.search.query",
              "youtube.search.typeahead",
              "youtube.video.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "error": {
            "$ref": "#/components/schemas/JobErrorObject"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "type": "null"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "failed",
            "type": "string"
          },
          "stats": {
            "type": "null"
          },
          "success": {
            "const": false,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "error",
          "results",
          "stats",
          "started_at",
          "completed_at"
        ],
        "type": "object"
      },
      "CreditLimitError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "credit_limit_exceeded",
                "type": "string"
              },
              "message": {
                "const": "published job price exceeds the requested maximum credits",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "ExecuteNetwork": {
        "additionalProperties": false,
        "properties": {
          "session_id": {
            "description": "Optional explicit session identifier.",
            "minLength": 1,
            "type": "string"
          },
          "session_key": {
            "description": "Optional stable key used to derive a reusable session.",
            "minLength": 1,
            "type": "string"
          },
          "sticky": {
            "description": "Whether the request should reuse the resolved session.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "YoutubeChannelVideosListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-videos.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "duration": "1:07",
                        "duration_seconds": 67,
                        "published": "2 weeks ago",
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/IwZVXmQdX1E/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLDZhRoAzQlPmuQPBgARWe_7UZBmGw",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/IwZVXmQdX1E/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLAbF2XsbtQG6_xWiZV5dRYkCpYUpQ",
                            "width": 720
                          }
                        ],
                        "title": "NASA Moon Base: The First Six Months",
                        "type": "video",
                        "video_id": "IwZVXmQdX1E",
                        "view_count": 493000,
                        "view_count_approximate": true,
                        "views": "493K views"
                      },
                      {
                        "duration": "2:32",
                        "duration_seconds": 152,
                        "published": "2 weeks ago",
                        "thumbnails": [
                          {
                            "height": 202,
                            "url": "https://i.ytimg.com/vi/90Kgw_SvK4w/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLBZF8XWSdCWdkpFZkFHBXv5hYSWGQ",
                            "width": 360
                          },
                          {
                            "height": 404,
                            "url": "https://i.ytimg.com/vi/90Kgw_SvK4w/hq720.jpg?sqp=-[redacted:token]==&rs=AOn4CLAvIln3hNXOk8oVGh1IZOIyB8b7dA",
                            "width": 720
                          }
                        ],
                        "title": "What It Takes",
                        "type": "video",
                        "video_id": "90Kgw_SvK4w",
                        "view_count": 310000,
                        "view_count_approximate": true,
                        "views": "310K views"
                      }
                    ],
                    "summary": {
                      "channel_id": "UCLA_DiR1FfKNvjuUpBHmylQ",
                      "has_more": true,
                      "pages": 1,
                      "tab": "videos",
                      "total_items": 2
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeCommentsListExecuteRequest": {
        "additionalProperties": false,
        "description": "Fetch top or newest video comments, or replies using a returned replies continuation. Published times retain YouTube’s displayed relative text; rounded counts are marked approximate.",
        "example": {
          "capability": "youtube.comments.list",
          "input": {
            "limit": 5,
            "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.comments.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeCommentsListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "ExecuteAcceptedResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-community.list",
              "youtube.channel-live.list",
              "youtube.channel-playlists.list",
              "youtube.channel-shorts.list",
              "youtube.channel-videos.list",
              "youtube.channel.get",
              "youtube.comments.list",
              "youtube.feed.trending",
              "youtube.hashtag.list",
              "youtube.playlist.get",
              "youtube.post.get",
              "youtube.search.query",
              "youtube.search.typeahead",
              "youtube.video.get"
            ],
            "type": "string"
          },
          "coalesced": {
            "type": "boolean"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "poll_after_ms": {
            "description": "Wait at least this long before polling.",
            "minimum": 0,
            "type": "integer"
          },
          "poll_url": {
            "description": "GET this URL with the same API key to read the job.",
            "format": "uri",
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "state": {
            "const": "queued",
            "type": "string"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state"
        ],
        "type": "object"
      },
      "YoutubeVideoGetInput": {
        "additionalProperties": false,
        "properties": {
          "url": {
            "description": "YouTube video URL or video ID",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "RateLimitError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "rate_limited",
                "type": "string"
              },
              "message": {
                "const": "rate limit exceeded",
                "type": "string"
              },
              "retry_after_ms": {
                "description": "Milliseconds until the rolling window resets enough to retry. The `retry-after` response header carries the same value rounded up to seconds.",
                "minimum": 0,
                "type": "integer"
              }
            },
            "required": [
              "code",
              "message",
              "retry_after_ms"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubePostGetInput": {
        "additionalProperties": false,
        "properties": {
          "url": {
            "description": "Community post URL or post id",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "ExecuteReplayResponse": {
        "additionalProperties": false,
        "description": "Replayed response matching the original job's current state (completed, failed, or pending).",
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-community.list",
              "youtube.channel-live.list",
              "youtube.channel-playlists.list",
              "youtube.channel-shorts.list",
              "youtube.channel-videos.list",
              "youtube.channel.get",
              "youtube.comments.list",
              "youtube.feed.trending",
              "youtube.hashtag.list",
              "youtube.playlist.get",
              "youtube.post.get",
              "youtube.search.query",
              "youtube.search.typeahead",
              "youtube.video.get"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "error": {},
          "idempotent_replay": {
            "const": true,
            "type": "boolean"
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "poll_after_ms": {
            "minimum": 0,
            "type": "integer"
          },
          "poll_url": {
            "format": "uri",
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {},
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "enum": [
              "queued",
              "running",
              "retrying",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "stats": {},
          "success": {
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "idempotent_replay"
        ],
        "type": "object"
      },
      "YoutubeChannelPlaylistsListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-playlists.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "playlist_id": "PLF98rxtslw6s",
                        "thumbnails": [
                          {
                            "height": 270,
                            "url": "https://i.ytimg.com/vi/9wq3VHsL_bE/hqdefault.jpg?sqp=-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCC7609JJdE1ic8h5PLtaCFmDRDYg",
                            "width": 480
                          }
                        ],
                        "title": "Nancy Grace Roman Space Telescope",
                        "type": "playlist",
                        "video_count": "3 videos"
                      },
                      {
                        "playlist_id": "PLB29CbKaE2OY",
                        "thumbnails": [
                          {
                            "height": 240,
                            "url": "https://i.ytimg.com/pl_c/PLB29CbKaE2OY/studio_square_thumbnail.jpg?sqp=[redacted:token]=&rs=AOn4CLCXIxbJHzYlFenEnofyVNgsjAIJkw",
                            "width": 426
                          },
                          {
                            "height": 480,
                            "url": "https://i.ytimg.com/pl_c/PLB29CbKaE2OY/studio_square_thumbnail.jpg?sqp=[redacted:token]=&rs=AOn4CLDzfMrarbq4twUchJcaNcVszY9swQ",
                            "width": 854
                          },
                          {
                            "height": 720,
                            "url": "https://i.ytimg.com/pl_c/PLB29CbKaE2OY/studio_square_thumbnail.jpg?sqp=[redacted:token]=&rs=AOn4CLDnCuJVqWChwenUh1uKaYKxyx9f0A",
                            "width": 1280
                          }
                        ],
                        "title": "NASA Moon Base",
                        "type": "playlist",
                        "video_count": "9 videos"
                      }
                    ],
                    "summary": {
                      "channel_id": "UCLA_DiR1FfKNvjuUpBHmylQ",
                      "has_more": true,
                      "pages": 1,
                      "tab": "playlists",
                      "total_items": 2
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "NotFoundError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "not_found",
                "type": "string"
              },
              "message": {
                "enum": [
                  "job not found",
                  "monitor not found",
                  "monitors are not available for this account"
                ],
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubePostGetExecuteRequest": {
        "additionalProperties": false,
        "description": "Fetch one public community post by URL or id, with its content, media, poll and public counts.",
        "example": {
          "capability": "youtube.post.get",
          "input": {
            "url": "https://www.youtube.com/post/Ugkx1LonSRBBUqASv-J8j9_FesxwlMAhT3_e"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.post.get"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubePostGetInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "IdempotencyConflictError": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "additionalProperties": false,
            "properties": {
              "code": {
                "const": "idempotency_conflict",
                "type": "string"
              },
              "message": {
                "const": "idempotency key has already been used for a different request",
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "type": "object"
          },
          "request_id": {
            "description": "Safe Upscrape HTTP request identifier, also returned in the x-request-id header. For accepted jobs, job_id is the durable execution identifier.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "type": "object"
      },
      "YoutubeChannelCommunityListCompletedJob": {
        "additionalProperties": false,
        "properties": {
          "billing": {
            "$ref": "#/components/schemas/JobBilling"
          },
          "capability": {
            "enum": [
              "youtube.channel-community.list"
            ],
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "description": "When the source data was read and the job completed (ISO 8601 UTC). This is the observation time for the returned data, to the job's precision, not a per-item upstream timestamp. Null unless the job completed.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "job_id": {
            "format": "uuid",
            "type": "string"
          },
          "outcome": {
            "description": "Truthful module completion detail; status is complete unless the module reports partial or incomplete output.",
            "type": "object"
          },
          "platform": {
            "enum": [
              "youtube"
            ],
            "type": "string"
          },
          "request_id": {
            "format": "uuid",
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "data": {
                  "description": "Raw capability output. Its shape may evolve with the upstream source; the example is illustrative, not a compatibility guarantee.",
                  "example": {
                    "items": [
                      {
                        "author": "MrBeast",
                        "content": "Some more fun wedding photos 🥰",
                        "post_id": "UgkxB7POmB4C7U0I3kIEWRZpYfE2t-ieP9CA",
                        "published": "8 days ago",
                        "type": "post",
                        "vote_count": "3.2M"
                      },
                      {
                        "author": "MrBeast",
                        "content": "I found MrsBeast ❤️❤️❤️",
                        "post_id": "Ugkxg-YuyvHwnlFZRktAZHHELzGBrskCHChJ",
                        "published": "10 days ago",
                        "type": "post",
                        "vote_count": "3.1M"
                      },
                      {
                        "author": "MrBeast",
                        "content": "World Cup was fun",
                        "post_id": "Ugkx5QH9-Xr0EWbVJ1riARjVrDcXRN1LfJS7",
                        "published": "12 days ago",
                        "type": "post",
                        "vote_count": "1.9M"
                      }
                    ],
                    "summary": {
                      "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
                      "pages": 1,
                      "tab": "community",
                      "total_items": 3
                    }
                  }
                },
                "error": {
                  "type": "null"
                },
                "index": {
                  "const": 0,
                  "type": "integer"
                },
                "url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "index",
                "url",
                "data",
                "error"
              ],
              "type": "object"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "description": "When the job began executing (ISO 8601 UTC), or null if it never ran.",
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "const": "completed",
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/JobStats"
          },
          "success": {
            "const": true,
            "type": "boolean"
          }
        },
        "required": [
          "job_id",
          "request_id",
          "platform",
          "capability",
          "state",
          "success",
          "started_at",
          "completed_at",
          "results",
          "billing",
          "stats",
          "outcome"
        ],
        "type": "object"
      },
      "YoutubeChannelShortsListExecuteRequest": {
        "additionalProperties": false,
        "description": "List channel Shorts and view counts. Dates and durations may be unavailable. Rounded numeric counts are marked approximate.",
        "example": {
          "capability": "youtube.channel-shorts.list",
          "input": {
            "limit": 5,
            "url": "https://www.youtube.com/@MrBeast"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel-shorts.list"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelShortsListInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 120000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubeChannelGetExecuteRequest": {
        "additionalProperties": false,
        "description": "Fetch metadata for a YouTube channel.",
        "example": {
          "capability": "youtube.channel.get",
          "input": {
            "url": "@NASA"
          }
        },
        "properties": {
          "capability": {
            "enum": [
              "youtube.channel.get"
            ],
            "type": "string"
          },
          "input": {
            "$ref": "#/components/schemas/YoutubeChannelGetInput"
          },
          "max_credits": {
            "description": "Optional credit ceiling. The job is refused with `credit_limit_exceeded` before acceptance when its published price is higher. Takes precedence over the `X-Max-Credits` header.",
            "minimum": 1,
            "type": "integer"
          },
          "network": {
            "$ref": "#/components/schemas/ExecuteNetwork"
          },
          "timeout_ms": {
            "description": "Optional request timeout in milliseconds. Values above the capability timeout are rejected.",
            "maximum": 60000,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "capability",
          "input"
        ],
        "type": "object"
      },
      "YoutubePlaylistGetInput": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 100,
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "max_pages": {
            "default": 5,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "url": {
            "description": "YouTube playlist URL or playlist ID",
            "maxLength": 2048,
            "pattern": "\\S+",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "bearerFormat": "API Key",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "Get public YouTube videos, channels, Shorts, live streams, comments, playlists and search results as clean JSON. Send a link, a handle or a search. No Google account and no API quota.\nThis spec includes only the live `YouTube` capabilities exposed by Upscrape.\nExecution uses the generic `POST /execute` endpoint and job polling uses `GET /jobs/{id}`.\nSupported capabilities: `youtube.channel-community.list`, `youtube.channel-live.list`, `youtube.channel-playlists.list`, `youtube.channel-shorts.list`, `youtube.channel-videos.list`, `youtube.channel.get`, `youtube.comments.list`, `youtube.feed.trending`, `youtube.hashtag.list`, `youtube.playlist.get`, `youtube.post.get`, `youtube.search.query`, `youtube.search.typeahead`, `youtube.video.get`\n## Data limits\n\n- Transcripts are on hold and unavailable.\n- Comment and list dates retain YouTube’s displayed text, such as “1 year ago”. These relative dates are not exact timestamps; unavailable dates are omitted.\n- A Short’s duration may be unavailable. Missing durations are returned as null, never as zero.\n- Rounded counts such as “54M” are estimates. Their numeric values are marked with an approximate flag.\n\n## Rate limiting\n\nRequests are rate-limited per API key at **1200 requests per minute** on a rolling window. Every response includes `x-ratelimit-limit`, `x-ratelimit-remaining`, and `x-ratelimit-reset` (Unix ms) headers so clients can self-pace. When the limit is exceeded the API returns `429` with a `rate_limited` error body and a `retry-after` header in seconds plus a `retry_after_ms` field on the body for finer-grained backoff.",
    "title": "YouTube API",
    "version": "1.0.0"
  },
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "openapi": "3.1.0",
  "paths": {
    "/execute": {
      "post": {
        "description": "All executions are asynchronous. Submit a capability-specific payload to `POST /execute`, then poll the returned `job_id`.",
        "operationId": "youtube_execute",
        "parameters": [
          {
            "description": "Optional idempotency key. Reusing the same key with the same request replays the original job.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "maxLength": 255,
              "type": "string"
            }
          },
          {
            "description": "Optional credit ceiling for this job, as a positive integer. The request is refused with `422 credit_limit_exceeded` before acceptance when the published price for the submitted input is higher. The body field `max_credits` takes precedence when both are sent. It never changes the price.",
            "in": "header",
            "name": "X-Max-Credits",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Request synchronous completion. Use `wait=N` to hold the connection up to N seconds (max 30). If the job completes within the window, the response is `200` with full results (same shape as `GET /jobs/{id}`). If not, the response is the normal `202` with a `job_id` for polling. Omit this header for default asynchronous behavior.",
            "examples": {
              "wait30": {
                "summary": "Wait up to 30 seconds",
                "value": "wait=30"
              },
              "wait5": {
                "summary": "Wait up to 5 seconds",
                "value": "wait=5"
              }
            },
            "in": "header",
            "name": "Prefer",
            "required": false,
            "schema": {
              "example": "wait=30",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "capability": "youtube.channel-community.list",
                "input": {
                  "limit": 3,
                  "url": "https://www.youtube.com/@MrBeast"
                }
              },
              "schema": {
                "discriminator": {
                  "mapping": {
                    "youtube.channel-community.list": "#/components/schemas/YoutubeChannelCommunityListExecuteRequest",
                    "youtube.channel-live.list": "#/components/schemas/YoutubeChannelLiveListExecuteRequest",
                    "youtube.channel-playlists.list": "#/components/schemas/YoutubeChannelPlaylistsListExecuteRequest",
                    "youtube.channel-shorts.list": "#/components/schemas/YoutubeChannelShortsListExecuteRequest",
                    "youtube.channel-videos.list": "#/components/schemas/YoutubeChannelVideosListExecuteRequest",
                    "youtube.channel.get": "#/components/schemas/YoutubeChannelGetExecuteRequest",
                    "youtube.comments.list": "#/components/schemas/YoutubeCommentsListExecuteRequest",
                    "youtube.feed.trending": "#/components/schemas/YoutubeFeedTrendingExecuteRequest",
                    "youtube.hashtag.list": "#/components/schemas/YoutubeHashtagListExecuteRequest",
                    "youtube.playlist.get": "#/components/schemas/YoutubePlaylistGetExecuteRequest",
                    "youtube.post.get": "#/components/schemas/YoutubePostGetExecuteRequest",
                    "youtube.search.query": "#/components/schemas/YoutubeSearchQueryExecuteRequest",
                    "youtube.search.typeahead": "#/components/schemas/YoutubeSearchTypeaheadExecuteRequest",
                    "youtube.video.get": "#/components/schemas/YoutubeVideoGetExecuteRequest"
                  },
                  "propertyName": "capability"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/YoutubeChannelCommunityListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeChannelLiveListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeChannelPlaylistsListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeChannelShortsListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeChannelVideosListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeChannelGetExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeCommentsListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeFeedTrendingExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeHashtagListExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubePlaylistGetExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubePostGetExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeSearchQueryExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeSearchTypeaheadExecuteRequest"
                  },
                  {
                    "$ref": "#/components/schemas/YoutubeVideoGetExecuteRequest"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/YoutubeChannelCommunityListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelLiveListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelPlaylistsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelShortsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelVideosListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeCommentsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeFeedTrendingCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeHashtagListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePlaylistGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePostGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchQueryCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchTypeaheadCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeVideoGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/ExecuteReplayResponse"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Job completed within the `Prefer: wait` window, or existing job replayed via idempotency key.",
            "headers": {
              "Preference-Applied": {
                "description": "Present when the server honored the `Prefer: wait` preference.",
                "schema": {
                  "example": "wait=30",
                  "type": "string"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "youtube.channel-community.list",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "youtube",
                  "poll_after_ms": 2000,
                  "poll_url": "https://data.upscrape.com/jobs/00000000-0000-0000-0000-000000000001",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "queued"
                },
                "schema": {
                  "$ref": "#/components/schemas/ExecuteAcceptedResponse"
                }
              }
            },
            "description": "Job accepted and queued, or attached to an identical active keyless request.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotaError"
                }
              }
            },
            "description": "The authenticated account cannot execute the request."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobFailedResponse"
                }
              }
            },
            "description": "The requested public data is unavailable or access is denied. Confirmed account privacy and sign-in requirements include a safe reason."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobFailedResponse"
                }
              }
            },
            "description": "The upstream source confirms that the requested resource was not found. The response retains the job identity."
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdempotencyConflictError"
                }
              }
            },
            "description": "Idempotency conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ValidationErrors"
                    },
                    {
                      "$ref": "#/components/schemas/CredentialsRequiredError"
                    },
                    {
                      "$ref": "#/components/schemas/CreditLimitError"
                    }
                  ]
                }
              }
            },
            "description": "The request body failed validation."
          },
          "424": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobFailedResponse"
                }
              }
            },
            "description": "A durable job reached a terminal upstream dependency failure within the Prefer wait window. The body retains job_id and request_id for diagnosis."
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  },
                  "request_id": "safe-http-request-id"
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalError"
                }
              }
            },
            "description": "Unexpected server error"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnavailableError"
                }
              }
            },
            "description": "The capability cannot be served right now. Do not retry immediately; try again later."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Queue a YouTube capability run",
        "tags": [
          "Execution"
        ]
      }
    },
    "/jobs/{id}": {
      "get": {
        "description": "Get job status and result",
        "operationId": "youtube_getJob",
        "parameters": [
          {
            "description": "The job ID returned by `POST /execute`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/YoutubeChannelCommunityListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelLiveListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelPlaylistsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelShortsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelVideosListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeCommentsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeFeedTrendingCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeHashtagListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePlaylistGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePostGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchQueryCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchTypeaheadCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeVideoGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Completed or terminal job state.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "youtube.channel-community.list",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "youtube",
                  "poll_after_ms": 2000,
                  "poll_url": "https://data.upscrape.com/jobs/00000000-0000-0000-0000-000000000001",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "running"
                },
                "schema": {
                  "$ref": "#/components/schemas/JobPendingResponse"
                }
              }
            },
            "description": "Job is still queued, running, or retrying.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundError"
                }
              }
            },
            "description": "Job not found"
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  },
                  "request_id": "safe-http-request-id"
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Poll a YouTube job",
        "tags": [
          "Jobs"
        ]
      }
    },
    "/jobs/{id}/result": {
      "get": {
        "description": "Backward-compatible alias for `/jobs/{id}`.",
        "operationId": "youtube_getJobResult",
        "parameters": [
          {
            "description": "The job ID returned by `POST /execute`.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/YoutubeChannelCommunityListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelLiveListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelPlaylistsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelShortsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelVideosListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeChannelGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeCommentsListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeFeedTrendingCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeHashtagListCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePlaylistGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubePostGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchQueryCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeSearchTypeaheadCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/YoutubeVideoGetCompletedJob"
                    },
                    {
                      "$ref": "#/components/schemas/JobFailedResponse"
                    }
                  ]
                }
              }
            },
            "description": "Completed or terminal job state.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "example": {
                  "capability": "youtube.channel-community.list",
                  "job_id": "00000000-0000-0000-0000-000000000001",
                  "platform": "youtube",
                  "poll_after_ms": 2000,
                  "poll_url": "https://data.upscrape.com/jobs/00000000-0000-0000-0000-000000000001",
                  "request_id": "00000000-0000-0000-0000-000000000001",
                  "state": "running"
                },
                "schema": {
                  "$ref": "#/components/schemas/JobPendingResponse"
                }
              }
            },
            "description": "Job is still queued, running, or retrying.",
            "headers": {
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundError"
                }
              }
            },
            "description": "Job not found"
          },
          "429": {
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "rate_limited",
                    "message": "rate limit exceeded",
                    "retry_after_ms": 4200
                  },
                  "request_id": "safe-http-request-id"
                },
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            },
            "description": "The per-API-key rate limit has been exceeded. Clients should back off until `retry_after_ms` has elapsed (or `retry-after` seconds).",
            "headers": {
              "retry-after": {
                "description": "Seconds until the client may retry (ceiling of `retry_after_ms`).",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-limit": {
                "description": "Per-API-key request ceiling over the rolling window.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-remaining": {
                "description": "Requests remaining in the current window before throttling.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "x-ratelimit-reset": {
                "description": "Unix epoch milliseconds at which the current window resets.",
                "schema": {
                  "minimum": 0,
                  "type": "integer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "summary": "Poll a YouTube job",
        "tags": [
          "Jobs"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://data.upscrape.com"
    }
  ],
  "tags": [
    {
      "description": "Submit asynchronous capability runs.",
      "name": "Execution"
    },
    {
      "description": "Poll queued jobs for status and results.",
      "name": "Jobs"
    }
  ]
}