Skip to main content
Every youtube.api.* operation is listed below with parameter shapes and return types from the plugin Zod schemas.
New to Corsair? See API access, authentication, and error handling.

Captions

list

captions.list List caption tracks for a video Risk: read
await corsair.youtube.api.captions.list({});
Input
NameTypeRequiredDescription
video_idstringYesThe YouTube video ID to list captions for
partstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
eventIdstringNo
visitorIdstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    videoId?: string,
    lastUpdated?: string,
    trackKind?: string,
    language?: string,
    name?: string,
    audioTrackType?: string,
    isCC?: boolean,
    isLarge?: boolean,
    isEasyReader?: boolean,
    isDraft?: boolean,
    isAutoSynced?: boolean,
    status?: string
  }
}[]

load

captions.load Download a caption track Risk: read
await corsair.youtube.api.captions.load({});
Input
NameTypeRequiredDescription
idstringYesThe caption track ID to download
tfmtstringNo
Output
NameTypeRequiredDescription
captions_textstringNo

update

captions.update Update a caption track Risk: write
await corsair.youtube.api.captions.update({});
Input
NameTypeRequiredDescription
idstringYesThe caption track ID to update
snippetobjectYesUpdated caption snippet
{
  isDraft?: boolean
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
{
  videoId?: string,
  lastUpdated?: string,
  trackKind?: string,
  language?: string,
  name?: string,
  audioTrackType?: string,
  isCC?: boolean,
  isLarge?: boolean,
  isEasyReader?: boolean,
  isDraft?: boolean,
  isAutoSynced?: boolean,
  status?: string
}

Channels

getActivities

channels.getActivities Get a channel’s activity feed Risk: read
await corsair.youtube.api.channels.getActivities({});
Input
NameTypeRequiredDescription
channelIdstringYesThe channel ID to get activities for
partstringNo
pageTokenstringNo
maxResultsnumberNo
publishedAfterstringNo
publishedBeforestringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    channelId?: string,
    title?: string,
    description?: string,
    publishedAt?: string,
    type?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  },
  contentDetails?: {
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

getIdByHandle

channels.getIdByHandle Get channel ID by handle Risk: read
await corsair.youtube.api.channels.getIdByHandle({});
Input
NameTypeRequiredDescription
channel_handlestringYesYouTube channel handle (e.g. @channelname)
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
channelsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    customUrl?: string,
    publishedAt?: string,
    country?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  },
  statistics?: {
    viewCount?: string,
    subscriberCount?: string,
    videoCount?: string,
    hiddenSubscriberCount?: boolean
  },
  contentDetails?: {
    relatedPlaylists?: {
      uploads?: string,
      likes?: string
    }
  },
  brandingSettings?: {
    channel?: {
      title?: string,
      description?: string,
      keywords?: string
    }
  }
}[]
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    customUrl?: string,
    publishedAt?: string,
    country?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  },
  statistics?: {
    viewCount?: string,
    subscriberCount?: string,
    videoCount?: string,
    hiddenSubscriberCount?: boolean
  },
  contentDetails?: {
    relatedPlaylists?: {
      uploads?: string,
      likes?: string
    }
  },
  brandingSettings?: {
    channel?: {
      title?: string,
      description?: string,
      keywords?: string
    }
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

getStatistics

channels.getStatistics Get channel statistics and details Risk: read
await corsair.youtube.api.channels.getStatistics({});
Input
NameTypeRequiredDescription
idstringNo
minebooleanNo
partstringNo
forHandlestringNo
forUsernamestringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
channelsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    customUrl?: string,
    publishedAt?: string,
    country?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  },
  statistics?: {
    viewCount?: string,
    subscriberCount?: string,
    videoCount?: string,
    hiddenSubscriberCount?: boolean
  },
  contentDetails?: {
    relatedPlaylists?: {
      uploads?: string,
      likes?: string
    }
  },
  brandingSettings?: {
    channel?: {
      title?: string,
      description?: string,
      keywords?: string
    }
  }
}[]
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    customUrl?: string,
    publishedAt?: string,
    country?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  },
  statistics?: {
    viewCount?: string,
    subscriberCount?: string,
    videoCount?: string,
    hiddenSubscriberCount?: boolean
  },
  contentDetails?: {
    relatedPlaylists?: {
      uploads?: string,
      likes?: string
    }
  },
  brandingSettings?: {
    channel?: {
      title?: string,
      description?: string,
      keywords?: string
    }
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

update

channels.update Update channel branding settings Risk: write
await corsair.youtube.api.channels.update({});
Input
NameTypeRequiredDescription
idstringYesThe channel ID to update
partstringNo
brandingSettingsobjectNo
localizationsobjectNo
onBehalfOfContentOwnerstringNo
{
  channel?: {
    title?: string,
    description?: string,
    keywords?: string,
    country?: string
  }
}
{
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statisticsobjectNo
brandingSettingsobjectNo
localizationsobjectNo
{
  title?: string,
  description?: string,
  customUrl?: string,
  publishedAt?: string,
  country?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  }
}
{
  viewCount?: string,
  subscriberCount?: string,
  videoCount?: string
}
{
}
{
}

Channel Sections

create

channelSections.create Create a new channel section Risk: write
await corsair.youtube.api.channelSections.create({});
Input
NameTypeRequiredDescription
snippetobjectYesSection snippet
contentDetailsobjectNo
{
  type: allPlaylists | completedEvents | liveEvents | multipleChannels | multiplePlaylists | popularUploads | recentUploads | singlePlaylist | subscriptions | upcomingEvents,
  title?: string,
  position?: number
}
{
  channels?: string[],
  playlists?: string[]
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
contentDetailsobjectNo
{
  type?: string,
  title?: string,
  position?: number,
  channelId?: string
}
{
  playlists?: string[],
  channels?: string[]
}

delete

channelSections.delete Delete a channel section Risk: destructive
await corsair.youtube.api.channelSections.delete({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the channel section to delete
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
deletedbooleanNo
channel_section_idstringNo
http_statusnumberNo
errorstringNo

list

channelSections.list List channel sections Risk: read
await corsair.youtube.api.channelSections.list({});
Input
NameTypeRequiredDescription
partstringYesComma-separated list of parts (snippet,contentDetails)
hlstringNo
idstringNo
minebooleanNo
channelIdstringNo
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
eventIdstringNo
visitorIdstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    type?: string,
    title?: string,
    position?: number,
    channelId?: string
  },
  contentDetails?: {
    playlists?: string[],
    channels?: string[]
  }
}[]

update

channelSections.update Update a channel section Risk: write
await corsair.youtube.api.channelSections.update({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the channel section to update
snippetobjectNo
contentDetailsobjectNo
{
  type?: string,
  title?: string,
  position?: number
}
{
  playlists?: string[],
  channels?: string[]
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
contentDetailsobjectNo
{
  type?: string,
  title?: string,
  position?: number,
  channelId?: string
}
{
  playlists?: string[],
  channels?: string[]
}

Comments

createReply

comments.createReply Post a reply to a comment Risk: write
await corsair.youtube.api.comments.createReply({});
Input
NameTypeRequiredDescription
parentIdstringYesThe ID of the parent comment thread to reply to
textOriginalstringYesThe reply text
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
{
  videoId?: string,
  textDisplay?: string,
  textOriginal?: string,
  authorDisplayName?: string,
  authorProfileImageUrl?: string,
  authorChannelUrl?: string,
  authorChannelId?: {
    value?: string
  },
  likeCount?: number,
  publishedAt?: string,
  updatedAt?: string,
  parentId?: string,
  canRate?: boolean,
  viewerRating?: string
}

delete

comments.delete Delete a comment Risk: destructive
await corsair.youtube.api.comments.delete({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the comment to delete
Output
NameTypeRequiredDescription
deletedbooleanNo
comment_idstringNo
http_statusnumberNo
errorstringNo

list

comments.list List comments Risk: read
await corsair.youtube.api.comments.list({});
Input
NameTypeRequiredDescription
idstringNo
partstringNo
parentIdstringNo
pageTokenstringNo
maxResultsnumberNo
textFormathtml | plainTextNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    videoId?: string,
    textDisplay?: string,
    textOriginal?: string,
    authorDisplayName?: string,
    authorProfileImageUrl?: string,
    authorChannelUrl?: string,
    authorChannelId?: {
      value?: string
    },
    likeCount?: number,
    publishedAt?: string,
    updatedAt?: string,
    parentId?: string,
    canRate?: boolean,
    viewerRating?: string
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

markSpam

comments.markSpam Mark a comment as spam Risk: write
await corsair.youtube.api.comments.markSpam({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the comment to mark as spam
Output
NameTypeRequiredDescription
successbooleanNo
comment_idsstring[]No
http_statusnumberNo

post

comments.post Post a comment on a video Risk: write
await corsair.youtube.api.comments.post({});
Input
NameTypeRequiredDescription
videoIdstringYesThe ID of the video to comment on
channelIdstringYesThe channel ID that owns the video
textOriginalstringYesThe comment text
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
{
  channelId?: string,
  videoId?: string,
  totalReplyCount?: number,
  isPublic?: boolean,
  topLevelComment?: {
    id?: string,
    etag?: string,
    kind?: string,
    snippet?: {
      videoId?: string,
      textDisplay?: string,
      textOriginal?: string,
      authorDisplayName?: string,
      authorProfileImageUrl?: string,
      authorChannelUrl?: string,
      authorChannelId?: {
        value?: string
      },
      likeCount?: number,
      publishedAt?: string,
      updatedAt?: string,
      parentId?: string,
      canRate?: boolean,
      viewerRating?: string
    }
  }
}

setModerationStatus

comments.setModerationStatus Set moderation status for a comment Risk: write
await corsair.youtube.api.comments.setModerationStatus({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the comment to moderate
moderationStatusheldForReview | published | rejectedYesThe moderation status to set
banAuthorbooleanNo
Output
NameTypeRequiredDescription
successbooleanNo
messagestringNo

threadsList

comments.threadsList List comment threads (deprecated) Risk: read
await corsair.youtube.api.comments.threadsList({});
Input
NameTypeRequiredDescription
idstringNo
partstringNo
ordertime | relevanceNo
videoIdstringNo
pageTokenstringNo
maxResultsnumberNo
textFormathtml | plainTextNo
searchTermsstringNo
allThreadsRelatedToChannelIdstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    channelId?: string,
    videoId?: string,
    totalReplyCount?: number,
    isPublic?: boolean,
    topLevelComment?: {
      id?: string,
      etag?: string,
      kind?: string,
      snippet?: {
        videoId?: string,
        textDisplay?: string,
        textOriginal?: string,
        authorDisplayName?: string,
        authorProfileImageUrl?: string,
        authorChannelUrl?: string,
        authorChannelId?: {
          value?: string
        },
        likeCount?: number,
        publishedAt?: string,
        updatedAt?: string,
        parentId?: string,
        canRate?: boolean,
        viewerRating?: string
      }
    }
  },
  replies?: {
    comments?: {
      id?: string,
      etag?: string,
      kind?: string,
      snippet?: {
        videoId?: string,
        textDisplay?: string,
        textOriginal?: string,
        authorDisplayName?: string,
        authorProfileImageUrl?: string,
        authorChannelUrl?: string,
        authorChannelId?: {
          value?: string
        },
        likeCount?: number,
        publishedAt?: string,
        updatedAt?: string,
        parentId?: string,
        canRate?: boolean,
        viewerRating?: string
      }
    }[]
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

threadsList2

comments.threadsList2 List comment threads Risk: read
await corsair.youtube.api.comments.threadsList2({});
Input
NameTypeRequiredDescription
idstringNo
partstringYesComma-separated list of parts
ordertime | relevanceNo
videoIdstringNo
channelIdstringNo
pageTokenstringNo
maxResultsnumberNo
textFormathtml | plainTextNo
searchTermsstringNo
moderationStatusheldForReview | likelySpam | published | rejectedNo
allThreadsRelatedToChannelIdstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    channelId?: string,
    videoId?: string,
    totalReplyCount?: number,
    isPublic?: boolean,
    topLevelComment?: {
      id?: string,
      etag?: string,
      kind?: string,
      snippet?: {
        videoId?: string,
        textDisplay?: string,
        textOriginal?: string,
        authorDisplayName?: string,
        authorProfileImageUrl?: string,
        authorChannelUrl?: string,
        authorChannelId?: {
          value?: string
        },
        likeCount?: number,
        publishedAt?: string,
        updatedAt?: string,
        parentId?: string,
        canRate?: boolean,
        viewerRating?: string
      }
    }
  },
  replies?: {
    comments?: {
      id?: string,
      etag?: string,
      kind?: string,
      snippet?: {
        videoId?: string,
        textDisplay?: string,
        textOriginal?: string,
        authorDisplayName?: string,
        authorProfileImageUrl?: string,
        authorChannelUrl?: string,
        authorChannelId?: {
          value?: string
        },
        likeCount?: number,
        publishedAt?: string,
        updatedAt?: string,
        parentId?: string,
        canRate?: boolean,
        viewerRating?: string
      }
    }[]
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

update

comments.update Update a comment Risk: write
await corsair.youtube.api.comments.update({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the comment to update
textOriginalstringYesThe updated comment text
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
{
  videoId?: string,
  textDisplay?: string,
  textOriginal?: string,
  authorDisplayName?: string,
  authorProfileImageUrl?: string,
  authorChannelUrl?: string,
  authorChannelId?: {
    value?: string
  },
  likeCount?: number,
  publishedAt?: string,
  updatedAt?: string,
  parentId?: string,
  canRate?: boolean,
  viewerRating?: string
}

I18n

listLanguages

i18n.listLanguages List supported i18n languages Risk: read
await corsair.youtube.api.i18n.listLanguages({});
Input
NameTypeRequiredDescription
hlstringNo
partstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    hl?: string,
    name?: string
  }
}[]

listRegions

i18n.listRegions List supported i18n regions Risk: read
await corsair.youtube.api.i18n.listRegions({});
Input
NameTypeRequiredDescription
hlstringNo
partstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    gl?: string,
    name?: string
  }
}[]

Live Chat

listMessages

liveChat.listMessages List messages in a live chat Risk: read
await corsair.youtube.api.liveChat.listMessages({});
Input
NameTypeRequiredDescription
liveChatIdstringYesThe ID of the live chat to list messages for
hlstringNo
partstringNo
pageTokenstringNo
maxResultsnumberNo
profileImageSizenumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
offlineAtstringNo
nextPageTokenstringNo
activePollItemanyNo
pollingIntervalMillisnumberNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    type?: string,
    liveChatId?: string,
    authorChannelId?: string,
    publishedAt?: string,
    hasDisplayContent?: boolean,
    displayMessage?: string,
    textMessageDetails?: {
      messageText?: string
    }
  },
  authorDetails?: {
    channelId?: string,
    channelUrl?: string,
    displayName?: string,
    profileImageUrl?: string,
    isVerified?: boolean,
    isChatOwner?: boolean,
    isChatModerator?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

listSuperChatEvents

liveChat.listSuperChatEvents List Super Chat events Risk: read
await corsair.youtube.api.liveChat.listSuperChatEvents({});
Input
NameTypeRequiredDescription
hlstringNo
partstringNo
pageTokenstringNo
maxResultsnumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
{
  id?: string,
  snippet?: {
    displayString?: string,
    amountMicros?: string,
    currency?: string,
    channelId?: string,
    createdAt?: string
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

Playlist Images

list

playlistImages.list List playlist images Risk: read
await corsair.youtube.api.playlistImages.list({});
Input
NameTypeRequiredDescription
idstringNo
partstringNo
parentstringNo
pageTokenstringNo
maxResultsnumberNo
onBehalfOfContentOwnerstringNo
onBehalfOfContentOwnerChannelstringNo
Output
NameTypeRequiredDescription
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  kind?: string,
  snippet?: {
    type?: string,
    width?: number,
    height?: number,
    url?: string
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

Playlist Items

add

playlistItems.add Add a video to a playlist Risk: write
await corsair.youtube.api.playlistItems.add({});
Input
NameTypeRequiredDescription
videoIdstringYesThe YouTube video ID to add to the playlist
playlistIdstringYesThe ID of the playlist to add the video to
positionnumberNo
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statusobjectNo
contentDetailsobjectNo
{
  title?: string,
  description?: string,
  position?: number,
  channelId?: string,
  channelTitle?: string,
  playlistId?: string,
  publishedAt?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  resourceId?: {
    kind?: string,
    videoId?: string,
    channelId?: string,
    playlistId?: string
  },
  videoOwnerChannelId?: string,
  videoOwnerChannelTitle?: string
}
{
  privacyStatus?: string
}
{
  videoId?: string,
  videoPublishedAt?: string,
  note?: string,
  startAt?: string,
  endAt?: string
}

delete

playlistItems.delete Remove an item from a playlist Risk: destructive
await corsair.youtube.api.playlistItems.delete({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the playlist item to delete
Output
NameTypeRequiredDescription
deletedbooleanNo
playlist_item_idstringNo
http_statusnumberNo
errorstringNo

list

playlistItems.list List items in a playlist Risk: read
await corsair.youtube.api.playlistItems.list({});
Input
NameTypeRequiredDescription
playlistIdstringYesThe ID of the playlist to list items for
partstringNo
fieldsstringNo
videoIdstringNo
pageTokenstringNo
maxResultsnumberNo
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
eventIdstringNo
visitorIdstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    position?: number,
    channelId?: string,
    channelTitle?: string,
    playlistId?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    resourceId?: {
      kind?: string,
      videoId?: string,
      channelId?: string,
      playlistId?: string
    },
    videoOwnerChannelId?: string,
    videoOwnerChannelTitle?: string
  },
  status?: {
    privacyStatus?: string
  },
  contentDetails?: {
    videoId?: string,
    videoPublishedAt?: string,
    note?: string,
    startAt?: string,
    endAt?: string
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

update

playlistItems.update Update a playlist item Risk: write
await corsair.youtube.api.playlistItems.update({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the playlist item to update
snippetobjectYesUpdated snippet
partstringNo
contentDetailsobjectNo
onBehalfOfContentOwnerstringNo
{
  playlistId: string,
  resourceId?: {
    kind?: string,
    videoId?: string,
    channelId?: string,
    playlistId?: string
  },
  position?: number
}
{
  note?: string,
  startAt?: string,
  endAt?: string
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statusobjectNo
contentDetailsobjectNo
{
  title?: string,
  description?: string,
  position?: number,
  channelId?: string,
  channelTitle?: string,
  playlistId?: string,
  publishedAt?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  resourceId?: {
    kind?: string,
    videoId?: string,
    channelId?: string,
    playlistId?: string
  },
  videoOwnerChannelId?: string,
  videoOwnerChannelTitle?: string
}
{
  privacyStatus?: string
}
{
  videoId?: string,
  videoPublishedAt?: string,
  note?: string,
  startAt?: string,
  endAt?: string
}

Playlists

create

playlists.create Create a new playlist Risk: write
await corsair.youtube.api.playlists.create({});
Input
NameTypeRequiredDescription
titlestringYesPlaylist title (max 150 characters)
descriptionstringNo
privacyStatuspublic | private | unlistedNo
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statusobjectNo
contentDetailsobjectNo
{
  title?: string,
  description?: string,
  channelId?: string,
  channelTitle?: string,
  publishedAt?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  localized?: {
    title?: string,
    description?: string
  }
}
{
  privacyStatus?: string
}
{
  itemCount?: number
}

delete

playlists.delete Delete a playlist Risk: destructive
await corsair.youtube.api.playlists.delete({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the playlist to delete
confirmDeletebooleanYesConfirm that you want to delete the playlist
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
deletedbooleanNo
playlist_idstringNo
http_statusnumberNo
errorstringNo

list

playlists.list List the authenticated user’s playlists Risk: read
await corsair.youtube.api.playlists.list({});
Input
NameTypeRequiredDescription
partstringNo
pageTokenstringNo
maxResultsnumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    localized?: {
      title?: string,
      description?: string
    }
  },
  status?: {
    privacyStatus?: string
  },
  contentDetails?: {
    itemCount?: number
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

update

playlists.update Update an existing playlist Risk: write
await corsair.youtube.api.playlists.update({});
Input
NameTypeRequiredDescription
idstringYesThe ID of the playlist to update
snippetobjectYesUpdated snippet fields
partstringNo
statusobjectNo
onBehalfOfContentOwnerstringNo
{
  title?: string,
  description?: string
}
{
  privacyStatus?: string
}
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statusobjectNo
contentDetailsobjectNo
{
  title?: string,
  description?: string,
  channelId?: string,
  channelTitle?: string,
  publishedAt?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  localized?: {
    title?: string,
    description?: string
  }
}
{
  privacyStatus?: string
}
{
  itemCount?: number
}

youtube

search.youtube Search YouTube for videos, channels, and playlists Risk: read
await corsair.youtube.api.search.youtube({});
Input
NameTypeRequiredDescription
qstringYesSearch query
partstringNo
typestringNo
pageTokenstringNo
maxResultsnumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
regionCodestringNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: {
    kind?: string,
    videoId?: string,
    channelId?: string,
    playlistId?: string
  },
  etag?: string,
  kind?: string,
  snippet?: {
    publishedAt?: string,
    channelId?: string,
    title?: string,
    description?: string,
    channelTitle?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    liveBroadcastContent?: string
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

Subscriptions

list

subscriptions.list List the authenticated user’s subscriptions Risk: read
await corsair.youtube.api.subscriptions.list({});
Input
NameTypeRequiredDescription
partstringNo
pageTokenstringNo
maxResultsnumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    publishedAt?: string,
    title?: string,
    description?: string,
    channelId?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    resourceId?: {
      kind?: string,
      videoId?: string,
      channelId?: string,
      playlistId?: string
    },
    channelTitle?: string
  },
  contentDetails?: {
    totalItemCount?: number,
    newItemCount?: number,
    activityType?: string
  },
  subscriberSnippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    }
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

subscribe

subscriptions.subscribe Subscribe to a YouTube channel Risk: write
await corsair.youtube.api.subscriptions.subscribe({});
Input
NameTypeRequiredDescription
channelIdstringYesThe ID of the channel to subscribe to
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
contentDetailsobjectNo
subscriberSnippetobjectNo
already_subscribedbooleanNo
composio_execution_messagestringNo
{
  publishedAt?: string,
  title?: string,
  description?: string,
  channelId?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  resourceId?: {
    kind?: string,
    videoId?: string,
    channelId?: string,
    playlistId?: string
  },
  channelTitle?: string
}
{
  totalItemCount?: number,
  newItemCount?: number
}
{
  title?: string,
  channelId?: string
}

unsubscribe

subscriptions.unsubscribe Unsubscribe from a YouTube channel Risk: destructive
await corsair.youtube.api.subscriptions.unsubscribe({});
Input
NameTypeRequiredDescription
subscriptionIdstringYesThe ID of the subscription to remove
Output
NameTypeRequiredDescription
unsubscribedbooleanNo
subscription_idstringNo
http_statusnumberNo
errorstringNo

Video Actions

getRating

videoActions.getRating Get the authenticated user’s rating for a video Risk: read
await corsair.youtube.api.videoActions.getRating({});
Input
NameTypeRequiredDescription
idstringYesThe YouTube video ID to get the rating for
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
{
  videoId?: string,
  rating?: string
}[]

listAbuseReasons

videoActions.listAbuseReasons List available video abuse report reasons Risk: read
await corsair.youtube.api.videoActions.listAbuseReasons({});
Input
NameTypeRequiredDescription
hlstringNo
partstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
eventIdstringNo
visitorIdstringNo
{
  id?: string,
  label?: string,
  secondaryReasons?: {
    id?: string,
    label?: string
  }[]
}[]

rate

videoActions.rate Rate a video (like, dislike, or remove rating) Risk: write
await corsair.youtube.api.videoActions.rate({});
Input
NameTypeRequiredDescription
idstringYesThe YouTube video ID to rate
ratinglike | dislike | noneYesThe rating to apply
Output
NameTypeRequiredDescription
ratingstringNo
successbooleanNo
video_idstringNo
http_statusnumberNo

reportAbuse

videoActions.reportAbuse Report a video for abuse Risk: write
await corsair.youtube.api.videoActions.reportAbuse({});
Input
NameTypeRequiredDescription
videoIdstringYesThe YouTube video ID to report
reasonIdstringYesThe ID of the abuse reason
commentsstringNo
languagestringNo
secondaryReasonIdstringNo
Output
NameTypeRequiredDescription
successbooleanNo
messagestringNo
http_statusnumberNo

updateThumbnail

videoActions.updateThumbnail Update the thumbnail for a video Risk: write
await corsair.youtube.api.videoActions.updateThumbnail({});
Input
NameTypeRequiredDescription
videoIdstringYesThe ID of the video to update the thumbnail for
thumbnailUrlstringYesURL of the new thumbnail image
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
eventIdstringNo
visitorIdstringNo
{
  url?: string,
  width?: number,
  height?: number
}[]

Video Categories

list

videoCategories.list List video categories Risk: read
await corsair.youtube.api.videoCategories.list({});
Input
NameTypeRequiredDescription
hlstringNo
idstringNo
partstringNo
regionCodestringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    channelId?: string,
    title?: string,
    assignable?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

Videos

delete

videos.delete Delete a video Risk: destructive
await corsair.youtube.api.videos.delete({});
Input
NameTypeRequiredDescription
videoIdstringYesThe ID of the video to delete
confirmDeletebooleanYesConfirm that you want to delete the video
onBehalfOfContentOwnerstringNo
Output
NameTypeRequiredDescription
deletedbooleanNo
video_idstringNo
http_statusnumberNo
errorstringNo

get

videos.get Get details for a single video Risk: read
await corsair.youtube.api.videos.get({});
Input
NameTypeRequiredDescription
video_idstringYesThe YouTube video ID
partstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    tags?: string[],
    categoryId?: string,
    defaultLanguage?: string,
    liveBroadcastContent?: string
  },
  status?: {
    privacyStatus?: string,
    uploadStatus?: string,
    publishAt?: string,
    license?: string,
    embeddable?: boolean,
    publicStatsViewable?: boolean
  },
  statistics?: {
    viewCount?: string,
    likeCount?: string,
    dislikeCount?: string,
    favoriteCount?: string,
    commentCount?: string
  },
  contentDetails?: {
    duration?: string,
    dimension?: string,
    definition?: string,
    caption?: string,
    licensedContent?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

getBatch

videos.getBatch Get details for multiple videos in one request Risk: read
await corsair.youtube.api.videos.getBatch({});
Input
NameTypeRequiredDescription
idstring[]YesArray of YouTube video IDs to retrieve (max 50)
hlstringNo
partsstring[]No
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
found_countnumberNo
not_found_countnumberNo
requested_countnumberNo
not_found_video_idsstring[]No
requested_video_idsstring[]No
partial_failurebooleanNo
nextPageTokenstringNo
prevPageTokenstringNo
composio_execution_messagestringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    tags?: string[],
    categoryId?: string,
    defaultLanguage?: string,
    liveBroadcastContent?: string
  },
  status?: {
    privacyStatus?: string,
    uploadStatus?: string,
    publishAt?: string,
    license?: string,
    embeddable?: boolean,
    publicStatsViewable?: boolean
  },
  statistics?: {
    viewCount?: string,
    likeCount?: string,
    dislikeCount?: string,
    favoriteCount?: string,
    commentCount?: string
  },
  contentDetails?: {
    duration?: string,
    dimension?: string,
    definition?: string,
    caption?: string,
    licensedContent?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

list

videos.list List videos for a channel Risk: read
await corsair.youtube.api.videos.list({});
Input
NameTypeRequiredDescription
minebooleanNo
channelIdstringNo
partstringNo
pageTokenstringNo
maxResultsnumberNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
regionCodestringNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    tags?: string[],
    categoryId?: string,
    defaultLanguage?: string,
    liveBroadcastContent?: string
  },
  status?: {
    privacyStatus?: string,
    uploadStatus?: string,
    publishAt?: string,
    license?: string,
    embeddable?: boolean,
    publicStatsViewable?: boolean
  },
  statistics?: {
    viewCount?: string,
    likeCount?: string,
    dislikeCount?: string,
    favoriteCount?: string,
    commentCount?: string
  },
  contentDetails?: {
    duration?: string,
    dimension?: string,
    definition?: string,
    caption?: string,
    licensedContent?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

listMostPopular

videos.listMostPopular List most popular videos on YouTube Risk: read
await corsair.youtube.api.videos.listMostPopular({});
Input
NameTypeRequiredDescription
partstringNo
chartstringNo
pageTokenstringNo
maxResultsnumberNo
regionCodestringNo
videoCategoryIdstringNo
Output
NameTypeRequiredDescription
etagstringNo
kindstringNo
itemsobject[]No
pageInfoobjectNo
regionCodestringNo
nextPageTokenstringNo
prevPageTokenstringNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    tags?: string[],
    categoryId?: string,
    defaultLanguage?: string,
    liveBroadcastContent?: string
  },
  status?: {
    privacyStatus?: string,
    uploadStatus?: string,
    publishAt?: string,
    license?: string,
    embeddable?: boolean,
    publicStatsViewable?: boolean
  },
  statistics?: {
    viewCount?: string,
    likeCount?: string,
    dislikeCount?: string,
    favoriteCount?: string,
    commentCount?: string
  },
  contentDetails?: {
    duration?: string,
    dimension?: string,
    definition?: string,
    caption?: string,
    licensedContent?: boolean
  }
}[]
{
  totalResults?: number,
  resultsPerPage?: number
}

update

videos.update Update video metadata Risk: write
await corsair.youtube.api.videos.update({});
Input
NameTypeRequiredDescription
video_idstringYesThe ID of the video to update
titlestringNo
descriptionstringNo
tagsstring[]No
categoryIdstringNo
privacy_statusstringNo
composio_execution_messagestringNo
Output
NameTypeRequiredDescription
idstringNo
etagstringNo
kindstringNo
snippetobjectNo
statusobjectNo
statisticsobjectNo
{
  title?: string,
  description?: string,
  channelId?: string,
  channelTitle?: string,
  publishedAt?: string,
  thumbnails?: {
    default?: {
      url?: string,
      width?: number,
      height?: number
    },
    medium?: {
      url?: string,
      width?: number,
      height?: number
    },
    high?: {
      url?: string,
      width?: number,
      height?: number
    },
    standard?: {
      url?: string,
      width?: number,
      height?: number
    },
    maxres?: {
      url?: string,
      width?: number,
      height?: number
    }
  },
  tags?: string[],
  categoryId?: string,
  defaultLanguage?: string,
  liveBroadcastContent?: string
}
{
  privacyStatus?: string,
  uploadStatus?: string
}
{
  viewCount?: string,
  likeCount?: string
}

upload

videos.upload Upload a new video Risk: write
await corsair.youtube.api.videos.upload({});
Input
NameTypeRequiredDescription
titlestringYesVideo title
categoryIdstringYesVideo category ID
descriptionstringYesVideo description
privacyStatuspublic | private | unlistedYesPrivacy status
tagsstring[]YesVideo tags
videoFilePathobjectYesVideo file reference
{
  name?: string,
  content_type?: string,
  s3_key?: string,
  s3_url?: string,
  storage_type?: string,
  content_length?: number
}
Output
NameTypeRequiredDescription
response_dataanyNo

uploadMultipart

videos.uploadMultipart Upload a new video using multipart upload Risk: write
await corsair.youtube.api.videos.uploadMultipart({});
Input
NameTypeRequiredDescription
titlestringYesVideo title
videoFileobjectYesVideo file reference
categoryIdstringYesVideo category ID
descriptionstringYesVideo description
privacyStatuspublic | private | unlistedYesPrivacy status
tagsstring[]No
{
  name?: string,
  content_type?: string,
  s3_key?: string,
  s3_url?: string,
  storage_type?: string,
  content_length?: number
}
Output
NameTypeRequiredDescription
videoobjectNo
{
  id?: string,
  etag?: string,
  kind?: string,
  snippet?: {
    title?: string,
    description?: string,
    channelId?: string,
    channelTitle?: string,
    publishedAt?: string,
    thumbnails?: {
      default?: {
        url?: string,
        width?: number,
        height?: number
      },
      medium?: {
        url?: string,
        width?: number,
        height?: number
      },
      high?: {
        url?: string,
        width?: number,
        height?: number
      },
      standard?: {
        url?: string,
        width?: number,
        height?: number
      },
      maxres?: {
        url?: string,
        width?: number,
        height?: number
      }
    },
    tags?: string[],
    categoryId?: string,
    defaultLanguage?: string,
    liveBroadcastContent?: string
  },
  status?: {
    privacyStatus?: string,
    uploadStatus?: string,
    publishAt?: string,
    license?: string,
    embeddable?: boolean,
    publicStatsViewable?: boolean
  },
  statistics?: {
    viewCount?: string,
    likeCount?: string,
    dislikeCount?: string,
    favoriteCount?: string,
    commentCount?: string
  },
  contentDetails?: {
    duration?: string,
    dimension?: string,
    definition?: string,
    caption?: string,
    licensedContent?: boolean
  }
}