Social — entry 036 of 39

Twitch

Verified Jul 2026

Twitch's Helix API covers streams, channels, clips, and chat/EventSub subscriptions for building bots, overlays, and stream-management tools, authenticated with either an app-access token or a viewer's OAuth user-access token from a registered Twitch Developer application. Most catalog-style reads work at the app-token level, while actions on a specific channel need that broadcaster's OAuth consent.

socialstreaminggamingoauthchat
AuthenticationOAuthRequires an OAuth flow; expect app registration.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score77out of 100
Authentication8/25OAuth flow required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 77 on greatapis.com
<a href="https://greatapis.com/api/twitch/"><img src="https://greatapis.com/badge/twitch.svg" alt="Scored 77 on greatapis.com"></a>

Auth quickstart

  1. Register an app / run the OAuth flow to obtain a bearer token.
  2. Send it as an Authorization headerAuthorization: Bearer <token>
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://api.twitch.tv/helix
Auth
twitch_auth
Ads3
GET/channels/adsReturns ad schedule related information.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Returns the ad schedule information for the channel.GetAdScheduleResponse
400The broadcaster ID is not valid.
500
POST/channels/ads/schedule/snoozePushes back the timestamp of the upcoming automatic mid-roll ad by 5 minutes.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200User’s next ad is successfully snoozed. Their _snooze\_count_ is decremented and _snooze\_refresh\_time_ and _next\_ad\_at_ are both updated.SnoozeNextAdResponse
400* The channel is not currently live. * The broadcaster ID is not valid. * Channel does not have an upcoming scheduled ad break.
429Channel has no snoozes left.
500
POST/channels/commercialStarts a commercial on the specified channel.
Request body

application/jsonStartCommercialBody

Responses
StatusDescriptionSchema
200Successfully started the commercial.StartCommercialResponse
400* The _broadcaster\_id_ query parameter is required. * The _length_ query parameter is required. * The ID in _broadcaster\_id_ is not valid. * To start a commercial, the broadcaster must be streaming live. * The broadcaster may not run another commercial until the cooldown period expires. The `retry_after` field in the previous start commercial response specifies the amount of time the broadcaster must wait between running commercials.
401* The ID in `broadcaster_id` must match the user ID found in the request’s OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:edit:commercial** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
404* The ID in `broadcaster_id` was not found.
429* The broadcaster may not run another commercial until the cooldown period expires. The `retry_after` field in the previous start commercial response specifies the amount of time the broadcaster must wait between running commercials.
Analytics2
GET/analytics/extensionsGets an analytics report for one or more extensions.
Parameters
NameInRequiredType
extension_idquerynostring
typequerynostring
started_atquerynostring
ended_atquerynostring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster's analytics reports.GetExtensionAnalyticsResponse
400* The start and end dates are optional but if you specify one, you must specify the other. * The end date must be equal to or later than the start date. * The cursor specified in the _after_ query parameter is not valid. * The resource supports only forward pagination (use the _after_ query parameter). * The _first_ query parameter is outside the allowed range of values.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **analytics:read:extensions** scope. * The OAuth token is not valid. * The Client-Id header is required. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
404* The extension specified in the _extension\_id_ query parameter was not found.
GET/analytics/gamesGets an analytics report for one or more games.
Parameters
NameInRequiredType
game_idquerynostring
typequerynostring
started_atquerynostring
ended_atquerynostring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s analytics reports.GetGameAnalyticsResponse
400* The start and end dates are optional but if you specify one, you must specify the other. * The end date must be equal to or later than the start date. * The cursor specified in the _after_ query parameter is not valid. * The resource supports only forward pagination (use the _after_ query parameter). * The _first_ query parameter is outside the allowed range of values.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **analytics:read:games** scope. * The OAuth token is not valid. * The Client-Id header is required. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
404* The game specified in the _game\_id_ query parameter was not found.
Bits3
GET/bits/cheermotesGets a list of Cheermotes that users can use to cheer Bits.
Parameters
NameInRequiredType
broadcaster_idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the Cheermotes.GetCheermotesResponse
401* The Authorization header is required and must specify an app access token or user access token. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/bits/leaderboardGets the Bits leaderboard for the authenticated broadcaster.
Parameters
NameInRequiredType
countquerynointeger
periodquerynostring
started_atquerynostring
user_idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s Bits leaderboard.GetBitsLeaderboardResponse
400* The time period specified in the _period_ query parameter is not valid. * The _started\_at_ query parameter is required if _period_ is not set to _all_. * The value in the _count_ query parameter is outside the range of allowed values.
401* The Authorization header is required and must specify a user access token. * The user access token must include the the **bits:read** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
403
GET/extensions/transactionsGets an extension’s list of transactions.
Parameters
NameInRequiredType
extension_idqueryyesstring
idquerynoarray
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of transactions.GetExtensionTransactionsResponse
400* The _extension\_id_ query parameter is required. * The request specified too many _id_ query parameters. * The pagination cursor is not valid.
401* The Authorization header is required and must specify an app access token. * The access token is not valid. * The ID in the _extension\_id_ query parameter must match the client ID in the access token. * The ID in the Client-Id header must match the client ID in the access token.
404* One or more of the transaction IDs specified using the _id_ query parameter were not found.
Channels5
GET/channelsGets information about one or more channels.
Parameters
NameInRequiredType
broadcaster_idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully retrieved the list of channels.GetChannelInformationResponse
400* The _broadcaster\_id_ query parameter is required. * The broadcaster ID is not valid. * The number of _broadcaster\_id_ query parameters exceeds the maximum allowed.
401* The Authorization header is required and must specify an app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
429* The application exceeded the number of calls it may make per minute. For details, see [Rate Limits](https://dev.twitch.tv/docs/api/guide#twitch-rate-limits).
500
PATCH/channelsUpdates a channel’s properties.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonModifyChannelInformationBody

Responses
StatusDescriptionSchema
204Successfully updated the channel’s properties. __Examples__ _Request:_ ```bash curl -X PATCH 'https://api.twitch.tv/helix/channels?broadcaster_id=41245072' \ -H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \ -H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \ -H 'Content-Type: application/json' \ --data-raw '{"game_id":"33214", "title":"there are helicopters in the game? REASON TO PLAY FORTNITE found", "broadcaster_language":"en", "tags":["LevelingUp"]}' ``` Set CCLs for a Channel ```bash curl -X PATCH 'https://api.twitch.tv/helix/channels?broadcaster_id=41245072' \ -H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \ -H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \ -H 'Content-Type: application/json' \ --data-raw '{ "game_id": "SomeGameID", "content_classification_labels": [ {"id": "Gambling", "is_enabled": true}, {"id": "DrugsIntoxication", "is_enabled": false} ], "is_branded_content": true }' ```
400* The _broadcaster\_id_ query parameter is required. * The request must update at least one property. * The `title` field may not contain an empty string. * The ID in `game_id` is not valid. * To update the `delay` field, the broadcaster must have partner status. * The list in the `tags` field exceeds the maximum number of tags allowed. * A tag in the `tags` field exceeds the maximum length allowed. * A tag in the `tags` field is empty. * A tag in the `tags` field contains special characters or spaces. * One or more tags in the `tags` field failed AutoMod review. * Game restricted for user's age and region
401* User requests CCL for a channel they don’t own * The ID in _broadcaster\_id_ must match the user ID found in the OAuth token. * The Authorization header is required and must specify a user access token. * The OAuth token must include the **channel:manage:broadcast** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* User requested gaming CCLs to be added to their channel * Unallowed CCLs declared for underaged authorized user in a restricted country
409User set the Branded Content flag too frequently
500
GET/channels/editorsGets the broadcaster’s list editors.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster's list of editors.GetChannelEditorsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID found in the OAuth token. * The Authorization header is required and must specify a user access token. * The OAuth token must include the **channel:read:editors** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/channels/followedGets a list of broadcasters that the specified user follows. You can also use this endpoint to see whether a user follows a specific broadcaster.
Parameters
NameInRequiredType
user_idqueryyesstring
broadcaster_idquerynostring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster's list of followers.GetFollowedChannelsResponse
400Possible reasons: * The _user\_id_ query parameter is required. * The _broadcaster\_id_ query parameter is not valid. * The _user\_id_ query parameter is required.
401Possible reasons: * The ID in the _user\_id_ query parameter must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token is missing the **user:read:follows** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
GET/channels/followersGets a list of users that follow the specified broadcaster. You can also use this endpoint to see whether a specific user follows the broadcaster.
Parameters
NameInRequiredType
user_idquerynostring
broadcaster_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s list of followers.GetChannelFollowersResponse
400Possible reasons: * The _broadcaster\_id_ query parameter is required. * The _broadcaster\_id_ query parameter is not valid.
401Possible reasons: * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token or the user must be a moderator for the specified broadcaster. * The Authorization header is required and must contain a user access token. * The user access token is missing the **moderator:read:followers** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token. * The _user\_id_ parameter was specified but either the user access token is missing the **moderator:read:followers** scope or the user is not the broadcaster or moderator for the specified channel
Channel Points6
GET/channel_points/custom_rewardsGets a list of custom rewards that the specified broadcaster created.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idquerynoarray
only_manageable_rewardsquerynoboolean
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s list of custom rewards.GetCustomRewardResponse
400* The _broadcaster\_id_ query parameter is required. * The request exceeds the maximum number of _id_ query parameters that you may specify.
401* The Authorization header must specify a user access token. * The user access token must include the **channel:read:redemptions** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The broadcaster is not a partner or affiliate.
404* All of the custom rewards specified using the _id_ query parameter were not found.
500
POST/channel_points/custom_rewardsCreates a Custom Reward in the broadcaster’s channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonCreateCustomRewardsBody

Responses
StatusDescriptionSchema
200Successfully created the custom reward.CreateCustomRewardsResponse
400* The request exceeds the maximum number of rewards allowed per channel. * The _broadcaster\_id_ query parameter is required. * The `title` field is required. * The `title` must contain a minimum of 1 character and a maximum of 45 characters. * The `title` must be unique amongst all of the broadcaster's custom rewards. * The `cost` field is required. * The `cost` field must contain a minimum of 1 point. * The `prompt` field is limited to a maximum of 200 characters. * If `is_max_per_stream_enabled` is **true**, the minimum value for `max_per_stream` is 1. * If `is_max_per_user_per_stream_enabled` is **true**, the minimum value for `max_per_user_per_stream` is 1. * If `is_global_cooldown_enabled` is **true**, the minimum value for `global_cooldown_seconds` is 1.
401* The Authorization header is required and must specify a user access token. * The user access token is missing the **channel:manage:redemptions** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The broadcaster is not a partner or affiliate.
500
PATCH/channel_points/custom_rewardsUpdates a custom reward.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idqueryyesstring
Request body

application/jsonUpdateCustomRewardBody

Responses
StatusDescriptionSchema
200Successfully updated the custom reward.UpdateCustomRewardResponse
400ul> * The _broadcaster\_id_ query parameter is required. * The _id_ query parameter is required. * The `title` must contain a minimum of 1 character and a maximum of 45 characters. * The `title` must be unique amongst all of the broadcaster's custom rewards. * The `cost` field must contain a minimum of 1 point. * The `prompt` field is limited to a maximum of 200 characters. * If `is_max_per_stream_enabled` is **true**, the minimum value for `max_per_stream` is 1. * If `is_max_per_user_per_stream_enabled` is **true**, the minimum value for `max_per_user_per_stream` is 1. * If `is_global_cooldown_enabled` is **true**, the minimum value for `global_cooldown_seconds` is 1 and the maximum is 604800.
401* The Authorization header is required and must specify a user access token. * The user access token must include the **channel:manage:redemptions** scope. * The OAuth token is not valide. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The ID in the Client-Id header must match the client ID used to create the custom reward. * The broadcaster is not a partner or affiliate.
404* The custom reward specified in the _id_ query parameter was not found.
500
DELETE/channel_points/custom_rewardsDeletes a custom reward that the broadcaster created.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully deleted the custom reward. __Examples__ _Request:_ Deletes the specified custom reward. ```bash curl -X DELETE 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28' \ -H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \ -H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2' ```
400* The _broadcaster\_id_ query parameter is required. * The _id_ query parameter is required.
401* The Authorization header is required and must specify a user access token. * The user access token must include the **channel:manage:redemptions** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The ID in the Client-Id header must match the client ID used to create the custom reward. * The broadcaster is not a partner or affiliate.
404* The custom reward specified in the _id_ query parameter was not found.
500
GET/channel_points/custom_rewards/redemptionsGets a list of redemptions for a custom reward.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
reward_idqueryyesstring
statusquerynostring
idquerynoarray
sortquerynostring
afterquerynostring
firstquerynointeger
Responses
StatusDescriptionSchema
200Successfully retrieved the list of redeemed custom rewards.GetCustomRewardRedemptionResponse
400* The _broadcaster\_id_ query parameter is required. * The _reward\_id_ query parameter is required. * The _status_ query parameter is required if you didn't specify the _id_ query parameter. * The value in the _status_ query parameter is not valid. * The value in the _sort_ query parameter is not valid.
401* The Authorization header is required and must specify a user access token. * The user access token must include the **channel:read:redemptions** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The ID in the Client-Id header must match the client ID used to create the custom reward. * The broadcaster is not a partner or affiliate.
404* All of the redemptions specified using the _id_ query parameter were not found.
500
PATCH/channel_points/custom_rewards/redemptionsUpdates a redemption’s status.
Parameters
NameInRequiredType
idqueryyesarray
broadcaster_idqueryyesstring
reward_idqueryyesstring
Request body

application/jsonUpdateRedemptionStatusBody

Responses
StatusDescriptionSchema
200Successfully updated the redemption’s status.UpdateRedemptionStatusResponse
400* The _broadcaster\_id_ query parameter is required. * The _reward\_id_ query parameter is required. * The _id_ query parameter is required. * The value in the _status_ query parameter is not valid.
401* The Authorization header is required and must specify a user access token. * The user access token must include the **channel:manage:redemptions** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The ID in the Client-Id header must match the client ID used to create the custom reward. * The broadcaster is not a partner or affiliate.
404* The custom reward specified in the _reward\_id_ query parameter was not found. * The redemptions specified using the _id_ query parameter were not found or their statuses weren't marked as UNFULFILLED.
500
Charity2
GET/charity/campaignsGets information about the broadcaster’s active charity campaign.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved information about the broadcaster’s active charity campaign.GetCharityCampaignResponse
400* The _broadcaster\_id_ query parameter is required. * The _broadcaster\_id_ query parameter is not valid.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:charity** scope. * The access token is not valid. * The client ID specified in the Client-Id header must match the client ID specified in the access token.
403* The broadcaster is not a partner or affiliate.
GET/charity/donationsGets the list of donations that users have made to the broadcaster’s active charity campaign.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of donations that users contributed to the broadcaster’s charity campaign.GetCharityCampaignDonationsResponse
400* The _broadcaster\_id_ query parameter is required. * The _broadcaster\_id_ query parameter is not valid.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:charity** scope. * The access token is not valid. * The client ID specified in the Client-Id header must match the client ID specified in the access token.
403* The broadcaster is not a partner or affiliate.
Chat15
POST/chat/announcementsSends an announcement to the broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonSendChatAnnouncementBody

Responses
StatusDescriptionSchema
204Successfully sent the announcement. __Examples__ _Request:_ Sends an announcement to the broadcaster’s chat room. ```bash curl -X POST 'https://api.twitch.tv/helix/chat/announcements?broadcaster_id=11111&moderator_id=44444' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' \ -H 'Content-Type: application/json' \ -d '{"message":"Hello chat!","color":"purple"}' ```
400* The `message` field in the request's body is required. * The `message` field may not contain an empty string. * The string in the `message` field failed review. * The specified color is not valid.
401* The Authorization header is required and must contain a user access token. * The user access token is missing the **moderator:manage:announcements** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
429The sender has exceeded the number of announcements they may send to this **broadcaster\_id** within a given window.
GET/chat/badgesGets the broadcaster’s list of custom chat badges.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s custom chat badges.GetChannelChatBadgesResponse
400* The _broadcaster\_id_ query parameter is required.
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/chat/badges/globalGets Twitch’s list of chat badges.
Responses
StatusDescriptionSchema
200Successfully retrieved the list of global chat badges.GetGlobalChatBadgesResponse
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/chat/chattersGets the list of users that are connected to the broadcaster’s chat session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s list of chatters.GetChattersResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _moderator\_id_ query parameter is required. * The ID in the _moderator\_id_ query parameter is not valid.
401* The ID in the _moderator\_id_ query parameter must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:read:chatters** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in the _moderator\_id_ query parameter is not one of the broadcaster's moderators.
GET/chat/colorGets the color used for the user’s name in chat.
Parameters
NameInRequiredType
user_idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully retrieved the chat color used by the specified users.GetUserChatColorResponse
400* The ID in the _user\_id_ query parameter is not valid.
401* The Authorization header is required and must contain an app access token or user access token. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
PUT/chat/colorUpdates the color used for the user’s name in chat.
Parameters
NameInRequiredType
user_idqueryyesstring
colorqueryyesstring
Responses
StatusDescriptionSchema
204Successfully updated the user's chat color. __Examples__ _Request:_ Uses a named color to change the color that the user uses for their name in chat. ```bash curl -X PUT 'https://api.twitch.tv/helix/chat/color?user_id=123&color=blue' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ``` Uses a color Hex code to change the color that the user uses for their name in chat. ```bash curl -X PUT 'https://api.twitch.tv/helix/chat/color?user_id=123&color=%239146FF' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The ID in the _user\_id_ query parameter is not valid. * The _color_ query parameter is required. * The named color in the _color_ query parameter is not valid. * To specify a Hex color code, the user must be a Turbo or Prime user.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:manage:chat\_color** scope. * The OAuth token is not valid. * The ID in the _user\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
GET/chat/emotesGets the broadcaster’s list of custom emotes.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved broadcaster's list of custom emotes.GetChannelEmotesResponse
400* The _broadcaster\_id_ query parameter is required.
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/chat/emotes/globalGets all global emotes.
Responses
StatusDescriptionSchema
200Successfully retrieved Twitch's list of global emotes.GetGlobalEmotesResponse
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/chat/emotes/setGets emotes for one or more specified emote sets.
Parameters
NameInRequiredType
emote_set_idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully retrieved the emotes for the specified emote sets.GetEmoteSetsResponse
400* The _emote\_set\_id_ query parameter is required. * The number of _emote\_set\_id_ query parameters exceeds the maximum allowed.
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/chat/emotes/userRetrieves emotes available to the user across all channels.
Parameters
NameInRequiredType
user_idqueryyesstring
afterquerynostring
broadcaster_idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the emotes.GetUserEmotesResponse
400* The _user\_id_ query parameter is required. * The ID in the _user\_id_ query parameter is not valid.
401* The ID in _user\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:emotes** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
POST/chat/messagesSends a message to the broadcaster’s chat room.
Request body

application/jsonSendChatMessageBody

Responses
StatusDescriptionSchema
200Successfully sent the specified broadcaster a message.SendChatMessageResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _sender\_id_ query parameter is required. * The ID in the _sender\_id_ query parameter is not valid. * The _text_ query parameter is required. * The ID in the _reply\_parent\_message\_id_ query parameter is not valid. * Cannot set \*for\_source\_only\* if User Access Token is used.
401* The ID in the user\_id query parameter must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the user:write:chat scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403The sender is not permitted to send chat messages to the broadcaster’s chat room.
422The message is too large.
GET/chat/settingsGets the broadcaster’s chat settings.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s chat settings.GetChatSettingsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The Authorization header is required and must specify a valid app access token or user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
PATCH/chat/settingsUpdates the broadcaster’s chat settings.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonUpdateChatSettingsBody

Responses
StatusDescriptionSchema
200Successfully updated the broadcaster’s chat settings.UpdateChatSettingsResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * If _slow\_mode_ is **true**, the `slow_mode_wait_time` field must be set to a valid value. * If `follower_mode` is **true**, the `follower_mode_duration` field must be set to a valid value. * If `non_moderator_chat_delay` is **true**, the `non_moderator_chat_delay_duration` field must be set to a valid value.
401* The ID in the _moderator\_id_ query parameter must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:chat\_settings** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
403* The user in the _moderator\_id_ query parameter must have moderator privileges in the broadcaster's channel.
POST/chat/shoutoutsSends a Shoutout to the specified broadcaster.
Parameters
NameInRequiredType
from_broadcaster_idqueryyesstring
to_broadcaster_idqueryyesstring
moderator_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully sent the specified broadcaster a Shoutout. __Examples__ _Request:_ ```bash curl -X POST 'https://api.twitch.tv/helix/chat/shoutouts?from_broadcaster_id=12345&to_broadcaster_id=626262&moderator_id=98765' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The _from\_broadcaster\_id_ query parameter is required. * The ID in the _from\_broadcaster\_id_ query parameter is not valid. * The _to\_broadcaster\_id_ query parameter is required. * The ID in the _to\_broadcaster\_id_ query parameter is not valid. * The broadcaster may not give themselves a Shoutout. * The broadcaster is not streaming live or does not have one or more viewers.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:shoutouts** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators. * The broadcaster may not send the specified broadcaster a Shoutout.
429* The broadcaster exceeded the number of Shoutouts they may send within a given window. See the endpoint's Rate Limits. * The broadcaster exceeded the number of Shoutouts they may send the same broadcaster within a given window. See the endpoint's Rate Limits.
GET/shared_chat/sessionNEW Retrieves the active shared chat session for a channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the shared chat session. Returns an empty array if the broadcaster\_id in the request isn’t in a shared chat session.GetSharedChatSessionResponse
400The ID in the `broadcaster_id` query parameter is not valid.
401* The OAuth token is not valid. * The Authorization header is required and must contain a user access token.
500Internal Server Error.
Clips4
GET/clipsGets one or more video clips.
Parameters
NameInRequiredType
broadcaster_idquerynostring
game_idquerynostring
idquerynoarray
started_atquerynostring
ended_atquerynostring
firstquerynointeger
beforequerynostring
afterquerynostring
is_featuredquerynoboolean
Responses
StatusDescriptionSchema
200Successfully retrieved the list of video clips.GetClipsResponse
400* The _id_ or _game\_id_ or _broadcaster\_id_ query parameter is required. * The _id_, _game\_id_, and _broadcaster\_id_ query parameters are mutually exclusive; you may specify only one of them.
401* The Authorization header is required and must contain an app access token or user access token. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
404* The ID in _game\_id_ was not found.
POST/clipsCreates a clip from the broadcaster’s stream.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
titlequerynostring
durationquerynonumber
Responses
StatusDescriptionSchema
202Successfully started the clip process.CreateClipResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter was not found. * The category is not clippable. * The title did not pass AutoMod checks.
401* The Authorization header is required and must specify user access token. * The user access token must include the **clips:edit** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The broadcaster has restricted the ability to capture clips to followers and/or subscribers only. * The specified broadcaster has not enabled clips on their channel. * The user is banned or timed out from the broadcaster’s channel.
404* The broadcaster in the _broadcaster\_id_ query parameter must be broadcasting live.
GET/clips/downloadsNEW Provides URLs to download the video file(s) for the specified clips.
Parameters
NameInRequiredType
editor_idqueryyesstring
broadcaster_idqueryyesstring
clip_idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully retrieved the clip download URL(s).GetClipsDownloadResponse
400The ID in the broadcaster\_id, editor\_id, or clip\_id query parameter is not valid.
401* The OAuth token is not valid. * The Authorization header is required and must contain a user access token or app access token. * The access token must include the editor:manage:clips or channel:manage:clips scope * The access token is not valid * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403The user is not an editor for the specified broadcaster.
500Internal Server Error.
POST/videos/clipsNEW Creates a clip from the broadcaster’s VOD.
Parameters
NameInRequiredType
editor_idqueryyesstring
broadcaster_idqueryyesstring
vod_idqueryyesstring
vod_offsetqueryyesinteger
durationquerynonumber
titlequeryyesstring
Responses
StatusDescriptionSchema
202Successfully started the clip process.CreateClipFromVODResponse
400* Validation errors: Invalid source type, missing required fields. * The broadcaster\_id query parameter is required. * The ID in the broadcaster\_id query parameter was not found. * The category is not clippable. * The title did not pass AutoMod checks. * Broadcaster is banned.
401* The Authorization header is required and must specify user access token. * The user access token must include the **editor:manage:clips** or **channel:manage:clips** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The broadcaster has restricted the ability to capture clips to followers and/or subscribers only. * The specified broadcaster has not enabled clips on their channel. * The user defined by the _editor\_id_ is not authorized to create Clips. * The user is banned or timed out from the broadcaster's channel.
404* The broadcaster in the _broadcaster\_id_ query parameter must be broadcasting live. * The VOD is not found.. * The _broadcaster\_id_ or the _editor\_id_ does not exist.
Conduits6
GET/eventsub/conduitsGets the conduits for a client ID.
Responses
StatusDescriptionSchema
200Successfully retrieved conduits.GetConduitsResponse
401Authorization header required with an app access token.
POST/eventsub/conduitsCreates a new conduit.
Request body

application/jsonCreateConduitsBody

Responses
StatusDescriptionSchema
200Conduit created.CreateConduitsResponse
400Invalid shard count.
401Authorization header required with an app access token.
429Conduit limit reached.
PATCH/eventsub/conduitsUpdates a conduit’s shard count.
Request body

application/jsonUpdateConduitsBody

Responses
StatusDescriptionSchema
200Conduit updated.UpdateConduitsResponse
400* Invalid shard count * The id query parameter is required.
401Authorization header required with an app access token.
404* Conduit not found. * Conduit’s owner must match the client ID in the access token.
DELETE/eventsub/conduitsDeletes a specified conduit.
Parameters
NameInRequiredType
idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully deleted the conduit. __Examples__ _Request:_ ```bash curl -X DELETE 'https://api.twitch.tv/helix/eventsub/conduits?id=bfcfc993-26b1-b876-44d9-afe75a379dac' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400The id query parameter is required.
401Authorization header required with an app access token.
404* Conduit not found. * Conduit’s owner must match the client ID in the access token.
GET/eventsub/conduits/shardsGets a lists of all shards for a conduit.
Parameters
NameInRequiredType
conduit_idqueryyesstring
statusquerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved shards.GetConduitShardsResponse
400The id query parameter is required.
401Authorization header required with an app access token.
404* Conduit not found. * Conduit’s owner must match the client ID in the access token.
PATCH/eventsub/conduits/shardsUpdates shard(s) for a conduit.
Request body

application/jsonUpdateConduitShardsBody

Responses
StatusDescriptionSchema
202Successfully retrieved shards.UpdateConduitShardsResponse
400The id query parameter is required.
401Authorization header required with an app access token.
404* Conduit not found. * Conduit’s owner must match the client ID in the access token.
CCLs1
GET/content_classification_labelsGets information about Twitch content classification labels.
Parameters
NameInRequiredType
localequerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of CCLs available.GetContentClassificationLabelsResponse
400
401
500
Entitlements2
GET/entitlements/dropsGets an organization’s list of entitlements that have been granted to a game, a user, or both.
Parameters
NameInRequiredType
idquerynoarray
user_idquerynostring
game_idquerynostring
fulfillment_statusquerynostring
afterquerynostring
firstquerynointeger
Responses
StatusDescriptionSchema
200Successfully retrieved the entitlements.GetDropsEntitlementsResponse
400* The value in the _fulfillment\_status_ query parameter is not valid. * The ID in the _user\_id_ query parameter must match the user ID in the user access token. * The client in the access token is not associated with a known organization. * The owner of the client in the access token is not a member of the organization.
401* The ID in the Client-Id header must match the Client ID in the access token. * The Authorization header is required and must specify an app access token or user access token. * The access token is not valid.
403* The organization associated with the client in the access token must own the game specified in the _game\_id_ query parameter. * The organization associated with the client in the access token must own the entitlements specified in the _id_ query parameter.
500
PATCH/entitlements/dropsUpdates the Drop entitlement’s fulfillment status.
Request body

application/jsonUpdateDropsEntitlementsBody

Responses
StatusDescriptionSchema
200Successfully requested the updates. Check the response to determine which updates succeeded.UpdateDropsEntitlementsResponse
400* The value in the `fulfillment_status` field is not valid. * The client in the access token is not associated with a known organization. * The owner of the client in the access token is not a member of the organization.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the Client ID in the access token.
500
Extensions12
GET/bits/extensionsGets the list of Bits products that belongs to the extension.
Parameters
NameInRequiredType
should_include_allquerynoboolean
Responses
StatusDescriptionSchema
200Successfully retrieved the list of products.GetExtensionBitsProductsResponse
400* The ID in the Client-Id header must belong to an extension.
401* The Authorization header is required and must specify an app access token; you may not specify a user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
PUT/bits/extensionsAdds or updates a Bits product that the extension created.
Request body

application/jsonUpdateExtensionBitsProductBody

Responses
StatusDescriptionSchema
200Successfully created the product.UpdateExtensionBitsProductResponse
400* The `sku` field is required. * The value in the `sku` field is not valid. The SKU may contain only alphanumeric characters, dashes (-), underscores (\_), and periods (.). * The `cost` object's `amount` field is required. * The value in the `cost` object's `amount` field is not valid. * The `cost` object's `type` field is required. * The value in the `cost` object's `type` field is not valid. * The `display_name` field is required. * The ID in the Client-Id header must belong to the extension.
401* The Authorization header is required and must specify an app access token; you may not specify a user access token. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
GET/extensionsGets information about an extension.
Parameters
NameInRequiredType
extension_idqueryyesstring
extension_versionquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of extensions.GetExtensionsResponse
400* The _extension\_id_ query parameter is required.
401* The request must specify the Authorization header. * The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The request must specify the Client-Id header.
404* The extension in the _extension\_id_ query parameter was not found.
POST/extensions/chatSends a message to the specified broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonSendExtensionChatMessageBody

Responses
StatusDescriptionSchema
204Successfully sent the chat message. __Examples__ _Request:_ ```bash curl -X POST 'https://api.twitch.tv/helix/extensions/chat?broadcaster_id=237757755' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \ -H 'Content-Type: application/json' \ -d '{ "text": "Hello", "extension_id": "uo6dggojyb8d6soh92zknwmi5ej1q2", "extension_version": "0.0.9" } ```
400* The _broadcaster\_id_ query parameter is required. * The `extension_id` field in the request's body is required. * The `extension_version` field in the request's body is required. * The `text` field in the request's body is required. * The message is too long.
401* The Authorization header is required and must specify a JWT token. * The ID in the _broadcaster\_id_ query parameter must match the `channel_id` claim in the JWT. * The JWT token is not valid. * The Client-Id header is required.
GET/extensions/configurationsGets the specified configuration segment from the specified extension.
Parameters
NameInRequiredType
broadcaster_idquerynostring
extension_idqueryyesstring
segmentqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the configurations.GetExtensionConfigurationSegmentResponse
400* The _extension\_id_ query parameter is required. * The value in the _segment_ query parameter is not valid. * The _broadcaster\_id_ query parameter is required if the _segment_ query parameter is set to broadcaster or developer.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
429* The app exceeded the number of requests that it may make per minute. See Rate Limits above.
PUT/extensions/configurationsUpdates a configuration segment.
Request body

application/jsonSetExtensionConfigurationSegmentBody

Responses
StatusDescriptionSchema
204Successfully updated the configuration. __Examples__ _Request:_ ```bash curl -X PUT 'https://api.twitch.tv/helix/extensions/configurations' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \ -H 'Content-Type: application/json' \ -d '{ "extension_id": "uo6dggojyb8d6soh92zknwmi5ej1q2", "segment": "global", "version": "0.0.1", "content": "hello config!" }' ```
400* The `broadcaster_id` field is required if `segment` is set to developer or broadcaster.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
GET/extensions/jwt/secretsGets an extension’s list of shared secrets.
Responses
StatusDescriptionSchema
200Successfully retrieved the list of secrets.GetExtensionSecretsResponse
400* The _extension\_id_ query parameter is required.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
POST/extensions/jwt/secretsCreates a shared secret used to sign and verify JWT tokens.
Parameters
NameInRequiredType
extension_idqueryyesstring
delayquerynointeger
Responses
StatusDescriptionSchema
200Successfully created the new secret.CreateExtensionSecretResponse
400* The _extension\_id_ query parameter is required. * The delay specified in the _delay_ query parameter is too short.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
GET/extensions/liveGets a list of broadcasters that are streaming live and have installed or activated the extension.
Parameters
NameInRequiredType
extension_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of broadcasters.GetExtensionLiveChannelsResponse
400* The _extension\_id_ query parameter is required. * The pagination cursor is not valid.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
404* The extension specified in the _extension\_id_ query parameter was not found or it's not being used in a live stream.
POST/extensions/pubsubSends a message to one or more viewers.
Request body

application/jsonSendExtensionPubSubMessageBody

Responses
StatusDescriptionSchema
204Successfully sent the message. __Examples__ _Request:_ ```bash curl -X POST 'https://api.twitch.tv/helix/extensions/pubsub' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \ -H 'Content-Type: application/json' \ -d '{ "message": "hello world!", "broadcaster_id": "141981764", "target": ["broadcast"] }' ```
400* The `broadcaster_id` field in the request's body may only be set if the `is_global_broadcast` field is set to **false**.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
422* The message is too large.
GET/extensions/releasedGets information about a released extension.
Parameters
NameInRequiredType
extension_idqueryyesstring
extension_versionquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the extension.GetReleasedExtensionsResponse
400* The _extension\_id_ query parameter is required.
401* The Authorization header must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
404* The extension specified in the _extension\_id_ query parameter was not found or is not released.
PUT/extensions/required_configurationUpdates the extension’s required_configuration string.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonSetExtensionRequiredConfigurationBody

Responses
StatusDescriptionSchema
204Successfully updated the extension’s required\_configuration string. __Examples__ _Request:_ ```bash curl -X PUT 'https://api.twitch.tv/helix/extensions/required_configuration?broadcaster_id=274637212' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \ -H 'Content-Type: application/json' \ -d '{ "required_configuration": "RCS", "extension_id": "uo6dggojyb8d6soh92zknwmi5ej1q2", "extension_version": "0.0.1" }' ```
400* The _broadcaster\_id_ query parameter is required. * The `extension_id` field is required. * The `extension_version` field is required. * The `required_configuration` field is required.
401* The Authorization header is required and must specify a JWT token. * The JWT token is not valid. * The Client-Id header is required.
EventSub3
GET/eventsub/subscriptionsGets a list of EventSub subscriptions that the client in the access token created.
Parameters
NameInRequiredType
statusquerynostring
typequerynostring
user_idquerynostring
subscription_idquerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the subscriptions.GetEventSubSubscriptionsResponse
400* The request may specify only one filter query parameter. For example, either _type_ or _status_ or _user\_id_. * The value in the _type_ query parameter is not valid. * The value in the _status_ query parameter is not valid. * The cursor specified in the _after_ query parameter is not valid.
401* The Authorization header is required and must specify an app access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
POST/eventsub/subscriptionsCreates an EventSub subscription.
Request body

application/jsonCreateEventSubSubscriptionBody

Responses
StatusDescriptionSchema
202Successfully accepted the subscription request.CreateEventSubSubscriptionResponse
400* The `condition` field is required. * The user specified in the `condition` object does not exist. * The `condition` object is missing one or more required fields. * The combination of values in the `version` and `type` fields is not valid. * The length of the string in the `secret` field is not valid. * The URL in the transport's `callback` field is not valid. The URL must use the HTTPS protocol and the 443 port number. * The value specified in the `method` field is not valid. * The `callback` field is required if you specify the webhook transport method. * The `session_id` field is required if you specify the WebSocket transport method. * The combination of subscription type and version is not valid. * The `conduit_id` field is required if you specify the Conduit transport method.
401* The Authorization header is required and must specify an app access token if the transport method is webhook. * The Authorization header is required and must specify a user access token if the transport method is WebSocket. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
403The access token is missing the required scopes.
409A subscription already exists for the specified event type and `condition` combination.
429The request exceeds the number of subscriptions that you may create with the same combination of `type` and `condition` values.
DELETE/eventsub/subscriptionsDeletes an EventSub subscription.
Parameters
NameInRequiredType
idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully deleted the subscription. __Examples__ _Request:_ Deletes the specified EventSub subscription. ```bash curl -X DELETE 'https://api.twitch.tv/helix/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a' \ -H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \ -H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' ``` ```bash # Twitch CLI example that deletes the specified subscription. twitch api delete /eventsub/subscriptions -q id=c839a466-034a-4d77-8d4d-c9a751516e7 ```
400* The _id_ query parameter is required.
401* The Authorization header is required and must specify an app access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
404* The subscription was not found.
Games2
GET/gamesGets information about specified games.
Parameters
NameInRequiredType
idquerynoarray
namequerynoarray
igdb_idquerynoarray
Responses
StatusDescriptionSchema
200Successfully retrieved the specified games.GetGamesResponse
400* The request must specify the _id_ or _name_ or _igdb\_id_ query parameter. * The combined number of game IDs (_id_ and _igdb\_id_) and game names that you specify in the request must not exceed 100.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
GET/games/topGets information about all broadcasts on Twitch.
Parameters
NameInRequiredType
firstquerynointeger
afterquerynostring
beforequerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of broadcasts.GetTopGamesResponse
400* The value in the _first_ query parameter is not valid. * The cursor in the _after_ or _before_ query parameter is not valid.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
Goals1
GET/goalsGets the broadcaster’s list of active goals.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s goals.GetCreatorGoalsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:goals** scope. * The ID in _broadcaster\_id_ must match the user ID in the user access token. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
Guest Star12
GET/guest_star/channel_settingsBETA Gets the channel settings for configuration of the Guest Star feature for a particular host.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Responses
StatusDescriptionSchema
200GetChannelGuestStarSettingsResponse
400* Missing _broadcaster\_id_ * Missing _moderator\_id_
403Insufficient authorization for viewing channel’s Guest Star settings
PUT/guest_star/channel_settingsBETA Mutates the channel settings for configuration of the Guest Star feature for a particular host.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonUpdateChannelGuestStarSettingsBody

Responses
StatusDescriptionSchema
204Successfully updated channel settings __Examples__ _Request:_ Update browser source layout settings ```bash curl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&group_layout=TILED_LAYOUT` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ``` _Request:_ Disable moderator control of slot live setting ```bash curl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&is_moderator_send_live_enabled=false` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ``` _Request:_ Update max slot count ```bash curl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&slot_count=6` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ``` _Request:_ Regenerate browser sources ```bash curl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&regenerate_browser_sources=true` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Invalid _slot\_count_ * Invalid _group\_layout_
GET/guest_star/invitesBETA Provides the caller with a list of pending invites to a Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
Responses
StatusDescriptionSchema
200GetGuestStarInvitesResponse
400* Missing _broadcaster\_id_ * Missing _session\_id_
POST/guest_star/invitesBETA Sends an invite to a specified guest on behalf of the broadcaster for a Guest Star session in progress.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
guest_idqueryyesstring
Responses
StatusDescriptionSchema
204 __Examples__ _Request:_ Invite user to Guest Star session ```bash curl -x POST `https://api.twitch.tv/helix/guest_star/invites?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing _moderator\_id_ * Missing _session\_id_ * Missing _guest\_id_ * Invalid _session\_id_
403* Unauthorized guest invited * Guest already invited
DELETE/guest_star/invitesBETA Revokes a previously sent invite for a Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
guest_idqueryyesstring
Responses
StatusDescriptionSchema
204 __Examples__ _Request:_ Remove invite to session ```bash curl -x DELETE `https://api.twitch.tv/helix/guest_star/invites?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing _session\_id_ * Missing _guest\_id_ * Invalid _session\_id_
404No invite exists for specified _guest\_id_
GET/guest_star/sessionBETA Gets information about an ongoing Guest Star session for a particular channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Responses
StatusDescriptionSchema
200GetGuestStarSessionResponse
400* Missing _broadcaster\_id_ * Missing _moderator\_id_
401_moderator\_id_ and user token do not match
POST/guest_star/sessionBETA Programmatically creates a Guest Star session on behalf of the broadcaster.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200CreateGuestStarSessionResponse
400* Missing _broadcaster\_id_ * Session limit reached (1 active call)
401Phone verification missing
403Insufficient authorization for creating session
DELETE/guest_star/sessionBETA Programmatically ends a Guest Star session on behalf of the broadcaster.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
session_idqueryyesstring
Responses
StatusDescriptionSchema
200EndGuestStarSessionResponse
400* Missing or invalid _broadcaster\_id_ * Missing or invalid _session\_id_ * Session has already been ended
403Insufficient authorization for ending session
POST/guest_star/slotBETA Allows a previously invited user to be assigned a slot within the active Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
guest_idqueryyesstring
slot_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfuly assigned guest to slot __Examples__ _Request:_ Assign invited user to slot ```bash curl -x POST `https://api.twitch.tv/helix/guest_star/slot?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104&slot_id=1` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing _moderator\_id_ * Missing _guest\_id_ * Missing or invalid _session\_id_ * Missing or invalid _slot\_id_
401_moderator\_id_ is not a guest star moderator
403* Cannot assign host slot * Guest not invited to session * Guest already assigned to slot * Guest is not ready to join
PATCH/guest_star/slotBETA Allows a user to update the assigned slot for a particular user within the active Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
source_slot_idqueryyesstring
destination_slot_idquerynostring
Responses
StatusDescriptionSchema
204Successfuly updated slot(s) __Examples__ _Request:_ Move slot assignment to a new slot ID ```bash curl -x PATCH `https://api.twitch.tv/helix/guest_star/slot?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&source_slot_id=1&destination_slot_id=2` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing or invalid _session\_id_ * Missing or invalid _slot\_id_
DELETE/guest_star/slotBETA Allows a caller to remove a slot assignment from a user participating in an active Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
guest_idqueryyesstring
slot_idqueryyesstring
should_reinvite_guestquerynostring
Responses
StatusDescriptionSchema
204Successfuly removed user from slot __Examples__ _Request:_ Remove user from slot ```bash curl -x DELETE `https://api.twitch.tv/helix/guest_star/slot?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104&slot_id=1` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing _moderator\_id_ * Missing or invalid _session\_id_ * Missing or invalid _slot\_id_
403* _moderator\_id_ is not a Guest Star moderator * The request is attempting to modify a restricted slot
404_guest\_id_ or _slot\_id_ not found
PATCH/guest_star/slot_settingsBETA Allows a user to update slot settings for a particular guest within a Guest Star session.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
session_idqueryyesstring
slot_idqueryyesstring
is_audio_enabledquerynoboolean
is_video_enabledquerynoboolean
is_livequerynoboolean
volumequerynointeger
Responses
StatusDescriptionSchema
204Successfuly updated slot settings __Examples__ _Request:_ Update slot settings to enable slot in broadcasting software ```bash curl -x PATCH `https://api.twitch.tv/helix/guest_star/slot_settings?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&slot_id=1&is_audio_enabled=false` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ``` _Request:_ Mute a slot’s audio for a guest ```bash curl -x PATCH `https://api.twitch.tv/helix/guest_star/slot_settings?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&slot_id=1&is_live=true` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ``` _Request:_ Allow slot audio to be unmuted by a guest. **NOTE**: This operation does not immediately unmute the guest. The guest will be notified they can unmute themselves when ready. ```bash curl -x PATCH `https://api.twitch.tv/helix/guest_star/slot_settings?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&slot_id=1&is_audio_enabled=true` \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* Missing _broadcaster\_id_ * Missing _moderator\_id_ * Missing or invalid _session\_id_ * Missing or invalid _slot\_id_
403* _moderator\_id_ is not a Guest Star moderator * The request is attempting to modify a restricted slot
Hype Train1
GET/hypetrain/statusNEW Gets the status of a Hype Train for the specified broadcaster.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the status object.GetHypeTrainStatusResponse
400The ID in the `broadcaster_id` query parameter is not valid.
401* The OAuth token is not valid. * The Authorization header is required and must contain a user access token.
500Internal Server Error.
Moderation25
GET/channels/vipsGets a list of the broadcaster’s VIPs.
Parameters
NameInRequiredType
user_idquerynoarray
broadcaster_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s list of VIPs.GetVIPsResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _user\_id_ query parameter is not valid. * The number of _user\_id_ query parameters exceeds the maximum allowed.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:vips** or **channel:manage:vips** scope. * The OAuth token is not valid. * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
POST/channels/vipsAdds the specified user as a VIP in the broadcaster’s channel.
Parameters
NameInRequiredType
user_idqueryyesstring
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully added the VIP. __Examples__ _Request:_ Adds a VIP to the broadcaster’s chat room. ```bash curl -X POST 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123&user_id=456' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The user in the _user\_id_ query parameter is blocked from the broadcaster's channel. * The ID in the _broadcaster\_id_ query parameter is not valid. * The ID in the _user\_id_ query parameter is not valid.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:vips** scope. * The OAuth token is not valid. * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
403* The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token.
404* The ID in _broadcaster\_id_ was not found. * The ID in _user\_id_ was not found.
409The broadcaster doesn’t have available VIP slots. [Read More](https://help.twitch.tv/s/article/Managing-Roles-for-your-Channel?language=en%5FUS#types)
422* The user in _user\_id_ is a moderator. To make them a VIP, you must first remove them as a moderator (see [Remove Channel Moderator](https://dev.twitch.tv/docs/api/reference#remove-channel-moderator)). * The user in the _user\_id_ query parameter is already a VIP.
425The broadcaster must complete the Build a Community requirement before they may assign VIPs.
429The broadcaster exceeded the number of VIP that they may add within a 10-second window. See Rate Limits for this endpoint above.
DELETE/channels/vipsRemoves the specified user as a VIP in the broadcaster’s channel.
Parameters
NameInRequiredType
user_idqueryyesstring
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the VIP status from the user. __Examples__ _Request:_ Removes the VIP user from the broadcaster’s channel. ```bash curl -X DELETE 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123&user_id=456' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The ID in _broadcaster\_id_ is not valid. * The ID in _user\_id_ is not valid.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:vips** scope. * The OAuth token is not valid. * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
403* The user in _broadcaster\_id_ doesn't have permission to remove the user's VIP status.
404* The ID in _broadcaster\_id_ was not found. * The ID in _user\_id_ was not found.
422* The user in _user\_id_ is not a VIP in the broadcaster's channel.
429The broadcaster exceeded the number of VIPs that they may remove within a 10-second window. See Rate Limits for this endpoint above.
POST/moderation/automod/messageAllow or deny the message that AutoMod flagged for review.
Request body

application/jsonManageHeldAutoModMessagesBody

Responses
StatusDescriptionSchema
204Successfully approved or denied the message. __Examples__ _Request:_ ```bash curl -X POST 'https://api.twitch.tv/helix/moderation/automod/message' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \ -H 'Content-Type: application/json' \ -d '{ "user_id": "9327994", "msg_id": "836013710", "action": "ALLOW" }' ```
400* The value in the `action` field is not valid. * The `user_id` field is required. * The `msg_id` field is required. * The `action` field is required.
401* The ID in `user_id` must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:automod** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _user\_id_ is not one of the broadcaster's moderators.
404* The message specified in the `msg_id` field was not found.
GET/moderation/automod/settingsGets the broadcaster’s AutoMod settings.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s AutoMod settings.GetAutoModSettingsResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:read:automod\_settings** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
PUT/moderation/automod/settingsUpdates the broadcaster’s AutoMod settings.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonUpdateAutoModSettingsBody

Responses
StatusDescriptionSchema
200Successfully updated the broadcaster’s AutoMod settings.UpdateAutoModSettingsResponse
400* The _broadcaster\_id_ is required. * The _moderator\_id_ is required. * The `overall_level` setting or one or more individual settings like `aggression` is required; the overall and individual settings are mutually exclusive, so don't set both. * The value of one or more AutoMod settings is not valid.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:automod\_settings** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
GET/moderation/bannedGets all users that the broadcaster banned or put in a timeout.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idquerynoarray
firstquerynointeger
afterquerynostring
beforequerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of banned users.GetBannedUsersResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderation:read** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
POST/moderation/bansBans a user from participating in a broadcaster’s chat room or puts them in a timeout.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonBanUserBody

Responses
StatusDescriptionSchema
200Successfully banned the user or placed them in a timeout.BanUserResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * The `user_id` field is required. * The text in the `reason` field is too long. * The value in the `duration` field is not valid. * The user specified in the `user_id` field may not be banned. * The user specified in the `user_id` field may not be put in a timeout. * The user specified in the `user_id` field is already banned.
401* The ID in _moderator\_id_ must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:banned\_users** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
409* You may not update the user's ban state while someone else is updating the state. For example, someone else is currently banning the user or putting them in a timeout, moving the user from a timeout to a ban, or removing the user from a ban or timeout. Please retry your request.
429* The app has exceeded the number of requests it may make per minute for this broadcaster.
DELETE/moderation/bansRemoves the ban or timeout that was placed on the specified user.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
user_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the ban or timeout. __Examples__ _Request:_ Removes a ban or timeout from a user. ```bash curl -X DELETE 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678&user_id=5432' \ -H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \ -H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' ```
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * The _user\_id_ query parameter is required. * The user specified in the _user\_id_ query parameter is not banned.
401* The ID in _moderator\_id_ must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:banned\_users** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
409* You may not update the user's ban state while someone else is updating the state. For example, someone else is currently removing the ban or timeout, or they're moving the user from a timeout to a ban. Please retry your request.
429* The app has exceeded the number of requests it may make per minute for this broadcaster.
GET/moderation/blocked_termsGets the broadcaster’s list of non-private, blocked words or phrases.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of blocked terms.GetBlockedTermsResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header must contain a user access token. * The user access token must include the **moderator:read:blocked\_terms** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
POST/moderation/blocked_termsAdds a word or phrase to the broadcaster’s list of blocked terms.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonAddBlockedTermBody

Responses
StatusDescriptionSchema
200Successfully retrieved the list of blocked terms.AddBlockedTermResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * The `text` field is required. * The length of the term in the `text` field is either too short or too long.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:blocked\_terms** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
DELETE/moderation/blocked_termsRemoves the word or phrase from the broadcaster’s list of blocked terms.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the blocked term. Also returned if the ID is not found. __Examples__ _Request:_ Deletes the specified blocked term. ```bash curl -X DELETE 'https://api.twitch.tv/helix/moderation/blocked_terms?broadcaster_id=1234&moderator_id=5678&id=c9fc79b8-0f63-4ef7-9d38-efd811e74ac2' \ -H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \ -H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' ```
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * The _id_ query parameter is required.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:blocked\_terms** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
GET/moderation/channelsGets a list of channels that the specified user has moderator privileges in.
Parameters
NameInRequiredType
user_idqueryyesstring
afterquerynostring
firstquerynointeger
Responses
StatusDescriptionSchema
200Successfully retrieved the list of moderated channels.GetModeratedChannelsResponse
400
401
500
DELETE/moderation/chatRemoves a single chat message or all chat messages from the broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
message_idquerynostring
Responses
StatusDescriptionSchema
204Successfully removed the specified messages. __Examples__ _Request:_ Removes all messages from the broadcaster’s chat room (doesn’t include the _message\_id_ query parameter). ```bash curl -X DELETE 'https://api.twitch.tv/helix/moderation/chat?broadcaster_id=11111&moderator_id=44444' \ -H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \ -H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' ``` Removes the specified message from the broadcaster’s chat room. ```bash curl -X DELETE 'https://api.twitch.tv/helix/moderation/chat?broadcaster_id=11111&moderator_id=44444&message_id=abc-123-def' \ -H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \ -H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' ```
400* You may not delete another moderator's messages. * You may not delete the broadcaster's messages.
401* The Authorization header is required and must contain a user access token. * The user access token is missing the **moderator:manage:chat\_messages** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
404* The ID in _message\_id_ was not found. * The specified message was created more than 6 hours ago.
POST/moderation/enforcements/statusChecks whether AutoMod would flag the specified message for review.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonCheckAutoModStatusBody

Responses
StatusDescriptionSchema
200Successfully checked the messages.CheckAutoModStatusResponse
400* The _broadcaster\_id_ query parameter is required. * The `data` field is required and the list must contain one or more messages to check. * The `msg_id` field is required. * The `msg_text` field is required.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **moderation:read** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The ID in _broadcaster\_id_ must match the user ID in the user access token.
429* The broadcaster exceeded the number of chat message checks that they may make. See the endpoint's rate limits.
GET/moderation/moderatorsGets all users allowed to moderate the broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idquerynoarray
firstquerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of moderators.GetModeratorsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID found in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderation:read** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
POST/moderation/moderatorsAdds a moderator to the broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully added the moderator. __Examples__ _Request:_ ```bash curl -X POST 'https://api.twitch.tv/helix/moderation/moderators?broadcaster_id=11111&user_id=44444' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The ID in _broadcaster\_id_ was not found. * The ID in _user\_id_ was not found. * The user in _user\_id_ is already a moderator in the broadcaster's chat room. * The user in _user\_id_ cannot become a moderator because they're banned from the channel.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:moderators** scope. * The access token is not valid. * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
422* The user in _user\_id_ is a VIP. To make them a moderator, you must first remove them as a VIP (see [Remove Channel VIP](https://dev.twitch.tv/docs/api/reference#remove-channel-vip)).
429* The broadcaster has exceeded the number of requests allowed within a 10-second window. See this endpoint's rate limits.
DELETE/moderation/moderatorsRemoves a moderator from the broadcaster’s chat room.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the moderator. __Examples__ _Request:_ ```bash curl -X DELETE 'https://api.twitch.tv/helix/moderation/moderators?broadcaster_id=11111&user_id=44444' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The ID in _broadcaster\_id_ was not found. * The ID in _user\_id_ was not found. * The user in _user\_id_ is not a moderator in the broadcaster's chat room.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:moderators** scope. * The access token is not valid. * The ID in the _broadcaster\_id_ query parameter must match the user ID in the access token. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
429* The broadcaster has exceeded the number of requests allowed within a 10-second window. See this endpoint's rate limits.
GET/moderation/shield_modeGets the broadcaster’s Shield Mode activation status.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s Shield Mode activation status.GetShieldModeStatusResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:read:shield\_mode** or **moderator:manage:shield\_mode** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
PUT/moderation/shield_modeActivates or deactivates the broadcaster’s Shield Mode.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonUpdateShieldModeStatusBody

Responses
StatusDescriptionSchema
200Successfully updated the broadcaster’s Shield Mode status.UpdateShieldModeStatusResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The `is_active` field is required. * The value in the `is_active` field is not valid.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:shield\_mode** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in _moderator\_id_ is not one of the broadcaster's moderators.
POST/moderation/suspicious_usersNEW Adds a suspicious user status to a chatter on the broadcaster’s channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonAddSuspiciousStatusToChatUserBody

Responses
StatusDescriptionSchema
200Successfully applied a suspicious user status.AddSuspiciousStatusToChatUserResponse
400* Validation errors: Missing required fields. * The ID in the broadcaster\_id query parameter was not found. * The status specified was invalid. Must either be ACTIVE\_MONITORING or RESTRICTED * The status update is not allowed for this user.
401* The Authorization header is required and must specify user access token. * The user access token must include the **moderator:manage:suspicious\_users** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The user in the moderator\_id query parameter is not one of the broadcaster's moderators.
DELETE/moderation/suspicious_usersNEW Remove a suspicious user status from a chatter on broadcaster’s channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
user_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully removed a suspicious user status.RemoveSuspiciousStatusFromChatUserResponse
400* Validation errors: Missing required fields. * The ID in the broadcaster\_id query parameter was not found. * The status update is not allowed for this user.
401* The Authorization header is required and must specify user access token. * The user access token must include the **moderator:manage:suspicious\_users** scope. * The OAuth token is not valid. * The ID in the Client-Id header must match the Client ID in the OAuth token.
403* The user in the moderator\_id query parameter is not one of the broadcaster's moderators.
GET/moderation/unban_requestsGets a list of unban requests for a broadcaster’s channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
statusqueryyesstring
user_idquerynostring
afterquerynostring
firstquerynointeger
Responses
StatusDescriptionSchema
200Successfully retrieved the list of unban requests.GetUnbanRequestsResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _moderator\_id_ query parameter is required. * The ID in the _moderator\_id_ query parameter is not valid. * The pagination cursor is not valid.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:read:unban\_requests** or **moderator:manage:unban\_requests** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
PATCH/moderation/unban_requestsResolves an unban request by approving or denying it.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
unban_request_idqueryyesstring
statusqueryyesstring
resolution_textquerynostring
Responses
StatusDescriptionSchema
200Successfully resolved the unban request.ResolveUnbanRequestsResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _moderator\_id_ query parameter is required. * The ID in the _moderator\_id_ query parameter is not valid. * The pagination cursor is not valid. * The broadcaster is not receiving unban requests * Invalid requested update
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:unban\_requests** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
404The unban request ID was not found.
POST/moderation/warningsWarns a user in the specified broadcaster’s chat room, preventing them from chat interaction until the warning is acknowledged.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
moderator_idqueryyesstring
Request body

application/jsonWarnChatUserBody

Responses
StatusDescriptionSchema
200Successfully warn a user.WarnChatUserResponse
400* The _broadcaster\_id_ query parameter is required. * The _moderator\_id_ query parameter is required. * The _user\_id_ query parameter is required. * The _reason_ query parameter is required. * The text in the _reason_ field is too long. * The user specified in the _user\_id_ may not be warned.
401* The ID in _moderator\_id_ must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **moderator:manage:warnings** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403The user in _moderator\_id_ is not one of the broadcaster’s moderators.
409You may not update the user’s warning state while someone else is updating the state. For example, someone else is currently warning the user or the user is acknowledging an existing warning. Please retry your request.
429The app has exceeded the number of requests it may make per minute for this broadcaster.
500Internal Server Error.
Polls3
GET/pollsGets a list of polls that the broadcaster created.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idquerynoarray
firstquerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster's polls.GetPollsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token is missing the **channel:read:polls** scope. * The access token is not valid. * The client ID specified in the Client-Id header must match the client ID specified in the access token.
404* None of the IDs in the _id_ query parameters were found.
POST/pollsCreates a poll that viewers in the broadcaster’s channel can vote on.
Request body

application/jsonCreatePollBody

Responses
StatusDescriptionSchema
200Successfully created the poll.CreatePollResponse
400* The `broadcaster_id` field is required. * The `title` field is required. * The `choices` field is required. * The `duration` field is required. * The value in `duration` is outside the allowed range of values. * The value in `channel_points_per_vote` is outside the allowed range of values. * The value in `bits_per_vote` is outside the allowed range of values. * The poll's `title` is too long. * The choice's `title` is too long. * The choice's `title` failed AutoMod checks. * The number of choices in the poll may not be less than 2 or greater that 5. * The broadcaster already has a poll that's running; you may not create another poll until the current poll completes.
401* The ID in `broadcaster_id` must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token is missing the **channel:manage:polls** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
PATCH/pollsEnd an active poll.
Request body

application/jsonEndPollBody

Responses
StatusDescriptionSchema
200Successfully ended the poll.EndPollResponse
400* The `broadcaster_id` field is required. * The `id` field is required. * The `status` field is required. * The value in the `status` field is not valid. * The poll must be active to terminate or archive it.
401* The ID in `broadcaster_id` must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:polls** scope. * The access token is not valid. * The client ID specified in the Client-Id header must match the client ID specified in the access token.
Predictions3
GET/predictionsGets a list of Channel Points Predictions that the broadcaster created.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idquerynoarray
firstquerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of predictions.GetPredictionsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:predictions** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
POST/predictionsCreate a Channel Points Prediction.
Request body

application/jsonCreatePredictionBody

Responses
StatusDescriptionSchema
200Successfully created the Channel Points Prediction.CreatePredictionResponse
400* The `broadcaster_id` field is required. * The `title` field is required. * The `outcomes` field is required. * The `prediction_window` field is required. * The value in `prediction_window` is outside the allowed range of values. * The prediction's `title` is too long. * The outcome's `title` is too long. * The outcome's `title` failed AutoMod checks. * There must be 2 outcomes in the prediction. * The broadcaster already has a prediction that's running; you may not create another prediction until the current prediction is resolved or canceled.
401* The ID in `broadcaster_id` must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:predictions** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
429
PATCH/predictionsLocks, resolves, or cancels a Channel Points Prediction.
Request body

application/jsonEndPredictionBody

Responses
StatusDescriptionSchema
200Successfully ended the prediction.EndPredictionResponse
400* The `broadcaster_id` field is required. * The `id` field is required. * The `status` field is required. * The `winning_outcome_id` field is required if `status` is RESOLVED. * The value in the `status` field is not valid. * To update the prediction's status to RESOLVED or CANCELED, its current status must be ACTIVE or LOCKED. * To update the prediction's status to LOCKED, its current status must be ACTIVE.
401* The ID in `broadcaster_id` must match the user ID in the OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:predictions** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The prediction in the `id` field was not found. * The outcome in the `winning_outcome_id` field was not found.
Raids2
POST/raidsRaid another channel by sending the broadcaster’s viewers to the targeted channel.
Parameters
NameInRequiredType
from_broadcaster_idquerynostring
to_broadcaster_idquerynostring
Responses
StatusDescriptionSchema
200Successfully requested to start a raid. To determine whether the raid successfully occurred (that is, the broadcaster clicked **Raid Now** or the countdown expired), you must subscribe to the [Channel Raid](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelraid) event.StartARaidResponse
400* The raiding broadcaster is blocked from the targeted channel. * The targeted channel doesn't accept raids from this broadcaster. * There are too many viewers in the raiding party. * The IDs in _from\_broadcaster\_id_ and _to\_broadcaster\_id_ cannot be the same ID. * The ID in the _from\_broadcaster\_id_ query parameter is not valid. * The ID in the _to\_broadcaster\_id_ query parameter is not valid.
401* The ID in _from\_broadcaster\_id_ must match the user ID found in the request’s OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:raids** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The targeted channel was not found.
409* The broadcaster is already in the process of raiding another channel.
429* The broadcaster exceeded the number of raid requests that they may make. The limit is 10 requests within a 10-minute window.
DELETE/raidsCancel a pending raid.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
204The pending raid was successfully canceled. __Examples__ _Request:_ ```bash curl -X DELETE 'https://api.twitch.tv/helix/raids?broadcaster_id=12345678' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' ```
400* The ID in the _broadcaster\_id_ query parameter is not valid.
401* The ID in _broadcaster\_id_ must match the user ID found in the request’s OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:raids** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The broadcaster doesn't have a pending raid to cancel.
429* The broadcaster exceeded the number of raid requests that they may make. The limit is 10 requests within a 10-minute window.
Schedule6
GET/scheduleGets the broadcaster’s streaming schedule.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idquerynoarray
start_timequerynostring
utc_offsetquerynostring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s streaming schedule.GetChannelStreamScheduleResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The ID in the _id_ query parameter is not valid. * The format of the date and time in the _start\_time_ query parameter is not valid.
401* The Authorization header is required and must specify a valid app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the Client ID in the access token.
403* Only partners and affiliates may add non-recurring broadcast segments.
404* The broadcaster has not created a streaming schedule.
GET/schedule/icalendarGets the broadcaster’s streaming schedule as an iCalendar.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s schedule as an iCalendar.
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid.
POST/schedule/segmentAdds a single or recurring broadcast to the broadcaster’s streaming schedule.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Request body

application/jsonCreateChannelStreamScheduleSegmentBody

Responses
StatusDescriptionSchema
200Successfully added the broadcast segment.CreateChannelStreamScheduleSegmentResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The format of the date and time in the `start_time` field is not valid. * The value in the `timezone` field is not valid. * The value in the `duration` field is not valid. * The ID in the `category_id` field is not valid. * The string in the `title` field is too long.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:schedule** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
403* Only partners and affiliates may add non-recurring broadcast segments.
PATCH/schedule/segmentUpdates a scheduled broadcast segment.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idqueryyesstring
Request body

application/jsonUpdateChannelStreamScheduleSegmentBody

Responses
StatusDescriptionSchema
200Successfully updated the broadcast segment.UpdateChannelStreamScheduleSegmentResponse
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _id_ query parameter is required. * The ID in the _id_ query parameter is not valid. * The format of the date and time in the `start_time` field is not valid. * The value in the `timezone` field is not valid. * The value in the `duration` field is not valid. * The ID in the `category_id` field is not valid. * The string in the `title` field is too long.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:schedule** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
404* The specified broadcast segment was not found.
DELETE/schedule/segmentDeletes a broadcast from the broadcaster’s streaming schedule.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the broadcast segment. __Examples__ _Request:_ Removes the segment from the broadcaster’s streaming schedule. ```bash curl -X DELETE 'https://api.twitch.tv/helix/schedule/segment?broadcaster_id=141981764&id=eyJzZWdtZW50SUQiOiI4Y2EwN2E2NC0xYTZkLTRjYWItYWE5Ni0xNjIyYzNjYWUzZDkiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyMX0=' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The _id_ query parameter is required. * The ID in the _id_ query parameter is not valid.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:schedule** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the OAuth token.
PATCH/schedule/settingsUpdates the broadcaster’s schedule settings, such as scheduling a vacation.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
is_vacation_enabledquerynoboolean
vacation_start_timequerynostring
vacation_end_timequerynostring
timezonequerynostring
Responses
StatusDescriptionSchema
204Successfully updated the broadcaster’s schedule settings. __Examples__ _Request:_ Schedules the broadcaster’s vacation. ```bash curl -X PATCH 'https://api.twitch.tv/helix/schedule/settings?broadcaster_id=141981764&is_vacation_enabled=true&vacation_start_time=2021-05-16T00:00:00Z&vacation_end_time=2021-05-23T00:00:00Z&timezone=America/New_York' \ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' ```
400* The _broadcaster\_id_ query parameter is required. * The ID in the _broadcaster\_id_ query parameter is not valid. * The format of the string in _vacation\_start\_time_ is not valid. * The format of the string in _vacation\_end\_time_ is not valid. * The date in _vacation\_end\_time_ must be later than the date in _vacation\_start\_time_.
401* The ID in the _broadcaster\_id_ query parameter must match the user ID in the user access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:schedule** scope. * The access token is not valid. * The ID in the Client-Id header must match the client ID in the access token.
404* The broadcaster's schedule was not found.
Search2
GET/search/categoriesGets the games or categories that match the specified query.
Parameters
NameInRequiredType
queryqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of category names that matched the specified query string.SearchCategoriesResponse
400* The _query_ query parameter is required.
401* The Authorization header is required and must contain an app access token or user access token. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
GET/search/channelsGets the channels that match the specified query and have streamed content within the past 6 months.
Parameters
NameInRequiredType
queryqueryyesstring
live_onlyquerynoboolean
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of category names that matched the specified query string.SearchChannelsResponse
400* The _query_ query parameter is required.
401* The Authorization header is required and must contain an app access token or user access token. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
Streams5
GET/streamsGets a list of all streams.
Parameters
NameInRequiredType
user_idquerynoarray
user_loginquerynoarray
game_idquerynoarray
typequerynostring
languagequerynoarray
firstquerynointeger
beforequerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of streams.GetStreamsResponse
400* The value in the _type_ query parameter is not valid.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the Client ID in the access token.
GET/streams/followedGets the list of broadcasters that the user follows and that are streaming live.
Parameters
NameInRequiredType
user_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of broadcasters that the user follows and that are streaming live.GetFollowedStreamsResponse
400* The _user\_id_ query parameter is required.
401* The ID in _user\_id_ must match the user ID found in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:follows** scope. * The OAuth token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
GET/streams/keyGets the channel’s stream key.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the stream’s key.GetStreamKeyResponse
400* The _broadcaster\_id_ field is required. * The ID in the _broadcaster\_id_ field is not valid.
401* The ID in _broadcaster\_id_ must match the user ID in the access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:stream\_key** scope. * The access token is not valid. * The client ID specified in the Client-Id header must match the client ID specified in the access token.
403The user must complete additional steps in order to stream. Present the user with the returned error message.
GET/streams/markersGets a list of markers from the user’s most recent stream or from the specified VOD/video.
Parameters
NameInRequiredType
user_idquerynostring
video_idquerynostring
firstquerynostring
beforequerynostring
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of markers.GetStreamMarkersResponse
400* The request must specify either the _user\_id_ or _video\_id_ query parameter, but not both.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:broadcast** or **user:manage:broadcast** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in the access token is not authorized to get the video's markers. The user in the access token must own the video or be one of the broadcaster's editors.
404* The user specified in the _user\_id_ query parameter doesn't have videos.
POST/streams/markersAdds a marker to a live stream.
Request body

application/jsonCreateStreamMarkerBody

Responses
StatusDescriptionSchema
200Successfully created the marker.CreateStreamMarkerResponse
400* The `user_id` field is required. * The length of the string in the `description` field is too long.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:manage:broadcast** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* The user in the access token is not authorized to create video markers for the user in the `user_id` field. The user in the access token must own the video or they must be one of the broadcaster's editors.
404* The user in the `user_id` field is not streaming live. * The ID in the user\_id field is not valid. * The user hasn't enabled video on demand (VOD).
Subscriptions2
GET/subscriptionsGets a list of users that subscribe to the specified broadcaster.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idquerynoarray
firstquerynostring
afterquerynostring
beforequerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster’s list of subscribers.GetBroadcasterSubscriptionsResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID found in the request’s OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:read:subscriptions** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
GET/subscriptions/userChecks whether the user subscribes to the broadcaster’s channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
user_idqueryyesstring
Responses
StatusDescriptionSchema
200The user subscribes to the broadcaster.CheckUserSubscriptionResponse
400* The _broadcaster\_id_ query parameter is required. * The _user\_id_ query parameter is required.
401* The ID in _user\_id_ must match the user ID found in the request’s OAuth token. * The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:subscriptions** scope. * The access token is not valid. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The user in _user\_id_ does not subscribe to the broadcaster in _broadcaster\_id_.
Tags2
GET/streams/tagsGets the list of stream tags that the broadcaster or Twitch added to their channel.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of tags.GetStreamTagsResponse
400* The _broadcaster\_id_ field is required. * The ID in the _broadcaster\_id_ field is not valid.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the Client ID in the access token.
GET/tags/streamsGets the list of all stream tags that Twitch defines. You can also filter the list by one or more tag IDs.
Parameters
NameInRequiredType
tag_idquerynoarray
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of tags.GetAllStreamTagsResponse
400* The _tag\_id_ query parameter is empty (for example, `&tag_id=`). * The list of tag IDs is too long.
401* The Authorization header is required and must specify an app access token or user access token. * The access token is not valid. * The ID in the Client-Id header must match the Client ID in the access token.
Teams2
GET/teamsGets information about the specified Twitch team.
Parameters
NameInRequiredType
namequerynostring
idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the team's information.GetTeamsResponse
400* The _name_ or _id_ query parameter is required. * Specify either the _name_ or _id_ query parameter but not both. * The ID in the _id_ query parameter is not valid.
401* The Authorization header must contain an app access token or user access token. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The specified team was not found.
GET/teams/channelGets the list of Twitch teams that the broadcaster is a member of.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of teams.GetChannelTeamsResponse
400* The _broadcaster\_id_ query parameter is missing or invalid.
401* The Authorization header must contain an app access token or user access token. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The broadcaster was not found.
Users9
GET/authorization/usersNEW Gets the authorization scopes that the specified user has granted the application.
Parameters
NameInRequiredType
user_idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully retrieved user authorization.GetAuthorizationByUserResponse
400Request is malformed - invalid parameters or missing parameters.
401* The access token is not valid. * Authorization header is required and must specify an app access token.
403The client-id in the header must match the client ID in the access token.
500Internal Server Error.
GET/usersGets information about one or more users.
Parameters
NameInRequiredType
idquerynoarray
loginquerynoarray
Responses
StatusDescriptionSchema
200Successfully retrieved the specified users’ information.GetUsersResponse
400* The \*id\* or \*login\* query parameter is required unless the request uses a user access token. * The request exceeded the maximum allowed number of \*id\* and/or \*login\* query parameters.
401* The Authorization header is required and must contain an app access token or user access token. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
PUT/usersUpdates the user’s information.
Parameters
NameInRequiredType
descriptionquerynostring
Responses
StatusDescriptionSchema
200Successfully updated the specified user's information.UpdateUserResponse
400* The string in the _description_ query parameter is too long.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:edit** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
429The app exceeded the number of requests that it may make.
GET/users/blocksGets the list of users that the broadcaster has blocked.
Parameters
NameInRequiredType
broadcaster_idqueryyesstring
firstquerynointeger
afterquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the broadcaster's list of blocked users.GetUserBlockListResponse
400* The _broadcaster\_id_ query parameter is required.
401* The ID in _broadcaster\_id_ must match the user ID found in the request’s access token. * The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:blocked\_users** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
PUT/users/blocksBlocks the specified user from interacting with or having contact with the broadcaster.
Parameters
NameInRequiredType
target_user_idqueryyesstring
source_contextquerynostring
reasonquerynostring
Responses
StatusDescriptionSchema
204Successfully blocked the user. __Examples__ _Request:_ Blocks the specified user. ```bash curl -X PUT 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \ -H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \ -H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \ ```
400* The _target\_user\_id_ query parameter is required. * The ID in _target\_user\_id_ cannot be the same as the user ID in the access token. * The value in _source\_context_ is not valid. * The value in _reason_ is not valid.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:manage:blocked\_users** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
DELETE/users/blocksRemoves the user from the broadcaster’s list of blocked users.
Parameters
NameInRequiredType
target_user_idqueryyesstring
Responses
StatusDescriptionSchema
204Successfully removed the block. __Examples__ _Request:_ Unblocks the specified user. ```bash curl -X DELETE 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \ -H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \ -H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \ ```
400* The _target\_user\_id_ query parameter is required.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:blocked\_users** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
GET/users/extensionsGets the active extensions that the broadcaster has installed for each configuration.
Parameters
NameInRequiredType
user_idquerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the user's active extensions.GetUserActiveExtensionsResponse
400* The _user\_id_ query parameter is required if you specify an app access token.
401* The Authorization header is required and must contain an app access token or user access token. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
PUT/users/extensionsUpdates an installed extension’s information.
Request body

application/jsonUpdateUserExtensionsBody

Responses
StatusDescriptionSchema
200Successfully updated the active extensions.UpdateUserExtensionsResponse
400* The JSON payload is malformed.
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:edit:broadcast** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
404* An extension with the specified `id` and `version` values was not found.
GET/users/extensions/listGets a list of all extensions (both active and inactive) that the broadcaster has installed.
Responses
StatusDescriptionSchema
200Successfully retrieved the user's installed extensions.GetUserExtensionsResponse
401* The Authorization header is required and must contain a user access token. * The user access token must include the **user:read:broadcast** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
Videos2
GET/videosGets information about one or more published videos.
Parameters
NameInRequiredType
idquerynoarray
user_idquerynostring
game_idquerynostring
languagequerynostring
periodquerynostring
sortquerynostring
typequerynostring
firstquerynostring
afterquerynostring
beforequerynostring
Responses
StatusDescriptionSchema
200Successfully retrieved the list of videos.GetVideosResponse
400* The request must specify either the _id_ or _user\_id_ or _game\_id_ query parameter. * The _id_, _user\_id_, and _game\_id_ query parameters are mutually exclusive; you must specify only one of them. * The value in the _id_ query parameter is not valid. * The ID in the _game\_id_ query parameter is not valid. * The value in the _type_ query parameter is not valid. * The value in the _period_ query parameter is not valid. * The value in the _sort_ query parameter is not valid.
401* The Authorization header is required and must contain an app access token or user access token. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
404* The ID in the _game\_id_ query parameter was not found. * The ID in the _id_ query parameter was not found. Returned only if all the IDs were not found; otherwise, the ID is ignored.
DELETE/videosDeletes one or more videos.
Parameters
NameInRequiredType
idqueryyesarray
Responses
StatusDescriptionSchema
200Successfully deleted the list of videos.DeleteVideosResponse
400* The _id_ query parameter is required. * The request exceeded the number of allowed _id_ query parameters.
401* The caller is not authorized to delete the specified video. * The Authorization header is required and must contain a user access token. * The user access token must include the **channel:manage:videos** scope. * The access token is not valid. * The ID specified in the Client-Id header does not match the client ID specified in the access token.
Whispers1
POST/whispersSends a whisper message to the specified user.
Parameters
NameInRequiredType
from_user_idqueryyesstring
to_user_idqueryyesstring
Request body

application/jsonSendWhisperBody

Responses
StatusDescriptionSchema
204Successfully sent the whisper message or the message was silently dropped. __Examples__ _Request:_ Send the user a whisper message. ```bash curl -X POST 'https://api.twitch.tv/helix/whispers?from_user_id=123&to_user_id=456' \ -H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \ -H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' \ -H 'Content-Type: application/json' \ -d '{"message":"hello"}' ```
400* The ID in the _from\_user\_id_ and _to\_user\_id_ query parameters must be different. * The `message` field must not contain an empty string. * The user that you're sending the whisper to doesn't allow whisper messages (see the **Block Whispers from Strangers** setting in your [Security and Privacy](https://www.twitch.tv/settings/security) settings). * Whisper messages may not be sent to suspended users. * The ID in the _from\_user\_id_ query parameter is not valid. * The ID in the _to\_user\_id_ query parameter is not valid.
401* The user in the _from\_user\_id_ query parameter must have a verified phone number. * The Authorization header is required and must contain a user access token. * The user access token must include the **user:manage:whispers** scope. * The access token is not valid. * This ID in _from\_user\_id_ must match the user ID in the user access token. * The client ID specified in the Client-Id header does not match the client ID specified in the access token.
403* Suspended users may not send whisper messages. * The account that's sending the message doesn't allow sending whispers.
404* The ID in _to\_user\_id_ was not found.
429* The sending user exceeded the number of whisper requests that they may make. See Rate Limits for this endpoint above.

Try it

Developer reference

Base URLhttps://api.twitch.tv/helix
Rate limit

Token-bucket model with separate buckets for app-access and user-access tokens (user-token limits apply per client ID per user per minute); each call costs points (default 1 per request unless an endpoint's own docs say otherwise), and exceeding the bucket within a 1-minute window returns HTTP 429. Responses carry Ratelimit-Limit, Ratelimit-Remaining, and Ratelimit-Reset headers (e.g. Ratelimit-Limit: 800).

Key endpoints
  • GET/users
  • GET/streams
  • GET/games/top
  • GET/channels
  • GET/clips