From 6f532f453637e41afdbb56afbdaaacfa06d2c36a Mon Sep 17 00:00:00 2001 From: HavenDV Date: Mon, 27 May 2024 12:11:33 +0400 Subject: [PATCH] fix: Fixed issue with xml docs. --- src/libs/Directory.Build.props | 2 +- .../Generation/Data.Models.cs | 15 +- .../Generation/Sources.Clients.cs | 6 +- .../Resources/twitch.json | 21066 ++++++++++++++++ .../_#G.VectorStoresClient.g.verified.cs | 1 - .../_#G.VectorStoresClient.g.verified.cs | 1 - .../NewtonsoftJson/_#G.Api.g.verified.cs | 1 - .../SystemTextJson/_#G.Api.g.verified.cs | 1 - .../NewtonsoftJson/_#G.Api.g.verified.cs | 1 - .../SystemTextJson/_#G.Api.g.verified.cs | 1 - .../Tests.Twitch_Diagnostics.verified.txt | 1 + .../_#G.AdsClient.GetAdSchedule.g.verified.cs | 36 + .../_#G.AdsClient.SnoozeNextAd.g.verified.cs | 36 + ...#G.AdsClient.StartCommercial.g.verified.cs | 65 + .../_#G.AdsClient.g.verified.cs | 36 + ...Client.GetExtensionAnalytics.g.verified.cs | 51 + ...yticsClient.GetGameAnalytics.g.verified.cs | 51 + .../_#G.AnalyticsClient.g.verified.cs | 36 + .../NewtonsoftJson/_#G.Api.g.verified.cs | 195 + ...itsClient.GetBitsLeaderboard.g.verified.cs | 51 + ..._#G.BitsClient.GetCheermotes.g.verified.cs | 36 + ...ent.GetExtensionTransactions.g.verified.cs | 43 + .../_#G.BitsClient.g.verified.cs | 36 + ...tContentClassificationLabels.g.verified.cs | 36 + .../_#G.CCLsClient.g.verified.cs | 36 + ...tsClient.CreateCustomRewards.g.verified.cs | 103 + ...ntsClient.DeleteCustomReward.g.verified.cs | 32 + ...PointsClient.GetCustomReward.g.verified.cs | 41 + ...nt.GetCustomRewardRedemption.g.verified.cs | 62 + ...ntsClient.UpdateCustomReward.g.verified.cs | 111 + ...lient.UpdateRedemptionStatus.g.verified.cs | 78 + .../_#G.ChannelPointsClient.g.verified.cs | 36 + ...nelsClient.GetChannelEditors.g.verified.cs | 36 + ...lsClient.GetChannelFollowers.g.verified.cs | 42 + ...Client.GetChannelInformation.g.verified.cs | 37 + ...lsClient.GetFollowedChannels.g.verified.cs | 42 + ...ent.ModifyChannelInformation.g.verified.cs | 79 + .../_#G.ChannelsClient.g.verified.cs | 36 + ...ityClient.GetCharityCampaign.g.verified.cs | 36 + ....GetCharityCampaignDonations.g.verified.cs | 40 + .../_#G.CharityClient.g.verified.cs | 36 + ...tClient.GetChannelChatBadges.g.verified.cs | 36 + ....ChatClient.GetChannelEmotes.g.verified.cs | 36 + ...G.ChatClient.GetChatSettings.g.verified.cs | 38 + .../_#G.ChatClient.GetChatters.g.verified.cs | 42 + .../_#G.ChatClient.GetEmoteSets.g.verified.cs | 37 + ...atClient.GetGlobalChatBadges.g.verified.cs | 34 + ...G.ChatClient.GetGlobalEmotes.g.verified.cs | 34 + ....ChatClient.GetUserChatColor.g.verified.cs | 37 + ..._#G.ChatClient.GetUserEmotes.g.verified.cs | 40 + ..._#G.ChatClient.SendAShoutout.g.verified.cs | 34 + ...tClient.SendChatAnnouncement.g.verified.cs | 69 + ...G.ChatClient.SendChatMessage.g.verified.cs | 71 + ...hatClient.UpdateChatSettings.g.verified.cs | 96 + ...atClient.UpdateUserChatColor.g.verified.cs | 51 + .../_#G.ChatClient.g.verified.cs | 36 + .../_#G.ClipsClient.CreateClip.g.verified.cs | 38 + .../_#G.ClipsClient.GetClips.g.verified.cs | 53 + .../_#G.ClipsClient.g.verified.cs | 36 + ...onduitsClient.CreateConduits.g.verified.cs | 62 + ...ConduitsClient.DeleteConduit.g.verified.cs | 30 + ...duitsClient.GetConduitShards.g.verified.cs | 40 + ...G.ConduitsClient.GetConduits.g.verified.cs | 34 + ...tsClient.UpdateConduitShards.g.verified.cs | 65 + ...onduitsClient.UpdateConduits.g.verified.cs | 65 + .../_#G.ConduitsClient.g.verified.cs | 36 + ...sClient.GetDropsEntitlements.g.verified.cs | 53 + ...ient.UpdateDropsEntitlements.g.verified.cs | 65 + .../_#G.EntitlementsClient.g.verified.cs | 36 + ...t.CreateEventsubSubscription.g.verified.cs | 71 + ...t.DeleteEventsubSubscription.g.verified.cs | 30 + ...ent.GetEventsubSubscriptions.g.verified.cs | 136 + .../_#G.EventSubClient.g.verified.cs | 36 + ...Client.CreateExtensionSecret.g.verified.cs | 38 + ...ent.GetExtensionBitsProducts.g.verified.cs | 36 + ...xtensionConfigurationSegment.g.verified.cs | 47 + ...ent.GetExtensionLiveChannels.g.verified.cs | 40 + ...nsClient.GetExtensionSecrets.g.verified.cs | 34 + ...tensionsClient.GetExtensions.g.verified.cs | 38 + ...Client.GetReleasedExtensions.g.verified.cs | 38 + ...ent.SendExtensionChatMessage.g.verified.cs | 67 + ...t.SendExtensionPubsubMessage.g.verified.cs | 65 + ...xtensionConfigurationSegment.g.verified.cs | 68 + ...tensionRequiredConfiguration.g.verified.cs | 67 + ...t.UpdateExtensionBitsProduct.g.verified.cs | 77 + .../_#G.ExtensionsClient.g.verified.cs | 36 + .../_#G.GamesClient.GetGames.g.verified.cs | 41 + .../_#G.GamesClient.GetTopGames.g.verified.cs | 40 + .../_#G.GamesClient.g.verified.cs | 36 + ....GoalsClient.GetCreatorGoals.g.verified.cs | 36 + .../_#G.GoalsClient.g.verified.cs | 36 + ...arClient.AssignGuestStarSlot.g.verified.cs | 38 + ...lient.CreateGuestStarSession.g.verified.cs | 36 + ...Client.DeleteGuestStarInvite.g.verified.cs | 36 + ...arClient.DeleteGuestStarSlot.g.verified.cs | 40 + ...arClient.EndGuestStarSession.g.verified.cs | 32 + ....GetChannelGuestStarSettings.g.verified.cs | 38 + ...arClient.GetGuestStarInvites.g.verified.cs | 40 + ...arClient.GetGuestStarSession.g.verified.cs | 38 + ...arClient.SendGuestStarInvite.g.verified.cs | 36 + ...dateChannelGuestStarSettings.g.verified.cs | 73 + ...arClient.UpdateGuestStarSlot.g.verified.cs | 38 + ....UpdateGuestStarSlotSettings.g.verified.cs | 44 + .../_#G.GuestStarClient.g.verified.cs | 36 + ...ainClient.GetHypeTrainEvents.g.verified.cs | 40 + .../_#G.HypeTrainClient.g.verified.cs | 36 + ...#G.Models.AddBlockedTermBody.g.verified.cs | 28 + ...odels.AddBlockedTermResponse.g.verified.cs | 24 + .../_#G.Models.AutoModSettings.g.verified.cs | 84 + .../_#G.Models.AutoModStatus.g.verified.cs | 30 + .../_#G.Models.BanUserBody.g.verified.cs | 24 + .../_#G.Models.BanUserBodyData.g.verified.cs | 40 + .../_#G.Models.BanUserResponse.g.verified.cs | 24 + ...G.Models.BanUserResponseData.g.verified.cs | 48 + .../_#G.Models.BannedUser.g.verified.cs | 72 + .../_#G.Models.BitsLeaderboard.g.verified.cs | 48 + .../_#G.Models.BlockUserReason.g.verified.cs | 29 + ...odels.BlockUserSourceContext.g.verified.cs | 24 + .../_#G.Models.BlockedTerm.g.verified.cs | 64 + ...dels.BroadcasterSubscription.g.verified.cs | 94 + ....BroadcasterSubscriptionTier.g.verified.cs | 33 + .../_#G.Models.Category.g.verified.cs | 36 + .../_#G.Models.Channel.g.verified.cs | 92 + .../_#G.Models.ChannelEditor.g.verified.cs | 36 + .../_#G.Models.ChannelEmote.g.verified.cs | 88 + ...Models.ChannelEmoteEmoteType.g.verified.cs | 33 + ...#G.Models.ChannelEmoteFormat.g.verified.cs | 24 + ...#G.Models.ChannelEmoteImages.g.verified.cs | 38 + ..._#G.Models.ChannelEmoteScale.g.verified.cs | 29 + ...Models.ChannelEmoteThemeMode.g.verified.cs | 24 + ...#G.Models.ChannelInformation.g.verified.cs | 84 + ...ChannelStreamScheduleSegment.g.verified.cs | 60 + ...treamScheduleSegmentCategory.g.verified.cs | 30 + .../_#G.Models.ChannelTeam.g.verified.cs | 90 + .../_#G.Models.CharityCampaign.g.verified.cs | 78 + ...CharityCampaignCurrentAmount.g.verified.cs | 38 + ...dels.CharityCampaignDonation.g.verified.cs | 54 + ...harityCampaignDonationAmount.g.verified.cs | 38 + ....CharityCampaignTargetAmount.g.verified.cs | 38 + .../_#G.Models.ChatBadge.g.verified.cs | 30 + ..._#G.Models.ChatBadgeVersions.g.verified.cs | 66 + .../_#G.Models.ChatSettings.g.verified.cs | 102 + ...G.Models.ChatSettingsUpdated.g.verified.cs | 98 + .../_#G.Models.Chatter.g.verified.cs | 36 + ...odels.CheckAutoModStatusBody.g.verified.cs | 24 + ...s.CheckAutoModStatusBodyData.g.verified.cs | 30 + ...s.CheckAutoModStatusResponse.g.verified.cs | 24 + ...heckUserSubscriptionResponse.g.verified.cs | 24 + .../_#G.Models.Cheermote.g.verified.cs | 60 + ....Models.CheermoteImageFormat.g.verified.cs | 48 + ...G.Models.CheermoteImageTheme.g.verified.cs | 30 + .../_#G.Models.CheermoteImages.g.verified.cs | 30 + .../_#G.Models.CheermoteTiers.g.verified.cs | 62 + .../_#G.Models.CheermoteTiersId.g.verified.cs | 57 + .../_#G.Models.CheermoteType.g.verified.cs | 45 + .../_#G.Models.Clip.g.verified.cs | 122 + ...s.ContentClassificationLabel.g.verified.cs | 36 + ...nelStreamScheduleSegmentBody.g.verified.cs | 54 + ...treamScheduleSegmentResponse.g.verified.cs | 24 + ...mScheduleSegmentResponseData.g.verified.cs | 48 + ...eSegmentResponseDataVacation.g.verified.cs | 30 + ...#G.Models.CreateClipResponse.g.verified.cs | 24 + ...odels.CreateClipResponseData.g.verified.cs | 32 + ...#G.Models.CreateConduitsBody.g.verified.cs | 24 + ...odels.CreateConduitsResponse.g.verified.cs | 24 + ...s.CreateConduitsResponseData.g.verified.cs | 30 + ...dels.CreateCustomRewardsBody.g.verified.cs | 96 + ....CreateCustomRewardsResponse.g.verified.cs | 24 + ...eateEventSubSubscriptionBody.g.verified.cs | 42 + ...SubSubscriptionBodyTransport.g.verified.cs | 53 + ...scriptionBodyTransportMethod.g.verified.cs | 33 + ...EventSubSubscriptionBodyType.g.verified.cs | 364 + ...EventSubSubscriptionResponse.g.verified.cs | 42 + ...reateExtensionSecretResponse.g.verified.cs | 24 + ...eateGuestStarSessionResponse.g.verified.cs | 24 + .../_#G.Models.CreatePollBody.g.verified.cs | 54 + ...Models.CreatePollBodyChoices.g.verified.cs | 24 + ...#G.Models.CreatePollResponse.g.verified.cs | 24 + ....Models.CreatePredictionBody.g.verified.cs | 42 + ...CreatePredictionBodyOutcomes.g.verified.cs | 24 + ...els.CreatePredictionResponse.g.verified.cs | 24 + ...odels.CreateStreamMarkerBody.g.verified.cs | 30 + ...s.CreateStreamMarkerResponse.g.verified.cs | 24 + .../_#G.Models.CreatorGoal.g.verified.cs | 86 + .../_#G.Models.CreatorGoalType.g.verified.cs | 45 + .../_#G.Models.CustomReward.g.verified.cs | 138 + ...els.CustomRewardDefaultImage.g.verified.cs | 36 + ...mRewardGlobalCooldownSetting.g.verified.cs | 30 + ..._#G.Models.CustomRewardImage.g.verified.cs | 36 + ...tomRewardMaxPerStreamSetting.g.verified.cs | 30 + ...rdMaxPerUserPerStreamSetting.g.verified.cs | 30 + ...odels.CustomRewardRedemption.g.verified.cs | 88 + ...CustomRewardRedemptionReward.g.verified.cs | 42 + ...CustomRewardRedemptionStatus.g.verified.cs | 33 + ....Models.DeleteVideosResponse.g.verified.cs | 24 + .../_#G.Models.DropsEntitlement.g.verified.cs | 63 + ...EntitlementFulfillmentStatus.g.verified.cs | 27 + ...dels.DropsEntitlementUpdated.g.verified.cs | 36 + ...ropsEntitlementUpdatedStatus.g.verified.cs | 45 + .../_#G.Models.Emote.g.verified.cs | 88 + .../_#G.Models.EmoteEmoteType.g.verified.cs | 33 + .../_#G.Models.EmoteFormat.g.verified.cs | 24 + .../_#G.Models.EmoteImages.g.verified.cs | 38 + .../_#G.Models.EmoteScale.g.verified.cs | 29 + .../_#G.Models.EmoteThemeMode.g.verified.cs | 24 + ....EndGuestStarSessionResponse.g.verified.cs | 24 + .../_#G.Models.EndPollBody.g.verified.cs | 39 + ..._#G.Models.EndPollBodyStatus.g.verified.cs | 27 + .../_#G.Models.EndPollResponse.g.verified.cs | 24 + ..._#G.Models.EndPredictionBody.g.verified.cs | 50 + ...dels.EndPredictionBodyStatus.g.verified.cs | 37 + ...Models.EndPredictionResponse.g.verified.cs | 24 + ....Models.EventSubSubscription.g.verified.cs | 83 + ...s.EventSubSubscriptionStatus.g.verified.cs | 111 + ...ventSubSubscriptionTransport.g.verified.cs | 51 + ...bSubscriptionTransportMethod.g.verified.cs | 27 + ...els.EventSubSubscriptionType.g.verified.cs | 364 + .../_#G.Models.Extension.g.verified.cs | 175 + ...#G.Models.ExtensionAnalytics.g.verified.cs | 42 + ....ExtensionAnalyticsDateRange.g.verified.cs | 30 + ....Models.ExtensionBitsProduct.g.verified.cs | 54 + ...els.ExtensionBitsProductCost.g.verified.cs | 32 + ...ExtensionBitsProductCostType.g.verified.cs | 21 + ...tensionConfigurationLocation.g.verified.cs | 33 + ...xtensionConfigurationSegment.g.verified.cs | 46 + ...nConfigurationSegmentSegment.g.verified.cs | 33 + ..._#G.Models.ExtensionIconUrls.g.verified.cs | 36 + ....Models.ExtensionLiveChannel.g.verified.cs | 48 + .../_#G.Models.ExtensionSecret.g.verified.cs | 30 + ...odels.ExtensionSecretSecrets.g.verified.cs | 36 + .../_#G.Models.ExtensionState.g.verified.cs | 69 + ...ionSubscriptionsSupportLevel.g.verified.cs | 27 + ....Models.ExtensionTransaction.g.verified.cs | 80 + ...ensionTransactionProductData.g.verified.cs | 60 + ...onTransactionProductDataCost.g.verified.cs | 32 + ...ansactionProductDataCostType.g.verified.cs | 21 + ...ensionTransactionProductType.g.verified.cs | 21 + .../_#G.Models.ExtensionViews.g.verified.cs | 48 + ...dels.ExtensionViewsComponent.g.verified.cs | 60 + ....Models.ExtensionViewsConfig.g.verified.cs | 30 + ....Models.ExtensionViewsMobile.g.verified.cs | 24 + ...G.Models.ExtensionViewsPanel.g.verified.cs | 36 + ...s.ExtensionViewsVideoOverlay.g.verified.cs | 30 + .../_#G.Models.Game.g.verified.cs | 42 + .../_#G.Models.GameAnalytics.g.verified.cs | 42 + ...odels.GameAnalyticsDateRange.g.verified.cs | 30 + ...Models.GetAdScheduleResponse.g.verified.cs | 24 + ...ls.GetAdScheduleResponseData.g.verified.cs | 54 + ...els.GetAllStreamTagsResponse.g.verified.cs | 33 + ...StreamTagsResponsePagination.g.verified.cs | 24 + ...s.GetAutoModSettingsResponse.g.verified.cs | 24 + ...odels.GetBannedUsersResponse.g.verified.cs | 30 + ...annedUsersResponsePagination.g.verified.cs | 24 + ...els.GetBitsLeaderboardPeriod.g.verified.cs | 39 + ...s.GetBitsLeaderboardResponse.g.verified.cs | 36 + ...LeaderboardResponseDateRange.g.verified.cs | 30 + ...dels.GetBlockedTermsResponse.g.verified.cs | 30 + ...ockedTermsResponsePagination.g.verified.cs | 24 + ...dcasterSubscriptionsResponse.g.verified.cs | 42 + ...scriptionsResponsePagination.g.verified.cs | 24 + ...GetChannelChatBadgesResponse.g.verified.cs | 24 + ...ls.GetChannelEditorsResponse.g.verified.cs | 24 + ...els.GetChannelEmotesResponse.g.verified.cs | 30 + ....GetChannelFollowersResponse.g.verified.cs | 36 + ...ChannelFollowersResponseData.g.verified.cs | 42 + ...lFollowersResponsePagination.g.verified.cs | 24 + ...nelGuestStarSettingsResponse.g.verified.cs | 51 + ...rSettingsResponseGroupLayout.g.verified.cs | 27 + ...etChannelInformationResponse.g.verified.cs | 24 + ...hannelStreamScheduleResponse.g.verified.cs | 24 + ...elStreamScheduleResponseData.g.verified.cs | 54 + ...heduleResponseDataPagination.g.verified.cs | 24 + ...ScheduleResponseDataVacation.g.verified.cs | 30 + ...dels.GetChannelTeamsResponse.g.verified.cs | 24 + ...ityCampaignDonationsResponse.g.verified.cs | 30 + ...nDonationsResponsePagination.g.verified.cs | 24 + ...s.GetCharityCampaignResponse.g.verified.cs | 24 + ...dels.GetChatSettingsResponse.g.verified.cs | 24 + ...G.Models.GetChattersResponse.g.verified.cs | 36 + ...etChattersResponsePagination.g.verified.cs | 24 + ...Models.GetCheermotesResponse.g.verified.cs | 24 + .../_#G.Models.GetClipsResponse.g.verified.cs | 30 + ...s.GetClipsResponsePagination.g.verified.cs | 24 + ...els.GetConduitShardsResponse.g.verified.cs | 30 + ...GetConduitShardsResponseData.g.verified.cs | 47 + ...duitShardsResponseDataStatus.g.verified.cs | 75 + ...tShardsResponseDataTransport.g.verified.cs | 51 + ...sResponseDataTransportMethod.g.verified.cs | 27 + ...duitShardsResponsePagination.g.verified.cs | 24 + ...G.Models.GetConduitsResponse.g.verified.cs | 24 + ...dels.GetConduitsResponseData.g.verified.cs | 30 + ...ClassificationLabelsResponse.g.verified.cs | 24 + ...dels.GetCreatorGoalsResponse.g.verified.cs | 24 + ...stomRewardRedemptionResponse.g.verified.cs | 24 + ...etCustomRewardRedemptionSort.g.verified.cs | 24 + ...CustomRewardRedemptionStatus.g.verified.cs | 29 + ...dels.GetCustomRewardResponse.g.verified.cs | 24 + ...ntitlementsFulfillmentStatus.g.verified.cs | 24 + ...GetDropsEntitlementsResponse.g.verified.cs | 30 + ...titlementsResponsePagination.g.verified.cs | 24 + ....Models.GetEmoteSetsResponse.g.verified.cs | 30 + ...ventSubSubscriptionsResponse.g.verified.cs | 48 + ...scriptionsResponsePagination.g.verified.cs | 24 + ...tEventsubSubscriptionsStatus.g.verified.cs | 94 + ...GetEventsubSubscriptionsType.g.verified.cs | 364 + ...etExtensionAnalyticsResponse.g.verified.cs | 30 + ...nAnalyticsResponsePagination.g.verified.cs | 24 + ...ls.GetExtensionAnalyticsType.g.verified.cs | 19 + ...xtensionBitsProductsResponse.g.verified.cs | 24 + ...ConfigurationSegmentResponse.g.verified.cs | 24 + ...nConfigurationSegmentSegment.g.verified.cs | 29 + ...xtensionLiveChannelsResponse.g.verified.cs | 30 + ....GetExtensionSecretsResponse.g.verified.cs | 24 + ...xtensionTransactionsResponse.g.verified.cs | 30 + ...ansactionsResponsePagination.g.verified.cs | 24 + ...Models.GetExtensionsResponse.g.verified.cs | 24 + ....GetFollowedChannelsResponse.g.verified.cs | 36 + ...FollowedChannelsResponseData.g.verified.cs | 42 + ...edChannelsResponsePagination.g.verified.cs | 24 + ...s.GetFollowedStreamsResponse.g.verified.cs | 30 + ...wedStreamsResponsePagination.g.verified.cs | 24 + ...els.GetGameAnalyticsResponse.g.verified.cs | 30 + ...eAnalyticsResponsePagination.g.verified.cs | 24 + ....Models.GetGameAnalyticsType.g.verified.cs | 19 + .../_#G.Models.GetGamesResponse.g.verified.cs | 24 + ....GetGlobalChatBadgesResponse.g.verified.cs | 24 + ...dels.GetGlobalEmotesResponse.g.verified.cs | 30 + ....GetGuestStarInvitesResponse.g.verified.cs | 24 + ....GetGuestStarSessionResponse.g.verified.cs | 24 + ...s.GetHypeTrainEventsResponse.g.verified.cs | 30 + ...rainEventsResponsePagination.g.verified.cs | 24 + ...GetModeratedChannelsResponse.g.verified.cs | 30 + ...oderatedChannelsResponseData.g.verified.cs | 36 + ...edChannelsResponsePagination.g.verified.cs | 24 + ...Models.GetModeratorsResponse.g.verified.cs | 30 + ...ModeratorsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetPollsResponse.g.verified.cs | 30 + ...s.GetPollsResponsePagination.g.verified.cs | 24 + ...odels.GetPredictionsResponse.g.verified.cs | 30 + ...redictionsResponsePagination.g.verified.cs | 24 + ...etReleasedExtensionsResponse.g.verified.cs | 24 + ....GetShieldModeStatusResponse.g.verified.cs | 24 + ...ShieldModeStatusResponseData.g.verified.cs | 48 + ....Models.GetStreamKeyResponse.g.verified.cs | 24 + ...els.GetStreamKeyResponseData.g.verified.cs | 24 + ...els.GetStreamMarkersResponse.g.verified.cs | 30 + ...eamMarkersResponsePagination.g.verified.cs | 24 + ...Models.GetStreamTagsResponse.g.verified.cs | 26 + ...#G.Models.GetStreamsResponse.g.verified.cs | 30 + ...GetStreamsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetStreamsType.g.verified.cs | 24 + .../_#G.Models.GetTeamsResponse.g.verified.cs | 24 + ...G.Models.GetTopGamesResponse.g.verified.cs | 30 + ...etTopGamesResponsePagination.g.verified.cs | 24 + ...els.GetUnbanRequestsResponse.g.verified.cs | 30 + ...GetUnbanRequestsResponseData.g.verified.cs | 114 + ...anRequestsResponsePagination.g.verified.cs | 24 + ...UserActiveExtensionsResponse.g.verified.cs | 24 + ...ActiveExtensionsResponseData.g.verified.cs | 36 + ...els.GetUserBlockListResponse.g.verified.cs | 24 + ...els.GetUserChatColorResponse.g.verified.cs | 24 + ...Models.GetUserEmotesResponse.g.verified.cs | 40 + ...ls.GetUserEmotesResponseData.g.verified.cs | 80 + ...rEmotesResponseDataEmoteType.g.verified.cs | 33 + ...UserEmotesResponsePagination.g.verified.cs | 26 + ...ls.GetUserExtensionsResponse.g.verified.cs | 24 + .../_#G.Models.GetUsersResponse.g.verified.cs | 24 + .../_#G.Models.GetVIPsResponse.g.verified.cs | 30 + ...ls.GetVIPsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetVideosPeriod.g.verified.cs | 34 + ..._#G.Models.GetVideosResponse.g.verified.cs | 30 + ....GetVideosResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetVideosSort.g.verified.cs | 29 + .../_#G.Models.GetVideosType.g.verified.cs | 34 + .../_#G.Models.GlobalEmote.g.verified.cs | 66 + ..._#G.Models.GlobalEmoteFormat.g.verified.cs | 24 + ..._#G.Models.GlobalEmoteImages.g.verified.cs | 38 + .../_#G.Models.GlobalEmoteScale.g.verified.cs | 29 + ....Models.GlobalEmoteThemeMode.g.verified.cs | 24 + .../_#G.Models.Guest.g.verified.cs | 77 + ...#G.Models.GuestAudioSettings.g.verified.cs | 36 + .../_#G.Models.GuestStarInvite.g.verified.cs | 64 + .../_#G.Models.GuestStarSession.g.verified.cs | 30 + ...#G.Models.GuestVideoSettings.g.verified.cs | 36 + .../_#G.Models.HypeTrainEvent.g.verified.cs | 48 + ...dels.HypeTrainEventEventData.g.verified.cs | 78 + ...entEventDataLastContribution.g.verified.cs | 40 + ...ventDataLastContributionType.g.verified.cs | 33 + ...entEventDataTopContributions.g.verified.cs | 40 + ...ventDataTopContributionsType.g.verified.cs | 33 + ...anageHeldAutoModMessagesBody.g.verified.cs | 39 + ...eldAutoModMessagesBodyAction.g.verified.cs | 27 + ...ModifyChannelInformationBody.g.verified.cs | 62 + ...yContentClassificationLabels.g.verified.cs | 36 + ...ontentClassificationLabelsId.g.verified.cs | 45 + .../_#G.Models.Poll.g.verified.cs | 109 + .../_#G.Models.PollChoices.g.verified.cs | 48 + .../_#G.Models.PollStatus.g.verified.cs | 51 + .../_#G.Models.Prediction.g.verified.cs | 95 + ..._#G.Models.PredictionOutcome.g.verified.cs | 59 + ...odels.PredictionOutcomeColor.g.verified.cs | 29 + ...edictionOutcomeTopPredictors.g.verified.cs | 48 + .../_#G.Models.PredictionStatus.g.verified.cs | 39 + ...ResolveUnbanRequestsResponse.g.verified.cs | 24 + ...lveUnbanRequestsResponseData.g.verified.cs | 111 + ...els.SearchCategoriesResponse.g.verified.cs | 24 + ...odels.SearchChannelsResponse.g.verified.cs | 24 + ...els.SendChatAnnouncementBody.g.verified.cs | 38 + ...endChatAnnouncementBodyColor.g.verified.cs | 47 + ...G.Models.SendChatMessageBody.g.verified.cs | 42 + ...dels.SendChatMessageResponse.g.verified.cs | 24 + ....SendChatMessageResponseData.g.verified.cs | 36 + ...essageResponseDataDropReason.g.verified.cs | 30 + ...SendExtensionChatMessageBody.g.verified.cs | 36 + ...ndExtensionPubSubMessageBody.g.verified.cs | 48 + ...nsionPubSubMessageBodyTarget.g.verified.cs | 29 + .../_#G.Models.SendWhisperBody.g.verified.cs | 31 + ...sionConfigurationSegmentBody.g.verified.cs | 52 + ...figurationSegmentBodySegment.g.verified.cs | 33 + ...ionRequiredConfigurationBody.g.verified.cs | 36 + ....Models.SnoozeNextAdResponse.g.verified.cs | 24 + ...els.SnoozeNextAdResponseData.g.verified.cs | 36 + ...G.Models.StartCommercialBody.g.verified.cs | 30 + ...dels.StartCommercialResponse.g.verified.cs | 24 + ....StartCommercialResponseData.g.verified.cs | 36 + ..._#G.Models.StartRaidResponse.g.verified.cs | 24 + ...Models.StartRaidResponseData.g.verified.cs | 30 + .../_#G.Models.Stream.g.verified.cs | 114 + ...G.Models.StreamMarkerCreated.g.verified.cs | 42 + .../_#G.Models.StreamMarkers.g.verified.cs | 54 + ....Models.StreamMarkersMarkers.g.verified.cs | 48 + .../_#G.Models.StreamTag.g.verified.cs | 42 + .../_#G.Models.StreamType.g.verified.cs | 23 + .../_#G.Models.Team.g.verified.cs | 78 + .../_#G.Models.TeamUsers.g.verified.cs | 36 + ...ls.UpdateAutoModSettingsBody.g.verified.cs | 72 + ...pdateAutoModSettingsResponse.g.verified.cs | 24 + ...ChannelGuestStarSettingsBody.g.verified.cs | 53 + ...tStarSettingsBodyGroupLayout.g.verified.cs | 39 + ...nelStreamScheduleSegmentBody.g.verified.cs | 58 + ...treamScheduleSegmentResponse.g.verified.cs | 24 + ...mScheduleSegmentResponseData.g.verified.cs | 48 + ...eSegmentResponseDataVacation.g.verified.cs | 30 + ...odels.UpdateChatSettingsBody.g.verified.cs | 94 + ...s.UpdateChatSettingsResponse.g.verified.cs | 24 + ...dels.UpdateConduitShardsBody.g.verified.cs | 30 + ...pdateConduitShardsBodyShards.g.verified.cs | 30 + ...uitShardsBodyShardsTransport.g.verified.cs | 45 + ...rdsBodyShardsTransportMethod.g.verified.cs | 27 + ....UpdateConduitShardsResponse.g.verified.cs | 30 + ...ateConduitShardsResponseData.g.verified.cs | 47 + ...duitShardsResponseDataStatus.g.verified.cs | 75 + ...tShardsResponseDataTransport.g.verified.cs | 51 + ...sResponseDataTransportMethod.g.verified.cs | 27 + ...eConduitShardsResponseErrors.g.verified.cs | 44 + ...#G.Models.UpdateConduitsBody.g.verified.cs | 30 + ...odels.UpdateConduitsResponse.g.verified.cs | 24 + ...s.UpdateConduitsResponseData.g.verified.cs | 30 + ...odels.UpdateCustomRewardBody.g.verified.cs | 102 + ...s.UpdateCustomRewardResponse.g.verified.cs | 24 + ....UpdateDropsEntitlementsBody.g.verified.cs | 33 + ...lementsBodyFulfillmentStatus.g.verified.cs | 27 + ...ateDropsEntitlementsResponse.g.verified.cs | 24 + ...dateExtensionBitsProductBody.g.verified.cs | 54 + ...ExtensionBitsProductBodyCost.g.verified.cs | 32 + ...nsionBitsProductBodyCostType.g.verified.cs | 21 + ...ExtensionBitsProductResponse.g.verified.cs | 24 + ...s.UpdateRedemptionStatusBody.g.verified.cs | 29 + ...teRedemptionStatusBodyStatus.g.verified.cs | 29 + ...dateRedemptionStatusResponse.g.verified.cs | 24 + ...s.UpdateShieldModeStatusBody.g.verified.cs | 24 + ...dateShieldModeStatusResponse.g.verified.cs | 24 + ...ShieldModeStatusResponseData.g.verified.cs | 48 + ...els.UpdateUserChatColorColor.g.verified.cs | 89 + ...els.UpdateUserExtensionsBody.g.verified.cs | 28 + ...UpdateUserExtensionsResponse.g.verified.cs | 24 + ...teUserExtensionsResponseData.g.verified.cs | 36 + ...#G.Models.UpdateUserResponse.g.verified.cs | 24 + .../_#G.Models.User.g.verified.cs | 97 + .../_#G.Models.UserBlockList.g.verified.cs | 36 + ...G.Models.UserBroadcasterType.g.verified.cs | 28 + .../_#G.Models.UserChatColor.g.verified.cs | 42 + .../_#G.Models.UserExtension.g.verified.cs | 53 + ...odels.UserExtensionComponent.g.verified.cs | 54 + ...UserExtensionComponentUpdate.g.verified.cs | 48 + ....Models.UserExtensionOverlay.g.verified.cs | 42 + ...s.UserExtensionOverlayUpdate.g.verified.cs | 36 + ...#G.Models.UserExtensionPanel.g.verified.cs | 42 + ...els.UserExtensionPanelUpdate.g.verified.cs | 36 + ..._#G.Models.UserExtensionType.g.verified.cs | 34 + .../_#G.Models.UserModerator.g.verified.cs | 36 + .../_#G.Models.UserSubscription.g.verified.cs | 70 + ....Models.UserSubscriptionTier.g.verified.cs | 33 + .../_#G.Models.UserType.g.verified.cs | 34 + .../_#G.Models.UserVip.g.verified.cs | 36 + .../_#G.Models.Video.g.verified.cs | 124 + ...#G.Models.VideoMutedSegments.g.verified.cs | 30 + .../_#G.Models.VideoType.g.verified.cs | 33 + ...erationClient.AddBlockedTerm.g.verified.cs | 72 + ...onClient.AddChannelModerator.g.verified.cs | 32 + ...derationClient.AddChannelVip.g.verified.cs | 32 + ..._#G.ModerationClient.BanUser.g.verified.cs | 72 + ...ionClient.CheckAutomodStatus.g.verified.cs | 67 + ...ionClient.DeleteChatMessages.g.verified.cs | 34 + ...ionClient.GetAutomodSettings.g.verified.cs | 38 + ...erationClient.GetBannedUsers.g.verified.cs | 45 + ...rationClient.GetBlockedTerms.g.verified.cs | 42 + ...nClient.GetModeratedChannels.g.verified.cs | 40 + ...derationClient.GetModerators.g.verified.cs | 43 + ...onClient.GetShieldModeStatus.g.verified.cs | 38 + ...ationClient.GetUnbanRequests.g.verified.cs | 46 + ..._#G.ModerationClient.GetVips.g.verified.cs | 43 + ...nt.ManageHeldAutomodMessages.g.verified.cs | 62 + ...tionClient.RemoveBlockedTerm.g.verified.cs | 34 + ...lient.RemoveChannelModerator.g.verified.cs | 32 + ...ationClient.RemoveChannelVip.g.verified.cs | 32 + ...nClient.ResolveUnbanRequests.g.verified.cs | 44 + ...G.ModerationClient.UnbanUser.g.verified.cs | 34 + ...Client.UpdateAutomodSettings.g.verified.cs | 96 + ...lient.UpdateShieldModeStatus.g.verified.cs | 72 + .../_#G.ModerationClient.g.verified.cs | 36 + .../_#G.PollsClient.CreatePoll.g.verified.cs | 77 + .../_#G.PollsClient.EndPoll.g.verified.cs | 68 + .../_#G.PollsClient.GetPolls.g.verified.cs | 43 + .../_#G.PollsClient.g.verified.cs | 36 + ...tionsClient.CreatePrediction.g.verified.cs | 71 + ...dictionsClient.EndPrediction.g.verified.cs | 71 + ...ictionsClient.GetPredictions.g.verified.cs | 43 + .../_#G.PredictionsClient.g.verified.cs | 36 + .../_#G.RaidsClient.CancelARaid.g.verified.cs | 30 + .../_#G.RaidsClient.StartARaid.g.verified.cs | 38 + .../_#G.RaidsClient.g.verified.cs | 36 + ...ChannelStreamScheduleSegment.g.verified.cs | 82 + ...ChannelStreamScheduleSegment.g.verified.cs | 32 + ...leClient.GetChannelIcalendar.g.verified.cs | 30 + ...ent.GetChannelStreamSchedule.g.verified.cs | 47 + ....UpdateChannelStreamSchedule.g.verified.cs | 38 + ...ChannelStreamScheduleSegment.g.verified.cs | 87 + .../_#G.ScheduleClient.g.verified.cs | 36 + ...earchClient.SearchCategories.g.verified.cs | 40 + ....SearchClient.SearchChannels.g.verified.cs | 42 + .../_#G.SearchClient.g.verified.cs | 36 + ...amsClient.CreateStreamMarker.g.verified.cs | 65 + ...amsClient.GetFollowedStreams.g.verified.cs | 40 + ...G.StreamsClient.GetStreamKey.g.verified.cs | 36 + ...reamsClient.GetStreamMarkers.g.verified.cs | 44 + ..._#G.StreamsClient.GetStreams.g.verified.cs | 57 + .../_#G.StreamsClient.g.verified.cs | 36 + ...Client.CheckUserSubscription.g.verified.cs | 38 + ....GetBroadcasterSubscriptions.g.verified.cs | 45 + .../_#G.SubscriptionsClient.g.verified.cs | 36 + ....TagsClient.GetAllStreamTags.g.verified.cs | 41 + ..._#G.TagsClient.GetStreamTags.g.verified.cs | 36 + .../_#G.TagsClient.g.verified.cs | 36 + ....TeamsClient.GetChannelTeams.g.verified.cs | 36 + .../_#G.TeamsClient.GetTeams.g.verified.cs | 38 + .../_#G.TeamsClient.g.verified.cs | 36 + .../_#G.UsersClient.BlockUser.g.verified.cs | 47 + ...ient.GetUserActiveExtensions.g.verified.cs | 36 + ...UsersClient.GetUserBlockList.g.verified.cs | 40 + ...sersClient.GetUserExtensions.g.verified.cs | 34 + .../_#G.UsersClient.GetUsers.g.verified.cs | 39 + .../_#G.UsersClient.UnblockUser.g.verified.cs | 30 + .../_#G.UsersClient.UpdateUser.g.verified.cs | 36 + ...sClient.UpdateUserExtensions.g.verified.cs | 62 + .../_#G.UsersClient.g.verified.cs | 36 + ...#G.VideosClient.DeleteVideos.g.verified.cs | 37 + .../_#G.VideosClient.GetVideos.g.verified.cs | 78 + .../_#G.VideosClient.g.verified.cs | 36 + ...G.WhispersClient.SendWhisper.g.verified.cs | 66 + .../_#G.WhispersClient.g.verified.cs | 36 + .../Tests.Twitch_Diagnostics.verified.txt | 1 + .../_#G.AdsClient.GetAdSchedule.g.verified.cs | 36 + .../_#G.AdsClient.SnoozeNextAd.g.verified.cs | 36 + ...#G.AdsClient.StartCommercial.g.verified.cs | 65 + .../_#G.AdsClient.g.verified.cs | 36 + ...Client.GetExtensionAnalytics.g.verified.cs | 46 + ...yticsClient.GetGameAnalytics.g.verified.cs | 46 + .../_#G.AnalyticsClient.g.verified.cs | 36 + .../SystemTextJson/_#G.Api.g.verified.cs | 195 + ...itsClient.GetBitsLeaderboard.g.verified.cs | 42 + ..._#G.BitsClient.GetCheermotes.g.verified.cs | 36 + ...ent.GetExtensionTransactions.g.verified.cs | 43 + .../_#G.BitsClient.g.verified.cs | 36 + ...tContentClassificationLabels.g.verified.cs | 36 + .../_#G.CCLsClient.g.verified.cs | 36 + ...tsClient.CreateCustomRewards.g.verified.cs | 103 + ...ntsClient.DeleteCustomReward.g.verified.cs | 32 + ...PointsClient.GetCustomReward.g.verified.cs | 41 + ...nt.GetCustomRewardRedemption.g.verified.cs | 49 + ...ntsClient.UpdateCustomReward.g.verified.cs | 111 + ...lient.UpdateRedemptionStatus.g.verified.cs | 78 + .../_#G.ChannelPointsClient.g.verified.cs | 36 + ...nelsClient.GetChannelEditors.g.verified.cs | 36 + ...lsClient.GetChannelFollowers.g.verified.cs | 42 + ...Client.GetChannelInformation.g.verified.cs | 37 + ...lsClient.GetFollowedChannels.g.verified.cs | 42 + ...ent.ModifyChannelInformation.g.verified.cs | 79 + .../_#G.ChannelsClient.g.verified.cs | 36 + ...ityClient.GetCharityCampaign.g.verified.cs | 36 + ....GetCharityCampaignDonations.g.verified.cs | 40 + .../_#G.CharityClient.g.verified.cs | 36 + ...tClient.GetChannelChatBadges.g.verified.cs | 36 + ....ChatClient.GetChannelEmotes.g.verified.cs | 36 + ...G.ChatClient.GetChatSettings.g.verified.cs | 38 + .../_#G.ChatClient.GetChatters.g.verified.cs | 42 + .../_#G.ChatClient.GetEmoteSets.g.verified.cs | 37 + ...atClient.GetGlobalChatBadges.g.verified.cs | 34 + ...G.ChatClient.GetGlobalEmotes.g.verified.cs | 34 + ....ChatClient.GetUserChatColor.g.verified.cs | 37 + ..._#G.ChatClient.GetUserEmotes.g.verified.cs | 40 + ..._#G.ChatClient.SendAShoutout.g.verified.cs | 34 + ...tClient.SendChatAnnouncement.g.verified.cs | 69 + ...G.ChatClient.SendChatMessage.g.verified.cs | 71 + ...hatClient.UpdateChatSettings.g.verified.cs | 96 + ...atClient.UpdateUserChatColor.g.verified.cs | 32 + .../_#G.ChatClient.g.verified.cs | 36 + .../_#G.ClipsClient.CreateClip.g.verified.cs | 38 + .../_#G.ClipsClient.GetClips.g.verified.cs | 53 + .../_#G.ClipsClient.g.verified.cs | 36 + ...onduitsClient.CreateConduits.g.verified.cs | 62 + ...ConduitsClient.DeleteConduit.g.verified.cs | 30 + ...duitsClient.GetConduitShards.g.verified.cs | 40 + ...G.ConduitsClient.GetConduits.g.verified.cs | 34 + ...tsClient.UpdateConduitShards.g.verified.cs | 65 + ...onduitsClient.UpdateConduits.g.verified.cs | 65 + .../_#G.ConduitsClient.g.verified.cs | 36 + ...sClient.GetDropsEntitlements.g.verified.cs | 47 + ...ient.UpdateDropsEntitlements.g.verified.cs | 65 + .../_#G.EntitlementsClient.g.verified.cs | 36 + ...t.CreateEventsubSubscription.g.verified.cs | 71 + ...t.DeleteEventsubSubscription.g.verified.cs | 30 + ...ent.GetEventsubSubscriptions.g.verified.cs | 42 + .../_#G.EventSubClient.g.verified.cs | 36 + ...Client.CreateExtensionSecret.g.verified.cs | 38 + ...ent.GetExtensionBitsProducts.g.verified.cs | 36 + ...xtensionConfigurationSegment.g.verified.cs | 40 + ...ent.GetExtensionLiveChannels.g.verified.cs | 40 + ...nsClient.GetExtensionSecrets.g.verified.cs | 34 + ...tensionsClient.GetExtensions.g.verified.cs | 38 + ...Client.GetReleasedExtensions.g.verified.cs | 38 + ...ent.SendExtensionChatMessage.g.verified.cs | 67 + ...t.SendExtensionPubsubMessage.g.verified.cs | 65 + ...xtensionConfigurationSegment.g.verified.cs | 68 + ...tensionRequiredConfiguration.g.verified.cs | 67 + ...t.UpdateExtensionBitsProduct.g.verified.cs | 77 + .../_#G.ExtensionsClient.g.verified.cs | 36 + .../_#G.GamesClient.GetGames.g.verified.cs | 41 + .../_#G.GamesClient.GetTopGames.g.verified.cs | 40 + .../_#G.GamesClient.g.verified.cs | 36 + ....GoalsClient.GetCreatorGoals.g.verified.cs | 36 + .../_#G.GoalsClient.g.verified.cs | 36 + ...arClient.AssignGuestStarSlot.g.verified.cs | 38 + ...lient.CreateGuestStarSession.g.verified.cs | 36 + ...Client.DeleteGuestStarInvite.g.verified.cs | 36 + ...arClient.DeleteGuestStarSlot.g.verified.cs | 40 + ...arClient.EndGuestStarSession.g.verified.cs | 32 + ....GetChannelGuestStarSettings.g.verified.cs | 38 + ...arClient.GetGuestStarInvites.g.verified.cs | 40 + ...arClient.GetGuestStarSession.g.verified.cs | 38 + ...arClient.SendGuestStarInvite.g.verified.cs | 36 + ...dateChannelGuestStarSettings.g.verified.cs | 73 + ...arClient.UpdateGuestStarSlot.g.verified.cs | 38 + ....UpdateGuestStarSlotSettings.g.verified.cs | 44 + .../_#G.GuestStarClient.g.verified.cs | 36 + ...ainClient.GetHypeTrainEvents.g.verified.cs | 40 + .../_#G.HypeTrainClient.g.verified.cs | 36 + ...#G.Models.AddBlockedTermBody.g.verified.cs | 29 + ...odels.AddBlockedTermResponse.g.verified.cs | 25 + .../_#G.Models.AutoModSettings.g.verified.cs | 95 + .../_#G.Models.AutoModStatus.g.verified.cs | 32 + .../_#G.Models.BanUserBody.g.verified.cs | 25 + .../_#G.Models.BanUserBodyData.g.verified.cs | 41 + .../_#G.Models.BanUserResponse.g.verified.cs | 25 + ...G.Models.BanUserResponseData.g.verified.cs | 53 + .../_#G.Models.BannedUser.g.verified.cs | 81 + .../_#G.Models.BitsLeaderboard.g.verified.cs | 53 + .../_#G.Models.BlockUserReason.g.verified.cs | 25 + ...odels.BlockUserSourceContext.g.verified.cs | 21 + .../_#G.Models.BlockedTerm.g.verified.cs | 71 + ...dels.BroadcasterSubscription.g.verified.cs | 106 + ....BroadcasterSubscriptionTier.g.verified.cs | 29 + .../_#G.Models.Category.g.verified.cs | 39 + .../_#G.Models.Channel.g.verified.cs | 104 + .../_#G.Models.ChannelEditor.g.verified.cs | 39 + .../_#G.Models.ChannelEmote.g.verified.cs | 97 + ...Models.ChannelEmoteEmoteType.g.verified.cs | 29 + ...#G.Models.ChannelEmoteFormat.g.verified.cs | 21 + ...#G.Models.ChannelEmoteImages.g.verified.cs | 41 + ..._#G.Models.ChannelEmoteScale.g.verified.cs | 25 + ...Models.ChannelEmoteThemeMode.g.verified.cs | 21 + ...#G.Models.ChannelInformation.g.verified.cs | 95 + ...ChannelStreamScheduleSegment.g.verified.cs | 67 + ...treamScheduleSegmentCategory.g.verified.cs | 32 + .../_#G.Models.ChannelTeam.g.verified.cs | 102 + .../_#G.Models.CharityCampaign.g.verified.cs | 88 + ...CharityCampaignCurrentAmount.g.verified.cs | 41 + ...dels.CharityCampaignDonation.g.verified.cs | 60 + ...harityCampaignDonationAmount.g.verified.cs | 41 + ....CharityCampaignTargetAmount.g.verified.cs | 41 + .../_#G.Models.ChatBadge.g.verified.cs | 32 + ..._#G.Models.ChatBadgeVersions.g.verified.cs | 74 + .../_#G.Models.ChatSettings.g.verified.cs | 110 + ...G.Models.ChatSettingsUpdated.g.verified.cs | 108 + .../_#G.Models.Chatter.g.verified.cs | 39 + ...odels.CheckAutoModStatusBody.g.verified.cs | 25 + ...s.CheckAutoModStatusBodyData.g.verified.cs | 32 + ...s.CheckAutoModStatusResponse.g.verified.cs | 25 + ...heckUserSubscriptionResponse.g.verified.cs | 25 + .../_#G.Models.Cheermote.g.verified.cs | 66 + ....Models.CheermoteImageFormat.g.verified.cs | 48 + ...G.Models.CheermoteImageTheme.g.verified.cs | 30 + .../_#G.Models.CheermoteImages.g.verified.cs | 30 + .../_#G.Models.CheermoteTiers.g.verified.cs | 68 + .../_#G.Models.CheermoteTiersId.g.verified.cs | 49 + .../_#G.Models.CheermoteType.g.verified.cs | 39 + .../_#G.Models.Clip.g.verified.cs | 139 + ...s.ContentClassificationLabel.g.verified.cs | 39 + ...nelStreamScheduleSegmentBody.g.verified.cs | 57 + ...treamScheduleSegmentResponse.g.verified.cs | 25 + ...mScheduleSegmentResponseData.g.verified.cs | 53 + ...eSegmentResponseDataVacation.g.verified.cs | 32 + ...#G.Models.CreateClipResponse.g.verified.cs | 25 + ...odels.CreateClipResponseData.g.verified.cs | 34 + ...#G.Models.CreateConduitsBody.g.verified.cs | 25 + ...odels.CreateConduitsResponse.g.verified.cs | 25 + ...s.CreateConduitsResponseData.g.verified.cs | 32 + ...dels.CreateCustomRewardsBody.g.verified.cs | 98 + ....CreateCustomRewardsResponse.g.verified.cs | 25 + ...eateEventSubSubscriptionBody.g.verified.cs | 46 + ...SubSubscriptionBodyTransport.g.verified.cs | 54 + ...scriptionBodyTransportMethod.g.verified.cs | 29 + ...EventSubSubscriptionBodyType.g.verified.cs | 293 + ...EventSubSubscriptionResponse.g.verified.cs | 46 + ...reateExtensionSecretResponse.g.verified.cs | 25 + ...eateGuestStarSessionResponse.g.verified.cs | 25 + .../_#G.Models.CreatePollBody.g.verified.cs | 58 + ...Models.CreatePollBodyChoices.g.verified.cs | 25 + ...#G.Models.CreatePollResponse.g.verified.cs | 25 + ....Models.CreatePredictionBody.g.verified.cs | 46 + ...CreatePredictionBodyOutcomes.g.verified.cs | 25 + ...els.CreatePredictionResponse.g.verified.cs | 25 + ...odels.CreateStreamMarkerBody.g.verified.cs | 31 + ...s.CreateStreamMarkerResponse.g.verified.cs | 25 + .../_#G.Models.CreatorGoal.g.verified.cs | 95 + .../_#G.Models.CreatorGoalType.g.verified.cs | 39 + .../_#G.Models.CustomReward.g.verified.cs | 158 + ...els.CustomRewardDefaultImage.g.verified.cs | 39 + ...mRewardGlobalCooldownSetting.g.verified.cs | 32 + ..._#G.Models.CustomRewardImage.g.verified.cs | 39 + ...tomRewardMaxPerStreamSetting.g.verified.cs | 32 + ...rdMaxPerUserPerStreamSetting.g.verified.cs | 32 + ...odels.CustomRewardRedemption.g.verified.cs | 99 + ...CustomRewardRedemptionReward.g.verified.cs | 46 + ...CustomRewardRedemptionStatus.g.verified.cs | 29 + ....Models.DeleteVideosResponse.g.verified.cs | 25 + .../_#G.Models.DropsEntitlement.g.verified.cs | 70 + ...EntitlementFulfillmentStatus.g.verified.cs | 24 + ...dels.DropsEntitlementUpdated.g.verified.cs | 38 + ...ropsEntitlementUpdatedStatus.g.verified.cs | 39 + .../_#G.Models.Emote.g.verified.cs | 97 + .../_#G.Models.EmoteEmoteType.g.verified.cs | 29 + .../_#G.Models.EmoteFormat.g.verified.cs | 21 + .../_#G.Models.EmoteImages.g.verified.cs | 41 + .../_#G.Models.EmoteScale.g.verified.cs | 25 + .../_#G.Models.EmoteThemeMode.g.verified.cs | 21 + ....EndGuestStarSessionResponse.g.verified.cs | 25 + .../_#G.Models.EndPollBody.g.verified.cs | 42 + ..._#G.Models.EndPollBodyStatus.g.verified.cs | 24 + .../_#G.Models.EndPollResponse.g.verified.cs | 25 + ..._#G.Models.EndPredictionBody.g.verified.cs | 53 + ...dels.EndPredictionBodyStatus.g.verified.cs | 33 + ...Models.EndPredictionResponse.g.verified.cs | 25 + ....Models.EventSubSubscription.g.verified.cs | 91 + ...s.EventSubSubscriptionStatus.g.verified.cs | 94 + ...ventSubSubscriptionTransport.g.verified.cs | 52 + ...bSubscriptionTransportMethod.g.verified.cs | 24 + ...els.EventSubSubscriptionType.g.verified.cs | 293 + .../_#G.Models.Extension.g.verified.cs | 198 + ...#G.Models.ExtensionAnalytics.g.verified.cs | 46 + ....ExtensionAnalyticsDateRange.g.verified.cs | 32 + ....Models.ExtensionBitsProduct.g.verified.cs | 60 + ...els.ExtensionBitsProductCost.g.verified.cs | 34 + ...ExtensionBitsProductCostType.g.verified.cs | 19 + ...tensionConfigurationLocation.g.verified.cs | 29 + ...xtensionConfigurationSegment.g.verified.cs | 49 + ...nConfigurationSegmentSegment.g.verified.cs | 29 + ..._#G.Models.ExtensionIconUrls.g.verified.cs | 36 + ....Models.ExtensionLiveChannel.g.verified.cs | 53 + .../_#G.Models.ExtensionSecret.g.verified.cs | 32 + ...odels.ExtensionSecretSecrets.g.verified.cs | 39 + .../_#G.Models.ExtensionState.g.verified.cs | 59 + ...ionSubscriptionsSupportLevel.g.verified.cs | 24 + ....Models.ExtensionTransaction.g.verified.cs | 90 + ...ensionTransactionProductData.g.verified.cs | 67 + ...onTransactionProductDataCost.g.verified.cs | 34 + ...ansactionProductDataCostType.g.verified.cs | 19 + ...ensionTransactionProductType.g.verified.cs | 19 + .../_#G.Models.ExtensionViews.g.verified.cs | 53 + ...dels.ExtensionViewsComponent.g.verified.cs | 67 + ....Models.ExtensionViewsConfig.g.verified.cs | 32 + ....Models.ExtensionViewsMobile.g.verified.cs | 25 + ...G.Models.ExtensionViewsPanel.g.verified.cs | 39 + ...s.ExtensionViewsVideoOverlay.g.verified.cs | 32 + .../_#G.Models.Game.g.verified.cs | 46 + .../_#G.Models.GameAnalytics.g.verified.cs | 46 + ...odels.GameAnalyticsDateRange.g.verified.cs | 32 + ...Models.GetAdScheduleResponse.g.verified.cs | 25 + ...ls.GetAdScheduleResponseData.g.verified.cs | 60 + ...els.GetAllStreamTagsResponse.g.verified.cs | 34 + ...StreamTagsResponsePagination.g.verified.cs | 24 + ...s.GetAutoModSettingsResponse.g.verified.cs | 25 + ...odels.GetBannedUsersResponse.g.verified.cs | 31 + ...annedUsersResponsePagination.g.verified.cs | 24 + ...els.GetBitsLeaderboardPeriod.g.verified.cs | 33 + ...s.GetBitsLeaderboardResponse.g.verified.cs | 39 + ...LeaderboardResponseDateRange.g.verified.cs | 32 + ...dels.GetBlockedTermsResponse.g.verified.cs | 31 + ...ockedTermsResponsePagination.g.verified.cs | 24 + ...dcasterSubscriptionsResponse.g.verified.cs | 45 + ...scriptionsResponsePagination.g.verified.cs | 24 + ...GetChannelChatBadgesResponse.g.verified.cs | 25 + ...ls.GetChannelEditorsResponse.g.verified.cs | 25 + ...els.GetChannelEmotesResponse.g.verified.cs | 32 + ....GetChannelFollowersResponse.g.verified.cs | 38 + ...ChannelFollowersResponseData.g.verified.cs | 46 + ...lFollowersResponsePagination.g.verified.cs | 24 + ...nelGuestStarSettingsResponse.g.verified.cs | 56 + ...rSettingsResponseGroupLayout.g.verified.cs | 24 + ...etChannelInformationResponse.g.verified.cs | 25 + ...hannelStreamScheduleResponse.g.verified.cs | 25 + ...elStreamScheduleResponseData.g.verified.cs | 59 + ...heduleResponseDataPagination.g.verified.cs | 24 + ...ScheduleResponseDataVacation.g.verified.cs | 32 + ...dels.GetChannelTeamsResponse.g.verified.cs | 25 + ...ityCampaignDonationsResponse.g.verified.cs | 31 + ...nDonationsResponsePagination.g.verified.cs | 24 + ...s.GetCharityCampaignResponse.g.verified.cs | 25 + ...dels.GetChatSettingsResponse.g.verified.cs | 25 + ...G.Models.GetChattersResponse.g.verified.cs | 38 + ...etChattersResponsePagination.g.verified.cs | 24 + ...Models.GetCheermotesResponse.g.verified.cs | 25 + .../_#G.Models.GetClipsResponse.g.verified.cs | 31 + ...s.GetClipsResponsePagination.g.verified.cs | 24 + ...els.GetConduitShardsResponse.g.verified.cs | 31 + ...GetConduitShardsResponseData.g.verified.cs | 50 + ...duitShardsResponseDataStatus.g.verified.cs | 64 + ...tShardsResponseDataTransport.g.verified.cs | 52 + ...sResponseDataTransportMethod.g.verified.cs | 24 + ...duitShardsResponsePagination.g.verified.cs | 24 + ...G.Models.GetConduitsResponse.g.verified.cs | 25 + ...dels.GetConduitsResponseData.g.verified.cs | 32 + ...ClassificationLabelsResponse.g.verified.cs | 25 + ...dels.GetCreatorGoalsResponse.g.verified.cs | 25 + ...stomRewardRedemptionResponse.g.verified.cs | 25 + ...etCustomRewardRedemptionSort.g.verified.cs | 21 + ...CustomRewardRedemptionStatus.g.verified.cs | 25 + ...dels.GetCustomRewardResponse.g.verified.cs | 25 + ...ntitlementsFulfillmentStatus.g.verified.cs | 21 + ...GetDropsEntitlementsResponse.g.verified.cs | 31 + ...titlementsResponsePagination.g.verified.cs | 24 + ....Models.GetEmoteSetsResponse.g.verified.cs | 32 + ...ventSubSubscriptionsResponse.g.verified.cs | 52 + ...scriptionsResponsePagination.g.verified.cs | 24 + ...tEventsubSubscriptionsStatus.g.verified.cs | 77 + ...GetEventsubSubscriptionsType.g.verified.cs | 293 + ...etExtensionAnalyticsResponse.g.verified.cs | 31 + ...nAnalyticsResponsePagination.g.verified.cs | 24 + ...ls.GetExtensionAnalyticsType.g.verified.cs | 17 + ...xtensionBitsProductsResponse.g.verified.cs | 25 + ...ConfigurationSegmentResponse.g.verified.cs | 25 + ...nConfigurationSegmentSegment.g.verified.cs | 25 + ...xtensionLiveChannelsResponse.g.verified.cs | 31 + ....GetExtensionSecretsResponse.g.verified.cs | 25 + ...xtensionTransactionsResponse.g.verified.cs | 31 + ...ansactionsResponsePagination.g.verified.cs | 24 + ...Models.GetExtensionsResponse.g.verified.cs | 25 + ....GetFollowedChannelsResponse.g.verified.cs | 38 + ...FollowedChannelsResponseData.g.verified.cs | 46 + ...edChannelsResponsePagination.g.verified.cs | 24 + ...s.GetFollowedStreamsResponse.g.verified.cs | 31 + ...wedStreamsResponsePagination.g.verified.cs | 24 + ...els.GetGameAnalyticsResponse.g.verified.cs | 31 + ...eAnalyticsResponsePagination.g.verified.cs | 24 + ....Models.GetGameAnalyticsType.g.verified.cs | 17 + .../_#G.Models.GetGamesResponse.g.verified.cs | 25 + ....GetGlobalChatBadgesResponse.g.verified.cs | 25 + ...dels.GetGlobalEmotesResponse.g.verified.cs | 32 + ....GetGuestStarInvitesResponse.g.verified.cs | 25 + ....GetGuestStarSessionResponse.g.verified.cs | 25 + ...s.GetHypeTrainEventsResponse.g.verified.cs | 31 + ...rainEventsResponsePagination.g.verified.cs | 24 + ...GetModeratedChannelsResponse.g.verified.cs | 31 + ...oderatedChannelsResponseData.g.verified.cs | 39 + ...edChannelsResponsePagination.g.verified.cs | 24 + ...Models.GetModeratorsResponse.g.verified.cs | 31 + ...ModeratorsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetPollsResponse.g.verified.cs | 31 + ...s.GetPollsResponsePagination.g.verified.cs | 24 + ...odels.GetPredictionsResponse.g.verified.cs | 31 + ...redictionsResponsePagination.g.verified.cs | 24 + ...etReleasedExtensionsResponse.g.verified.cs | 25 + ....GetShieldModeStatusResponse.g.verified.cs | 25 + ...ShieldModeStatusResponseData.g.verified.cs | 53 + ....Models.GetStreamKeyResponse.g.verified.cs | 25 + ...els.GetStreamKeyResponseData.g.verified.cs | 25 + ...els.GetStreamMarkersResponse.g.verified.cs | 31 + ...eamMarkersResponsePagination.g.verified.cs | 24 + ...Models.GetStreamTagsResponse.g.verified.cs | 27 + ...#G.Models.GetStreamsResponse.g.verified.cs | 31 + ...GetStreamsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetStreamsType.g.verified.cs | 21 + .../_#G.Models.GetTeamsResponse.g.verified.cs | 25 + ...G.Models.GetTopGamesResponse.g.verified.cs | 31 + ...etTopGamesResponsePagination.g.verified.cs | 24 + ...els.GetUnbanRequestsResponse.g.verified.cs | 31 + ...GetUnbanRequestsResponseData.g.verified.cs | 129 + ...anRequestsResponsePagination.g.verified.cs | 24 + ...UserActiveExtensionsResponse.g.verified.cs | 24 + ...ActiveExtensionsResponseData.g.verified.cs | 36 + ...els.GetUserBlockListResponse.g.verified.cs | 25 + ...els.GetUserChatColorResponse.g.verified.cs | 25 + ...Models.GetUserEmotesResponse.g.verified.cs | 42 + ...ls.GetUserEmotesResponseData.g.verified.cs | 88 + ...rEmotesResponseDataEmoteType.g.verified.cs | 29 + ...UserEmotesResponsePagination.g.verified.cs | 26 + ...ls.GetUserExtensionsResponse.g.verified.cs | 25 + .../_#G.Models.GetUsersResponse.g.verified.cs | 25 + .../_#G.Models.GetVIPsResponse.g.verified.cs | 31 + ...ls.GetVIPsResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetVideosPeriod.g.verified.cs | 29 + ..._#G.Models.GetVideosResponse.g.verified.cs | 31 + ....GetVideosResponsePagination.g.verified.cs | 24 + .../_#G.Models.GetVideosSort.g.verified.cs | 25 + .../_#G.Models.GetVideosType.g.verified.cs | 29 + .../_#G.Models.GlobalEmote.g.verified.cs | 72 + ..._#G.Models.GlobalEmoteFormat.g.verified.cs | 21 + ..._#G.Models.GlobalEmoteImages.g.verified.cs | 41 + .../_#G.Models.GlobalEmoteScale.g.verified.cs | 25 + ....Models.GlobalEmoteThemeMode.g.verified.cs | 21 + .../_#G.Models.Guest.g.verified.cs | 86 + ...#G.Models.GuestAudioSettings.g.verified.cs | 39 + .../_#G.Models.GuestStarInvite.g.verified.cs | 71 + .../_#G.Models.GuestStarSession.g.verified.cs | 32 + ...#G.Models.GuestVideoSettings.g.verified.cs | 39 + .../_#G.Models.HypeTrainEvent.g.verified.cs | 53 + ...dels.HypeTrainEventEventData.g.verified.cs | 88 + ...entEventDataLastContribution.g.verified.cs | 43 + ...ventDataLastContributionType.g.verified.cs | 29 + ...entEventDataTopContributions.g.verified.cs | 43 + ...ventDataTopContributionsType.g.verified.cs | 29 + ...anageHeldAutoModMessagesBody.g.verified.cs | 42 + ...eldAutoModMessagesBodyAction.g.verified.cs | 24 + ...ModifyChannelInformationBody.g.verified.cs | 62 + ...yContentClassificationLabels.g.verified.cs | 38 + ...ontentClassificationLabelsId.g.verified.cs | 39 + .../_#G.Models.Poll.g.verified.cs | 123 + .../_#G.Models.PollChoices.g.verified.cs | 53 + .../_#G.Models.PollStatus.g.verified.cs | 44 + .../_#G.Models.Prediction.g.verified.cs | 107 + ..._#G.Models.PredictionOutcome.g.verified.cs | 65 + ...odels.PredictionOutcomeColor.g.verified.cs | 26 + ...edictionOutcomeTopPredictors.g.verified.cs | 53 + .../_#G.Models.PredictionStatus.g.verified.cs | 34 + ...ResolveUnbanRequestsResponse.g.verified.cs | 25 + ...lveUnbanRequestsResponseData.g.verified.cs | 126 + ...els.SearchCategoriesResponse.g.verified.cs | 25 + ...odels.SearchChannelsResponse.g.verified.cs | 25 + ...els.SendChatAnnouncementBody.g.verified.cs | 39 + ...endChatAnnouncementBodyColor.g.verified.cs | 41 + ...G.Models.SendChatMessageBody.g.verified.cs | 45 + ...dels.SendChatMessageResponse.g.verified.cs | 25 + ....SendChatMessageResponseData.g.verified.cs | 38 + ...essageResponseDataDropReason.g.verified.cs | 32 + ...SendExtensionChatMessageBody.g.verified.cs | 39 + ...ndExtensionPubSubMessageBody.g.verified.cs | 51 + ...nsionPubSubMessageBodyTarget.g.verified.cs | 25 + .../_#G.Models.SendWhisperBody.g.verified.cs | 32 + ...sionConfigurationSegmentBody.g.verified.cs | 54 + ...figurationSegmentBodySegment.g.verified.cs | 29 + ...ionRequiredConfigurationBody.g.verified.cs | 39 + ....Models.SnoozeNextAdResponse.g.verified.cs | 25 + ...els.SnoozeNextAdResponseData.g.verified.cs | 39 + ...G.Models.StartCommercialBody.g.verified.cs | 32 + ...dels.StartCommercialResponse.g.verified.cs | 25 + ....StartCommercialResponseData.g.verified.cs | 39 + ..._#G.Models.StartRaidResponse.g.verified.cs | 25 + ...Models.StartRaidResponseData.g.verified.cs | 32 + .../_#G.Models.Stream.g.verified.cs | 129 + ...G.Models.StreamMarkerCreated.g.verified.cs | 46 + .../_#G.Models.StreamMarkers.g.verified.cs | 60 + ....Models.StreamMarkersMarkers.g.verified.cs | 53 + .../_#G.Models.StreamTag.g.verified.cs | 46 + .../_#G.Models.StreamType.g.verified.cs | 21 + .../_#G.Models.Team.g.verified.cs | 88 + .../_#G.Models.TeamUsers.g.verified.cs | 39 + ...ls.UpdateAutoModSettingsBody.g.verified.cs | 72 + ...pdateAutoModSettingsResponse.g.verified.cs | 25 + ...ChannelGuestStarSettingsBody.g.verified.cs | 53 + ...tStarSettingsBodyGroupLayout.g.verified.cs | 34 + ...nelStreamScheduleSegmentBody.g.verified.cs | 58 + ...treamScheduleSegmentResponse.g.verified.cs | 25 + ...mScheduleSegmentResponseData.g.verified.cs | 53 + ...eSegmentResponseDataVacation.g.verified.cs | 32 + ...odels.UpdateChatSettingsBody.g.verified.cs | 94 + ...s.UpdateChatSettingsResponse.g.verified.cs | 25 + ...dels.UpdateConduitShardsBody.g.verified.cs | 32 + ...pdateConduitShardsBodyShards.g.verified.cs | 32 + ...uitShardsBodyShardsTransport.g.verified.cs | 45 + ...rdsBodyShardsTransportMethod.g.verified.cs | 24 + ....UpdateConduitShardsResponse.g.verified.cs | 32 + ...ateConduitShardsResponseData.g.verified.cs | 50 + ...duitShardsResponseDataStatus.g.verified.cs | 64 + ...tShardsResponseDataTransport.g.verified.cs | 52 + ...sResponseDataTransportMethod.g.verified.cs | 24 + ...eConduitShardsResponseErrors.g.verified.cs | 47 + ...#G.Models.UpdateConduitsBody.g.verified.cs | 32 + ...odels.UpdateConduitsResponse.g.verified.cs | 25 + ...s.UpdateConduitsResponseData.g.verified.cs | 32 + ...odels.UpdateCustomRewardBody.g.verified.cs | 102 + ...s.UpdateCustomRewardResponse.g.verified.cs | 25 + ....UpdateDropsEntitlementsBody.g.verified.cs | 33 + ...lementsBodyFulfillmentStatus.g.verified.cs | 24 + ...ateDropsEntitlementsResponse.g.verified.cs | 25 + ...dateExtensionBitsProductBody.g.verified.cs | 57 + ...ExtensionBitsProductBodyCost.g.verified.cs | 34 + ...nsionBitsProductBodyCostType.g.verified.cs | 19 + ...ExtensionBitsProductResponse.g.verified.cs | 25 + ...s.UpdateRedemptionStatusBody.g.verified.cs | 30 + ...teRedemptionStatusBodyStatus.g.verified.cs | 26 + ...dateRedemptionStatusResponse.g.verified.cs | 25 + ...s.UpdateShieldModeStatusBody.g.verified.cs | 25 + ...dateShieldModeStatusResponse.g.verified.cs | 25 + ...ShieldModeStatusResponseData.g.verified.cs | 53 + ...els.UpdateUserChatColorColor.g.verified.cs | 73 + ...els.UpdateUserExtensionsBody.g.verified.cs | 29 + ...UpdateUserExtensionsResponse.g.verified.cs | 25 + ...teUserExtensionsResponseData.g.verified.cs | 39 + ...#G.Models.UpdateUserResponse.g.verified.cs | 25 + .../_#G.Models.User.g.verified.cs | 107 + .../_#G.Models.UserBlockList.g.verified.cs | 39 + ...G.Models.UserBroadcasterType.g.verified.cs | 25 + .../_#G.Models.UserChatColor.g.verified.cs | 46 + .../_#G.Models.UserExtension.g.verified.cs | 58 + ...odels.UserExtensionComponent.g.verified.cs | 55 + ...UserExtensionComponentUpdate.g.verified.cs | 49 + ....Models.UserExtensionOverlay.g.verified.cs | 43 + ...s.UserExtensionOverlayUpdate.g.verified.cs | 37 + ...#G.Models.UserExtensionPanel.g.verified.cs | 43 + ...els.UserExtensionPanelUpdate.g.verified.cs | 37 + ..._#G.Models.UserExtensionType.g.verified.cs | 29 + .../_#G.Models.UserModerator.g.verified.cs | 39 + .../_#G.Models.UserSubscription.g.verified.cs | 75 + ....Models.UserSubscriptionTier.g.verified.cs | 29 + .../_#G.Models.UserType.g.verified.cs | 30 + .../_#G.Models.UserVip.g.verified.cs | 39 + .../_#G.Models.Video.g.verified.cs | 141 + ...#G.Models.VideoMutedSegments.g.verified.cs | 32 + .../_#G.Models.VideoType.g.verified.cs | 29 + ...erationClient.AddBlockedTerm.g.verified.cs | 72 + ...onClient.AddChannelModerator.g.verified.cs | 32 + ...derationClient.AddChannelVip.g.verified.cs | 32 + ..._#G.ModerationClient.BanUser.g.verified.cs | 72 + ...ionClient.CheckAutomodStatus.g.verified.cs | 67 + ...ionClient.DeleteChatMessages.g.verified.cs | 34 + ...ionClient.GetAutomodSettings.g.verified.cs | 38 + ...erationClient.GetBannedUsers.g.verified.cs | 45 + ...rationClient.GetBlockedTerms.g.verified.cs | 42 + ...nClient.GetModeratedChannels.g.verified.cs | 40 + ...derationClient.GetModerators.g.verified.cs | 43 + ...onClient.GetShieldModeStatus.g.verified.cs | 38 + ...ationClient.GetUnbanRequests.g.verified.cs | 46 + ..._#G.ModerationClient.GetVips.g.verified.cs | 43 + ...nt.ManageHeldAutomodMessages.g.verified.cs | 62 + ...tionClient.RemoveBlockedTerm.g.verified.cs | 34 + ...lient.RemoveChannelModerator.g.verified.cs | 32 + ...ationClient.RemoveChannelVip.g.verified.cs | 32 + ...nClient.ResolveUnbanRequests.g.verified.cs | 44 + ...G.ModerationClient.UnbanUser.g.verified.cs | 34 + ...Client.UpdateAutomodSettings.g.verified.cs | 96 + ...lient.UpdateShieldModeStatus.g.verified.cs | 72 + .../_#G.ModerationClient.g.verified.cs | 36 + .../_#G.PollsClient.CreatePoll.g.verified.cs | 77 + .../_#G.PollsClient.EndPoll.g.verified.cs | 68 + .../_#G.PollsClient.GetPolls.g.verified.cs | 43 + .../_#G.PollsClient.g.verified.cs | 36 + ...tionsClient.CreatePrediction.g.verified.cs | 71 + ...dictionsClient.EndPrediction.g.verified.cs | 71 + ...ictionsClient.GetPredictions.g.verified.cs | 43 + .../_#G.PredictionsClient.g.verified.cs | 36 + .../_#G.RaidsClient.CancelARaid.g.verified.cs | 30 + .../_#G.RaidsClient.StartARaid.g.verified.cs | 38 + .../_#G.RaidsClient.g.verified.cs | 36 + ...ChannelStreamScheduleSegment.g.verified.cs | 82 + ...ChannelStreamScheduleSegment.g.verified.cs | 32 + ...leClient.GetChannelIcalendar.g.verified.cs | 30 + ...ent.GetChannelStreamSchedule.g.verified.cs | 47 + ....UpdateChannelStreamSchedule.g.verified.cs | 38 + ...ChannelStreamScheduleSegment.g.verified.cs | 87 + .../_#G.ScheduleClient.g.verified.cs | 36 + ...earchClient.SearchCategories.g.verified.cs | 40 + ....SearchClient.SearchChannels.g.verified.cs | 42 + .../_#G.SearchClient.g.verified.cs | 36 + ...amsClient.CreateStreamMarker.g.verified.cs | 65 + ...amsClient.GetFollowedStreams.g.verified.cs | 40 + ...G.StreamsClient.GetStreamKey.g.verified.cs | 36 + ...reamsClient.GetStreamMarkers.g.verified.cs | 44 + ..._#G.StreamsClient.GetStreams.g.verified.cs | 51 + .../_#G.StreamsClient.g.verified.cs | 36 + ...Client.CheckUserSubscription.g.verified.cs | 38 + ....GetBroadcasterSubscriptions.g.verified.cs | 45 + .../_#G.SubscriptionsClient.g.verified.cs | 36 + ....TagsClient.GetAllStreamTags.g.verified.cs | 41 + ..._#G.TagsClient.GetStreamTags.g.verified.cs | 36 + .../_#G.TagsClient.g.verified.cs | 36 + ....TeamsClient.GetChannelTeams.g.verified.cs | 36 + .../_#G.TeamsClient.GetTeams.g.verified.cs | 38 + .../_#G.TeamsClient.g.verified.cs | 36 + .../_#G.UsersClient.BlockUser.g.verified.cs | 34 + ...ient.GetUserActiveExtensions.g.verified.cs | 36 + ...UsersClient.GetUserBlockList.g.verified.cs | 40 + ...sersClient.GetUserExtensions.g.verified.cs | 34 + .../_#G.UsersClient.GetUsers.g.verified.cs | 39 + .../_#G.UsersClient.UnblockUser.g.verified.cs | 30 + .../_#G.UsersClient.UpdateUser.g.verified.cs | 36 + ...sClient.UpdateUserExtensions.g.verified.cs | 62 + .../_#G.UsersClient.g.verified.cs | 36 + ...#G.VideosClient.DeleteVideos.g.verified.cs | 37 + .../_#G.VideosClient.GetVideos.g.verified.cs | 55 + .../_#G.VideosClient.g.verified.cs | 36 + ...G.WhispersClient.SendWhisper.g.verified.cs | 66 + .../_#G.WhispersClient.g.verified.cs | 36 + .../NewtonsoftJson/_#G.Api.g.verified.cs | 1 - .../SystemTextJson/_#G.Api.g.verified.cs | 1 - .../OpenApiGenerator.SnapshotTests/Tests.cs | 18 +- .../OpenApiGenerator.UnitTests/ClientTests.cs | 20 +- .../OpenApiGenerator.UnitTests/ModelTests.cs | 20 +- 1137 files changed, 70059 insertions(+), 38 deletions(-) create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Resources/twitch.json create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/Tests.Twitch_Diagnostics.verified.txt create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.GetAdSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.SnoozeNextAd.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.StartCommercial.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetExtensionAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetGameAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Api.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetBitsLeaderboard.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetCheermotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetExtensionTransactions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.GetContentClassificationLabels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.CreateCustomRewards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.DeleteCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomRewardRedemption.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelEditors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelFollowers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetFollowedChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.ModifyChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaign.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaignDonations.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelChatBadges.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatters.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetEmoteSets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalChatBadges.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendAShoutout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatAnnouncement.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateUserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.CreateClip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.GetClips.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.CreateConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.DeleteConduit.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduitShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduitShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.GetDropsEntitlements.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.UpdateDropsEntitlements.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.CreateEventsubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.DeleteEventsubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.GetEventsubSubscriptions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.CreateExtensionSecret.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionBitsProducts.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionLiveChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionSecrets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetReleasedExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionChatMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionPubsubMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionRequiredConfiguration.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.UpdateExtensionBitsProduct.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetGames.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetTopGames.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.GetCreatorGoals.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.AssignGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.CreateGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.EndGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetChannelGuestStarSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarInvites.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.SendGuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateChannelGuestStarSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlotSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.GetHypeTrainEvents.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBodyData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BannedUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BitsLeaderboard.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserReason.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserSourceContext.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscriptionTier.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Category.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Channel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEditor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegmentCategory.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelTeam.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaign.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignCurrentAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonationAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignTargetAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadge.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadgeVersions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettingsUpdated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Chatter.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBodyData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckUserSubscriptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Cheermote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageTheme.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiersId.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Clip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ContentClassificationLabel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateExtensionSecretResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBodyChoices.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBodyOutcomes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoal.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoalType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardDefaultImage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardGlobalCooldownSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardImage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerStreamSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerUserPerStreamSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemption.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DeleteVideosResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlement.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdatedStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Emote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Extension.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalyticsDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProduct.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationLocation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegmentSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionIconUrls.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionLiveChannel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecret.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecretSecrets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionState.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSubscriptionsSupportLevel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransaction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViews.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsComponent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsConfig.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsMobile.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsPanel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsVideoOverlay.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Game.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalyticsDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAutoModSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardPeriod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponseDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelChatBadgesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEditorsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelInformationResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataPagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelTeamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChatSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCheermotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetContentClassificationLabelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCreatorGoalsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionSort.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEmoteSetsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionBitsProductsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionLiveChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionSecretsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGamesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalChatBadgesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarInvitesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetReleasedExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamTagsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTeamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserBlockListResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserChatColorResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseDataEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUsersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosPeriod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosSort.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GlobalEmote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GlobalEmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GlobalEmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GlobalEmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GlobalEmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Guest.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GuestAudioSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GuestVideoSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEvent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEventEventData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEventEventDataLastContribution.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEventEventDataLastContributionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEventEventDataTopContributions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.HypeTrainEventEventDataTopContributionsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ManageHeldAutoModMessagesBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ManageHeldAutoModMessagesBodyAction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ModifyChannelInformationBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ModifyChannelInformationBodyContentClassificationLabels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ModifyChannelInformationBodyContentClassificationLabelsId.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Poll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PollChoices.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PollStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Prediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PredictionOutcome.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PredictionOutcomeColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PredictionOutcomeTopPredictors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.PredictionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ResolveUnbanRequestsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ResolveUnbanRequestsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SearchCategoriesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SearchChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatAnnouncementBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatAnnouncementBodyColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatMessageResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatMessageResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendChatMessageResponseDataDropReason.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendExtensionChatMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendExtensionPubSubMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendExtensionPubSubMessageBodyTarget.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SendWhisperBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SetExtensionConfigurationSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SetExtensionConfigurationSegmentBodySegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SetExtensionRequiredConfigurationBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SnoozeNextAdResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.SnoozeNextAdResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StartCommercialBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StartCommercialResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StartCommercialResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StartRaidResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StartRaidResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Stream.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StreamMarkerCreated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StreamMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StreamMarkersMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StreamTag.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.StreamType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Team.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.TeamUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateAutoModSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateAutoModSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelGuestStarSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelGuestStarSettingsBodyGroupLayout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelStreamScheduleSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChatSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateChatSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsBodyShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsBodyShardsTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsBodyShardsTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponseDataStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponseDataTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponseDataTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitShardsResponseErrors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateCustomRewardBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateCustomRewardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateDropsEntitlementsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateDropsEntitlementsBodyFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateDropsEntitlementsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateExtensionBitsProductBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateExtensionBitsProductBodyCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateExtensionBitsProductBodyCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateExtensionBitsProductResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateRedemptionStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateRedemptionStatusBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateRedemptionStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateShieldModeStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateShieldModeStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateShieldModeStatusResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateUserChatColorColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateUserExtensionsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateUserExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateUserExtensionsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UpdateUserResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.User.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserBlockList.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserBroadcasterType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtension.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionComponent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionComponentUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionOverlay.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionOverlayUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionPanel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionPanelUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserExtensionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserSubscriptionTier.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.UserVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Video.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.VideoMutedSegments.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.VideoType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.AddBlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.AddChannelModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.AddChannelVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.BanUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.CheckAutomodStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.DeleteChatMessages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetAutomodSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetBannedUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetBlockedTerms.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetModeratedChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetModerators.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetShieldModeStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetUnbanRequests.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.GetVips.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.ManageHeldAutomodMessages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.RemoveBlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.RemoveChannelModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.RemoveChannelVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.ResolveUnbanRequests.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.UnbanUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.UpdateAutomodSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.UpdateShieldModeStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ModerationClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PollsClient.CreatePoll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PollsClient.EndPoll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PollsClient.GetPolls.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PollsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PredictionsClient.CreatePrediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PredictionsClient.EndPrediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PredictionsClient.GetPredictions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.PredictionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.RaidsClient.CancelARaid.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.RaidsClient.StartARaid.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.RaidsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.CreateChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.DeleteChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.GetChannelIcalendar.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.GetChannelStreamSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.UpdateChannelStreamSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.UpdateChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ScheduleClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SearchClient.SearchCategories.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SearchClient.SearchChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SearchClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.CreateStreamMarker.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.GetFollowedStreams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.GetStreamKey.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.GetStreamMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.GetStreams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.StreamsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SubscriptionsClient.CheckUserSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SubscriptionsClient.GetBroadcasterSubscriptions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.SubscriptionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TagsClient.GetAllStreamTags.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TagsClient.GetStreamTags.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TagsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TeamsClient.GetChannelTeams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TeamsClient.GetTeams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.TeamsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.BlockUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.GetUserActiveExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.GetUserBlockList.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.GetUserExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.GetUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.UnblockUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.UpdateUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.UpdateUserExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.UsersClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.VideosClient.DeleteVideos.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.VideosClient.GetVideos.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.VideosClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.WhispersClient.SendWhisper.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.WhispersClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/Tests.Twitch_Diagnostics.verified.txt create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AdsClient.GetAdSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AdsClient.SnoozeNextAd.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AdsClient.StartCommercial.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AdsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AnalyticsClient.GetExtensionAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AnalyticsClient.GetGameAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.AnalyticsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Api.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.BitsClient.GetBitsLeaderboard.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.BitsClient.GetCheermotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.BitsClient.GetExtensionTransactions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.BitsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.CCLsClient.GetContentClassificationLabels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.CCLsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.CreateCustomRewards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.DeleteCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.GetCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.GetCustomRewardRedemption.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.UpdateCustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.UpdateRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelPointsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.GetChannelEditors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.GetChannelFollowers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.GetChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.GetFollowedChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.ModifyChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChannelsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.CharityClient.GetCharityCampaign.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.CharityClient.GetCharityCampaignDonations.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.CharityClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetChannelChatBadges.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetChannelEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetChatters.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetEmoteSets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetGlobalChatBadges.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetGlobalEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetUserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.GetUserEmotes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.SendAShoutout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.SendChatAnnouncement.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.SendChatMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.UpdateChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.UpdateUserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ChatClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ClipsClient.CreateClip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ClipsClient.GetClips.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ClipsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.CreateConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.DeleteConduit.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.GetConduitShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.GetConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.UpdateConduitShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.UpdateConduits.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ConduitsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EntitlementsClient.GetDropsEntitlements.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EntitlementsClient.UpdateDropsEntitlements.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EntitlementsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EventSubClient.CreateEventsubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EventSubClient.DeleteEventsubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EventSubClient.GetEventsubSubscriptions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.EventSubClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.CreateExtensionSecret.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetExtensionBitsProducts.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetExtensionLiveChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetExtensionSecrets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.GetReleasedExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.SendExtensionChatMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.SendExtensionPubsubMessage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.SetExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.SetExtensionRequiredConfiguration.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.UpdateExtensionBitsProduct.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ExtensionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GamesClient.GetGames.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GamesClient.GetTopGames.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GamesClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GoalsClient.GetCreatorGoals.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GoalsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.AssignGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.CreateGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.DeleteGuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.DeleteGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.EndGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.GetChannelGuestStarSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.GetGuestStarInvites.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.GetGuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.SendGuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.UpdateChannelGuestStarSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.UpdateGuestStarSlot.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.UpdateGuestStarSlotSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.GuestStarClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.HypeTrainClient.GetHypeTrainEvents.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.HypeTrainClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.AddBlockedTermBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.AddBlockedTermResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.AutoModSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.AutoModStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BanUserBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BanUserBodyData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BanUserResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BanUserResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BannedUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BitsLeaderboard.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BlockUserReason.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BlockUserSourceContext.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BroadcasterSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.BroadcasterSubscriptionTier.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Category.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Channel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEditor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmoteEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelEmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelInformation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelStreamScheduleSegmentCategory.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChannelTeam.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CharityCampaign.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CharityCampaignCurrentAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CharityCampaignDonation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CharityCampaignDonationAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CharityCampaignTargetAmount.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChatBadge.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChatBadgeVersions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChatSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ChatSettingsUpdated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Chatter.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheckAutoModStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheckAutoModStatusBodyData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheckAutoModStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheckUserSubscriptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Cheermote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteImageFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteImageTheme.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteTiers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteTiersId.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CheermoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Clip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ContentClassificationLabel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateChannelStreamScheduleSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateChannelStreamScheduleSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateClipResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateClipResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateConduitsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateCustomRewardsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateCustomRewardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateEventSubSubscriptionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateEventSubSubscriptionBodyTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateEventSubSubscriptionBodyType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateEventSubSubscriptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateExtensionSecretResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePollBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePollBodyChoices.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePollResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePredictionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePredictionBodyOutcomes.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatePredictionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateStreamMarkerBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreateStreamMarkerResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatorGoal.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CreatorGoalType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardDefaultImage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardGlobalCooldownSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardImage.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardMaxPerStreamSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardMaxPerUserPerStreamSetting.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardRedemption.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardRedemptionReward.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.CustomRewardRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.DeleteVideosResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.DropsEntitlement.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.DropsEntitlementFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.DropsEntitlementUpdated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.DropsEntitlementUpdatedStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Emote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EmoteEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPollBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPollBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPollResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPredictionBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPredictionBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EndPredictionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EventSubSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EventSubSubscriptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EventSubSubscriptionTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EventSubSubscriptionTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.EventSubSubscriptionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Extension.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionAnalyticsDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionBitsProduct.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionBitsProductCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionBitsProductCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionConfigurationLocation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionConfigurationSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionConfigurationSegmentSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionIconUrls.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionLiveChannel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionSecret.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionSecretSecrets.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionState.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionSubscriptionsSupportLevel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionTransaction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionTransactionProductData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionTransactionProductDataCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionTransactionProductDataCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionTransactionProductType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViews.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViewsComponent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViewsConfig.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViewsMobile.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViewsPanel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ExtensionViewsVideoOverlay.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Game.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GameAnalytics.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GameAnalyticsDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetAdScheduleResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetAdScheduleResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetAllStreamTagsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetAllStreamTagsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetAutoModSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBannedUsersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBannedUsersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBitsLeaderboardPeriod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBitsLeaderboardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBitsLeaderboardResponseDateRange.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBlockedTermsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBlockedTermsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBroadcasterSubscriptionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetBroadcasterSubscriptionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelChatBadgesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelEditorsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelFollowersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelFollowersResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelFollowersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelGuestStarSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelInformationResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelStreamScheduleResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelStreamScheduleResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelStreamScheduleResponseDataPagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelStreamScheduleResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChannelTeamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCharityCampaignDonationsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCharityCampaignDonationsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCharityCampaignResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChatSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChattersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetChattersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCheermotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetClipsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetClipsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponseDataStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponseDataTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponseDataTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitShardsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetContentClassificationLabelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCreatorGoalsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCustomRewardRedemptionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCustomRewardRedemptionSort.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCustomRewardRedemptionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetCustomRewardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetDropsEntitlementsFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetDropsEntitlementsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetDropsEntitlementsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetEmoteSetsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetEventSubSubscriptionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetEventSubSubscriptionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetEventsubSubscriptionsStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetEventsubSubscriptionsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionAnalyticsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionAnalyticsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionAnalyticsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionBitsProductsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionConfigurationSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionConfigurationSegmentSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionLiveChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionSecretsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionTransactionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionTransactionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetFollowedChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetFollowedChannelsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetFollowedChannelsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetFollowedStreamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetFollowedStreamsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGameAnalyticsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGameAnalyticsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGameAnalyticsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGamesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGlobalChatBadgesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGlobalEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGuestStarInvitesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetGuestStarSessionResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetHypeTrainEventsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetHypeTrainEventsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetModeratedChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetModeratedChannelsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetModeratedChannelsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetModeratorsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetModeratorsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetPollsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetPollsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetPredictionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetPredictionsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetReleasedExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetShieldModeStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetShieldModeStatusResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamKeyResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamKeyResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamMarkersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamMarkersResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamTagsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetStreamsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetTeamsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetTopGamesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetTopGamesResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUnbanRequestsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUnbanRequestsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUnbanRequestsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserActiveExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserActiveExtensionsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserBlockListResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserChatColorResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserEmotesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserEmotesResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserEmotesResponseDataEmoteType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserEmotesResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUserExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetUsersResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVIPsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVIPsResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVideosPeriod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVideosResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVideosResponsePagination.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVideosSort.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GetVideosType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GlobalEmote.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GlobalEmoteFormat.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GlobalEmoteImages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GlobalEmoteScale.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GlobalEmoteThemeMode.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Guest.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GuestAudioSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GuestStarInvite.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GuestStarSession.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.GuestVideoSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEvent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEventEventData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEventEventDataLastContribution.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEventEventDataLastContributionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEventEventDataTopContributions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.HypeTrainEventEventDataTopContributionsType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ManageHeldAutoModMessagesBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ManageHeldAutoModMessagesBodyAction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ModifyChannelInformationBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ModifyChannelInformationBodyContentClassificationLabels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ModifyChannelInformationBodyContentClassificationLabelsId.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Poll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PollChoices.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PollStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Prediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PredictionOutcome.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PredictionOutcomeColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PredictionOutcomeTopPredictors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.PredictionStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ResolveUnbanRequestsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.ResolveUnbanRequestsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SearchCategoriesResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SearchChannelsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatAnnouncementBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatAnnouncementBodyColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatMessageResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatMessageResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendChatMessageResponseDataDropReason.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendExtensionChatMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendExtensionPubSubMessageBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendExtensionPubSubMessageBodyTarget.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SendWhisperBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SetExtensionConfigurationSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SetExtensionConfigurationSegmentBodySegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SetExtensionRequiredConfigurationBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SnoozeNextAdResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.SnoozeNextAdResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StartCommercialBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StartCommercialResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StartCommercialResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StartRaidResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StartRaidResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Stream.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StreamMarkerCreated.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StreamMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StreamMarkersMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StreamTag.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.StreamType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Team.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.TeamUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateAutoModSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateAutoModSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelGuestStarSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelGuestStarSettingsBodyGroupLayout.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelStreamScheduleSegmentBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChatSettingsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateChatSettingsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsBodyShards.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsBodyShardsTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsBodyShardsTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponseDataStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponseDataTransport.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponseDataTransportMethod.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitShardsResponseErrors.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateConduitsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateCustomRewardBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateCustomRewardResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateDropsEntitlementsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateDropsEntitlementsBodyFulfillmentStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateDropsEntitlementsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateExtensionBitsProductBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateExtensionBitsProductBodyCost.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateExtensionBitsProductBodyCostType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateExtensionBitsProductResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateRedemptionStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateRedemptionStatusBodyStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateRedemptionStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateShieldModeStatusBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateShieldModeStatusResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateShieldModeStatusResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateUserChatColorColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateUserExtensionsBody.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateUserExtensionsResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateUserExtensionsResponseData.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UpdateUserResponse.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.User.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserBlockList.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserBroadcasterType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserChatColor.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtension.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionComponent.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionComponentUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionOverlay.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionOverlayUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionPanel.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionPanelUpdate.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserExtensionType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserSubscriptionTier.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.UserVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.Video.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.VideoMutedSegments.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.Models.VideoType.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.AddBlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.AddChannelModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.AddChannelVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.BanUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.CheckAutomodStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.DeleteChatMessages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetAutomodSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetBannedUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetBlockedTerms.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetModeratedChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetModerators.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetShieldModeStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetUnbanRequests.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.GetVips.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.ManageHeldAutomodMessages.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.RemoveBlockedTerm.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.RemoveChannelModerator.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.RemoveChannelVip.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.ResolveUnbanRequests.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.UnbanUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.UpdateAutomodSettings.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.UpdateShieldModeStatus.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ModerationClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PollsClient.CreatePoll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PollsClient.EndPoll.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PollsClient.GetPolls.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PollsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PredictionsClient.CreatePrediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PredictionsClient.EndPrediction.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PredictionsClient.GetPredictions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.PredictionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.RaidsClient.CancelARaid.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.RaidsClient.StartARaid.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.RaidsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.CreateChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.DeleteChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.GetChannelIcalendar.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.GetChannelStreamSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.UpdateChannelStreamSchedule.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.UpdateChannelStreamScheduleSegment.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.ScheduleClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SearchClient.SearchCategories.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SearchClient.SearchChannels.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SearchClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.CreateStreamMarker.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.GetFollowedStreams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.GetStreamKey.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.GetStreamMarkers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.GetStreams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.StreamsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SubscriptionsClient.CheckUserSubscription.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SubscriptionsClient.GetBroadcasterSubscriptions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.SubscriptionsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TagsClient.GetAllStreamTags.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TagsClient.GetStreamTags.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TagsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TeamsClient.GetChannelTeams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TeamsClient.GetTeams.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.TeamsClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.BlockUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.GetUserActiveExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.GetUserBlockList.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.GetUserExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.GetUsers.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.UnblockUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.UpdateUser.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.UpdateUserExtensions.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.UsersClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.VideosClient.DeleteVideos.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.VideosClient.GetVideos.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.VideosClient.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.WhispersClient.SendWhisper.g.verified.cs create mode 100644 src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/SystemTextJson/_#G.WhispersClient.g.verified.cs diff --git a/src/libs/Directory.Build.props b/src/libs/Directory.Build.props index 36c93a2111..ecbb465592 100644 --- a/src/libs/Directory.Build.props +++ b/src/libs/Directory.Build.props @@ -39,7 +39,7 @@ - 0.8.5 + 0.8.6 0.1 v dev diff --git a/src/libs/OpenApiGenerator.Core/Generation/Data.Models.cs b/src/libs/OpenApiGenerator.Core/Generation/Data.Models.cs index a1c1c67716..191df99a73 100644 --- a/src/libs/OpenApiGenerator.Core/Generation/Data.Models.cs +++ b/src/libs/OpenApiGenerator.Core/Generation/Data.Models.cs @@ -66,6 +66,18 @@ public static EquatableArray PrepareData( Schema = default, }) .ToImmutableArray(); + // var bodies = openApiDocument.Paths + // .SelectMany(path => path.Value.Operations.Select(operation => (operation.Value.OperationId, Operation: operation))) + // .SelectMany(x => x.Operation.Value?.RequestBody?.Content?.Values.Select(y => (x.OperationId, Parameter: y)) ?? []) + // .Where(x => x.Parameter.Schema.Type == "object") + // .Select(x => ModelData.FromSchema( + // x.Parameter.Schema.WithKey(x.OperationId + "Request"), + // settings) with + // { + // Schema = default, + // }) + // .SelectMany(model => model.WithAdditionalModels()) + // .ToImmutableArray(); var enumParameters = openApiDocument.Paths .SelectMany(path => path.Value.Operations.Select(operation => (operation.Value.OperationId, Operation: operation))) .SelectMany(x => x.Operation.Value.Parameters.Select(y => (x.OperationId, Parameter: y))) @@ -89,7 +101,8 @@ public static EquatableArray PrepareData( .Create([ ..components, ..objectParameters, - ..enumParameters + ..enumParameters, + //..bodies, ]) .GroupBy(x => x.FileNameWithoutExtension) .Select(x => x.First()) diff --git a/src/libs/OpenApiGenerator.Core/Generation/Sources.Clients.cs b/src/libs/OpenApiGenerator.Core/Generation/Sources.Clients.cs index 75bc7e3378..efa5c75630 100644 --- a/src/libs/OpenApiGenerator.Core/Generation/Sources.Clients.cs +++ b/src/libs/OpenApiGenerator.Core/Generation/Sources.Clients.cs @@ -13,11 +13,7 @@ public static string GenerateConstructors( namespace {endPoint.Namespace} {{ - /// - /// {endPoint.Summary} - /// If no httpClient is provided, a new one will be created. - /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. - /// + {(endPoint.Summary + "\nIf no httpClient is provided, a new one will be created.\nIf no baseUri is provided, the default baseUri from OpenAPI spec will be used.").ToXmlDocumentationSummary()} public sealed partial class {endPoint.ClassName} : global::System.IDisposable {{ private readonly global::System.Net.Http.HttpClient _httpClient; diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Resources/twitch.json b/src/tests/OpenApiGenerator.SnapshotTests/Resources/twitch.json new file mode 100644 index 0000000000..c49f1c520a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Resources/twitch.json @@ -0,0 +1,21066 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Twitch API Swagger UI (Unofficial)", + "description": "Unofficial Swagger UI for Twitch API.\n\nAll endpoints are generated automatically from the [twitch docs](https://dev.twitch.tv/docs/api/reference) page.\n\n__Features:__\n\n* Swagger UI for all Twitch API endpoints\n* Schemas for _Request Query Parameters_, _Request Body_, _Response Body_\n* Some additional schemas like _Clip_, _ChatBadge_, _Prediction_, _Game_, _Channel_, _Video_ etc.\n* Response codes and examples\n* Generated types for TypeScript: [ts-twitch-api](https://github.com/DmitryScaletta/ts-twitch-api)\n\n__Repository:__ [github.com/DmitryScaletta/twitch-api-swagger](https://github.com/DmitryScaletta/twitch-api-swagger)", + "version": "helix" + }, + "servers": [ + { + "url": "https://api.twitch.tv/helix", + "description": "Helix" + } + ], + "security": [], + "tags": [ + { + "name": "Ads" + }, + { + "name": "Analytics" + }, + { + "name": "Bits" + }, + { + "name": "Channels" + }, + { + "name": "Channel Points" + }, + { + "name": "Charity" + }, + { + "name": "Chat" + }, + { + "name": "Clips" + }, + { + "name": "Conduits" + }, + { + "name": "CCLs" + }, + { + "name": "Entitlements" + }, + { + "name": "Extensions" + }, + { + "name": "EventSub" + }, + { + "name": "Games" + }, + { + "name": "Goals" + }, + { + "name": "Guest Star" + }, + { + "name": "Hype Train" + }, + { + "name": "Moderation" + }, + { + "name": "Polls" + }, + { + "name": "Predictions" + }, + { + "name": "Raids" + }, + { + "name": "Schedule" + }, + { + "name": "Search" + }, + { + "name": "Streams" + }, + { + "name": "Subscriptions" + }, + { + "name": "Tags" + }, + { + "name": "Teams" + }, + { + "name": "Users" + }, + { + "name": "Videos" + }, + { + "name": "Whispers" + } + ], + "paths": { + "/channels/commercial": { + "post": { + "summary": "Starts a commercial on the specified channel.", + "description": "Starts a commercial on the specified channel.\n\n**NOTE**: Only partners and affiliates may run commercials and they must be streaming live at the time.\n\n**NOTE**: Only the broadcaster may start a commercial; the broadcaster’s editors and moderators may not start commercials on behalf of the broadcaster.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:edit:commercial** scope.", + "tags": [ + "Ads" + ], + "externalDocs": { + "description": "Start Commercial", + "url": "https://dev.twitch.tv/docs/api/reference#start-commercial" + }, + "operationId": "start-commercial", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartCommercialBody" + }, + "examples": { + "Example": { + "value": { + "broadcaster_id": "41245072", + "length": 60 + }, + "description": "This request starts a commercial." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully started the commercial.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartCommercialResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nThis request starts a commercial.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/channels/commercial' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{\n \"broadcaster_id\": \"41245072\",\n \"length\": 60\n}'\n```", + "value": { + "data": [ + { + "length": 60, + "message": "", + "retry_after": 480 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _length_ query parameter is required.\n* The ID in _broadcaster\\_id_ is not valid.\n* To start a commercial, the broadcaster must be streaming live.\n* 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": { + "description": "* The ID in `broadcaster_id` must match the user ID found in the request’s OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:edit:commercial** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "404": { + "description": "* The ID in `broadcaster_id` was not found." + }, + "429": { + "description": "* 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." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:edit:commercial" + ] + } + ] + } + }, + "/channels/ads": { + "get": { + "summary": "Returns ad schedule related information.", + "description": "This endpoint returns ad schedule related information, including snooze, when the last ad was run, when the next ad is scheduled, and if the channel is currently in pre-roll free time. Note that a new ad cannot be run until 8 minutes after running a previous ad.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:ads** scope. The `user_id` in the user access token must match the `broadcaster_id`.", + "tags": [ + "Ads" + ], + "externalDocs": { + "description": "Get Ad Schedule", + "url": "https://dev.twitch.tv/docs/api/reference#get-ad-schedule" + }, + "operationId": "get-ad-schedule", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "Provided `broadcaster_id` must match the `user_id` in the auth token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Returns the ad schedule information for the channel.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAdScheduleResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nSnooze the next ad.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/ads?broadcaster_id=123' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "next_ad_at": "2023-08-01T23:08:18+00:00", + "last_ad_at": "2023-08-01T23:08:18+00:00", + "duration": "60", + "preroll_free_time": "90", + "snooze_count": "1", + "snooze_refresh_at": "2023-08-01T23:08:18+00:00" + } + ] + } + } + } + } + } + }, + "400": { + "description": "The broadcaster ID is not valid." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:ads" + ] + } + ] + } + }, + "/channels/ads/schedule/snooze": { + "post": { + "summary": "Pushes back the timestamp of the upcoming automatic mid-roll ad by 5 minutes.", + "description": "If available, pushes back the timestamp of the upcoming automatic mid-roll ad by 5 minutes. This endpoint duplicates the snooze functionality in the creator dashboard’s Ads Manager.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:ads** scope. The `user_id` in the user access token must match the `broadcaster_id`.", + "tags": [ + "Ads" + ], + "externalDocs": { + "description": "Snooze Next Ad", + "url": "https://dev.twitch.tv/docs/api/reference#snooze-next-ad" + }, + "operationId": "snooze-next-ad", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "Provided `broadcaster_id` must match the `user_id` in the auth token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "User’s next ad is successfully snoozed. Their _snooze\\_count_ is decremented and _snooze\\_refresh\\_time_ and _next\\_ad\\_at_ are both updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnoozeNextAdResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nSnooze the next ad.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/channels/ads/schedule/snooze?broadcaster_id=123' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "snooze_count": "1", + "snooze_refresh_at": "2023-08-01T23:08:18+00:00", + "next_ad_at": "2023-08-01T23:08:18+00:00" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The channel is not currently live.\n* The broadcaster ID is not valid.\n* Channel does not have an upcoming scheduled ad break." + }, + "429": { + "description": "Channel has no snoozes left." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:ads" + ] + } + ] + } + }, + "/analytics/extensions": { + "get": { + "summary": "Gets an analytics report for one or more extensions.", + "description": "Gets an analytics report for one or more extensions. The response contains the URLs used to download the reports (CSV files). [Learn More](https://dev.twitch.tv/docs/insights)\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **analytics:read:extensions** scope.", + "tags": [ + "Analytics" + ], + "externalDocs": { + "description": "Get Extension Analytics", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-analytics" + }, + "operationId": "get-extension-analytics", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The extension's client ID. If specified, the response contains a report for the specified extension. If not specified, the response includes a report for each extension that the authenticated user owns.", + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "The type of analytics report to get. Possible values are: \n \n* overview\\_v2", + "schema": { + "type": "string", + "enum": [ + "overview_v2" + ] + } + }, + { + "name": "started_at", + "in": "query", + "description": "The reporting window's start date, in RFC3339 format. Set the time portion to zeroes (for example, 2021-10-22T00:00:00Z). \n \nThe start date must be on or after January 31, 2018\\. If you specify an earlier date, the API ignores it and uses January 31, 2018\\. If you specify a start date, you must specify an end date. If you don't specify a start and end date, the report includes all available data since January 31, 2018. \n \nThe report contains one row of data for each day in the reporting window.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ended_at", + "in": "query", + "description": "The reporting window's end date, in RFC3339 format. Set the time portion to zeroes (for example, 2021-10-27T00:00:00Z). The report is inclusive of the end date. \n \nSpecify an end date only if you provide a start date. Because it can take up to two days for the data to be available, you must specify an end date that's earlier than today minus one to two days. If not, the API ignores your end date and uses an end date that is today minus one to two days.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of report URLs to return per page in the response. The minimum page size is 1 URL per page and the maximum is 100 URLs per page. The default is 20. \n \n**NOTE**: While you may specify a maximum value of 100, the response will contain at most 20 URLs per page.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) \n \nThis parameter is ignored if the _extension\\_id_ parameter is set.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster's analytics reports.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionAnalyticsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the URLs for all reports for all extensions of the authenticated client. The request was issued on June 1, 2018.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/analytics/extensions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "extension_id": "efgh", + "URL": "https://twitch-piper-reports.s3-us-west-2.amazonaws.com/dynamic/LoL%20ADC...", + "type": "overview_v2", + "date_range": { + "started_at": "2018-03-01T00:00:00Z", + "ended_at": "2018-06-01T00:00:00Z" + } + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + } + } + } + } + } + } + }, + "400": { + "description": "* The start and end dates are optional but if you specify one, you must specify the other.\n* The end date must be equal to or later than the start date.\n* The cursor specified in the _after_ query parameter is not valid.\n* The resource supports only forward pagination (use the _after_ query parameter).\n* The _first_ query parameter is outside the allowed range of values." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **analytics:read:extensions** scope.\n* The OAuth token is not valid.\n* The Client-Id header is required.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "404": { + "description": "* The extension specified in the _extension\\_id_ query parameter was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "analytics:read:extensions" + ] + } + ] + } + }, + "/analytics/games": { + "get": { + "summary": "Gets an analytics report for one or more games.", + "description": "Gets an analytics report for one or more games. The response contains the URLs used to download the reports (CSV files). [Learn more](https://dev.twitch.tv/docs/insights)\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **analytics:read:games** scope.", + "tags": [ + "Analytics" + ], + "externalDocs": { + "description": "Get Game Analytics", + "url": "https://dev.twitch.tv/docs/api/reference#get-game-analytics" + }, + "operationId": "get-game-analytics", + "parameters": [ + { + "name": "game_id", + "in": "query", + "description": "The game’s client ID. If specified, the response contains a report for the specified game. If not specified, the response includes a report for each of the authenticated user’s games.", + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "description": "The type of analytics report to get. Possible values are: \n \n* overview\\_v2", + "schema": { + "type": "string", + "enum": [ + "overview_v2" + ] + } + }, + { + "name": "started_at", + "in": "query", + "description": "The reporting window’s start date, in RFC3339 format. Set the time portion to zeroes (for example, 2021-10-22T00:00:00Z). If you specify a start date, you must specify an end date. \n \nThe start date must be within one year of today’s date. If you specify an earlier date, the API ignores it and uses a date that’s one year prior to today’s date. If you don’t specify a start and end date, the report includes all available data for the last 365 days from today. \n \nThe report contains one row of data for each day in the reporting window.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ended_at", + "in": "query", + "description": "The reporting window’s end date, in RFC3339 format. Set the time portion to zeroes (for example, 2021-10-22T00:00:00Z). The report is inclusive of the end date. \n \nSpecify an end date only if you provide a start date. Because it can take up to two days for the data to be available, you must specify an end date that’s earlier than today minus one to two days. If not, the API ignores your end date and uses an end date that is today minus one to two days.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of report URLs to return per page in the response. The minimum page size is 1 URL per page and the maximum is 100 URLs per page. The default is 20. \n \n**NOTE**: While you may specify a maximum value of 100, the response will contain at most 20 URLs per page.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) \n \nThis parameter is ignored if _game\\_id_ parameter is set.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s analytics reports.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGameAnalyticsResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the URL for a downloadable CSV report for game ID 493057, covering the period January 1, 2018 through March 1, 2018.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/analytics/games?game_id=493057&started_at=2018-01-01T00:00:00Z&ended_at=2018-03-01T00:00:00Z' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "game_id": "493057", + "URL": "https://twitch-piper-reports.s3-us-west-2.amazonaws.com/games/66170/overview/15183...", + "type": "overview_v2", + "date_range": { + "started_at": "2018-01-01T00:00:00Z", + "ended_at": "2018-03-01T00:00:00Z" + } + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nGets the first 5 URLs for all reports for all games of the authenticated client. The request was issued on June 14, 2018.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/analytics/games?first=5' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "game_id": "9821", + "URL": "https://twitch-piper-reports.s3-us-west-2.amazonaws.com/games/9821/overview/152642...", + "type": "overview_v2", + "date_range": { + "started_at": "2018-03-13T00:00:00Z", + "ended_at": "2018-06-13T00:00:00Z" + } + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLJxhIjoiIn0gf5" + } + } + } + } + } + } + }, + "400": { + "description": "* The start and end dates are optional but if you specify one, you must specify the other.\n* The end date must be equal to or later than the start date.\n* The cursor specified in the _after_ query parameter is not valid.\n* The resource supports only forward pagination (use the _after_ query parameter).\n* The _first_ query parameter is outside the allowed range of values." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **analytics:read:games** scope.\n* The OAuth token is not valid.\n* The Client-Id header is required.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "404": { + "description": "* The game specified in the _game\\_id_ query parameter was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "analytics:read:games" + ] + } + ] + } + }, + "/bits/leaderboard": { + "get": { + "summary": "Gets the Bits leaderboard for the authenticated broadcaster.", + "description": "Gets the Bits leaderboard for the authenticated broadcaster.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **bits:read** scope.", + "tags": [ + "Bits" + ], + "externalDocs": { + "description": "Get Bits Leaderboard", + "url": "https://dev.twitch.tv/docs/api/reference#get-bits-leaderboard" + }, + "operationId": "get-bits-leaderboard", + "parameters": [ + { + "name": "count", + "in": "query", + "description": "The number of results to return. The minimum count is 1 and the maximum is 100\\. The default is 10.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "period", + "in": "query", + "description": "The time period over which data is aggregated (uses the PST time zone). Possible values are: \n \n* day — A day spans from 00:00:00 on the day specified in _started\\_at_ and runs through 00:00:00 of the next day.\n* week — A week spans from 00:00:00 on the Monday of the week specified in _started\\_at_ and runs through 00:00:00 of the next Monday.\n* month — A month spans from 00:00:00 on the first day of the month specified in _started\\_at_ and runs through 00:00:00 of the first day of the next month.\n* year — A year spans from 00:00:00 on the first day of the year specified in _started\\_at_ and runs through 00:00:00 of the first day of the next year.\n* all — Default. The lifetime of the broadcaster's channel.", + "schema": { + "type": "string", + "enum": [ + "day", + "week", + "month", + "year", + "all" + ] + } + }, + { + "name": "started_at", + "in": "query", + "description": "The start date, in RFC3339 format, used for determining the aggregation period. Specify this parameter only if you specify the _period_ query parameter. The start date is ignored if _period_ is all. \n \nNote that the date is converted to PST before being used, so if you set the start time to `2022-01-01T00:00:00.0Z` and _period_ to month, the actual reporting period is December 2021, not January 2022\\. If you want the reporting period to be January 2022, you must set the start time to `2022-01-01T08:00:00.0Z` or `2022-01-01T00:00:00.0-08:00`. \n \nIf your start date uses the ‘+’ offset operator (for example, `2022-01-01T00:00:00.0+05:00`), you must URL encode the start date.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "user_id", + "in": "query", + "description": "An ID that identifies a user that cheered bits in the channel. If _count_ is greater than 1, the response may include users ranked above and below the specified user. To get the leaderboard’s top leaders, don’t specify a user ID.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s Bits leaderboard.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetBitsLeaderboardResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the authenticated broadcaster’s top two Bits leaderboard entries for the specified week.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/bits/leaderboard?count=2&period=week&started_at=2018-02-05T08%3A00%3A00Z' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "user_id": "158010205", + "user_login": "tundracowboy", + "user_name": "TundraCowboy", + "rank": 1, + "score": 12543 + }, + { + "user_id": "7168163", + "user_login": "topramens", + "user_name": "Topramens", + "rank": 2, + "score": 6900 + } + ], + "date_range": { + "started_at": "2018-02-05T08:00:00Z", + "ended_at": "2018-02-12T08:00:00Z" + }, + "total": 2 + } + } + } + } + } + }, + "400": { + "description": "* The time period specified in the _period_ query parameter is not valid.\n* The _started\\_at_ query parameter is required if _period_ is not set to _all_.\n* The value in the _count_ query parameter is outside the range of allowed values." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token must include the the **bits:read** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "403": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "bits:read" + ] + } + ] + } + }, + "/bits/cheermotes": { + "get": { + "summary": "Gets a list of Cheermotes that users can use to cheer Bits.", + "description": "Gets a list of Cheermotes that users can use to cheer Bits in any Bits-enabled channel’s chat room. Cheermotes are animated emotes that viewers can assign Bits to.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Bits" + ], + "externalDocs": { + "description": "Get Cheermotes", + "url": "https://dev.twitch.tv/docs/api/reference#get-cheermotes" + }, + "operationId": "get-cheermotes", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose custom Cheermotes you want to get. Specify the broadcaster’s ID if you want to include the broadcaster’s Cheermotes in the response (not all broadcasters upload Cheermotes). If not specified, the response contains only global Cheermotes. \n \nIf the broadcaster uploaded Cheermotes, the `type` field in the response is set to **channel\\_custom**.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the Cheermotes.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCheermotesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets a list of all global Cheermotes.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/bits/cheermotes' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```\n\nGets a list of all global Cheermotes and any Cheermotes that the broadcaster has uploaded.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/bits/cheermotes?broadcaster_id=41245072' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "prefix": "Cheer", + "tiers": [ + { + "min_bits": 1, + "id": "1", + "color": "#979797", + "images": { + "dark": { + "animated": { + "1": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/animated/1/1.gif", + "2": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/animated/1/2.gif", + "3": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/animated/1/3.gif", + "4": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/animated/1/4.gif", + "1.5": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/animated/1/1.5.gif" + }, + "static": { + "1": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/static/1/1.png", + "2": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/static/1/2.png", + "3": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/static/1/3.png", + "4": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/static/1/4.png", + "1.5": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/dark/static/1/1.5.png" + } + }, + "light": { + "animated": { + "1": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/animated/1/1.gif", + "2": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/animated/1/2.gif", + "3": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/animated/1/3.gif", + "4": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/animated/1/4.gif", + "1.5": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/animated/1/1.5.gif" + }, + "static": { + "1": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/static/1/1.png", + "2": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/static/1/2.png", + "3": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/static/1/3.png", + "4": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/static/1/4.png", + "1.5": "https://d3aqoihi2n8ty8.cloudfront.net/actions/cheer/light/static/1/1.5.png" + } + } + }, + "can_cheer": true, + "show_in_bits_card": true + } + ], + "type": "global_first_party", + "order": 1, + "last_updated": "2018-05-22T00:06:04Z", + "is_charitable": false + } + ] + } + } + } + } + } + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/transactions": { + "get": { + "summary": "Gets an extension’s list of transactions.", + "description": "Gets an extension’s list of transactions. A transaction records the exchange of a currency (for example, Bits) for a digital product.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Bits" + ], + "externalDocs": { + "description": "Get Extension Transactions", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-transactions" + }, + "operationId": "get-extension-transactions", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension whose list of transactions you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "A transaction ID used to filter the list of transactions. Specify this parameter for each transaction you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 100 IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of transactions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionTransactionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET\n'https://api.twitch.tv/helix/extensions/transactions?extension_id=1234' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "74c52265-e214-48a6-91b9-23b6014e8041", + "timestamp": "2019-01-28T04:15:53.325Z", + "broadcaster_id": "439964613", + "broadcaster_login": "chikuseuma", + "broadcaster_name": "chikuseuma", + "user_id": "424596340", + "user_login": "quotrok", + "user_name": "quotrok", + "product_type": "BITS_IN_EXTENSION", + "product_data": { + "domain": "twitch.ext.uo6dggojyb8d6soh92zknwmi5ej1q2", + "sku": "testSku100", + "cost": { + "amount": 100, + "type": "bits" + }, + "inDevelopment": false, + "displayName": "Test Product 100", + "expiration": "", + "broadcast": false + } + }, + { + "id": "8d303dc6-a460-4945-9f48-59c31d6735cb", + "timestamp": "2019-01-18T09:10:13.397Z", + "broadcaster_id": "439964613", + "broadcaster_login": "chikuseuma", + "broadcaster_name": "chikuseuma", + "user_id": "439966926", + "user_login": "liscuit", + "user_name": "liscuit", + "product_type": "BITS_IN_EXTENSION", + "product_data": { + "domain": "twitch.ext.uo6dggojyb8d6soh92zknwmi5ej1q2", + "sku": "testSku200", + "cost": { + "amount": 200, + "type": "bits" + }, + "inDevelopment": false, + "displayName": "Test Product 200", + "expiration": "", + "broadcast": false + } + } + ], + "pagination": { + "cursor": "cursorString" + } + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required.\n* The request specified too many _id_ query parameters.\n* The pagination cursor is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token.\n* The access token is not valid.\n* The ID in the _extension\\_id_ query parameter must match the client ID in the access token.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* One or more of the transaction IDs specified using the _id_ query parameter were not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/channels": { + "get": { + "summary": "Gets information about one or more channels.", + "description": "Gets information about one or more channels.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Channels" + ], + "externalDocs": { + "description": "Get Channel Information", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-information" + }, + "operationId": "get-channel-information", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose channel you want to get. To specify more than one ID, include this parameter for each broadcaster you want to get. For example, `broadcaster_id=1234&broadcaster_id=5678`. You may specify a maximum of 100 IDs. The API ignores duplicate IDs and IDs that are not found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": true, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of channels.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelInformationResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the TwitchDev channel.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "broadcaster_id": "141981764", + "broadcaster_login": "twitchdev", + "broadcaster_name": "TwitchDev", + "broadcaster_language": "en", + "game_id": "509670", + "game_name": "Science & Technology", + "title": "TwitchDev Monthly Update // May 6, 2021", + "delay": 0, + "tags": [ + "DevsInTheKnow" + ], + "content_classification_labels": [ + "Gambling", + "DrugsIntoxication", + "MatureGame" + ], + "is_branded_content": false + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The broadcaster ID is not valid.\n* The number of _broadcaster\\_id_ query parameters exceeds the maximum allowed." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "429": { + "description": "* 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": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "patch": { + "summary": "Updates a channel’s properties.", + "description": "Updates a channel’s properties.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:broadcast** scope.\n\n__Request Body:__\n\nAll fields are optional, but you must specify at least one field.", + "tags": [ + "Channels" + ], + "externalDocs": { + "description": "Modify Channel Information", + "url": "https://dev.twitch.tv/docs/api/reference#modify-channel-information" + }, + "operationId": "modify-channel-information", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose channel you want to update. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModifyChannelInformationBody" + }, + "examples": { + "Example 1": { + "value": { + "game_id": "33214", + "title": "there are helicopters in the game? REASON TO PLAY FORTNITE found", + "broadcaster_language": "en", + "tags": [ + "LevelingUp" + ] + } + }, + "Example 2": { + "value": { + "game_id": "SomeGameID", + "content_classification_labels": [ + { + "id": "Gambling", + "is_enabled": true + }, + { + "id": "DrugsIntoxication", + "is_enabled": false + } + ], + "is_branded_content": true + }, + "description": "Set CCLs for a Channel" + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully updated the channel’s properties.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/channels?broadcaster_id=41245072' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{\"game_id\":\"33214\", \"title\":\"there are helicopters in the game? REASON TO PLAY FORTNITE found\", \"broadcaster_language\":\"en\", \"tags\":[\"LevelingUp\"]}'\n```\n\nSet CCLs for a Channel\n\n```bash\ncurl -X PATCH\n'https://api.twitch.tv/helix/channels?broadcaster_id=41245072' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n--data-raw '{ \n \"game_id\": \"SomeGameID\",\n \"content_classification_labels\": [\n {\"id\": \"Gambling\", \"is_enabled\": true}, \n {\"id\": \"DrugsIntoxication\", \"is_enabled\": false} \n ],\n \"is_branded_content\": true\n}'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The request must update at least one property.\n* The `title` field may not contain an empty string.\n* The ID in `game_id` is not valid.\n* To update the `delay` field, the broadcaster must have partner status.\n* The list in the `tags` field exceeds the maximum number of tags allowed.\n* A tag in the `tags` field exceeds the maximum length allowed.\n* A tag in the `tags` field is empty.\n* A tag in the `tags` field contains special characters or spaces.\n* One or more tags in the `tags` field failed AutoMod review.\n* Game restricted for user's age and region" + }, + "401": { + "description": "* User requests CCL for a channel they don’t own\n* The ID in _broadcaster\\_id_ must match the user ID found in the OAuth token.\n* The Authorization header is required and must specify a user access token.\n* The OAuth token must include the **channel:manage:broadcast** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* User requested gaming CCLs to be added to their channel\n* Unallowed CCLs declared for underaged authorized user in a restricted country" + }, + "409": { + "description": "User set the Branded Content flag too frequently" + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:broadcast" + ] + } + ] + } + }, + "/channels/editors": { + "get": { + "summary": "Gets the broadcaster’s list editors.", + "description": "Gets the broadcaster’s list editors.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:editors** scope.", + "tags": [ + "Channels" + ], + "externalDocs": { + "description": "Get Channel Editors", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-editors" + }, + "operationId": "get-channel-editors", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the channel. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster's list of editors.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelEditorsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the list of editors for TwitchDev.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/editors?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n```", + "value": { + "data": [ + { + "user_id": "182891647", + "user_name": "mauerbac", + "created_at": "2019-02-15T21:19:50.380833Z" + }, + { + "user_id": "135093069", + "user_name": "BlueLava", + "created_at": "2018-03-07T16:28:29.872937Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID found in the OAuth token.\n* The Authorization header is required and must specify a user access token.\n* The OAuth token must include the **channel:read:editors** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:editors" + ] + } + ] + } + }, + "/channels/followed": { + "get": { + "summary": "Gets a list of broadcasters that the specified user follows. You can also use this endpoint to see whether a user follows a specific broadcaster.", + "description": "Gets a list of broadcasters that the specified user follows. You can also use this endpoint to see whether a user follows a specific broadcaster.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:follows** scope.", + "tags": [ + "Channels" + ], + "externalDocs": { + "description": "Get Followed Channels", + "url": "https://dev.twitch.tv/docs/api/reference#get-followed-channels" + }, + "operationId": "get-followed-channels", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "A user’s ID. Returns the list of broadcasters that this user follows. This ID must match the user ID in the user OAuth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "A broadcaster’s ID. Use this parameter to see whether the user follows this broadcaster. If specified, the response contains this broadcaster if the user follows them. If not specified, the response contains all broadcasters that the user follows.", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read more](https://dev.twitch.tv/docs/api/guide#pagination).", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster's list of followers.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFollowedChannelsResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the list of broadcasters that the specified user follows.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/followed?user_id=123456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "total": 8, + "data": [ + { + "broadcaster_id": "11111", + "broadcaster_login": "userloginname", + "broadcaster_name": "UserDisplayName", + "followed_at": "2022-05-24T22:22:08Z" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + } + } + }, + "Example 2": { + "description": "The `data` field is not an empty array, which means that the user does follow the specified broadcaster.\n\n_Request:_\n\nChecks whether the specified user follows the specified broadcaster.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/followed?user_id=123456&broadcaster_id=654321' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "total": 8, + "data": [ + { + "broadcaster_id": "654321", + "broadcaster_login": "basketweaver101", + "broadcaster_name": "BasketWeaver101", + "followed_at": "2022-05-24T22:22:08Z" + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "Possible reasons: \n \n* The _user\\_id_ query parameter is required.\n* The _broadcaster\\_id_ query parameter is not valid.\n* The _user\\_id_ query parameter is required." + }, + "401": { + "description": "Possible reasons: \n \n* The ID in the _user\\_id_ query parameter must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **user:read:follows** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:follows" + ] + } + ] + } + }, + "/channels/followers": { + "get": { + "summary": "Gets a list of users that follow the specified broadcaster. You can also use this endpoint to see whether a specific user follows the broadcaster.", + "description": "Gets a list of users that follow the specified broadcaster. You can also use this endpoint to see whether a specific user follows the broadcaster.\n\n__Authorization:__\n\n* Requires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:read:followers** scope.\n* The ID in the broadcaster\\_id query parameter must match the user ID in the access token or the user ID in the access token must be a moderator for the specified broadcaster.\n\nThis endpoint will return specific follower information only if both of the above are true. If a scope is not provided or the user isn’t the broadcaster or a moderator for the specified channel, only the total follower count will be included in the response.", + "tags": [ + "Channels" + ], + "externalDocs": { + "description": "Get Channel Followers", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-followers" + }, + "operationId": "get-channel-followers", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "A user’s ID. Use this parameter to see whether the user follows this broadcaster. If specified, the response contains this user if they follow the broadcaster. If not specified, the response contains all users that follow the broadcaster. \n \nUsing this parameter requires both a user access token with the **moderator:read:followers** scope and the user ID in the access token match the broadcaster\\_id or be the user ID for a moderator of the specified broadcaster.", + "schema": { + "type": "string" + } + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "The broadcaster’s ID. Returns the list of users that follow this broadcaster.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read more](https://dev.twitch.tv/docs/api/guide#pagination).", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s list of followers.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelFollowersResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the list of users that follow the specified broadcaster.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/followers?broadcaster_id=123456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "total": 8, + "data": [ + { + "user_id": "11111", + "user_name": "UserDisplayName", + "user_login": "userloginname", + "followed_at": "2022-05-24T22:22:08Z" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + } + } + }, + "Example 2": { + "description": "The `data` field is an empty array, which means the user doesn’t follow the specified broadcaster.\n\n_Request:_\n\nChecks whether the specified user follows the specified broadcaster.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/followers?broadcaster_id=123456&user_id=654321' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "total": 8, + "data": [], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "Possible reasons: \n \n* The _broadcaster\\_id_ query parameter is required.\n* The _broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "Possible reasons: \n \n* 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.\n* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **moderator:read:followers** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token.\n* 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" + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:followers" + ] + } + ] + } + }, + "/channel_points/custom_rewards": { + "post": { + "summary": "Creates a Custom Reward in the broadcaster’s channel.", + "description": "Creates a Custom Reward in the broadcaster’s channel. The maximum number of custom rewards per channel is 50, which includes both enabled and disabled rewards.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:redemptions** scope.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Create Custom Rewards", + "url": "https://dev.twitch.tv/docs/api/reference#create-custom-rewards" + }, + "operationId": "create-custom-rewards", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster to add the custom reward to. This ID must match the user ID found in the OAuth token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomRewardsBody" + }, + "examples": { + "Example": { + "value": { + "title": "game analysis 1v1", + "cost": 50000 + }, + "description": "Creates a custom reward." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created the custom reward.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomRewardsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nCreates a custom reward.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212' \\\n-H 'client-id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"title\":\"game analysis 1v1\",\n \"cost\":50000\n}'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "afaa7e34-6b17-49f0-a19a-d1e76eaaf673", + "image": null, + "background_color": "#00E5CB", + "is_enabled": true, + "cost": 50000, + "title": "game analysis 1v1", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": false, + "max_per_stream": 0 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": true, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": false, + "redemptions_redeemed_current_stream": null, + "cooldown_expires_at": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The request exceeds the maximum number of rewards allowed per channel.\n* The _broadcaster\\_id_ query parameter is required.\n* The `title` field is required.\n* The `title` must contain a minimum of 1 character and a maximum of 45 characters.\n* The `title` must be unique amongst all of the broadcaster's custom rewards.\n* The `cost` field is required.\n* The `cost` field must contain a minimum of 1 point.\n* The `prompt` field is limited to a maximum of 200 characters.\n* If `is_max_per_stream_enabled` is **true**, the minimum value for `max_per_stream` is 1.\n* If `is_max_per_user_per_stream_enabled` is **true**, the minimum value for `max_per_user_per_stream` is 1.\n* If `is_global_cooldown_enabled` is **true**, the minimum value for `global_cooldown_seconds` is 1." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token is missing the **channel:manage:redemptions** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The broadcaster is not a partner or affiliate." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:redemptions" + ] + } + ] + }, + "delete": { + "summary": "Deletes a custom reward that the broadcaster created.", + "description": "Deletes a custom reward that the broadcaster created.\n\nThe app used to create the reward is the only app that may delete it. If the reward’s redemption status is UNFULFILLED at the time the reward is deleted, its redemption status is marked as FULFILLED.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:redemptions** scope.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Delete Custom Reward", + "url": "https://dev.twitch.tv/docs/api/reference#delete-custom-reward" + }, + "operationId": "delete-custom-reward", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that created the custom reward. This ID must match the user ID found in the OAuth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the custom reward to delete.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully deleted the custom reward.\n\n__Examples__\n\n_Request:_\n\nDeletes the specified custom reward.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28' \\\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token must include the **channel:manage:redemptions** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The ID in the Client-Id header must match the client ID used to create the custom reward.\n* The broadcaster is not a partner or affiliate." + }, + "404": { + "description": "* The custom reward specified in the _id_ query parameter was not found." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:redemptions" + ] + } + ] + }, + "get": { + "summary": "Gets a list of custom rewards that the specified broadcaster created.", + "description": "Gets a list of custom rewards that the specified broadcaster created.\n\n**NOTE**: A channel may offer a maximum of 50 rewards, which includes both enabled and disabled rewards.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:redemptions** or **channel:manage:redemptions** scope.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Get Custom Reward", + "url": "https://dev.twitch.tv/docs/api/reference#get-custom-reward" + }, + "operationId": "get-custom-reward", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose custom rewards you want to get. This ID must match the user ID found in the OAuth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "A list of IDs to filter the rewards by. To specify more than one ID, include this parameter for each reward you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 50 IDs. \n \nDuplicate IDs are ignored. The response contains only the IDs that were found. If none of the IDs were found, the response is 404 Not Found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "only_manageable_rewards", + "in": "query", + "description": "A Boolean value that determines whether the response contains only the custom rewards that the app may manage (the app is identified by the ID in the Client-Id header). Set to **true** to get only the custom rewards that the app may manage. The default is **false**.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s list of custom rewards.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCustomRewardResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the broadcaster’s list of custom rewards.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212'\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "image": null, + "background_color": "#00E5CB", + "is_enabled": true, + "cost": 50000, + "title": "game analysis", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": false, + "max_per_stream": 0 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": true, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": false, + "redemptions_redeemed_current_stream": null, + "cooldown_expires_at": null + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nGets the list of custom rewards that the calling Client ID can manage.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&only_manageable_rewards=true'\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'​​​​​​​\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_id": "274637212", + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "image": null, + "background_color": "#00E5CB", + "is_enabled": true, + "cost": 50000, + "title": "game analysis", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": false, + "max_per_stream": 0 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": true, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": false, + "redemptions_redeemed_current_stream": null, + "cooldown_expires_at": null + } + ] + } + }, + "Example 3": { + "description": "_Request:_\n\nGets the specified custom reward.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01'\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'​​​​​​​​​​​​​​\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_id": "274637212", + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "image": null, + "background_color": "#00E5CB", + "is_enabled": true, + "cost": 50000, + "title": "game analysis", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": false, + "max_per_stream": 0 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": true, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": false, + "redemptions_redeemed_current_stream": null, + "cooldown_expires_at": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The request exceeds the maximum number of _id_ query parameters that you may specify." + }, + "401": { + "description": "* The Authorization header must specify a user access token.\n* The user access token must include the **channel:read:redemptions** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The broadcaster is not a partner or affiliate." + }, + "404": { + "description": "* All of the custom rewards specified using the _id_ query parameter were not found." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:redemptions", + "channel:manage:redemptions" + ] + } + ] + }, + "patch": { + "summary": "Updates a custom reward.", + "description": "Updates a custom reward. The app used to create the reward is the only app that may update the reward.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/api/authentication#user-access-tokens) that includes the **channel:manage:redemptions** scope.\n\n__Request Body:__\n\nThe body of the request should contain only the fields you’re updating.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Update Custom Reward", + "url": "https://dev.twitch.tv/docs/api/reference#update-custom-reward" + }, + "operationId": "update-custom-reward", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s updating the reward. This ID must match the user ID found in the OAuth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the reward to update.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomRewardBody" + }, + "examples": { + "Example 1": { + "value": { + "is_enabled": false + }, + "description": "Disables the specified custom reward." + }, + "Example 2": { + "value": { + "title": "game analysis 2v2" + }, + "description": "Updates the reward’s title." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the custom reward.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomRewardResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nDisables the specified custom reward.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01' \\\n-H 'client-id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"is_enabled\": false\n }'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "image": null, + "background_color": "#00E5CB", + "is_enabled": false, + "cost": 30000, + "title": "game analysis 2v2", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": true, + "max_per_stream": 60 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": false, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": true, + "redemptions_redeemed_current_stream": 60, + "cooldown_expires_at": null + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nUpdates the reward’s title.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01' \\\n-H 'client-id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"title\": \"game analysis 2v2\"\n }'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "image": null, + "background_color": "", + "is_enabled": false, + "cost": 30000, + "title": "game analysis 2v2", + "prompt": "", + "is_user_input_required": false, + "max_per_stream_setting": { + "is_enabled": true, + "max_per_stream": 60 + }, + "max_per_user_per_stream_setting": { + "is_enabled": false, + "max_per_user_per_stream": 0 + }, + "global_cooldown_setting": { + "is_enabled": false, + "global_cooldown_seconds": 0 + }, + "is_paused": false, + "is_in_stock": true, + "default_image": { + "url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png", + "url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png", + "url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png" + }, + "should_redemptions_skip_request_queue": true, + "redemptions_redeemed_current_stream": 60, + "cooldown_expires_at": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "ul>\n* The _broadcaster\\_id_ query parameter is required.\n* The _id_ query parameter is required.\n* The `title` must contain a minimum of 1 character and a maximum of 45 characters.\n* The `title` must be unique amongst all of the broadcaster's custom rewards.\n* The `cost` field must contain a minimum of 1 point.\n* The `prompt` field is limited to a maximum of 200 characters.\n* If `is_max_per_stream_enabled` is **true**, the minimum value for `max_per_stream` is 1.\n* If `is_max_per_user_per_stream_enabled` is **true**, the minimum value for `max_per_user_per_stream` is 1.\n* If `is_global_cooldown_enabled` is **true**, the minimum value for `global_cooldown_seconds` is 1 and the maximum is 604800." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token must include the **channel:manage:redemptions** scope.\n* The OAuth token is not valide.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The ID in the Client-Id header must match the client ID used to create the custom reward.\n* The broadcaster is not a partner or affiliate." + }, + "404": { + "description": "* The custom reward specified in the _id_ query parameter was not found." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:redemptions" + ] + } + ] + } + }, + "/channel_points/custom_rewards/redemptions": { + "get": { + "summary": "Gets a list of redemptions for a custom reward.", + "description": "Gets a list of redemptions for the specified custom reward. The app used to create the reward is the only app that may get the redemptions.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:redemptions** or **channel:manage:redemptions** scope.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Get Custom Reward Redemption", + "url": "https://dev.twitch.tv/docs/api/reference#get-custom-reward-redemption" + }, + "operationId": "get-custom-reward-redemption", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the custom reward. This ID must match the user ID found in the user OAuth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "reward_id", + "in": "query", + "description": "The ID that identifies the custom reward whose redemptions you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "status", + "in": "query", + "description": "The status of the redemptions to return. The possible case-sensitive values are: \n \n* CANCELED\n* FULFILLED\n* UNFULFILLED\n \n**NOTE**: This field is required only if you don’t specify the _id_ query parameter. \n \n**NOTE**: Canceled and fulfilled redemptions are returned for only a few days after they’re canceled or fulfilled.", + "schema": { + "type": "string", + "enum": [ + "CANCELED", + "FULFILLED", + "UNFULFILLED" + ] + } + }, + { + "name": "id", + "in": "query", + "description": "A list of IDs to filter the redemptions by. To specify more than one ID, include this parameter for each redemption you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 50 IDs. \n \nDuplicate IDs are ignored. The response contains only the IDs that were found. If none of the IDs were found, the response is 404 Not Found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "sort", + "in": "query", + "description": "The order to sort redemptions by. The possible case-sensitive values are: \n \n* OLDEST\n* NEWEST\n \nThe default is OLDEST.", + "schema": { + "type": "string", + "enum": [ + "OLDEST", + "NEWEST" + ] + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read more](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of redemptions to return per page in the response. The minimum page size is 1 redemption per page and the maximum is 50\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of redeemed custom rewards.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCustomRewardRedemptionResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the list of redemptions that were canceled for the specified reward.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED' \\\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63", + "user_login": "torpedo09", + "user_id": "274637212", + "user_name": "torpedo09", + "user_input": "", + "status": "CANCELED", + "redeemed_at": "2020-07-01T18:37:32Z", + "reward": { + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "title": "game analysis", + "prompt": "", + "cost": 50000 + } + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6Ik1UZG1ZVEprWmpFdFlXUTNOaTAwT0RBMExXSm1ZVFV0WVRRd1pXWTJNMlZtWlRZelgxOHlNREl3TFRBM0xUQXhWREU0T2pNM09qTXlMakl6TXpFeU56RTFOMW89In19" + } + } + }, + "Example 2": { + "description": "_Request:_\n\nGets redemptions by ID.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63' \\\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63", + "user_id": "274637212", + "user_name": "torpedo09", + "user_input": "", + "status": "CANCELED", + "redeemed_at": "2020-07-01T18:37:32Z", + "reward": { + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "title": "game analysis", + "prompt": "", + "cost": 50000 + } + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _reward\\_id_ query parameter is required.\n* The _status_ query parameter is required if you didn't specify the _id_ query parameter.\n* The value in the _status_ query parameter is not valid.\n* The value in the _sort_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token must include the **channel:read:redemptions** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The ID in the Client-Id header must match the client ID used to create the custom reward.\n* The broadcaster is not a partner or affiliate." + }, + "404": { + "description": "* All of the redemptions specified using the _id_ query parameter were not found." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:redemptions", + "channel:manage:redemptions" + ] + } + ] + }, + "patch": { + "summary": "Updates a redemption’s status.", + "description": "Updates a redemption’s status. You may update a redemption only if its status is UNFULFILLED. The app used to create the reward is the only app that may update the redemption.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:redemptions** scope.", + "tags": [ + "Channel Points" + ], + "externalDocs": { + "description": "Update Redemption Status", + "url": "https://dev.twitch.tv/docs/api/reference#update-redemption-status" + }, + "operationId": "update-redemption-status", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "A list of IDs that identify the redemptions to update. To specify more than one ID, include this parameter for each redemption you want to update. For example, `id=1234&id=5678`. You may specify a maximum of 50 IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": true, + "explode": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s updating the redemption. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "reward_id", + "in": "query", + "description": "The ID that identifies the reward that’s been redeemed.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRedemptionStatusBody" + }, + "examples": { + "Example": { + "value": { + "status": "CANCELED" + }, + "description": "Updates a redemption’s status." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the redemption’s status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRedemptionStatusResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nUpdates a redemption’s status.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63' \\\n-H 'Client-Id: gx2pv4208cff0ig9ou7nk3riccffxt' \\\n-H 'Authorization: Bearer vjxv3i0l4zxru966wsnwji51tmpkj2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"status\": \"CANCELED\"\n}'\n```", + "value": { + "data": [ + { + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63", + "user_id": "274637212", + "user_name": "torpedo09", + "user_login": "torpedo09", + "user_input": "", + "status": "CANCELED", + "redeemed_at": "2020-07-01T18:37:32Z", + "reward": { + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "title": "game analysis", + "prompt": "", + "cost": 50000 + } + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _reward\\_id_ query parameter is required.\n* The _id_ query parameter is required.\n* The value in the _status_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify a user access token.\n* The user access token must include the **channel:manage:redemptions** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The ID in the Client-Id header must match the client ID used to create the custom reward.\n* The broadcaster is not a partner or affiliate." + }, + "404": { + "description": "* The custom reward specified in the _reward\\_id_ query parameter was not found.\n* The redemptions specified using the _id_ query parameter were not found or their statuses weren't marked as UNFULFILLED." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:redemptions" + ] + } + ] + } + }, + "/charity/campaigns": { + "get": { + "summary": "Gets information about the broadcaster’s active charity campaign.", + "description": "Gets information about the charity campaign that a broadcaster is running. For example, the campaign’s fundraising goal and the current amount of donations.\n\nTo receive events when progress is made towards the campaign’s goal or the broadcaster changes the fundraising goal, subscribe to the [channel.charity\\_campaign.progress](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelcharity%5Fcampaignprogress) subscription type.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:charity** scope.", + "tags": [ + "Charity" + ], + "externalDocs": { + "description": "Get Charity Campaign", + "url": "https://dev.twitch.tv/docs/api/reference#get-charity-campaign" + }, + "operationId": "get-charity-campaign", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s currently running a charity campaign. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved information about the broadcaster’s active charity campaign.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCharityCampaignResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the broadcaster’s active charity campaign.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/charity/campaigns?broadcaster_id=123456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "id": "123-abc-456-def", + "broadcaster_id": "123456", + "broadcaster_name": "SunnySideUp", + "broadcaster_login": "sunnysideup", + "charity_name": "Example name", + "charity_description": "Example description", + "charity_logo": "https://abc.cloudfront.net/ppgf/1000/100.png", + "charity_website": "https://www.example.com", + "current_amount": { + "value": 86000, + "decimal_places": 2, + "currency": "USD" + }, + "target_amount": { + "value": 1500000, + "decimal_places": 2, + "currency": "USD" + } + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:charity** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header must match the client ID specified in the access token." + }, + "403": { + "description": "* The broadcaster is not a partner or affiliate." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:charity" + ] + } + ] + } + }, + "/charity/donations": { + "get": { + "summary": "Gets the list of donations that users have made to the broadcaster’s active charity campaign.", + "description": "Gets the list of donations that users have made to the broadcaster’s active charity campaign.\n\nTo receive events as donations occur, subscribe to the [channel.charity\\_campaign.donate](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelcharity%5Fcampaigndonate) subscription type.\n\n__Authorization:__\n\nRequires a user access token that includes the **channel:read:charity** scope.", + "tags": [ + "Charity" + ], + "externalDocs": { + "description": "Get Charity Campaign Donations", + "url": "https://dev.twitch.tv/docs/api/reference#get-charity-campaign-donations" + }, + "operationId": "get-charity-campaign-donations", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s currently running a charity campaign. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of donations that users contributed to the broadcaster’s charity campaign.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCharityCampaignDonationsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the broadcaster’s active charity campaign.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/charity/donations?broadcaster_id=123456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "id": "a1b2c3-aabb-4455-d1e2f3", + "campaign_id": "123-abc-456-def", + "user_id": "5678", + "user_login": "cool_user", + "user_name": "Cool_User", + "amount": { + "value": 500, + "decimal_places": 2, + "currency": "USD" + } + }, + { + "id": "z1y2x3-ccdd-6677-d1e2f3", + "campaign_id": "123-abc-456-def", + "user_id": "8765", + "user_login": "cool_user2", + "user_name": "Cool_User2", + "amount": { + "value": 10000, + "decimal_places": 2, + "currency": "USD" + } + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:charity** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header must match the client ID specified in the access token." + }, + "403": { + "description": "* The broadcaster is not a partner or affiliate." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:charity" + ] + } + ] + } + }, + "/chat/chatters": { + "get": { + "summary": "Gets the list of users that are connected to the broadcaster’s chat session.", + "description": "Gets the list of users that are connected to the broadcaster’s chat session.\n\n**NOTE**: There is a delay between when users join and leave a chat and when the list is updated accordingly.\n\nTo determine whether a user is a moderator or VIP, use the [Get Moderators](https://dev.twitch.tv/docs/api/reference#get-moderators) and [Get VIPs](https://dev.twitch.tv/docs/api/reference#get-vips) endpoints. You can check the roles of up to 100 users.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:read:chatters** scope.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Chatters", + "url": "https://dev.twitch.tv/docs/api/reference#get-chatters" + }, + "operationId": "get-chatters", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose list of chatters you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or one of the broadcaster’s moderators. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 1,000\\. The default is 100.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s list of chatters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChattersResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the list of users that are connected to the specified broadcaster’s chat room.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/chatters?broadcaster_id=123456&moderator_id=654321' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "user_id": "128393656", + "user_login": "smittysmithers", + "user_name": "smittysmithers" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + }, + "total": 8 + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _moderator\\_id_ query parameter is required.\n* The ID in the _moderator\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in the _moderator\\_id_ query parameter must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:read:chatters** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in the _moderator\\_id_ query parameter is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:chatters" + ] + } + ] + } + }, + "/chat/emotes": { + "get": { + "summary": "Gets the broadcaster’s list of custom emotes.", + "description": "Gets the broadcaster’s list of custom emotes. Broadcasters create these custom emotes for users who subscribe to or follow the channel or cheer Bits in the channel’s chat window. [Learn More](https://dev.twitch.tv/docs/irc/emotes)\n\nFor information about the custom emotes, see [subscriber emotes](https://help.twitch.tv/s/article/subscriber-emote-guide), [Bits tier emotes](https://help.twitch.tv/s/article/custom-bit-badges-guide?language=bg#slots), and [follower emotes](https://blog.twitch.tv/en/2021/06/04/kicking-off-10-years-with-our-biggest-emote-update-ever/).\n\n**NOTE:** With the exception of custom follower emotes, users may use custom emotes in any Twitch chat.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Channel Emotes", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-emotes" + }, + "operationId": "get-channel-emotes", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "An ID that identifies the broadcaster whose emotes you want to get.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved broadcaster's list of custom emotes.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelEmotesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets custom emotes that the TwitchDev channel created.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/emotes?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets the custom emotes for the specified channel.\n\ntwitch api get /chat/emotes -q broadcaster_id=141981764\n```", + "value": { + "data": [ + { + "id": "304456832", + "name": "twitchdevPitchfork", + "images": { + "url_1x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/1.0", + "url_2x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/2.0", + "url_4x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/3.0" + }, + "tier": "1000", + "emote_type": "subscriptions", + "emote_set_id": "301590448", + "format": [ + "static" + ], + "scale": [ + "1.0", + "2.0", + "3.0" + ], + "theme_mode": [ + "light", + "dark" + ] + }, + { + "id": "emotesv2_4c3b4ed516de493bbcd2df2f5d450f49", + "name": "twitchdevHyperPitchfork", + "images": { + "url_1x": "https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_4c3b4ed516de493bbcd2df2f5d450f49/static/light/1.0", + "url_2x": "https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_4c3b4ed516de493bbcd2df2f5d450f49/static/light/2.0", + "url_4x": "https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_4c3b4ed516de493bbcd2df2f5d450f49/static/light/3.0" + }, + "tier": "1000", + "emote_type": "subscriptions", + "emote_set_id": "318939165", + "format": [ + "static", + "animated" + ], + "scale": [ + "1.0", + "2.0", + "3.0" + ], + "theme_mode": [ + "light", + "dark" + ] + } + ], + "template": "https://static-cdn.jtvnw.net/emoticons/v2/{{id}}/{{format}}/{{theme_mode}}/{{scale}}" + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/chat/emotes/global": { + "get": { + "summary": "Gets all global emotes.", + "description": "Gets the list of [global emotes](https://www.twitch.tv/creatorcamp/en/learn-the-basics/emotes/). Global emotes are Twitch-created emotes that users can use in any Twitch chat.\n\n[Learn More](https://dev.twitch.tv/docs/irc/emotes)\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).\n\n__Request Query Parameters:__\n\nNone", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Global Emotes", + "url": "https://dev.twitch.tv/docs/api/reference#get-global-emotes" + }, + "operationId": "get-global-emotes", + "responses": { + "200": { + "description": "Successfully retrieved Twitch's list of global emotes.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGlobalEmotesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets all global emotes.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/emotes/global' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets all global emotes.\n\ntwitch api get /chat/emotes/global\n```", + "value": { + "data": [ + { + "id": "196892", + "name": "TwitchUnity", + "images": { + "url_1x": "https://static-cdn.jtvnw.net/emoticons/v2/196892/static/light/1.0", + "url_2x": "https://static-cdn.jtvnw.net/emoticons/v2/196892/static/light/2.0", + "url_4x": "https://static-cdn.jtvnw.net/emoticons/v2/196892/static/light/3.0" + }, + "format": [ + "static" + ], + "scale": [ + "1.0", + "2.0", + "3.0" + ], + "theme_mode": [ + "light", + "dark" + ] + } + ], + "template": "https://static-cdn.jtvnw.net/emoticons/v2/{{id}}/{{format}}/{{theme_mode}}/{{scale}}" + } + } + } + } + } + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/chat/emotes/set": { + "get": { + "summary": "Gets emotes for one or more specified emote sets.", + "description": "Gets emotes for one or more specified emote sets.\n\nAn emote set groups emotes that have a similar context. For example, Twitch places all the subscriber emotes that a broadcaster uploads for their channel in the same emote set.\n\n[Learn More](https://dev.twitch.tv/docs/irc/emotes)\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Emote Sets", + "url": "https://dev.twitch.tv/docs/api/reference#get-emote-sets" + }, + "operationId": "get-emote-sets", + "parameters": [ + { + "name": "emote_set_id", + "in": "query", + "description": "An ID that identifies the emote set to get. Include this parameter for each emote set you want to get. For example, `emote_set_id=1234&emote_set_id=5678`. You may specify a maximum of 25 IDs. The response contains only the IDs that were found and ignores duplicate IDs. \n \nTo get emote set IDs, use the [Get Channel Emotes](https://dev.twitch.tv/docs/api/reference#get-channel-emotes) API.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": true, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the emotes for the specified emote sets.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEmoteSetsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the emotes for the TwitchDev subscriber emote set.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/emotes/set?emote_set_id=301590448' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets the emotes for the specified emote set.\n\ntwitch api get /chat/emotes/set -q emote_set_id=301590448\n```", + "value": { + "data": [ + { + "id": "304456832", + "name": "twitchdevPitchfork", + "images": { + "url_1x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/1.0", + "url_2x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/2.0", + "url_4x": "https://static-cdn.jtvnw.net/emoticons/v2/304456832/static/light/3.0" + }, + "emote_type": "subscriptions", + "emote_set_id": "301590448", + "owner_id": "141981764", + "format": [ + "static" + ], + "scale": [ + "1.0", + "2.0", + "3.0" + ], + "theme_mode": [ + "light", + "dark" + ] + } + ], + "template": "https://static-cdn.jtvnw.net/emoticons/v2/{{id}}/{{format}}/{{theme_mode}}/{{scale}}" + } + } + } + } + } + }, + "400": { + "description": "* The _emote\\_set\\_id_ query parameter is required.\n* The number of _emote\\_set\\_id_ query parameters exceeds the maximum allowed." + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/chat/badges": { + "get": { + "summary": "Gets the broadcaster’s list of custom chat badges.", + "description": "Gets the broadcaster’s list of custom chat badges. The list is empty if the broadcaster hasn’t created custom chat badges. For information about custom badges, see [subscriber badges](https://help.twitch.tv/s/article/subscriber-badge-guide) and [Bits badges](https://help.twitch.tv/s/article/custom-bit-badges-guide).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Channel Chat Badges", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-chat-badges" + }, + "operationId": "get-channel-chat-badges", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose chat badges you want to get.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s custom chat badges.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelChatBadgesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGet the list of custom chat badges that the BlueLava Twitch channel created.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/badges?broadcaster_id=135093069' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "set_id": "bits", + "versions": [ + { + "id": "1", + "image_url_1x": "https://static-cdn.jtvnw.net/badges/v1/743a0f3b-84b3-450b-96a0-503d7f4a9764/1", + "image_url_2x": "https://static-cdn.jtvnw.net/badges/v1/743a0f3b-84b3-450b-96a0-503d7f4a9764/2", + "image_url_4x": "https://static-cdn.jtvnw.net/badges/v1/743a0f3b-84b3-450b-96a0-503d7f4a9764/3", + "title": "cheer 1", + "description": "cheer 1", + "click_action": "visit_url", + "click_url": "https://bits.twitch.tv" + } + ] + }, + { + "set_id": "subscriber", + "versions": [ + { + "id": "0", + "image_url_1x": "https://static-cdn.jtvnw.net/badges/v1/eb4a8a4c-eacd-4f5e-b9f2-394348310442/1", + "image_url_2x": "https://static-cdn.jtvnw.net/badges/v1/eb4a8a4c-eacd-4f5e-b9f2-394348310442/2", + "image_url_4x": "https://static-cdn.jtvnw.net/badges/v1/eb4a8a4c-eacd-4f5e-b9f2-394348310442/3", + "title": "Subscriber", + "description": "Subscriber", + "click_action": "subscribe_to_channel", + "click_url": null + } + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/chat/badges/global": { + "get": { + "summary": "Gets Twitch’s list of chat badges.", + "description": "Gets Twitch’s list of chat badges, which users may use in any channel’s chat room. For information about chat badges, see [Twitch Chat Badges Guide](https://help.twitch.tv/s/article/twitch-chat-badges-guide).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).\n\n__Request Query Parameters:__\n\nNone", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Global Chat Badges", + "url": "https://dev.twitch.tv/docs/api/reference#get-global-chat-badges" + }, + "operationId": "get-global-chat-badges", + "responses": { + "200": { + "description": "Successfully retrieved the list of global chat badges.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGlobalChatBadgesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the list of global chat badges.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/badges/global' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "set_id": "vip", + "versions": [ + { + "id": "1", + "image_url_1x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/1", + "image_url_2x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/2", + "image_url_4x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3", + "title": "VIP", + "description": "VIP", + "click_action": "visit_url", + "click_url": "https://help.twitch.tv/customer/en/portal/articles/659115-twitch-chat-badges-guide" + } + ] + } + ] + } + } + } + } + } + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/chat/settings": { + "get": { + "summary": "Gets the broadcaster’s chat settings.", + "description": "Gets the broadcaster’s chat settings.\n\nFor an overview of chat settings, see [Chat Commands for Broadcasters and Moderators](https://help.twitch.tv/s/article/chat-commands#AllMods) and [Moderator Preferences](https://help.twitch.tv/s/article/setting-up-moderation-for-your-twitch-channel#modpreferences).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get Chat Settings", + "url": "https://dev.twitch.tv/docs/api/reference#get-chat-settings" + }, + "operationId": "get-chat-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose chat settings you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or one of the broadcaster’s moderators. \n \nThis field is required only if you want to include the `non_moderator_chat_delay` and `non_moderator_chat_delay_duration` settings in the response. \n \nIf you specify this field, this ID must match the user ID in the user access token.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s chat settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChatSettingsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/settings?broadcaster_id=1234' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```", + "value": { + "data": [ + { + "broadcaster_id": "713936733", + "slow_mode": false, + "slow_mode_wait_time": null, + "follower_mode": true, + "follower_mode_duration": 0, + "subscriber_mode": false, + "emote_mode": false, + "unique_chat_mode": false, + "non_moderator_chat_delay": true, + "non_moderator_chat_delay_duration": 4 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "patch": { + "summary": "Updates the broadcaster’s chat settings.", + "description": "Updates the broadcaster’s chat settings.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:chat\\_settings** scope.\n\n__Request Body:__\n\nAll fields are optional. Specify only those fields that you want to update.\n\nTo set the `slow_mode_wait_time` or `follower_mode_duration` field to its default value, set the corresponding `slow_mode` or `follower_mode` field to **true** (and don’t include the `slow_mode_wait_time` or `follower_mode_duration` field).\n\nTo set the `slow_mode_wait_time`, `follower_mode_duration`, or `non_moderator_chat_delay_duration` field’s value, you must set the corresponding `slow_mode`, `follower_mode`, or `non_moderator_chat_delay` field to **true**.\n\nTo remove the `slow_mode_wait_time`, `follower_mode_duration`, or `non_moderator_chat_delay_duration` field’s value, set the corresponding `slow_mode`, `follower_mode`, or `non_moderator_chat_delay` field to **false** (and don’t include the `slow_mode_wait_time`, `follower_mode_duration`, or `non_moderator_chat_delay_duration` field).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Update Chat Settings", + "url": "https://dev.twitch.tv/docs/api/reference#update-chat-settings" + }, + "operationId": "update-chat-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose chat settings you want to update.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of a user that has permission to moderate the broadcaster’s chat room, or the broadcaster’s ID if they’re making the update. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateChatSettingsBody" + }, + "examples": { + "Example 1": { + "value": { + "follower_mode": false + }, + "description": "This example disables `follower_mode` by setting it to false." + }, + "Example 2": { + "value": { + "slow_mode": true, + "slow_mode_wait_time": 10 + }, + "description": "This example disables `follower_mode` by setting it to false.\n\nTo change a setting’s value, the request must specify the mode field and its corresponding value field. For example, to change the value of `slow_mode_wait_time`, the request must also specify `slow_mode` even if it’s already **true**." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the broadcaster’s chat settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateChatSettingsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nThis example disables `follower_mode` by setting it to false.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/chat/settings?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"follower_mode\": false}'\n```\n\nTo change a setting’s value, the request must specify the mode field and its corresponding value field. For example, to change the value of `slow_mode_wait_time`, the request must also specify `slow_mode` even if it’s already **true**.\n\n```bash\ncurl -X PATCH 'https://https://api.twitch.tv/helix/chat/settings?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 8j9yq1kpl92w96trqy7sintbsihdp' \\\n-H 'Client-Id: 0vql4f5yqu4spo6zrz1pkumcqwa9c' \\\n-H 'Content-Type: application/json' \\\n-d '{\"slow_mode\": true, \"slow_mode_wait_time\": 10}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "slow_mode": true, + "slow_mode_wait_time": 10, + "follower_mode": false, + "follower_mode_duration": null, + "subscriber_mode": false, + "emote_mode": false, + "unique_chat_mode": false, + "non_moderator_chat_delay": false, + "non_moderator_chat_delay_duration": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required.\n* If _slow\\_mode_ is **true**, the `slow_mode_wait_time` field must be set to a valid value.\n* If `follower_mode` is **true**, the `follower_mode_duration` field must be set to a valid value.\n* If `non_moderator_chat_delay` is **true**, the `non_moderator_chat_delay_duration` field must be set to a valid value." + }, + "401": { + "description": "* The ID in the _moderator\\_id_ query parameter must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:chat\\_settings** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "403": { + "description": "* The user in the _moderator\\_id_ query parameter must have moderator privileges in the broadcaster's channel." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:chat_settings" + ] + } + ] + } + }, + "/chat/emotes/user": { + "get": { + "summary": "NEW Retrieves emotes available to the user across all channels.", + "description": "NEW Retrieves emotes available to the user across all channels.\n\n__Authorization:__\n\n* Requires a user access token that includes the **user:read:emotes** scope.\n* Query parameter `user_id` must match the `user_id` in the user access token.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get User Emotes", + "url": "https://dev.twitch.tv/docs/api/reference#get-user-emotes" + }, + "operationId": "get-user-emotes", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "Returns all emotes available to the user within the chat owned by the specified broadcaster. This includes the Global and Subscriber Emotes the user has access to, as well as channel-only specific emotes such as Follower Emotes.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The Pagination object in the response contains the cursor’s value.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the emotes.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserEmotesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/emotes/user?user_id=123456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "emote_set_id": "", + "emote_type": "hypetrain", + "format": [ + "static" + ], + "id": "304420818", + "name": "HypeLol", + "owner_id": "477339272", + "scale": [ + "1.0", + "2.0", + "3.0" + ], + "theme_mode": [ + "light", + "dark" + ] + } + ], + "template": "https://static-cdn.jtvnw.net/emoticons/v2/{{id}}/{{format}}/{{theme_mode}}/{{scale}}", + "pagination": { + "cursor": "eyJiIjpudWxsLJxhIjoiIn0gf5" + } + } + } + } + } + } + }, + "400": { + "description": "* The _user\\_id_ query parameter is required.\n* The ID in the _user\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in _user\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:emotes** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:emotes" + ] + } + ] + } + }, + "/chat/announcements": { + "post": { + "summary": "Sends an announcement to the broadcaster’s chat room.", + "description": "Sends an announcement to the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:announcements** scope.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Send Chat Announcement", + "url": "https://dev.twitch.tv/docs/api/reference#send-chat-announcement" + }, + "operationId": "send-chat-announcement", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the chat room to send the announcement to.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of a user who has permission to moderate the broadcaster’s chat room, or the broadcaster’s ID if they’re sending the announcement. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendChatAnnouncementBody" + }, + "examples": { + "Example": { + "value": { + "message": "Hello chat!", + "color": "purple" + }, + "description": "Sends an announcement to the broadcaster’s chat room." + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully sent the announcement.\n\n__Examples__\n\n_Request:_\n\nSends an announcement to the broadcaster’s chat room.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/chat/announcements?broadcaster_id=11111&moderator_id=44444' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' \\\n-H 'Content-Type: application/json' \\\n-d '{\"message\":\"Hello chat!\",\"color\":\"purple\"}'\n```" + }, + "400": { + "description": "* The `message` field in the request's body is required.\n* The `message` field may not contain an empty string.\n* The string in the `message` field failed review.\n* The specified color is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **moderator:manage:announcements** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:announcements" + ] + } + ] + } + }, + "/chat/shoutouts": { + "post": { + "summary": "Sends a Shoutout to the specified broadcaster.", + "description": "Sends a Shoutout to the specified broadcaster. Typically, you send Shoutouts when you or one of your moderators notice another broadcaster in your chat, the other broadcaster is coming up in conversation, or after they raid your broadcast.\n\nTwitch’s Shoutout feature is a great way for you to show support for other broadcasters and help them grow. Viewers who do not follow the other broadcaster will see a pop-up Follow button in your chat that they can click to follow the other broadcaster. [Learn More](https://help.twitch.tv/s/article/shoutouts)\n\n**Rate Limits** The broadcaster may send a Shoutout once every 2 minutes. They may send the same broadcaster a Shoutout once every 60 minutes.\n\nTo receive notifications when a Shoutout is sent or received, subscribe to the [channel.shoutout.create](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelshoutoutcreate) and [channel.shoutout.receive](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelshoutoutreceive) subscription types. The **channel.shoutout.create** event includes cooldown periods that indicate when the broadcaster may send another Shoutout without exceeding the endpoint’s rate limit.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:shoutouts** scope.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Send a Shoutout", + "url": "https://dev.twitch.tv/docs/api/reference#send-a-shoutout" + }, + "operationId": "send-a-shoutout", + "parameters": [ + { + "name": "from_broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s sending the Shoutout.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "to_broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s receiving the Shoutout.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that is one of the broadcaster’s moderators. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully sent the specified broadcaster a Shoutout.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/chat/shoutouts?from_broadcaster_id=12345&to_broadcaster_id=626262&moderator_id=98765' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The _from\\_broadcaster\\_id_ query parameter is required.\n* The ID in the _from\\_broadcaster\\_id_ query parameter is not valid.\n* The _to\\_broadcaster\\_id_ query parameter is required.\n* The ID in the _to\\_broadcaster\\_id_ query parameter is not valid.\n* The broadcaster may not give themselves a Shoutout.\n* The broadcaster is not streaming live or does not have one or more viewers." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:shoutouts** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators.\n* The broadcaster may not send the specified broadcaster a Shoutout." + }, + "429": { + "description": "* The broadcaster exceeded the number of Shoutouts they may send within a given window. See the endpoint's Rate Limits.\n* The broadcaster exceeded the number of Shoutouts they may send the same broadcaster within a given window. See the endpoint's Rate Limits." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:shoutouts" + ] + } + ] + } + }, + "/chat/messages": { + "post": { + "summary": "NEW Sends a message to the broadcaster’s chat room.", + "description": "NEW Sends a message to the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the `user:write:chat` scope. If app access token used, then additionally requires `user:bot` scope from chatting user, and either `channel:bot` scope from broadcaster or moderator status.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Send Chat Message", + "url": "https://dev.twitch.tv/docs/api/reference#send-chat-message" + }, + "operationId": "send-chat-message", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendChatMessageBody" + }, + "examples": { + "Example": { + "value": { + "broadcaster_id": "12826", + "sender_id": "141981764", + "message": "Hello, world! twitchdevHype" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully sent the specified broadcaster a message.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendChatMessageResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/chat/messages' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"broadcaster_id\": \"12826\",\n \"sender_id\": \"141981764\",\n \"message\": \"Hello, world! twitchdevHype\"\n}'\n```", + "value": { + "data": [ + { + "message_id": "abc-123-def", + "is_sent": true + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _sender\\_id_ query parameter is required.\n* The ID in the _sender\\_id_ query parameter is not valid.\n* The _text_ query parameter is required.\n* The ID in the _reply\\_parent\\_message\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in the user\\_id query parameter must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the user:write:chat scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "The sender is not permitted to send chat messages to the broadcaster’s chat room." + }, + "422": { + "description": "The message is too large." + } + }, + "security": [ + { + "twitch_auth": [ + "user:write:chat", + "user:bot", + "channel:bot" + ] + } + ] + } + }, + "/chat/color": { + "get": { + "summary": "Gets the color used for the user’s name in chat.", + "description": "Gets the color used for the user’s name in chat.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Get User Chat Color", + "url": "https://dev.twitch.tv/docs/api/reference#get-user-chat-color" + }, + "operationId": "get-user-chat-color", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user whose username color you want to get. To specify more than one user, include the _user\\_id_ parameter for each user to get. For example, `&user_id=1234&user_id=5678`. The maximum number of IDs that you may specify is 100. \n \nThe API ignores duplicate IDs and IDs that weren’t found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": true, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the chat color used by the specified users.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserChatColorResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the chat color code used by the specified users.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/chat/color?user_id=11111&user_id=44444' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "user_id": "11111", + "user_name": "SpeedySpeedster1", + "user_login": "speedyspeedster1", + "color": "#9146FF" + }, + { + "user_id": "44444", + "user_name": "SpeedySpeedster2", + "user_login": "speedyspeedster2", + "color": "" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The ID in the _user\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "put": { + "summary": "Updates the color used for the user’s name in chat.", + "description": "Updates the color used for the user’s name in chat.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:manage:chat\\_color** scope.", + "tags": [ + "Chat" + ], + "externalDocs": { + "description": "Update User Chat Color", + "url": "https://dev.twitch.tv/docs/api/reference#update-user-chat-color" + }, + "operationId": "update-user-chat-color", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user whose chat color you want to update. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "color", + "in": "query", + "description": "The color to use for the user's name in chat. All users may specify one of the following named color values. \n \n* blue\n* blue\\_violet\n* cadet\\_blue\n* chocolate\n* coral\n* dodger\\_blue\n* firebrick\n* golden\\_rod\n* green\n* hot\\_pink\n* orange\\_red\n* red\n* sea\\_green\n* spring\\_green\n* yellow\\_green\n \nTurbo and Prime users may specify a named color or a Hex color code like #9146FF. If you use a Hex color code, remember to URL encode it.", + "schema": { + "type": "string", + "enum": [ + "blue", + "blue_violet", + "cadet_blue", + "chocolate", + "coral", + "dodger_blue", + "firebrick", + "golden_rod", + "green", + "hot_pink", + "orange_red", + "red", + "sea_green", + "spring_green", + "yellow_green" + ] + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully updated the user's chat color.\n\n__Examples__\n\n_Request:_\n\nUses a named color to change the color that the user uses for their name in chat.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/chat/color?user_id=123&color=blue' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```\n\nUses a color Hex code to change the color that the user uses for their name in chat.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/chat/color?user_id=123&color=%239146FF' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The ID in the _user\\_id_ query parameter is not valid.\n* The _color_ query parameter is required.\n* The named color in the _color_ query parameter is not valid.\n* To specify a Hex color code, the user must be a Turbo or Prime user." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:manage:chat\\_color** scope.\n* The OAuth token is not valid.\n* The ID in the _user\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:manage:chat_color" + ] + } + ] + } + }, + "/clips": { + "post": { + "summary": "Creates a clip from the broadcaster’s stream.", + "description": "Creates a clip from the broadcaster’s stream.\n\nThis API captures up to 90 seconds of the broadcaster’s stream. The 90 seconds spans the point in the stream from when you called the API. For example, if you call the API at the 4:00 minute mark, the API captures from approximately the 3:35 mark to approximately the 4:05 minute mark. Twitch tries its best to capture 90 seconds of the stream, but the actual length may be less. This may occur if you begin capturing the clip near the beginning or end of the stream.\n\nBy default, Twitch publishes up to the last 30 seconds of the 90 seconds window and provides a default title for the clip. To specify the title and the portion of the 90 seconds window that’s used for the clip, use the URL in the response’s `edit_url` field. You can specify a clip that’s from 5 seconds to 60 seconds in length. The URL is valid for up to 24 hours or until the clip is published, whichever comes first.\n\nCreating a clip is an asynchronous process that can take a short amount of time to complete. To determine whether the clip was successfully created, call [Get Clips](https://dev.twitch.tv/docs/api/reference#get-clips) using the clip ID that this request returned. If Get Clips returns the clip, the clip was successfully created. If after 15 seconds Get Clips hasn’t returned the clip, assume it failed.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **clips:edit** scope.", + "tags": [ + "Clips" + ], + "externalDocs": { + "description": "Create Clip", + "url": "https://dev.twitch.tv/docs/api/reference#create-clip" + }, + "operationId": "create-clip", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose stream you want to create a clip from.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "has_delay", + "in": "query", + "description": "A Boolean value that determines whether the API captures the clip at the moment the viewer requests it or after a delay. If **false** (default), Twitch captures the clip at the moment the viewer requests it (this is the same clip experience as the Twitch UX). If **true**, Twitch adds a delay before capturing the clip (this basically shifts the capture window to the right slightly).", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "202": { + "description": "Successfully started the clip process.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateClipResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/clips?broadcaster_id=44322889' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "FiveWordsForClipSlug", + "edit_url": "http://clips.twitch.tv/FiveWordsForClipSlug/edit" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter was not found." + }, + "401": { + "description": "* The Authorization header is required and must specify user access token.\n* The user access token must include the **clips:edit** scope.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + }, + "403": { + "description": "* The broadcaster has restricted the ability to capture clips to followers and/or subscribers only.\n* The specified broadcaster has not enabled clips on their channel." + }, + "404": { + "description": "* The broadcaster in the _broadcaster\\_id_ query parameter must be broadcasting live." + } + }, + "security": [ + { + "twitch_auth": [ + "clips:edit" + ] + } + ] + }, + "get": { + "summary": "Gets one or more video clips.", + "description": "Gets one or more video clips that were captured from streams. For information about clips, see [How to use clips](https://help.twitch.tv/s/article/how-to-use-clips).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).\n\n__Request Query Parameters:__\n\nThe _id_, _game\\_id_, and _broadcaster\\_id_ query parameters are mutually exclusive.", + "tags": [ + "Clips" + ], + "externalDocs": { + "description": "Get Clips", + "url": "https://dev.twitch.tv/docs/api/reference#get-clips" + }, + "operationId": "get-clips", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "An ID that identifies the broadcaster whose video clips you want to get. Use this parameter to get clips that were captured from the broadcaster’s streams.", + "schema": { + "type": "string" + } + }, + { + "name": "game_id", + "in": "query", + "description": "An ID that identifies the game whose clips you want to get. Use this parameter to get clips that were captured from streams that were playing this game.", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "An ID that identifies the clip to get. To specify more than one ID, include this parameter for each clip you want to get. For example, `id=foo&id=bar`. You may specify a maximum of 100 IDs. The API ignores duplicate IDs and IDs that aren’t found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "started_at", + "in": "query", + "description": "The start date used to filter clips. The API returns only clips within the start and end date window. Specify the date and time in RFC3339 format.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "ended_at", + "in": "query", + "description": "The end date used to filter clips. If not specified, the time window is the start date plus one week. Specify the date and time in RFC3339 format.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of clips to return per page in the response. The minimum page size is 1 clip per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "is_featured", + "in": "query", + "description": "A Boolean value that determines whether the response includes featured clips. If **true**, returns only clips that are featured. If **false**, returns only clips that aren’t featured. All clips are returned if this parameter is not present.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of video clips.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetClipsResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets a clip by ID.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/clips?id=AwkwardHelplessSalamanderSwiftRage' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "AwkwardHelplessSalamanderSwiftRage", + "url": "https://clips.twitch.tv/AwkwardHelplessSalamanderSwiftRage", + "embed_url": "https://clips.twitch.tv/embed?clip=AwkwardHelplessSalamanderSwiftRage", + "broadcaster_id": "67955580", + "broadcaster_name": "ChewieMelodies", + "creator_id": "53834192", + "creator_name": "BlackNova03", + "video_id": "205586603", + "game_id": "488191", + "language": "en", + "title": "babymetal", + "view_count": 10, + "created_at": "2017-11-30T22:34:18Z", + "thumbnail_url": "https://clips-media-assets.twitch.tv/157589949-preview-480x272.jpg", + "duration": 60, + "vod_offset": 480, + "is_featured": false + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nGets the broadcaster’s top 5 clips based on views.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/clips?broadcaster_id=1234&first=5' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "RandomClip1", + "url": "https://clips.twitch.tv/AwkwardHelplessSalamanderSwiftRage", + "embed_url": "https://clips.twitch.tv/embed?clip=RandomClip1", + "broadcaster_id": "1234", + "broadcaster_name": "JJ", + "creator_id": "123456", + "creator_name": "MrMarshall", + "video_id": "", + "game_id": "33103", + "language": "en", + "title": "random1", + "view_count": 10, + "created_at": "2017-11-30T22:34:18Z", + "thumbnail_url": "https://clips-media-assets.twitch.tv/157589949-preview-480x272.jpg", + "duration": 12.9, + "vod_offset": 1957, + "is_featured": true + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjoiIn0" + } + } + } + } + } + } + }, + "400": { + "description": "* The _id_ or _game\\_id_ or _broadcaster\\_id_ query parameter is required.\n* The _id_, _game\\_id_, and _broadcaster\\_id_ query parameters are mutually exclusive; you may specify only one of them." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "404": { + "description": "* The ID in _game\\_id_ was not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/eventsub/conduits": { + "get": { + "summary": "NEW Gets the conduits for a client ID.", + "description": "NEW Gets the [conduits](https://dev.twitch.tv/docs/eventsub/handling-conduit-events) for a client ID.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Get Conduits", + "url": "https://dev.twitch.tv/docs/api/reference#get-conduits" + }, + "operationId": "get-conduits", + "responses": { + "200": { + "description": "Successfully retrieved conduits.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetConduitsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/eventsub/conduits' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "26b1c993-bfcf-44d9-b876-379dacafe75a", + "shard_count": 15 + }, + { + "id": "bfcfc993-26b1-b876-44d9-afe75a379dac", + "shard_count": 5 + } + ] + } + } + } + } + } + }, + "401": { + "description": "Authorization header required with an app access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "post": { + "summary": "NEW Creates a new conduit.", + "description": "NEW Creates a new [conduit](https://dev.twitch.tv/docs/eventsub/handling-conduit-events).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Create Conduits", + "url": "https://dev.twitch.tv/docs/api/reference#create-conduits" + }, + "operationId": "create-conduits", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConduitsBody" + }, + "examples": { + "Example": { + "value": { + "shard_count": 5 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Conduit created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConduitsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/eventsub/conduits' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\"shard_count\": 5}'\n```", + "value": { + "data": [ + { + "id": "bfcfc993-26b1-b876-44d9-afe75a379dac", + "shard_count": 5 + } + ] + } + } + } + } + } + }, + "400": { + "description": "Invalid shard count." + }, + "401": { + "description": "Authorization header required with an app access token." + }, + "429": { + "description": "Conduit limit reached." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "patch": { + "summary": "NEW Updates a conduit’s shard count.", + "description": "NEW Updates a [conduit’s](https://dev.twitch.tv/docs/eventsub/handling-conduit-events) shard count. To delete shards, update the count to a lower number, and the shards above the count will be deleted. For example, if the existing shard count is 100, by resetting shard count to 50, shards 50-99 are disabled.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Update Conduits", + "url": "https://dev.twitch.tv/docs/api/reference#update-conduits" + }, + "operationId": "update-conduits", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConduitsBody" + }, + "examples": { + "Example": { + "value": { + "id": "bfcfc993-26b1-b876-44d9-afe75a379dac", + "shard_count": 5 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Conduit updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConduitsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/eventsub/conduits' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"id\":\"bfcfc993-26b1-b876-44d9-afe75a379dac\",\n \"shard_count\":5\n}'\n```", + "value": { + "data": [ + { + "id": "bfcfc993-26b1-b876-44d9-afe75a379dac", + "shard_count": 5 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* Invalid shard count\n* The id query parameter is required." + }, + "401": { + "description": "Authorization header required with an app access token." + }, + "404": { + "description": "* Conduit not found.\n* Conduit’s owner must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "delete": { + "summary": "NEW Deletes a specified conduit.", + "description": "NEW Deletes a specified [conduit](https://dev.twitch.tv/docs/eventsub/handling-conduit-events/). Note that it may take some time for Eventsub subscriptions on a deleted [conduit](https://dev.twitch.tv/docs/eventsub/handling-conduit-events) to show as disabled when calling [Get Eventsub Subscriptions](https://dev.twitch.tv/docs/api/reference/#get-eventsub-subscriptions).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Delete Conduit", + "url": "https://dev.twitch.tv/docs/api/reference#delete-conduit" + }, + "operationId": "delete-conduit", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Conduit ID.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully deleted the conduit.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/eventsub/conduits?id=bfcfc993-26b1-b876-44d9-afe75a379dac' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "The id query parameter is required." + }, + "401": { + "description": "Authorization header required with an app access token." + }, + "404": { + "description": "* Conduit not found.\n* Conduit’s owner must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/eventsub/conduits/shards": { + "get": { + "summary": "NEW Gets a lists of all shards for a conduit.", + "description": "NEW Gets a lists of all shards for a [conduit](https://dev.twitch.tv/docs/eventsub/handling-conduit-events).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Get Conduit Shards", + "url": "https://dev.twitch.tv/docs/api/reference#get-conduit-shards" + }, + "operationId": "get-conduit-shards", + "parameters": [ + { + "name": "conduit_id", + "in": "query", + "description": "Conduit ID.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "status", + "in": "query", + "description": "Status to filter by.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The pagination object in the response contains the cursor’s value.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved shards.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetConduitShardsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/eventsub/conduits/shards?conduit_id=bfcfc993-26b1-b876-44d9-afe75a379dac' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "0", + "status": "enabled", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + } + }, + { + "id": "1", + "status": "webhook_callback_verification_pending", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback-2.com" + } + }, + { + "id": "2", + "status": "enabled", + "transport": { + "method": "websocket", + "session_id": "9fd5164a-a958-4c60-b7f4-6a7202506ca0", + "connected_at": "2020-11-10T14:32:18.730260295Z" + } + }, + { + "id": "3", + "status": "enabled", + "transport": { + "method": "websocket", + "session_id": "238b4b08-13f1-4b8f-8d31-56665a7a9d9f", + "connected_at": "2020-11-10T14:32:18.730260295Z" + } + }, + { + "id": "4", + "status": "websocket_disconnected", + "transport": { + "method": "websocket", + "session_id": "ad1c9fc3-0d99-4eb7-8a04-8608e8ff9ec9", + "connected_at": "2020-11-10T14:32:18.730260295Z", + "disconnected_at": "2020-11-11T14:32:18.730260295Z" + } + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "The id query parameter is required." + }, + "401": { + "description": "Authorization header required with an app access token." + }, + "404": { + "description": "* Conduit not found.\n* Conduit’s owner must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "patch": { + "summary": "NEW Updates shard(s) for a conduit.", + "description": "NEW Updates shard(s) for a [conduit](https://dev.twitch.tv/docs/eventsub/handling-conduit-events).\n\n**NOTE:** Shard IDs are indexed starting at 0, so a conduit with a `shard_count` of 5 will have shards with IDs 0 through 4.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens).", + "tags": [ + "Conduits" + ], + "externalDocs": { + "description": "Update Conduit Shards", + "url": "https://dev.twitch.tv/docs/api/reference#update-conduit-shards" + }, + "operationId": "update-conduit-shards", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConduitShardsBody" + }, + "examples": { + "Example": { + "value": { + "conduit_id": "bfcfc993-26b1-b876-44d9-afe75a379dac", + "shards": [ + { + "id": "0", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com", + "secret": "s3cre7" + } + }, + { + "id": "1", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback-2.com", + "secret": "s3cre7" + } + }, + { + "id": "3", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback-3.com", + "secret": "s3cre7" + } + } + ] + } + } + } + } + } + }, + "responses": { + "202": { + "description": "Successfully retrieved shards.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConduitShardsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/eventsub/conduits/shards' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"conduit_id\":\"bfcfc993-26b1-b876-44d9-afe75a379dac\",\n \"shards\": [{\n \"id\": \"0\",\n \"transport\": {\n \"method\": \"webhook\",\n \"callback\": \"https://this-is-a-callback.com\",\n \"secret\": \"s3cre7\"\n }\n },\n {\n \"id\": \"1\",\n \"transport\": {\n \"method\": \"webhook\",\n \"callback\": \"https://this-is-a-callback-2.com\",\n \"secret\": \"s3cre7\"\n }\n },\n {\n \"id\": \"3\",\n \"transport\":{\n \"method\": \"webhook\",\n \"callback\": \"https://this-is-a-callback-3.com\",\n \"secret\": \"s3cre7\"\n }\n }]\n}'\n```", + "value": { + "data": [ + { + "id": "0", + "status": "enabled", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + } + }, + { + "id": "1", + "status": "webhook_callback_verification_pending", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback-2.com" + } + } + ], + "errors": [ + { + "id": "3", + "message": "The shard id is outside the conduit's range", + "code": "invalid_parameter" + } + ] + } + } + } + } + } + }, + "400": { + "description": "The id query parameter is required." + }, + "401": { + "description": "Authorization header required with an app access token." + }, + "404": { + "description": "* Conduit not found.\n* Conduit’s owner must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/content_classification_labels": { + "get": { + "summary": "Gets information about Twitch content classification labels.", + "description": "Gets information about Twitch content classification labels.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "CCLs" + ], + "externalDocs": { + "description": "Get Content Classification Labels", + "url": "https://dev.twitch.tv/docs/api/reference#get-content-classification-labels" + }, + "operationId": "get-content-classification-labels", + "parameters": [ + { + "name": "locale", + "in": "query", + "description": "Locale for the Content Classification Labels. You may specify a maximum of 1 locale. Default: `“en-US”` \nSupported locales: `\"bg-BG\", \"cs-CZ\", \"da-DK\", \"da-DK\", \"de-DE\", \"el-GR\", \"en-GB\", \"en-US\", \"es-ES\", \"es-MX\", \"fi-FI\", \"fr-FR\", \"hu-HU\", \"it-IT\", \"ja-JP\", \"ko-KR\", \"nl-NL\", \"no-NO\", \"pl-PL\", \"pt-BT\", \"pt-PT\", \"ro-RO\", \"ru-RU\", \"sk-SK\", \"sv-SE\", \"th-TH\", \"tr-TR\", \"vi-VN\", \"zh-CN\", \"zh-TW\"`", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of CCLs available.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetContentClassificationLabelsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/content_classification_labels' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "id": "DrugsIntoxication", + "description": "Excessive tobacco glorification or promotion, any marijuana consumption/use, legal drug and alcohol induced intoxication, discussions of illegal drugs.", + "name": "Drugs, Intoxication, or Excessive Tobacco Use" + }, + { + "id": "Gambling", + "description": "Participating in online or in-person gambling, poker or fantasy sports, that involve the exchange of real money.", + "name": "Gambling" + }, + { + "id": "MatureGame", + "description": "Games that are rated Mature or less suitable for a younger audience.", + "name": "Mature-rated game" + }, + { + "id": "ProfanityVulgarity", + "description": "Prolonged, and repeated use of obscenities, profanities, and vulgarities, especially as a regular part of speech.", + "name": "Significant Profanity or Vulgarity" + }, + { + "id": "SexualThemes", + "description": "Content that focuses on sexualized physical attributes and activities, sexual topics, or experiences.", + "name": "Sexual Themes" + }, + { + "id": "ViolentGraphic", + "description": "Simulations and/or depictions of realistic violence, gore, extreme injury, or death.", + "name": "Violent and Graphic Depictions" + } + ] + } + } + } + } + } + }, + "400": { + "description": "" + }, + "401": { + "description": "" + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/entitlements/drops": { + "get": { + "summary": "Gets an organization’s list of entitlements that have been granted to a game, a user, or both.", + "description": "Gets an organization’s list of entitlements that have been granted to a game, a user, or both.\n\n**NOTE:** Entitlements returned in the response body data are not guaranteed to be sorted by any field returned by the API. To retrieve **CLAIMED** or **FULFILLED** entitlements, use the `fulfillment_status` query parameter to filter results. To retrieve entitlements for a specific game, use the `game_id` query parameter to filter results.\n\nThe following table identifies the request parameters that you may specify based on the type of access token used.\n\n| Access token type | Parameter | Description |\n| - | - | - |\n| App | None | If you don’t specify request parameters, the request returns all entitlements that your organization owns. |\n| App | user_id | The request returns all entitlements for any game that the organization granted to the specified user. |\n| App | user_id, game_id | The request returns all entitlements that the specified game granted to the specified user. |\n| App | game_id | The request returns all entitlements that the specified game granted to all entitled users. |\n| User | None | If you don’t specify request parameters, the request returns all entitlements for any game that the organization granted to the user identified in the access token. |\n| User | user_id | Invalid. |\n| User | user_id, game_id | Invalid. |\n| User | game_id | The request returns all entitlements that the specified game granted to the user identified in the access token. |\n\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens). The client ID in the access token must own the game.", + "tags": [ + "Entitlements" + ], + "externalDocs": { + "description": "Get Drops Entitlements", + "url": "https://dev.twitch.tv/docs/api/reference#get-drops-entitlements" + }, + "operationId": "get-drops-entitlements", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "An ID that identifies the entitlement to get. Include this parameter for each entitlement you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 100 IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "user_id", + "in": "query", + "description": "An ID that identifies a user that was granted entitlements.", + "schema": { + "type": "string" + } + }, + { + "name": "game_id", + "in": "query", + "description": "An ID that identifies a game that offered entitlements.", + "schema": { + "type": "string" + } + }, + { + "name": "fulfillment_status", + "in": "query", + "description": "The entitlement’s fulfillment status. Used to filter the list to only those with the specified status. Possible values are: \n \n* CLAIMED\n* FULFILLED", + "schema": { + "type": "string", + "enum": [ + "CLAIMED", + "FULFILLED" + ] + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of entitlements to return per page in the response. The minimum page size is 1 entitlement per page and the maximum is 1000\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the entitlements.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDropsEntitlementsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -H GET 'helix/entitlements/drops?user_id=25009227&game_id=33214' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "fb78259e-fb81-4d1b-8333-34a06ffc24c0", + "benefit_id": "74c52265-e214-48a6-91b9-23b6014e8041", + "timestamp": "2019-01-28T04:17:53.325Z", + "user_id": "25009227", + "game_id": "33214", + "fulfillment_status": "CLAIMED", + "last_updated": "2019-01-28T04:17:53.325Z" + }, + { + "id": "862750a5-265e-4ab6-9f0a-c64df3d54dd0", + "benefit_id": "74c52265-e214-48a6-91b9-23b6014e8041", + "timestamp": "2019-01-28T04:16:53.325Z", + "user_id": "25009227", + "game_id": "33214", + "fulfillment_status": "CLAIMED", + "last_updated": "2021-06-15T04:16:53.325Z" + }, + { + "id": "d8879baa-3966-4d10-8856-15fdd62cce02", + "benefit_id": "cdfdc5c3-65a2-43bc-8767-fde06eb4ab2c", + "timestamp": "2019-01-28T04:15:53.325Z", + "user_id": "25009227", + "game_id": "33214", + "fulfillment_status": "FULFILLED", + "last_updated": "2019-01-28T04:17:53.325Z" + } + ], + "pagination": { + "cursor": "eyJiIjpudW..." + } + } + } + } + } + } + }, + "400": { + "description": "* The value in the _fulfillment\\_status_ query parameter is not valid.\n* The ID in the _user\\_id_ query parameter must match the user ID in the user access token.\n* The client in the access token is not associated with a known organization.\n* The owner of the client in the access token is not a member of the organization." + }, + "401": { + "description": "* The ID in the Client-Id header must match the Client ID in the access token.\n* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid." + }, + "403": { + "description": "* The organization associated with the client in the access token must own the game specified in the _game\\_id_ query parameter.\n* The organization associated with the client in the access token must own the entitlements specified in the _id_ query parameter." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "patch": { + "summary": "Updates the Drop entitlement’s fulfillment status.", + "description": "Updates the Drop entitlement’s fulfillment status.\n\nThe following table identifies which entitlements are updated based on the type of access token used.\n\n| Access token type | Data that’s updated |\n| - | - |\n| App | Updates all entitlements with benefits owned by the organization in the access token. |\n| User | Updates all entitlements owned by the user in the access token and where the benefits are owned by the organization in the access token. |\n\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens). The client ID in the access token must own the game.", + "tags": [ + "Entitlements" + ], + "externalDocs": { + "description": "Update Drops Entitlements", + "url": "https://dev.twitch.tv/docs/api/reference#update-drops-entitlements" + }, + "operationId": "update-drops-entitlements", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDropsEntitlementsBody" + }, + "examples": { + "Example": { + "value": { + "fulfillment_status": "FULFILLED", + "entitlement_ids": [ + "fb78259e-fb81-4d1b-8333-34a06ffc24c0", + "862750a5-265e-4ab6-9f0a-c64df3d54dd0", + "d8879baa-3966-4d10-8856-15fdd62cce02", + "9a290126-7e3b-4f66-a9ae-551537893b65" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully requested the updates. Check the response to determine which updates succeeded.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDropsEntitlementsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -H PATCH 'helix/entitlements/drops' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"fulfillment_status\": \"FULFILLED\",\n \"entitlement_ids\": [\n \"fb78259e-fb81-4d1b-8333-34a06ffc24c0\",\n \"862750a5-265e-4ab6-9f0a-c64df3d54dd0\",\n \"d8879baa-3966-4d10-8856-15fdd62cce02\",\n \"9a290126-7e3b-4f66-a9ae-551537893b65\"\n ]\n}'\n```", + "value": { + "data": [ + { + "status": "SUCCESS", + "ids": [ + "fb78259e-fb81-4d1b-8333-34a06ffc24c0", + "862750a5-265e-4ab6-9f0a-c64df3d54dd0" + ] + }, + { + "status": "UNAUTHORIZED", + "ids": [ + "d8879baa-3966-4d10-8856-15fdd62cce02" + ] + }, + { + "status": "UPDATE_FAILED", + "ids": [ + "9a290126-7e3b-4f66-a9ae-551537893b65" + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The value in the `fulfillment_status` field is not valid.\n* The client in the access token is not associated with a known organization.\n* The owner of the client in the access token is not a member of the organization." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the Client ID in the access token." + }, + "500": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/configurations": { + "get": { + "summary": "Gets the specified configuration segment from the specified extension.", + "description": "Gets the specified configuration segment from the specified extension.\n\n**Rate Limits**: You may retrieve each segment a maximum of 20 times per minute.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). The `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Extension Configuration Segment", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-configuration-segment" + }, + "operationId": "get-extension-configuration-segment", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that installed the extension. This parameter is required if you set the _segment_ parameter to broadcaster or developer. Do not specify this parameter if you set _segment_ to global.", + "schema": { + "type": "string" + } + }, + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension that contains the configuration segment you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "segment", + "in": "query", + "description": "The type of configuration segment to get. Possible case-sensitive values are: \n \n* broadcaster\n* developer\n* global\n \nYou may specify one or more segments. To specify multiple segments, include the `segment` parameter for each segment to get. For example, `segment=broadcaster&segment=developer`. Ignores duplicate segments.", + "schema": { + "type": "string", + "enum": [ + "broadcaster", + "developer", + "global" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the configurations.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionConfigurationSegmentResponse" + }, + "examples": { + "Example 1": { + "description": "The following example shows a global segment that contains a plain-text string in the `content` field.\n\n_Request:_\n\nGets the global configuration segment from the specified extension. Because the request gets the global segment, it must not include the _broadcaster\\_id_ query parameter.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions/configurations?extension_id=&segment=global' \\\n-H 'Authorization: Bearer ' \\\n-H 'Client-Id: '\n```", + "value": { + "data": [ + { + "segment": "global", + "content": "hello config!", + "version": "0.0.1" + } + ] + } + }, + "Example 2": { + "description": "The following example shows a global segment that contains a string-encoded JSON object in the `content` field.\n\n_Request:_\n\nGets the global configuration segment from the specified extension. Because the request gets the global segment, it must not include the _broadcaster\\_id_ query parameter.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions/configurations?extension_id=&segment=global' \\\n-H 'Authorization: Bearer ' \\\n-H 'Client-Id: '\n```", + "value": { + "data": [ + { + "segment": "global", + "content": "{\"foo\":\"bar\"}", + "version": "0.0.1" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required.\n* The value in the _segment_ query parameter is not valid.\n* The _broadcaster\\_id_ query parameter is required if the _segment_ query parameter is set to broadcaster or developer." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + }, + "429": { + "description": "* The app exceeded the number of requests that it may make per minute. See Rate Limits above." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "put": { + "summary": "Updates a configuration segment.", + "description": "Updates a configuration segment. The segment is limited to 5 KB. Extensions that are active on a channel do not receive the updated configuration.\n\n**Rate Limits**: You may update the configuration a maximum of 20 times per minute.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). The `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Set Extension Configuration Segment", + "url": "https://dev.twitch.tv/docs/api/reference#set-extension-configuration-segment" + }, + "operationId": "set-extension-configuration-segment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetExtensionConfigurationSegmentBody" + }, + "examples": { + "Example": { + "value": { + "extension_id": "uo6dggojyb8d6soh92zknwmi5ej1q2", + "segment": "global", + "version": "0.0.1", + "content": "hello config!" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully updated the configuration.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/extensions/configurations' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"extension_id\": \"uo6dggojyb8d6soh92zknwmi5ej1q2\",\n \"segment\": \"global\",\n \"version\": \"0.0.1\",\n \"content\": \"hello config!\"\n}'\n```" + }, + "400": { + "description": "* The `broadcaster_id` field is required if `segment` is set to developer or broadcaster." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/required_configuration": { + "put": { + "summary": "Updates the extension’s required_configuration string.", + "description": "Updates the extension’s required\\_configuration string. Use this endpoint if your extension requires the broadcaster to configure the extension before activating it (to require configuration, you must select **Custom/My Own Service** in Extension [Capabilities](https://dev.twitch.tv/docs/extensions/life-cycle/#capabilities)). For more information, see [Required Configurations](https://dev.twitch.tv/docs/extensions/building#required-configurations) and [Setting Required Configuration](https://dev.twitch.tv/docs/extensions/building#setting-required-configuration-with-the-configuration-service-optional).\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an EBS. For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). Set the `role` field to _external_ and the `user_id` field to the ID of the user that owns the extension.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Set Extension Required Configuration", + "url": "https://dev.twitch.tv/docs/api/reference#set-extension-required-configuration" + }, + "operationId": "set-extension-required-configuration", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that installed the extension on their channel.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetExtensionRequiredConfigurationBody" + }, + "examples": { + "Example": { + "value": { + "required_configuration": "RCS", + "extension_id": "uo6dggojyb8d6soh92zknwmi5ej1q2", + "extension_version": "0.0.1" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully updated the extension’s required\\_configuration string.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/extensions/required_configuration?broadcaster_id=274637212' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"required_configuration\": \"RCS\",\n \"extension_id\": \"uo6dggojyb8d6soh92zknwmi5ej1q2\",\n \"extension_version\": \"0.0.1\"\n}'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The `extension_id` field is required.\n* The `extension_version` field is required.\n* The `required_configuration` field is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/pubsub": { + "post": { + "summary": "Sends a message to one or more viewers.", + "description": "Sends a message to one or more viewers. You can send messages to a specific channel or to all channels where your extension is active. This endpoint uses the same mechanism as the [send](https://dev.twitch.tv/docs/extensions/reference#send) JavaScript helper function used to send messages.\n\n**Rate Limits**: You may send a maximum of 100 messages per minute per combination of extension client ID and broadcaster ID.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)) along with the `channel_id` and `pubsub_perms` fields. The `role` field must be set to _external_.\n\nTo send the message to a specific channel, set the `channel_id` field in the JWT to the channel’s ID and set the `pubsub_perms.send` array to _broadcast_.\n\n```\n{\n \"exp\": 1503343947,\n \"user_id\": \"27419011\",\n \"role\": \"external\",\n \"channel_id\": \"27419011\",\n \"pubsub_perms\": {\n \"send\":[\n \"broadcast\"\n ]\n }\n}\n\n```\n\nTo send the message to all channels on which your extension is active, set the `channel_id` field to _all_ and set the `pubsub_perms.send` array to _global_.\n\n```\n{\n \"exp\": 1503343947,\n \"user_id\": \"27419011\",\n \"role\": \"external\",\n \"channel_id\": \"all\",\n \"pubsub_perms\": {\n \"send\":[\n \"global\"\n ]\n }\n}\n\n```", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Send Extension PubSub Message", + "url": "https://dev.twitch.tv/docs/api/reference#send-extension-pubsub-message" + }, + "operationId": "send-extension-pubsub-message", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendExtensionPubSubMessageBody" + }, + "examples": { + "Example": { + "value": { + "message": "hello world!", + "broadcaster_id": "141981764", + "target": [ + "broadcast" + ] + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully sent the message.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/extensions/pubsub' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"message\": \"hello world!\",\n \"broadcaster_id\": \"141981764\",\n \"target\": [\"broadcast\"]\n}'\n```" + }, + "400": { + "description": "* The `broadcaster_id` field in the request's body may only be set if the `is_global_broadcast` field is set to **false**." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + }, + "422": { + "description": "* The message is too large." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/live": { + "get": { + "summary": "Gets a list of broadcasters that are streaming live and have installed or activated the extension.", + "description": "Gets a list of broadcasters that are streaming live and have installed or activated the extension.\n\nIt may take a few minutes for the list to include or remove broadcasters that have recently gone live or stopped broadcasting.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Extension Live Channels", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-live-channels" + }, + "operationId": "get-extension-live-channels", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension to get. Returns the list of broadcasters that are live and that have installed or activated this extension.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The `pagination` field in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of broadcasters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionLiveChannelsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions/live?extension_id=uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "broadcaster_id": "252766116", + "broadcaster_name": "swoosh_xii", + "game_name": "Tom Clancy's Rainbow Six Siege", + "game_id": "460630", + "title": "[PS4] ITA/ENG UNRANKED CHILLIN' (SUB 1/15) - !instagram !donation !sens !team !youtube" + }, + { + "broadcaster_id": "264525686", + "broadcaster_name": "gaddem_", + "game_name": "For Honor", + "game_id": "490382", + "title": "any Kätzchen ? - 680 Rep + > Kompetitive Kitten" + }, + { + "broadcaster_id": "264787895", + "broadcaster_name": "LenhadorGameplay", + "game_name": "For Honor", + "game_id": "490382", + "title": "Vazou o novo personagem! *Triste*" + } + ], + "pagination": "YVc1emRHRnNiQ015TmpJek5qazVOVHBoYWpKbGRIZDFaR0Z5YjNCMGN6UTJNMkZ1TUdwM2FHWnBZbm8yYW5rNjoy" + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required.\n* The pagination cursor is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* The extension specified in the _extension\\_id_ query parameter was not found or it's not being used in a live stream." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/jwt/secrets": { + "get": { + "summary": "Gets an extension’s list of shared secrets.", + "description": "Gets an extension’s list of shared secrets.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). The `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Extension Secrets", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-secrets" + }, + "operationId": "get-extension-secrets", + "responses": { + "200": { + "description": "Successfully retrieved the list of secrets.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionSecretsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions/jwt/secrets?extension_id=uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "format_version": 1, + "secrets": [ + { + "content": "secret", + "active_at": "2021-03-29T06:58:40.858343036Z", + "expires_at": "2121-03-05T06:58:40.858343036Z" + } + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "post": { + "summary": "Creates a shared secret used to sign and verify JWT tokens.", + "description": "Creates a shared secret used to sign and verify JWT tokens. Creating a new secret removes the current secrets from service. Use this function only when you are ready to use the new secret it returns.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role`, `user_id`, and `exp` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). The `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Create Extension Secret", + "url": "https://dev.twitch.tv/docs/api/reference#create-extension-secret" + }, + "operationId": "create-extension-secret", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension to apply the shared secret to.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "delay", + "in": "query", + "description": "The amount of time, in seconds, to delay activating the secret. The delay should provide enough time for instances of the extension to gracefully switch over to the new secret. The minimum delay is 300 seconds (5 minutes). The default is 300 seconds.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Successfully created the new secret.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateExtensionSecretResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/extensions/jwt/secrets?extension_id=uo6dggojyb8d6soh92zknwmi5ej1q2&delay=600' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "format_version": 1, + "secrets": [ + { + "content": "old-secret", + "active_at": "2021-03-29T06:58:40.858343036Z", + "expires_at": "2021-04-22T05:21:54.99261682Z" + }, + { + "content": "new-secret", + "active_at": "2021-04-22T04:16:54.996365329Z", + "expires_at": "2121-03-29T04:16:54.996365329Z" + } + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required.\n* The delay specified in the _delay_ query parameter is too short." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The Client-Id header is required." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/chat": { + "post": { + "summary": "Sends a message to the specified broadcaster’s chat room.", + "description": "Sends a message to the specified broadcaster’s chat room. The extension’s name is used as the username for the message in the chat room. To send a chat message, your extension must enable **Chat Capabilities** (under your extension’s **Capabilities** tab).\n\n**Rate Limits**: You may send a maximum of 12 messages per minute per channel.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role` and `user_id` fields (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)). The `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Send Extension Chat Message", + "url": "https://dev.twitch.tv/docs/api/reference#send-extension-chat-message" + }, + "operationId": "send-extension-chat-message", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that has activated the extension.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendExtensionChatMessageBody" + } + } + } + }, + "responses": { + "204": { + "description": "Successfully sent the chat message.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/extensions/chat?broadcaster_id=237757755' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"text\": \"Hello\",\n \"extension_id\": \"uo6dggojyb8d6soh92zknwmi5ej1q2\",\n \"extension_version\": \"0.0.9\"\n}\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The `extension_id` field in the request's body is required.\n* The `extension_version` field in the request's body is required.\n* The `text` field in the request's body is required.\n* The message is too long." + }, + "401": { + "description": "* The Authorization header is required and must specify a JWT token.\n* The ID in the _broadcaster\\_id_ query parameter must match the `channel_id` claim in the JWT.\n* The JWT token is not valid.\n* The Client-Id header is required." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions": { + "get": { + "summary": "Gets information about an extension.", + "description": "Gets information about an extension.\n\n__Authorization:__\n\nRequires a signed JSON Web Token (JWT) created by an Extension Backend Service (EBS). For signing requirements, see [Signing the JWT](https://dev.twitch.tv/docs/extensions/building/#signing-the-jwt). The signed JWT must include the `role` field (see [JWT Schema](https://dev.twitch.tv/docs/extensions/reference/#jwt-schema)), and the `role` field must be set to _external_.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Extensions", + "url": "https://dev.twitch.tv/docs/api/reference#get-extensions" + }, + "operationId": "get-extensions", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "extension_version", + "in": "query", + "description": "The version of the extension to get. If not specified, it returns the latest, released version. If you don’t have a released version, you must specify a version; otherwise, the list is empty.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of extensions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions?extension_id=uo6dggojyb8d6soh92zknwmi5ej1q2&extension_version=0.0.9' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "author_name": "Twitch Developers", + "bits_enabled": true, + "can_install": false, + "configuration_location": "hosted", + "description": "An extension for testing all the features that we add to extensions", + "eula_tos_url": "", + "has_chat_support": true, + "icon_url": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/logob6c995d8-8b45-48cc-a748-b256e92ac1cd", + "icon_urls": { + "100x100": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/logob6c995d8-8b45-48cc-a748-b256e92ac1cd", + "24x24": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/taskbar905b19da-e7e5-4d8f-beb7-f543a861ac1e", + "300x200": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/discoveryd9545b2c-5474-46d7-a523-1c3835d862ce" + }, + "id": "pgn0bjv51epi7eaekt53tovjnc82qo", + "name": "Official Developers Demo", + "privacy_policy_url": "", + "request_identity_link": true, + "screenshot_urls": [ + "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/screenshotbdec475d-3d2f-4378-b334-941dfddc897a" + ], + "state": "Released", + "subscriptions_support_level": "optional", + "summary": "Test ALL the extensions features!", + "support_email": "dx-extensions-test-dev@justin.tv", + "version": "0.0.9", + "viewer_summary": "Test ALL the extensions features!", + "views": { + "mobile": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html" + }, + "panel": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "height": 300, + "can_link_external_content": false + }, + "video_overlay": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "can_link_external_content": false + }, + "component": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "aspect_width": 0, + "aspect_height": 0, + "aspect_ratio_x": 48000, + "aspect_ratio_y": 36000, + "autoscale": true, + "scale_pixels": 1024, + "target_height": 5333, + "size": 0, + "zoom": false, + "zoom_pixels": 0, + "can_link_external_content": false + } + }, + "allowlisted_config_urls": [], + "allowlisted_panel_urls": [] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required." + }, + "401": { + "description": "* The request must specify the Authorization header.\n* The Authorization header is required and must specify a JWT token.\n* The JWT token is not valid.\n* The request must specify the Client-Id header." + }, + "404": { + "description": "* The extension in the _extension\\_id_ query parameter was not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/extensions/released": { + "get": { + "summary": "Gets information about a released extension.", + "description": "Gets information about a released extension. Returns the extension if its `state` is Released.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Released Extensions", + "url": "https://dev.twitch.tv/docs/api/reference#get-released-extensions" + }, + "operationId": "get-released-extensions", + "parameters": [ + { + "name": "extension_id", + "in": "query", + "description": "The ID of the extension to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "extension_version", + "in": "query", + "description": "The version of the extension to get. If not specified, it returns the latest version.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the extension.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetReleasedExtensionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/extensions/released?extension_version=0.0.9&extension_id=uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "author_name": "Twitch Developer Experience", + "bits_enabled": true, + "can_install": false, + "configuration_location": "hosted", + "description": "An extension for testing all the features that we add to extensions", + "eula_tos_url": "", + "has_chat_support": true, + "icon_url": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/logob6c995d8-8b45-48cc-a748-b256e92ac1cd", + "icon_urls": { + "100x100": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/logob6c995d8-8b45-48cc-a748-b256e92ac1cd", + "24x24": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/taskbar905b19da-e7e5-4d8f-beb7-f543a861ac1e", + "300x200": "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/discoveryd9545b2c-5474-46d7-a523-1c3835d862ce" + }, + "id": "pgn0bjv51epi7eaekt53tovjnc82qo", + "name": "Official Developer Experience Demo", + "privacy_policy_url": "", + "request_identity_link": true, + "screenshot_urls": [ + "https://extensions-discovery-images.twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.8/screenshotbdec475d-3d2f-4378-b334-941dfddc897a" + ], + "state": "Released", + "subscriptions_support_level": "optional", + "summary": "Test ALL the extensions features!", + "support_email": "dx-extensions-test-dev@justin.tv", + "version": "0.0.9", + "viewer_summary": "Test ALL the extensions features!", + "views": { + "mobile": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html" + }, + "panel": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "height": 300, + "can_link_external_content": false + }, + "video_overlay": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "can_link_external_content": false + }, + "component": { + "viewer_url": "https://pgn0bjv51epi7eaekt53tovjnc82qo.ext-twitch.tv/pgn0bjv51epi7eaekt53tovjnc82qo/0.0.9/f9a0d8aae0f9dd0b2d6ef3416b96bc79/index.html", + "aspect_width": 0, + "aspect_height": 0, + "aspect_ratio_x": 48000, + "aspect_ratio_y": 36000, + "autoscale": true, + "scale_pixels": 1024, + "target_height": 5333, + "size": 0, + "zoom": false, + "zoom_pixels": 0, + "can_link_external_content": false + } + }, + "allowlisted_config_urls": [], + "allowlisted_panel_urls": [] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _extension\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* The extension specified in the _extension\\_id_ query parameter was not found or is not released." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/bits/extensions": { + "get": { + "summary": "Gets the list of Bits products that belongs to the extension.", + "description": "Gets the list of Bits products that belongs to the extension. The client ID in the app access token identifies the extension.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens). The client ID in the app access token must be the extension’s client ID.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Get Extension Bits Products", + "url": "https://dev.twitch.tv/docs/api/reference#get-extension-bits-products" + }, + "operationId": "get-extension-bits-products", + "parameters": [ + { + "name": "should_include_all", + "in": "query", + "description": "A Boolean value that determines whether to include disabled or expired Bits products in the response. The default is **false**.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of products.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetExtensionBitsProductsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the extension’s products including its disabled and expired products.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/bits/extensions?should_include_all=true' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "sku": "1010", + "cost": { + "amount": 990, + "type": "bits" + }, + "in_development": true, + "display_name": "Rusty Crate 2", + "expiration": "2021-05-18T09:10:13.397Z", + "is_broadcast": false + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The ID in the Client-Id header must belong to an extension." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token; you may not specify a user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "put": { + "summary": "Adds or updates a Bits product that the extension created.", + "description": "Adds or updates a Bits product that the extension created. If the SKU doesn’t exist, the product is added. You may update all fields except the `sku` field.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens). The client ID in the app access token must match the extension’s client ID.", + "tags": [ + "Extensions" + ], + "externalDocs": { + "description": "Update Extension Bits Product", + "url": "https://dev.twitch.tv/docs/api/reference#update-extension-bits-product" + }, + "operationId": "update-extension-bits-product", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExtensionBitsProductBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created the product.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateExtensionBitsProductResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/bits/extensions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d {\n \"sku\": \"1010\",\n \"cost\": {\n \"amount\": 990,\n \"type\": \"bits\"\n },\n \"in_development\": true,\n \"display_name\": \"Rusty Crate 2\",\n \"is_broadcast\": true,\n \"expiration\": \"2021-05-18T09:10:13.397Z\"\n}\n```", + "value": { + "data": [ + { + "sku": "1010", + "cost": { + "amount": 990, + "type": "bits" + }, + "in_development": true, + "display_name": "Rusty Crate 2", + "expiration": "2021-05-18T09:10:13.397Z", + "is_broadcast": true + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `sku` field is required.\n* The value in the `sku` field is not valid. The SKU may contain only alphanumeric characters, dashes (-), underscores (\\_), and periods (.).\n* The `cost` object's `amount` field is required.\n* The value in the `cost` object's `amount` field is not valid.\n* The `cost` object's `type` field is required.\n* The value in the `cost` object's `type` field is not valid.\n* The `display_name` field is required.\n* The ID in the Client-Id header must belong to the extension." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token; you may not specify a user access token.\n* The OAuth token is not valid.\n* The ID in the Client-Id header must match the Client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/eventsub/subscriptions": { + "post": { + "summary": "Creates an EventSub subscription.", + "description": "Creates an EventSub subscription.\n\n__Authorization:__\n\nIf you use [webhooks to receive events](https://dev.twitch.tv/docs/eventsub/handling-webhook-events), the request must specify an app access token. The request will fail if you use a user access token. If the subscription type requires user authorization, the user must have granted your app (client ID) permissions to receive those events before you subscribe to them. For example, to subscribe to [channel.subscribe](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types/#channelsubscribe) events, your app must get a user access token that includes the `channel:read:subscriptions` scope, which adds the required permission to your app access token’s client ID.\n\nIf you use [WebSockets to receive events](https://dev.twitch.tv/docs/eventsub/handling-websocket-events), the request must specify a user access token. The request will fail if you use an app access token. If the subscription type requires user authorization, the token must include the required scope. However, if the subscription type doesn’t include user authorization, the token may include any scopes or no scopes.\n\nIf you use [Conduits](https://dev.twitch.tv/docs/eventsub/handling-conduit-events) to receive events, the request must specify an app access token. The request will fail if you use a user access token.", + "tags": [ + "EventSub" + ], + "externalDocs": { + "description": "Create EventSub Subscription", + "url": "https://dev.twitch.tv/docs/api/reference#create-eventsub-subscription" + }, + "operationId": "create-eventsub-subscription", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateEventSubSubscriptionBody" + }, + "examples": { + "Example 1": { + "value": { + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com", + "secret": "s3cre7" + } + }, + "description": "For a **webhook** `method` type. Adds a user.update subscription." + }, + "Example 2": { + "value": { + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "transport": { + "method": "websocket", + "session_id": "AQoQexAWVYKSTIu4ec_2VAxyuhAB" + } + }, + "description": "For a **websocket** `method` type." + } + } + } + } + }, + "responses": { + "202": { + "description": "Successfully accepted the subscription request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateEventSubSubscriptionResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nFor a **webhook** `method` type. Adds a user.update subscription.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/eventsub/subscriptions' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"type\": \"user.update\",\n \"version\": \"1\",\n \"condition\": {\n \"user_id\": \"1234\"\n },\n \"transport\": {\n \"method\": \"webhook\",\n \"callback\": \"https://this-is-a-callback.com\",\n \"secret\":\"s3cre7\"\n }\n}'\n```\n\n```bash\n# Twitch CLI example that adds a user.update subscription.\n\ntwitch api post /eventsub/subscriptions -b '{\"type\":\"user.update\",\"version\":\"1\",\"condition\":{\"user_id\":\"1234\"},\"transport\":{\"method\":\"webhook\",\"callback\":\"https://this-is-a-callback.com\",\"secret\":\"s3cre7\"}}'Example Response - Webhook\n```", + "value": { + "data": [ + { + "id": "26b1c993-bfcf-44d9-b876-379dacafe75a", + "status": "webhook_callback_verification_pending", + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "created_at": "2020-11-10T14:32:18.730260295Z", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + }, + "cost": 1 + } + ], + "total": 1, + "total_cost": 1, + "max_total_cost": 10000 + } + }, + "Example 2": { + "description": "_Request:_\n\nFor a **websocket** `method` type.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/eventsub/subscriptions' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"type\": \"user.update\",\n \"version\": \"1\",\n \"condition\": {\n \"user_id\": \"1234\"\n },\n \"transport\": {\n \"method\": \"websocket\",\n \"session_id\": \"AQoQexAWVYKSTIu4ec_2VAxyuhAB\"\n }\n}'\n```", + "value": { + "data": [ + { + "id": "26b1c993-bfcf-44d9-b876-379dacafe75a", + "status": "webhook_callback_verification_pending", + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "created_at": "2020-11-10T14:32:18.730260295Z", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + }, + "cost": 1 + } + ], + "total": 1, + "total_cost": 1, + "max_total_cost": 10000 + } + }, + "Example 3": { + "description": "_Request:_\n\nFor a **conduit** `method` type.\n\n```text\nExample RequestExample Requestcurl -X POST 'https://api.twitch.tv/helix/eventsub/subscriptions' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"type\":\"user.update\",\n \"version\":\"1\",\n \"condition\":{\n \"user_id\":\"1234\"\n },\n \"transport\":{\n \"method\":\"conduit\",\n \"conduit_id\":\"bfcfc993-26b1-b876-44d9-afe75a379dac\"\n }\n}'\n```", + "value": { + "data": [ + { + "id": "26b1c993-bfcf-44d9-b876-379dacafe75a", + "status": "enabled", + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "created_at": "2020-11-10T14:32:18.730260295Z", + "transport": { + "method": "conduit", + "conduit_id": "bfcfc993-26b1-b876-44d9-afe75a379dac" + }, + "cost": 1 + } + ], + "total": 1, + "total_cost": 1, + "max_total_cost": 10000 + } + } + } + } + } + }, + "400": { + "description": "* The `condition` field is required.\n* The user specified in the `condition` object does not exist.\n* The `condition` object is missing one or more required fields.\n* The combination of values in the `version` and `type` fields is not valid.\n* The length of the string in the `secret` field is not valid.\n* The URL in the transport's `callback` field is not valid. The URL must use the HTTPS protocol and the 443 port number.\n* The value specified in the `method` field is not valid.\n* The `callback` field is required if you specify the webhook transport method.\n* The `session_id` field is required if you specify the WebSocket transport method.\n* The combination of subscription type and version is not valid.\n* The `conduit_id` field is required if you specify the Conduit transport method." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token if the transport method is webhook.\n* The Authorization header is required and must specify a user access token if the transport method is WebSocket.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "403": { + "description": "The access token is missing the required scopes." + }, + "409": { + "description": "A subscription already exists for the specified event type and `condition` combination." + }, + "429": { + "description": "The request exceeds the number of subscriptions that you may create with the same combination of `type` and `condition` values." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:subscriptions" + ] + } + ] + }, + "delete": { + "summary": "Deletes an EventSub subscription.", + "description": "Deletes an EventSub subscription.\n\n__Authorization:__\n\nIf you use [webhooks to receive events](https://dev.twitch.tv/docs/eventsub/handling-webhook-events), the request must specify an app access token. The request will fail if you use a user access token.\n\nIf you use [WebSockets to receive events](https://dev.twitch.tv/docs/eventsub/handling-websocket-events), the request must specify a user access token. The request will fail if you use an app access token. The token may include any scopes.", + "tags": [ + "EventSub" + ], + "externalDocs": { + "description": "Delete EventSub Subscription", + "url": "https://dev.twitch.tv/docs/api/reference#delete-eventsub-subscription" + }, + "operationId": "delete-eventsub-subscription", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The ID of the subscription to delete.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully deleted the subscription.\n\n__Examples__\n\n_Request:_\n\nDeletes the specified EventSub subscription.\n\n```bash\ncurl -X DELETE\n'https://api.twitch.tv/helix/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```\n\n```bash\n# Twitch CLI example that deletes the specified subscription.\n\ntwitch api delete /eventsub/subscriptions -q id=c839a466-034a-4d77-8d4d-c9a751516e7\n```" + }, + "400": { + "description": "* The _id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* The subscription was not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "get": { + "summary": "Gets a list of EventSub subscriptions that the client in the access token created.", + "description": "Gets a list of EventSub subscriptions that the client in the access token created.\n\n__Authorization:__\n\nIf you use [Webhooks](https://dev.twitch.tv/docs/eventsub/handling-webhook-events) or [Conduits](https://dev.twitch.tv/docs/eventsub/handling-conduit-events) to receive events, the request must specify an app access token. The request will fail if you use a user access token.\n\nIf you use [WebSockets to receive events](https://dev.twitch.tv/docs/eventsub/handling-websocket-events), the request must specify a user access token. The request will fail if you use an app access token. The token may include any scopes.\n\n__Request Query Parameters:__\n\nUse the _status_, _type_, and _user\\_id_ query parameters to filter the list of subscriptions that are returned. The filters are mutually exclusive; the request fails if you specify more than one filter.", + "tags": [ + "EventSub" + ], + "externalDocs": { + "description": "Get EventSub Subscriptions", + "url": "https://dev.twitch.tv/docs/api/reference#get-eventsub-subscriptions" + }, + "operationId": "get-eventsub-subscriptions", + "parameters": [ + { + "name": "status", + "in": "query", + "description": "Filter subscriptions by its status. Possible values are: \n \n* enabled — The subscription is enabled.\n* webhook\\_callback\\_verification\\_pending — The subscription is pending verification of the specified callback URL.\n* webhook\\_callback\\_verification\\_failed — The specified callback URL failed verification.\n* notification\\_failures\\_exceeded — The notification delivery failure rate was too high.\n* authorization\\_revoked — The authorization was revoked for one or more users specified in the **Condition** object.\n* moderator\\_removed — The moderator that authorized the subscription is no longer one of the broadcaster's moderators.\n* user\\_removed — One of the users specified in the **Condition** object was removed.\n* version\\_removed — The subscription to subscription type and version is no longer supported.\n* beta\\_maintenance — The subscription to the beta subscription type was removed due to maintenance.\n* websocket\\_disconnected — The client closed the connection.\n* websocket\\_failed\\_ping\\_pong — The client failed to respond to a ping message.\n* websocket\\_received\\_inbound\\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).\n* websocket\\_connection\\_unused — The client failed to subscribe to events within the required time.\n* websocket\\_internal\\_error — The Twitch WebSocket server experienced an unexpected error.\n* websocket\\_network\\_timeout — The Twitch WebSocket server timed out writing the message to the client.\n* websocket\\_network\\_error — The Twitch WebSocket server experienced a network error writing the message to the client.", + "schema": { + "type": "string", + "enum": [ + "enabled", + "webhook_callback_verification_pending", + "webhook_callback_verification_failed", + "notification_failures_exceeded", + "authorization_revoked", + "moderator_removed", + "user_removed", + "version_removed", + "beta_maintenance", + "websocket_disconnected", + "websocket_failed_ping_pong", + "websocket_received_inbound_traffic", + "websocket_connection_unused", + "websocket_internal_error", + "websocket_network_timeout", + "websocket_network_error" + ] + } + }, + { + "name": "type", + "in": "query", + "description": "Filter subscriptions by subscription type. For a list of subscription types, see [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types).", + "schema": { + "type": "string", + "enum": [ + "automod.message.hold", + "automod.message.update", + "automod.settings.update", + "automod.terms.update", + "channel.update", + "channel.follow", + "channel.ad_break.begin", + "channel.chat.clear", + "channel.chat.clear_user_messages", + "channel.chat.message", + "channel.chat.message_delete", + "channel.chat.notification", + "channel.chat_settings.update", + "channel.chat.user_message_hold", + "channel.chat.user_message_update", + "channel.subscribe", + "channel.subscription.end", + "channel.subscription.gift", + "channel.subscription.message", + "channel.cheer", + "channel.raid", + "channel.ban", + "channel.unban", + "channel.unban_request.create", + "channel.unban_request.resolve", + "channel.moderate", + "channel.moderator.add", + "channel.moderator.remove", + "channel.guest_star_session.begin", + "channel.guest_star_session.end", + "channel.guest_star_guest.update", + "channel.guest_star_settings.update", + "channel.channel_points_automatic_reward.add", + "channel.channel_points_custom_reward.add", + "channel.channel_points_custom_reward.update", + "channel.channel_points_custom_reward.remove", + "channel.channel_points_custom_reward_redemption.add", + "channel.channel_points_custom_reward_redemption.update", + "channel.poll.begin", + "channel.poll.progress", + "channel.poll.end", + "channel.prediction.begin", + "channel.prediction.progress", + "channel.prediction.lock", + "channel.prediction.end", + "channel.vip.add", + "channel.vip.remove", + "channel.charity_campaign.donate", + "channel.charity_campaign.start", + "channel.charity_campaign.progress", + "channel.charity_campaign.stop", + "conduit.shard.disabled", + "drop.entitlement.grant", + "extension.bits_transaction.create", + "channel.goal.begin", + "channel.goal.progress", + "channel.goal.end", + "channel.hype_train.begin", + "channel.hype_train.progress", + "channel.hype_train.end", + "channel.shield_mode.begin", + "channel.shield_mode.end", + "channel.shoutout.create", + "channel.shoutout.receive", + "stream.online", + "stream.offline", + "user.authorization.grant", + "user.authorization.revoke", + "user.update", + "user.whisper.message" + ] + } + }, + { + "name": "user_id", + "in": "query", + "description": "Filter subscriptions by user ID. The response contains subscriptions where this ID matches a user ID that you specified in the **Condition** object when you [created the subscription](https://dev.twitch.tv/docs/api/reference#create-eventsub-subscription).", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The `pagination` object in the response contains the cursor's value.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the subscriptions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEventSubSubscriptionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets a list of EventSub subscriptions that you created. The list is ordered by the oldest subscription first.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/eventsub/subscriptions' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```\n\n```bash\n# Twitch CLI example that gets a list of EventSub subscriptions that you created.\n\ntwitch api get /eventsub/subscriptions\n```", + "value": { + "total": 2, + "data": [ + { + "id": "26b1c993-bfcf-44d9-b876-379dacafe75a", + "status": "enabled", + "type": "stream.online", + "version": "1", + "condition": { + "broadcaster_user_id": "1234" + }, + "created_at": "2020-11-10T20:08:33.12345678Z", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + }, + "cost": 1 + }, + { + "id": "35016908-41ff-33ce-7879-61b8dfc2ee16", + "status": "webhook_callback_verification_pending", + "type": "user.update", + "version": "1", + "condition": { + "user_id": "1234" + }, + "created_at": "2020-11-10T14:32:18.730260295Z", + "transport": { + "method": "webhook", + "callback": "https://this-is-a-callback.com" + }, + "cost": 0 + } + ], + "total_cost": 1, + "max_total_cost": 10000, + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The request may specify only one filter query parameter. For example, either _type_ or _status_ or _user\\_id_.\n* The value in the _type_ query parameter is not valid.\n* The value in the _status_ query parameter is not valid.\n* The cursor specified in the _after_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/games/top": { + "get": { + "summary": "Gets information about all broadcasts on Twitch.", + "description": "Gets information about all broadcasts on Twitch.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Games" + ], + "externalDocs": { + "description": "Get Top Games", + "url": "https://dev.twitch.tv/docs/api/reference#get-top-games" + }, + "operationId": "get-top-games", + "parameters": [ + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of broadcasts.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTopGamesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/games/top' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "493057", + "name": "PUBG: BATTLEGROUNDS", + "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/493057-{width}x{height}.jpg", + "igdb_id": "27789" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6MjB9fQ==" + } + } + } + } + } + } + }, + "400": { + "description": "* The value in the _first_ query parameter is not valid.\n* The cursor in the _after_ or _before_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/games": { + "get": { + "summary": "Gets information about specified games.", + "description": "Gets information about specified categories or games.\n\nYou may get up to 100 categories or games by specifying their ID or name. You may specify all IDs, all names, or a combination of IDs and names. If you specify a combination of IDs and names, the total number of IDs and names must not exceed 100.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Games" + ], + "externalDocs": { + "description": "Get Games", + "url": "https://dev.twitch.tv/docs/api/reference#get-games" + }, + "operationId": "get-games", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The ID of the category or game to get. Include this parameter for each category or game you want to get. For example, `&id=1234&id=5678`. You may specify a maximum of 100 IDs. The endpoint ignores duplicate and invalid IDs or IDs that weren’t found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "name", + "in": "query", + "description": "The name of the category or game to get. The name must exactly match the category’s or game’s title. Include this parameter for each category or game you want to get. For example, `&name=foo&name=bar`. You may specify a maximum of 100 names. The endpoint ignores duplicate names and names that weren’t found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "igdb_id", + "in": "query", + "description": "The [IGDB](https://www.igdb.com/) ID of the game to get. Include this parameter for each game you want to get. For example, `&igdb_id=1234&igdb_id=5678`. You may specify a maximum of 100 IDs. The endpoint ignores duplicate and invalid IDs or IDs that weren’t found.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the specified games.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGamesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/games?id=33214' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "33214", + "name": "Fortnite", + "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/33214-{width}x{height}.jpg", + "igdb_id": "1905" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN" + } + } + } + } + } + } + }, + "400": { + "description": "* The request must specify the _id_ or _name_ or _igdb\\_id_ query parameter.\n* The combined number of game IDs (_id_ and _igdb\\_id_) and game names that you specify in the request must not exceed 100." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/goals": { + "get": { + "summary": "Gets the broadcaster’s list of active goals.", + "description": "Gets the broadcaster’s list of active goals. Use this endpoint to get the current progress of each goal.\n\nInstead of polling for the progress of a goal, consider [subscribing](https://dev.twitch.tv/docs/eventsub/manage-subscriptions) to receive notifications when a goal makes progress using the [channel.goal.progress](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelgoalprogress) subscription type. [Read More](https://dev.twitch.tv/docs/api/goals#requesting-event-notifications)\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:goals** scope.", + "tags": [ + "Goals" + ], + "externalDocs": { + "description": "Get Creator Goals", + "url": "https://dev.twitch.tv/docs/api/reference#get-creator-goals" + }, + "operationId": "get-creator-goals", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that created the goals. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s goals.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCreatorGoalsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/goals?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets the broadcaster's goals.\n\ntwitch api get /goals -q broadcaster_id=141981764\n```", + "value": { + "data": [ + { + "id": "1woowvbkiNv8BRxEWSqmQz6Zk92", + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "type": "follower", + "description": "Follow goal for Helix testing", + "current_amount": 27062, + "target_amount": 30000, + "created_at": "2021-08-16T17:22:23Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:goals** scope.\n* The ID in _broadcaster\\_id_ must match the user ID in the user access token.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:goals" + ] + } + ] + } + }, + "/guest_star/channel_settings": { + "get": { + "summary": "BETA Gets the channel settings for configuration of the Guest Star feature for a particular host.", + "description": "BETA Gets the channel settings for configuration of the Guest Star feature for a particular host.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:read:guest_star`, `channel:manage:guest_star`, `moderator:read:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Get Channel Guest Star Settings", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-guest-star-settings" + }, + "operationId": "get-channel-guest-star-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster you want to get guest star settings for.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelGuestStarSettingsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -x GET `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&moderator_id=9321049` \\\n\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "is_moderator_send_live_enabled": true, + "slot_count": 4, + "is_browser_source_audio_enabled": true, + "layout": "TILED_LAYOUT", + "browser_source_token": "eihq8rew7q3hgierufhi3q" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_" + }, + "403": { + "description": "Insufficient authorization for viewing channel’s Guest Star settings" + } + } + }, + "put": { + "summary": "BETA Mutates the channel settings for configuration of the Guest Star feature for a particular host.", + "description": "BETA Mutates the channel settings for configuration of the Guest Star feature for a particular host.\n\n__Authorization:__\n\n* Query parameter `broadcaster_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Update Channel Guest Star Settings", + "url": "https://dev.twitch.tv/docs/api/reference#update-channel-guest-star-settings" + }, + "operationId": "update-channel-guest-star-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster you want to update Guest Star settings for.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateChannelGuestStarSettingsBody" + } + } + } + }, + "responses": { + "204": { + "description": "Successfully updated channel settings\n\n__Examples__\n\n_Request:_\n\nUpdate browser source layout settings\n\n```bash\ncurl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&group_layout=TILED_LAYOUT` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n_Request:_\n\nDisable moderator control of slot live setting\n\n```bash\ncurl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&is_moderator_send_live_enabled=false` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n_Request:_\n\nUpdate max slot count\n\n```bash\ncurl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049&slot_count=6` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n_Request:_\n\nRegenerate browser sources\n\n```bash\ncurl -x PUT `https://api.twitch.tv/helix/guest_star/channel_settings?broadcaster_id=9321049®enerate_browser_sources=true` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Invalid _slot\\_count_\n* Invalid _group\\_layout_" + } + } + } + }, + "/guest_star/session": { + "get": { + "summary": "BETA Gets information about an ongoing Guest Star session for a particular channel.", + "description": "BETA Gets information about an ongoing Guest Star session for a particular channel.\n\n__Authorization:__\n\n* Requires OAuth Scope: `channel:read:guest_star`, `channel:manage:guest_star`, `moderator:read:guest_star` or `moderator:manage:guest_star`\n* Guests must be either invited or assigned a slot within the session", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Get Guest Star Session", + "url": "https://dev.twitch.tv/docs/api/reference#get-guest-star-session" + }, + "operationId": "get-guest-star-session", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "ID for the user hosting the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGuestStarSessionResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGet session for host channel\n\n```bash\ncurl -x GET `https://api.twitch.tv/helix/guest_star/session?broadcaster_id=9321049&moderator_id=9321049` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "2KFRQbFtpmfyD3IevNRnCzOPRJI", + "guests": [ + { + "slot_id": "0", + "user_id": "9321049", + "user_display_name": "Cool_User", + "user_login": "cool_user", + "is_live": true, + "volume": 100, + "assigned_at": "2023-01-02T04:16:53.325Z", + "audio_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + }, + "video_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + } + }, + { + "slot_id": "1", + "user_id": "144601104", + "user_display_name": "Cool_Guest", + "user_login": "cool_guest", + "is_live": true, + "volume": 100, + "assigned_at": "2023-01-02T04:20:59.325Z", + "audio_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + }, + "video_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + } + } + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_" + }, + "401": { + "description": "_moderator\\_id_ and user token do not match" + } + } + }, + "post": { + "summary": "BETA Programmatically creates a Guest Star session on behalf of the broadcaster.", + "description": "BETA Programmatically creates a Guest Star session on behalf of the broadcaster. Requires the broadcaster to be present in the call interface, or the call will be ended automatically.\n\n__Authorization:__\n\n* Query parameter `broadcaster_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Create Guest Star Session", + "url": "https://dev.twitch.tv/docs/api/reference#create-guest-star-session" + }, + "operationId": "create-guest-star-session", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster you want to create a Guest Star session for. Provided `broadcaster_id` must match the `user_id` in the auth token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGuestStarSessionResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nStart Guest Star session\n\n```bash\ncurl -x POST `https://api.twitch.tv/helix/guest_star/session?broadcaster_id=9321049` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "2KFRQbFtpmfyD3IevNRnCzOPRJI", + "guests": [ + { + "id": "0", + "user_id": "9321049", + "user_display_name": "Cool_User", + "user_login": "cool_user", + "is_live": true, + "volume": 100, + "assigned_at": "2023-01-02T04:16:53.325Z", + "audio_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + }, + "video_settings": { + "is_available": true, + "is_host_enabled": true, + "is_guest_enabled": true + } + } + ] + } + ] + } + } + } + } + } + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Session limit reached (1 active call)" + }, + "401": { + "description": "Phone verification missing" + }, + "403": { + "description": "Insufficient authorization for creating session" + } + } + }, + "delete": { + "summary": "BETA Programmatically ends a Guest Star session on behalf of the broadcaster.", + "description": "BETA Programmatically ends a Guest Star session on behalf of the broadcaster. Performs the same action as if the host clicked the “End Call” button in the Guest Star UI.\n\n__Authorization:__\n\n* Query parameter `broadcaster_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "End Guest Star Session", + "url": "https://dev.twitch.tv/docs/api/reference#end-guest-star-session" + }, + "operationId": "end-guest-star-session", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster you want to end a Guest Star session for. Provided `broadcaster_id` must match the `user_id` in the auth token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "ID for the session to end on behalf of the broadcaster.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "\n\n__Examples__\n\n_Request:_\n\nEnd Guest Star session\n\n```bash\ncurl -x DELETE `https://api.twitch.tv/helix/guest_star/session?broadcaster_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing or invalid _broadcaster\\_id_\n* Missing or invalid _session\\_id_\n* Session has already been ended" + }, + "403": { + "description": "Insufficient authorization for ending session" + } + } + } + }, + "/guest_star/invites": { + "get": { + "summary": "BETA Provides the caller with a list of pending invites to a Guest Star session.", + "description": "BETA Provides the caller with a list of pending invites to a Guest Star session, including the invitee’s ready status while joining the waiting room.\n\n__Authorization:__\n\n* Query parameter `broadcaster_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:read:guest_star`, `channel:manage:guest_star`, `moderator:read:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Get Guest Star Invites", + "url": "https://dev.twitch.tv/docs/api/reference#get-guest-star-invites" + }, + "operationId": "get-guest-star-invites", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the `user_id` in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The session ID to query for invite status.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGuestStarInvitesResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGet session invites\n\n```bash\ncurl -x GET `https://api.twitch.tv/helix/guest_star/invites?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "Example 2": { + "description": "_Request:_\n\nGet session for host channel\n\n```bash\ncurl -x GET `https://api.twitch.tv/helix/guest_star/session?broadcaster_id=9321049` \\ -H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\ -H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "user_id": "144601104", + "invited_at": "2023-01-02T04:16:53.325Z", + "status": "INVITED", + "is_audio_enabled": false, + "is_video_enabled": true, + "is_audio_available": true, + "is_video_available": true + } + ] + } + } + } + } + } + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _session\\_id_" + } + } + }, + "post": { + "summary": "BETA Sends an invite to a specified guest on behalf of the broadcaster for a Guest Star session in progress.", + "description": "BETA Sends an invite to a specified guest on behalf of the broadcaster for a Guest Star session in progress.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Send Guest Star Invite", + "url": "https://dev.twitch.tv/docs/api/reference#send-guest-star-invite" + }, + "operationId": "send-guest-star-invite", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the `user_id` in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The session ID for the invite to be sent on behalf of the broadcaster.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "guest_id", + "in": "query", + "description": "Twitch User ID for the guest to invite to the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "\n\n__Examples__\n\n_Request:_\n\nInvite user to Guest Star session\n\n```bash\ncurl -x POST `https://api.twitch.tv/helix/guest_star/invites?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_\n* Missing _session\\_id_\n* Missing _guest\\_id_\n* Invalid _session\\_id_" + }, + "403": { + "description": "* Unauthorized guest invited\n* Guest already invited" + } + } + }, + "delete": { + "summary": "BETA Revokes a previously sent invite for a Guest Star session.", + "description": "BETA Revokes a previously sent invite for a Guest Star session.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Delete Guest Star Invite", + "url": "https://dev.twitch.tv/docs/api/reference#delete-guest-star-invite" + }, + "operationId": "delete-guest-star-invite", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the `user_id` in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The ID of the session for the invite to be revoked on behalf of the broadcaster.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "guest_id", + "in": "query", + "description": "Twitch User ID for the guest to revoke the Guest Star session invite from.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "\n\n__Examples__\n\n_Request:_\n\nRemove invite to session\n\n```bash\ncurl -x DELETE `https://api.twitch.tv/helix/guest_star/invites?broadcaster_id=9321049&moderator_id=9321049&session_id=2KFRQbFtpmfyD3IevNRnCzOPRJI&guest_id=144601104` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _session\\_id_\n* Missing _guest\\_id_\n* Invalid _session\\_id_" + }, + "404": { + "description": "No invite exists for specified _guest\\_id_" + } + } + } + }, + "/guest_star/slot": { + "post": { + "summary": "BETA Allows a previously invited user to be assigned a slot within the active Guest Star session.", + "description": "BETA Allows a previously invited user to be assigned a slot within the active Guest Star session, once that guest has indicated they are ready to join.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Assign Guest Star Slot", + "url": "https://dev.twitch.tv/docs/api/reference#assign-guest-star-slot" + }, + "operationId": "assign-guest-star-slot", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the `user_id` in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The ID of the Guest Star session in which to assign the slot.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "guest_id", + "in": "query", + "description": "The Twitch User ID corresponding to the guest to assign a slot in the session. This user must already have an invite to this session, and have indicated that they are ready to join.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "slot_id", + "in": "query", + "description": "The slot assignment to give to the user. Must be a numeric identifier between “1” and “N” where N is the max number of slots for the session. Max number of slots allowed for the session is reported by [Get Channel Guest Star Settings](https://dev.twitch.tv/docs/api/reference#get-channel-guest-star-settings).", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfuly assigned guest to slot\n\n__Examples__\n\n_Request:_\n\nAssign invited user to slot\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_\n* Missing _guest\\_id_\n* Missing or invalid _session\\_id_\n* Missing or invalid _slot\\_id_" + }, + "401": { + "description": "_moderator\\_id_ is not a guest star moderator" + }, + "403": { + "description": "* Cannot assign host slot\n* Guest not invited to session\n* Guest already assigned to slot\n* Guest is not ready to join" + } + } + }, + "patch": { + "summary": "BETA Allows a user to update the assigned slot for a particular user within the active Guest Star session.", + "description": "BETA Allows a user to update the assigned slot for a particular user within the active Guest Star session.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Update Guest Star Slot", + "url": "https://dev.twitch.tv/docs/api/reference#update-guest-star-slot" + }, + "operationId": "update-guest-star-slot", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the `user_id` in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The ID of the Guest Star session in which to update slot settings.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "source_slot_id", + "in": "query", + "description": "The slot assignment previously assigned to a user.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "destination_slot_id", + "in": "query", + "description": "The slot to move this user assignment to. If the destination slot is occupied, the user assigned will be swapped into `source_slot_id`.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfuly updated slot(s)\n\n__Examples__\n\n_Request:_\n\nMove slot assignment to a new slot ID\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing or invalid _session\\_id_\n* Missing or invalid _slot\\_id_" + } + } + }, + "delete": { + "summary": "BETA Allows a caller to remove a slot assignment from a user participating in an active Guest Star session.", + "description": "BETA Allows a caller to remove a slot assignment from a user participating in an active Guest Star session. This revokes their access to the session immediately and disables their access to publish or subscribe to media within the session.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Delete Guest Star Slot", + "url": "https://dev.twitch.tv/docs/api/reference#delete-guest-star-slot" + }, + "operationId": "delete-guest-star-slot", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The ID of the Guest Star session in which to remove the slot assignment.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "guest_id", + "in": "query", + "description": "The Twitch User ID corresponding to the guest to remove from the session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "slot_id", + "in": "query", + "description": "The slot ID representing the slot assignment to remove from the session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "should_reinvite_guest", + "in": "query", + "description": "Flag signaling that the guest should be reinvited to the session, sending them back to the invite queue.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfuly removed user from slot\n\n__Examples__\n\n_Request:_\n\nRemove user from slot\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_\n* Missing or invalid _session\\_id_\n* Missing or invalid _slot\\_id_" + }, + "403": { + "description": "* _moderator\\_id_ is not a Guest Star moderator\n* The request is attempting to modify a restricted slot" + }, + "404": { + "description": "_guest\\_id_ or _slot\\_id_ not found" + } + } + } + }, + "/guest_star/slot_settings": { + "patch": { + "summary": "BETA Allows a user to update slot settings for a particular guest within a Guest Star session.", + "description": "BETA Allows a user to update slot settings for a particular guest within a Guest Star session, such as allowing the user to share audio or video within the call as a host. These settings will be broadcasted to all subscribers which control their view of the guest in that slot. One or more of the optional parameters to this API can be specified at any time.\n\n__Authorization:__\n\n* Query parameter `moderator_id` must match the `user_id` in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `channel:manage:guest_star` or `moderator:manage:guest_star`", + "tags": [ + "Guest Star" + ], + "externalDocs": { + "description": "Update Guest Star Slot Settings", + "url": "https://dev.twitch.tv/docs/api/reference#update-guest-star-slot-settings" + }, + "operationId": "update-guest-star-slot-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster running the Guest Star session.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "session_id", + "in": "query", + "description": "The ID of the Guest Star session in which to update a slot’s settings.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "slot_id", + "in": "query", + "description": "The slot assignment that has previously been assigned to a user.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "is_audio_enabled", + "in": "query", + "description": "Flag indicating whether the slot is allowed to share their audio with the rest of the session. If false, the slot will be muted in any views containing the slot.", + "schema": { + "type": "boolean" + } + }, + { + "name": "is_video_enabled", + "in": "query", + "description": "Flag indicating whether the slot is allowed to share their video with the rest of the session. If false, the slot will have no video shared in any views containing the slot.", + "schema": { + "type": "boolean" + } + }, + { + "name": "is_live", + "in": "query", + "description": "Flag indicating whether the user assigned to this slot is visible/can be heard from any public subscriptions. Generally, this determines whether or not the slot is enabled in any broadcasting software integrations.", + "schema": { + "type": "boolean" + } + }, + { + "name": "volume", + "in": "query", + "description": "Value from 0-100 that controls the audio volume for shared views containing the slot.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "204": { + "description": "Successfuly updated slot settings\n\n__Examples__\n\n_Request:_\n\nUpdate slot settings to enable slot in broadcasting software\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n_Request:_\n\nMute a slot’s audio for a guest\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n_Request:_\n\nAllow 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.\n\n```bash\ncurl -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` \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* Missing _broadcaster\\_id_\n* Missing _moderator\\_id_\n* Missing or invalid _session\\_id_\n* Missing or invalid _slot\\_id_" + }, + "403": { + "description": "* _moderator\\_id_ is not a Guest Star moderator\n* The request is attempting to modify a restricted slot" + } + } + } + }, + "/hypetrain/events": { + "get": { + "summary": "Gets information about the broadcaster’s current or most recent Hype Train event.", + "description": "Gets information about the broadcaster’s current or most recent Hype Train event.\n\nInstead of polling for events, consider [subscribing](https://dev.twitch.tv/docs/eventsub/manage-subscriptions) to Hype Train events ([Begin](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelhype%5Ftrainbegin), [Progress](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelhype%5Ftrainprogress), [End](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelhype%5Ftrainend)).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:hype\\_train** scope.", + "tags": [ + "Hype Train" + ], + "externalDocs": { + "description": "Get Hype Train Events", + "url": "https://dev.twitch.tv/docs/api/reference#get-hype-train-events" + }, + "operationId": "get-hype-train-events", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s running the Hype Train. This ID must match the User ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 1.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s Hype Train events.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetHypeTrainEventsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET\n'https://api.twitch.tv/helix/hypetrain/events?broadcaster_id=270954519&first=1' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "1b0AsbInCHZW2SQFQkCzqN07Ib2", + "event_type": "hypetrain.progression", + "event_timestamp": "2020-04-24T20:07:24Z", + "version": "1.0", + "event_data": { + "broadcaster_id": "270954519", + "cooldown_end_time": "2020-04-24T20:13:21.003802269Z", + "expires_at": "2020-04-24T20:12:21.003802269Z", + "goal": 1800, + "id": "70f0c7d8-ff60-4c50-b138-f3a352833b50", + "last_contribution": { + "total": 200, + "type": "BITS", + "user": "134247454" + }, + "level": 2, + "started_at": "2020-04-24T20:05:47.30473127Z", + "top_contributions": [ + { + "total": 600, + "type": "BITS", + "user": "134247450" + } + ], + "total": 600 + } + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6IjI3MDk1NDUxOToxNTg3NzU4ODQ0OjFiMEFzYkluQ0haVzJTUUZRa0N6cU4wN0liMiJ9fQ" + } + } + } + } + } + } + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the _user\\_id_ in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:hype\\_train** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:hype_train" + ] + } + ] + } + }, + "/moderation/enforcements/status": { + "post": { + "summary": "Checks whether AutoMod would flag the specified message for review.", + "description": "Checks whether AutoMod would flag the specified message for review.\n\nAutoMod is a moderation tool that holds inappropriate or harassing chat messages for moderators to review. Moderators approve or deny the messages that AutoMod flags; only approved messages are released to chat. AutoMod detects misspellings and evasive language automatically. For information about AutoMod, see [How to Use AutoMod](https://help.twitch.tv/s/article/how-to-use-automod).\n\n**Rate Limits**: Rates are limited per channel based on the account type rather than per access token.\n\n| Account type | Limit per minute | Limit per hour |\n| - | - | - |\n| Normal | 5 | 50 |\n| Affiliate | 10 | 100 |\n| Partner | 30 | 300 |\n\n\nThe above limits are in addition to the standard [Twitch API rate limits](https://dev.twitch.tv/docs/api/guide#twitch-rate-limits). The rate limit headers in the response represent the Twitch rate limits and not the above limits.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderation:read** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Check AutoMod Status", + "url": "https://dev.twitch.tv/docs/api/reference#check-automod-status" + }, + "operationId": "check-automod-status", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose AutoMod settings and list of blocked terms are used to check the message. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckAutoModStatusBody" + }, + "examples": { + "Example": { + "value": { + "data": [ + { + "msg_id": "123", + "msg_text": "Hello World!" + }, + { + "msg_id": "393", + "msg_text": "Boooooo!" + } + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully checked the messages.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckAutoModStatusResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/enforcements/status?broadcaster_id=12345' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"data\": [\n {\n \"msg_id\": \"123\",\n \"msg_text\": \"Hello World!\"\n },\n {\n \"msg_id\": \"393\",\n \"msg_text\": \"Boooooo!\"\n }\n ]\n}'\n```", + "value": { + "data": [ + { + "msg_id": "123", + "is_permitted": true + }, + { + "msg_id": "393", + "is_permitted": false + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The `data` field is required and the list must contain one or more messages to check.\n* The `msg_id` field is required.\n* The `msg_text` field is required." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderation:read** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID in the user access token." + }, + "429": { + "description": "* The broadcaster exceeded the number of chat message checks that they may make. See the endpoint's rate limits." + } + }, + "security": [ + { + "twitch_auth": [ + "moderation:read" + ] + } + ] + } + }, + "/moderation/automod/message": { + "post": { + "summary": "Allow or deny the message that AutoMod flagged for review.", + "description": "Allow or deny the message that AutoMod flagged for review. For information about AutoMod, see [How to Use AutoMod](https://help.twitch.tv/s/article/how-to-use-automod).\n\nTo get messages that AutoMod is holding for review, subscribe to the **automod-queue..** [topic](https://dev.twitch.tv/docs/pubsub#topics) using [PubSub](https://dev.twitch.tv/docs/pubsub). PubSub sends a notification to your app when AutoMod holds a message for review.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:automod** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Manage Held AutoMod Messages", + "url": "https://dev.twitch.tv/docs/api/reference#manage-held-automod-messages" + }, + "operationId": "manage-held-automod-messages", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ManageHeldAutoModMessagesBody" + }, + "examples": { + "Example": { + "value": { + "user_id": "9327994", + "msg_id": "836013710", + "action": "ALLOW" + } + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully approved or denied the message.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/automod/message' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"user_id\": \"9327994\",\n \"msg_id\": \"836013710\",\n \"action\": \"ALLOW\"\n}'\n```" + }, + "400": { + "description": "* The value in the `action` field is not valid.\n* The `user_id` field is required.\n* The `msg_id` field is required.\n* The `action` field is required." + }, + "401": { + "description": "* The ID in `user_id` must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:automod** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _user\\_id_ is not one of the broadcaster's moderators." + }, + "404": { + "description": "* The message specified in the `msg_id` field was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:automod" + ] + } + ] + } + }, + "/moderation/automod/settings": { + "get": { + "summary": "Gets the broadcaster’s AutoMod settings.", + "description": "Gets the broadcaster’s AutoMod settings. The settings are used to automatically block inappropriate or harassing messages from appearing in the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:read:automod\\_settings** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get AutoMod Settings", + "url": "https://dev.twitch.tv/docs/api/reference#get-automod-settings" + }, + "operationId": "get-automod-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose AutoMod settings you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s AutoMod settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAutoModSettingsResponse" + }, + "examples": { + "Example": { + "description": "Shows what the response looks like if the broadcaster hasn’t enabled AutoMod (none of the settings are set).\n\n_Request:_\n\nGets the broadcaster’s AutoMod settings.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/automod/settings?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "overall_level": null, + "disability": 0, + "aggression": 0, + "sexuality_sex_or_gender": 0, + "misogyny": 0, + "bullying": 0, + "swearing": 0, + "race_ethnicity_or_religion": 0, + "sex_based_terms": 0 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:read:automod\\_settings** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:automod_settings" + ] + } + ] + }, + "put": { + "summary": "Updates the broadcaster’s AutoMod settings.", + "description": "Updates the broadcaster’s AutoMod settings. The settings are used to automatically block inappropriate or harassing messages from appearing in the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:automod\\_settings** scope.\n\n__Request Body:__\n\nBecause PUT is an overwrite operation, you must include all the fields that you want set after the operation completes. Typically, you’ll send a GET request, update the fields you want to change, and pass that object in the PUT request.\n\nYou may set either `overall_level` or the individual settings like `aggression`, but not both.\n\nSetting `overall_level` applies default values to the individual settings. However, setting `overall_level` to 4 does not necessarily mean that it applies 4 to all the individual settings. Instead, it applies a set of recommended defaults to the rest of the settings. For example, if you set `overall_level` to 2, Twitch provides some filtering on discrimination and sexual content, but more filtering on hostility (see the first example response).\n\nIf `overall_level` is currently set and you update `swearing` to 3, `overall_level` will be set to **null** and all settings other than `swearing` will be set to 0\\. The same is true if individual settings are set and you update `overall_level` to 3 — all the individual settings are updated to reflect the default level.\n\nNote that if you set all the individual settings to values that match what `overall_level` would have set them to, Twitch changes AutoMod to use the default AutoMod level instead of using the individual settings.\n\nValid values for all levels are from 0 (no filtering) through 4 (most aggressive filtering). These levels affect how aggressively AutoMod holds back messages for moderators to review before they appear in chat or are denied (not shown).", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Update AutoMod Settings", + "url": "https://dev.twitch.tv/docs/api/reference#update-automod-settings" + }, + "operationId": "update-automod-settings", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose AutoMod settings you want to update.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAutoModSettingsBody" + }, + "examples": { + "Example 1": { + "value": { + "overall_level": 3 + }, + "description": "This example updates the `overall_level` setting to 3." + }, + "Example 2": { + "value": { + "overall_level": 3 + }, + "description": "This example updates the `overall_level` setting to 3." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the broadcaster’s AutoMod settings.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAutoModSettingsResponse" + }, + "examples": { + "Example 1": { + "description": "Notice in the response that not all settings are set to level 3.\n\n_Request:_\n\nThis example updates the `overall_level` setting to 3.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/moderation/automod/settings?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n​​-H 'Content-Type: application/json' \\\n-d '{\"overall_level\":3}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "overall_level": 3, + "disability": 3, + "aggression": 3, + "sexuality_sex_or_gender": 3, + "misogyny": 3, + "bullying": 2, + "swearing": 0, + "race_ethnicity_or_religion": 3, + "sex_based_terms": 3 + } + ] + } + }, + "Example 2": { + "description": "If `overall_level` is set to 3 and you try to change `swearing` to 2, all other settings are set to 0\\. If the goal was to change the `swearing` setting and leave all the others unchanged, the request must have included all the other settings as well.\n\n_Request:_\n\nThis example updates the `overall_level` setting to 3.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/moderation/automod/settings?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n​​-H 'Content-Type: application/json' \\\n-d '{\"overall_level\":3}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "overall_level": null, + "disability": 0, + "aggression": 0, + "sexuality_sex_or_gender": 0, + "misogyny": 0, + "bullying": 0, + "swearing": 2, + "race_ethnicity_or_religion": 0, + "sex_based_terms": 0 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ is required.\n* The _moderator\\_id_ is required.\n* 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.\n* The value of one or more AutoMod settings is not valid." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:automod\\_settings** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:automod_settings" + ] + } + ] + } + }, + "/moderation/banned": { + "get": { + "summary": "Gets all users that the broadcaster banned or put in a timeout.", + "description": "Gets all users that the broadcaster banned or put in a timeout.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderation:read** or **moderator:manage:banned\\_users** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Banned Users", + "url": "https://dev.twitch.tv/docs/api/reference#get-banned-users" + }, + "operationId": "get-banned-users", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose list of banned users you want to get. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "A list of user IDs used to filter the results. To specify more than one ID, include this parameter for each user you want to get. For example, `user_id=1234&user_id=5678`. You may specify a maximum of 100 IDs. \n \nThe returned list includes only those users that were banned or put in a timeout. The list is returned in the same order that you specified the IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of banned users.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetBannedUsersResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/banned?broadcaster_id=198704263' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "user_id": "423374343", + "user_login": "glowillig", + "user_name": "glowillig", + "expires_at": "2022-03-15T02:00:28Z", + "created_at": "2022-03-15T01:30:28Z", + "reason": "Does not like pineapple on pizza.", + "moderator_id": "141981764", + "moderator_login": "twitchdev", + "moderator_name": "TwitchDev" + }, + { + "user_id": "424596340", + "user_login": "quotrok", + "user_name": "quotrok", + "expires_at": "2022-08-07T02:07:55Z", + "created_at": "2022-08-07T02:02:55Z", + "reason": "Inappropriate words.", + "moderator_id": "141981764", + "moderator_login": "twitchdev", + "moderator_name": "TwitchDev" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6IjEwMDQ3MzA2NDo4NjQwNjU3MToxSVZCVDFKMnY5M1BTOXh3d1E0dUdXMkJOMFcifX0" + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderation:read** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "moderation:read", + "moderator:manage:banned_users" + ] + } + ] + } + }, + "/moderation/bans": { + "post": { + "summary": "Bans a user from participating in a broadcaster’s chat room or puts them in a timeout.", + "description": "Bans a user from participating in the specified broadcaster’s chat room or puts them in a timeout.\n\nFor information about banning or putting users in a timeout, see [Ban a User](https://help.twitch.tv/s/article/how-to-manage-harassment-in-chat#TheBanFeature) and [Timeout a User](https://help.twitch.tv/s/article/how-to-manage-harassment-in-chat#TheTimeoutFeature).\n\nIf the user is currently in a timeout, you can call this endpoint to change the duration of the timeout or ban them altogether. If the user is currently banned, you cannot call this method to put them in a timeout instead.\n\nTo remove a ban or end a timeout, see [Unban user](https://dev.twitch.tv/docs/api/reference#unban-user).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:banned\\_users** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Ban User", + "url": "https://dev.twitch.tv/docs/api/reference#ban-user" + }, + "operationId": "ban-user", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose chat room the user is being banned from.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BanUserBody" + }, + "examples": { + "Example 1": { + "value": { + "data": { + "user_id": "9876", + "reason": "no reason" + } + }, + "description": "Bans a user (it doesn’t include the `duration` field)." + }, + "Example 2": { + "value": { + "data": { + "user_id": "9876", + "duration": 300, + "reason": "no reason" + } + }, + "description": "Puts a user in a 5-minute timeout." + }, + "Example 3": { + "value": { + "data": { + "user_id": "9876", + "duration": 300, + "reason": "no reason" + } + }, + "description": "Shows what happens if you try to place a banned user in a timeout. You can ban a user that’s already in a timeout but you can’t move a banned user into a timeout. To do this, you’d have to remove the ban and then place them in a timeout.\n\nYou’ll get the same response if you try to ban a user who is already banned." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully banned the user or placed them in a timeout.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BanUserResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nBans a user (it doesn’t include the `duration` field).\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"data\": {\"user_id\":\"9876\",\"reason\":\"no reason\"}}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "user_id": "9876", + "created_at": "2021-09-28T18:22:31Z", + "end_time": null + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nPuts a user in a 5-minute timeout.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"data\": {\"user_id\":\"9876\",\"duration\":300,\"reason\":\"no reason\"}}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "user_id": "9876", + "created_at": "2021-09-28T19:27:31Z", + "end_time": "2021-09-28T19:22:31Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required.\n* The `user_id` field is required.\n* The text in the `reason` field is too long.\n* The value in the `duration` field is not valid.\n* The user specified in the `user_id` field may not be banned.\n* The user specified in the `user_id` field may not be put in a timeout.\n* The user specified in the `user_id` field is already banned.", + "content": { + "application/json": { + "examples": { + "Example": { + "description": "_Request:_\n\nShows what happens if you try to place a banned user in a timeout. You can ban a user that’s already in a timeout but you can’t move a banned user into a timeout. To do this, you’d have to remove the ban and then place them in a timeout.\n\nYou’ll get the same response if you try to ban a user who is already banned.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"data\": {\"user_id\":\"9876\",\"duration\":300,\"reason\":\"no reason\"}}'\n```", + "value": { + "error": "Bad Request", + "status": 400, + "message": "user is already banned" + } + } + } + } + } + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:banned\\_users** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + }, + "409": { + "description": "* 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": { + "description": "* The app has exceeded the number of requests it may make per minute for this broadcaster." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:banned_users" + ] + } + ] + }, + "delete": { + "summary": "Removes the ban or timeout that was placed on the specified user.", + "description": "Removes the ban or timeout that was placed on the specified user.\n\nTo ban a user, see [Ban user](https://dev.twitch.tv/docs/api/reference#ban-user).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:banned\\_users** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Unban User", + "url": "https://dev.twitch.tv/docs/api/reference#unban-user" + }, + "operationId": "unban-user", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose chat room the user is banned from chatting in.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID of the user to remove the ban or timeout from.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the ban or timeout.\n\n__Examples__\n\n_Request:_\n\nRemoves a ban or timeout from a user.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678&user_id=5432' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required.\n* The _user\\_id_ query parameter is required.\n* The user specified in the _user\\_id_ query parameter is not banned.", + "content": { + "application/json": { + "examples": { + "Example": { + "description": "_Request:_\n\nTries to remove a ban or timeout from a user that is not currently banned or in a timeout.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/bans?broadcaster_id=1234&moderator_id=5678&user_id=5432' \\\n-H 'Authorization: Bearer 4a4x78f5wqvkybms7mxfist3jmzul' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```", + "value": { + "error": "Bad Request", + "status": 400, + "message": "user is not banned" + } + } + } + } + } + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:banned\\_users** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + }, + "409": { + "description": "* 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": { + "description": "* The app has exceeded the number of requests it may make per minute for this broadcaster." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:banned_users" + ] + } + ] + } + }, + "/moderation/unban_requests": { + "get": { + "summary": "NEW Gets a list of unban requests for a broadcaster’s channel.", + "description": "NEW Gets a list of unban requests for a broadcaster’s channel.\n\n__Authorization:__\n\n* Requires a user access token that includes the **moderator:read:unban\\_requests** or **moderator:manage:unban\\_requests** scope.\n* Query parameter `moderator_id` must match the `user_id` in the [user access token](https://dev.twitch.tv/docs/authentication/#user-access-tokens).", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Unban Requests", + "url": "https://dev.twitch.tv/docs/api/reference#get-unban-requests" + }, + "operationId": "get-unban-requests", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose channel is receiving unban requests.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s unban requests. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "status", + "in": "query", + "description": "Filter by a status. \n \n* pending\n* approved\n* denied\n* acknowledged\n* canceled", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID used to filter what unban requests are returned.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "Cursor used to get next page of results. Pagination object in response contains cursor value.", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in response", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of unban requests.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUnbanRequestsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the specified broadcaster.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/unban_requests?broadcaster_id=274637212&moderator_id=274637212&status=pending' \\\n​​​​​-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "moderator_id": "141981764", + "moderator_login": "twitchdev", + "moderator_name": "TwitchDev", + "user_id": "424596340", + "user_login": "quotrok", + "user_name": "quotrok", + "text": "Please unban me from the channel?", + "status": "pending", + "created_at": "2022-08-07T02:07:55Z", + "resolved_at": null, + "resolution_text": null + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6IjEwMDQ3MzA2NDo4NjQwNjU3MToxSVZCVDFKMnY5M1BTOXh3d1E0dUdXMkJOMFcifX0" + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _moderator\\_id_ query parameter is required.\n* The ID in the _moderator\\_id_ query parameter is not valid.\n* The pagination cursor is not valid." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:read:unban\\_requests** or **moderator:manage:unban\\_requests** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:unban_requests", + "moderator:manage:unban_requests" + ] + } + ] + }, + "patch": { + "summary": "NEW Resolves an unban request by approving or denying it.", + "description": "NEW Resolves an unban request by approving or denying it.\n\n__Authorization:__\n\n* Requires a user access token that includes the **moderator:manage:unban\\\\\\_requests** scope.\n* Query parameter `moderator_id` must match the `user_id` in the[user access token](https://dev.twitch.tv/docs/authentication/#user-access-tokens).", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Resolve Unban Requests", + "url": "https://dev.twitch.tv/docs/api/reference#resolve-unban-requests" + }, + "operationId": "resolve-unban-requests", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose channel is approving or denying the unban request.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s unban requests. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "unban_request_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s unban requests. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "status", + "in": "query", + "description": "Resolution status. \n \n* approved\n* denied", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "resolution_text", + "in": "query", + "description": "Message supplied by the unban request resolver", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully resolved the unban request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResolveUnbanRequestsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nApproving an unban request.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/moderation/unban_requests?broadcaster_id=274637212&moderator_id=274637212&unban_request_id=92af127c-7326-4483-a52b-b0daa0be61c01&status=approved' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'`\n```", + "value": { + "data": [ + { + "id": "92af127c-7326-4483-a52b-b0da0be61c01", + "broadcaster_name": "torpedo09", + "broadcaster_login": "torpedo09", + "broadcaster_id": "274637212", + "moderator_id": "141981764", + "moderator_login": "twitchdev", + "moderator_name": "TwitchDev", + "user_id": "424596340", + "user_login": "quotrok", + "user_name": "quotrok", + "text": "Please unban me from the channel?", + "status": "approved", + "created_at": "2022-08-07T02:07:55Z", + "resolved_at": "2022-08-09T02:07:55Z", + "resolution_text": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _moderator\\_id_ query parameter is required.\n* The ID in the _moderator\\_id_ query parameter is not valid.\n* The pagination cursor is not valid.\n* The broadcaster is not receiving unban requests\n* Invalid requested update" + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:unban\\_requests** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "The unban request ID was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:unban_requests" + ] + } + ] + } + }, + "/moderation/blocked_terms": { + "get": { + "summary": "Gets the broadcaster’s list of non-private, blocked words or phrases.", + "description": "Gets the broadcaster’s list of non-private, blocked words or phrases. These are the terms that the broadcaster or moderator added manually or that were denied by AutoMod.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:read:blocked\\_terms** or **moderator:manage:blocked\\_terms** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Blocked Terms", + "url": "https://dev.twitch.tv/docs/api/reference#get-blocked-terms" + }, + "operationId": "get-blocked-terms", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose blocked terms you’re getting.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of blocked terms.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetBlockedTermsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the last 10 blocked terms (see the _first_ query parameter) that were added.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/blocked_terms?broadcaster_id=1234&moderator_id=5678&first=10' \\\n-H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "id": "520e4d4e-0cda-49c7-821e-e5ef4f88c2f2", + "text": "A phrase I’m not fond of", + "created_at": "2021-09-29T19:45:37Z", + "updated_at": "2021-09-29T19:45:37Z", + "expires_at": null + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6I..." + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header must contain a user access token.\n* The user access token must include the **moderator:read:blocked\\_terms** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:blocked_terms", + "moderator:manage:blocked_terms" + ] + } + ] + }, + "post": { + "summary": "Adds a word or phrase to the broadcaster’s list of blocked terms.", + "description": "Adds a word or phrase to the broadcaster’s list of blocked terms. These are the terms that the broadcaster doesn’t want used in their chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:blocked\\_terms** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Add Blocked Term", + "url": "https://dev.twitch.tv/docs/api/reference#add-blocked-term" + }, + "operationId": "add-blocked-term", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the list of blocked terms.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddBlockedTermBody" + }, + "examples": { + "Example 1": { + "value": { + "text": "A phrase I’m not fond of" + }, + "description": "Adds a blocked term. Adding the same term again will return the previously added term." + }, + "Example 2": { + "value": { + "text": "crac*" + }, + "description": "Adds a term that uses the wildcard character (\\*)." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully retrieved the list of blocked terms.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddBlockedTermResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nAdds a blocked term. Adding the same term again will return the previously added term.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/blocked_terms?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 789nj68b49pwqs9nh2y2jrlgzju3f' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"text\":\"A phrase I’m not fond of\"}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "713936733", + "moderator_id": "713936733", + "id": "3bb6e5d3-afb1-416c-ad4e-21af970ccfe7", + "text": "A phrase I’m not fond of", + "created_at": "2021-09-29T15:36:45Z", + "updated_at": "2021-09-29T15:36:45Z", + "expires_at": null + } + ] + } + }, + "Example 2": { + "description": "_Request:_\n\nAdds a term that uses the wildcard character (\\*).\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/blocked_terms?broadcaster_id=1234&moderator_id=5678' \\\n-H 'Authorization: Bearer 789nj68b49pwqs9nh2y2jrlgzju3f' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh' \\\n-H 'Content-Type: application/json' \\\n-d '{\"text\":\"crac*\"}'\n```", + "value": { + "data": [ + { + "broadcaster_id": "1234", + "moderator_id": "5678", + "id": "520e4d4e-0cda-49c7-821e-e5ef4f88c2f2", + "text": "crac*", + "created_at": "2021-09-29T19:45:37Z", + "updated_at": "2021-09-29T19:45:37Z", + "expires_at": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required.\n* The `text` field is required.\n* The length of the term in the `text` field is either too short or too long." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:blocked\\_terms** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:blocked_terms" + ] + } + ] + }, + "delete": { + "summary": "Removes the word or phrase from the broadcaster’s list of blocked terms.", + "description": "Removes the word or phrase from the broadcaster’s list of blocked terms.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:blocked\\_terms** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Remove Blocked Term", + "url": "https://dev.twitch.tv/docs/api/reference#remove-blocked-term" + }, + "operationId": "remove-blocked-term", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the list of blocked terms.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the blocked term to remove from the broadcaster’s list of blocked terms.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the blocked term. Also returned if the ID is not found.\n\n__Examples__\n\n_Request:_\n\nDeletes the specified blocked term.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/blocked_terms?broadcaster_id=1234&moderator_id=5678&id=c9fc79b8-0f63-4ef7-9d38-efd811e74ac2' \\ \n-H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _moderator\\_id_ query parameter is required.\n* The _id_ query parameter is required." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:blocked\\_terms** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:blocked_terms" + ] + } + ] + } + }, + "/moderation/chat": { + "delete": { + "summary": "Removes a single chat message or all chat messages from the broadcaster’s chat room.", + "description": "Removes a single chat message or all chat messages from the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:chat\\_messages** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Delete Chat Messages", + "url": "https://dev.twitch.tv/docs/api/reference#delete-chat-messages" + }, + "operationId": "delete-chat-messages", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the chat room to remove messages from.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that has permission to moderate the broadcaster’s chat room. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "message_id", + "in": "query", + "description": "The ID of the message to remove. The `id` tag in the [PRIVMSG](https://dev.twitch.tv/docs/irc/tags#privmsg-tags) tag contains the message’s ID. Restrictions: \n \n* The message must have been created within the last 6 hours.\n* The message must not belong to the broadcaster.\n* The message must not belong to another moderator.\n \nIf not specified, the request removes all messages in the broadcaster’s chat room.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully removed the specified messages.\n\n__Examples__\n\n_Request:_\n\nRemoves all messages from the broadcaster’s chat room (doesn’t include the _message\\_id_ query parameter).\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/chat?broadcaster_id=11111&moderator_id=44444' \\\n-H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```\n\nRemoves the specified message from the broadcaster’s chat room.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/chat?broadcaster_id=11111&moderator_id=44444&message_id=abc-123-def' \\ \n-H 'Authorization: Bearer f4otqljtpbpg24v41v9gechs4yvwy' \\\n-H 'Client-Id: t214nt8z1rdtbj69hyarjvh5mi6fh'\n```" + }, + "400": { + "description": "* You may not delete another moderator's messages.\n* You may not delete the broadcaster's messages." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **moderator:manage:chat\\_messages** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + }, + "404": { + "description": "* The ID in _message\\_id_ was not found.\n* The specified message was created more than 6 hours ago." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:chat_messages" + ] + } + ] + } + }, + "/moderation/channels": { + "get": { + "summary": "Gets a list of channels that the specified user has moderator privileges in.", + "description": "Gets a list of channels that the specified user has moderator privileges in.\n\n__Authorization:__\n\n* Query parameter `user_id` must match the user ID in the [User-Access token](https://dev.twitch.tv/docs/authentication#user-access-tokens)\n* Requires OAuth Scope: `user:read:moderated_channels`", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Moderated Channels", + "url": "https://dev.twitch.tv/docs/api/reference#get-moderated-channels" + }, + "operationId": "get-moderated-channels", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "A user’s ID. Returns the list of channels that this user has moderator privileges in. This ID must match the user ID in the user OAuth token", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The Pagination object in the response contains the cursor’s value.", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. \n \nMinimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of moderated channels.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetModeratedChannelsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/channels?user_id=931931' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "broadcaster_id": "12345", + "broadcaster_login": "grateful_broadcaster", + "broadcaster_name": "Grateful_Broadcaster" + }, + { + "broadcaster_id": "98765", + "broadcaster_login": "bashfulgamer", + "broadcaster_name": "BashfulGamer" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6IjEwMDQ3MzA2NDo4NjQwNjU3MToxSVZCVDFKMnY5M1BTOXh3d1E0dUdXMkJOMFcifX0" + } + } + } + } + } + } + }, + "400": { + "description": "" + }, + "401": { + "description": "" + }, + "500": { + "description": "" + } + } + } + }, + "/moderation/moderators": { + "get": { + "summary": "Gets all users allowed to moderate the broadcaster’s chat room.", + "description": "Gets all users allowed to moderate the broadcaster’s chat room.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderation:read** scope. If your app also adds and removes moderators, you can use the **channel:manage:moderators** scope instead.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Moderators", + "url": "https://dev.twitch.tv/docs/api/reference#get-moderators" + }, + "operationId": "get-moderators", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose list of moderators you want to get. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "A list of user IDs used to filter the results. To specify more than one ID, include this parameter for each moderator you want to get. For example, `user_id=1234&user_id=5678`. You may specify a maximum of 100 IDs. \n \nThe returned list includes only the users from the list who are moderators in the broadcaster’s channel. The list is returned in the same order as you specified the IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of moderators.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetModeratorsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/moderators?broadcaster_id=198704263' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "user_id": "424596340", + "user_login": "quotrok", + "user_name": "quotrok" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6IjEwMDQ3MzA2NDo4NjQwNjU3MToxSVZCVDFKMnY5M1BTOXh3d1E0dUdXMkJOMFcifX0" + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID found in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderation:read** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "moderation:read", + "channel:manage:moderators" + ] + } + ] + }, + "post": { + "summary": "Adds a moderator to the broadcaster’s chat room.", + "description": "Adds a moderator to the broadcaster’s chat room.\n\n**Rate Limits**: The broadcaster may add a maximum of 10 moderators within a 10-second window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:moderators** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Add Channel Moderator", + "url": "https://dev.twitch.tv/docs/api/reference#add-channel-moderator" + }, + "operationId": "add-channel-moderator", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the chat room. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID of the user to add as a moderator in the broadcaster’s chat room.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully added the moderator.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/moderation/moderators?broadcaster_id=11111&user_id=44444' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The ID in _broadcaster\\_id_ was not found.\n* The ID in _user\\_id_ was not found.\n* The user in _user\\_id_ is already a moderator in the broadcaster's chat room.\n* The user in _user\\_id_ cannot become a moderator because they're banned from the channel." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:moderators** scope.\n* The access token is not valid.\n* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "422": { + "description": "* 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": { + "description": "* The broadcaster has exceeded the number of requests allowed within a 10-second window. See this endpoint's rate limits." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:moderators" + ] + } + ] + }, + "delete": { + "summary": "Removes a moderator from the broadcaster’s chat room.", + "description": "Removes a moderator from the broadcaster’s chat room.\n\n**Rate Limits**: The broadcaster may remove a maximum of 10 moderators within a 10-second window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:moderators** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Remove Channel Moderator", + "url": "https://dev.twitch.tv/docs/api/reference#remove-channel-moderator" + }, + "operationId": "remove-channel-moderator", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the chat room. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID of the user to remove as a moderator from the broadcaster’s chat room.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the moderator.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/moderation/moderators?broadcaster_id=11111&user_id=44444' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The ID in _broadcaster\\_id_ was not found.\n* The ID in _user\\_id_ was not found.\n* The user in _user\\_id_ is not a moderator in the broadcaster's chat room." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:moderators** scope.\n* The access token is not valid.\n* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "429": { + "description": "* The broadcaster has exceeded the number of requests allowed within a 10-second window. See this endpoint's rate limits." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:moderators" + ] + } + ] + } + }, + "/channels/vips": { + "get": { + "summary": "Gets a list of the broadcaster’s VIPs.", + "description": "Gets a list of the broadcaster’s VIPs.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:vips** scope. If your app also adds and removes VIP status, you can use the **channel:manage:vips** scope instead.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get VIPs", + "url": "https://dev.twitch.tv/docs/api/reference#get-vips" + }, + "operationId": "get-vips", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "Filters the list for specific VIPs. To specify more than one user, include the _user\\_id_ parameter for each user to get. For example, `&user_id=1234&user_id=5678`. The maximum number of IDs that you may specify is 100\\. Ignores the ID of those users in the list that aren’t VIPs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose list of VIPs you want to get. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s list of VIPs.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetVIPsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets a list of the broadcaster’s VIPs\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```\n\nGets a filtered list of the broadcaster’s VIPs. The list in the response contains only those users that are VIPs.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123&user_id=456&user_id=678' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "user_id": "11111", + "user_name": "UserDisplayName", + "user_login": "userloginname" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19" + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _user\\_id_ query parameter is not valid.\n* The number of _user\\_id_ query parameters exceeds the maximum allowed." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:vips** or **channel:manage:vips** scope.\n* The OAuth token is not valid.\n* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:vips", + "channel:manage:vips" + ] + } + ] + }, + "post": { + "summary": "Adds the specified user as a VIP in the broadcaster’s channel.", + "description": "Adds the specified user as a VIP in the broadcaster’s channel.\n\n**Rate Limits**: The broadcaster may add a maximum of 10 VIPs within a 10-second window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:vips** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Add Channel VIP", + "url": "https://dev.twitch.tv/docs/api/reference#add-channel-vip" + }, + "operationId": "add-channel-vip", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user to give VIP status to.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s adding the user as a VIP. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully added the VIP.\n\n__Examples__\n\n_Request:_\n\nAdds a VIP to the broadcaster’s chat room.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123&user_id=456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The user in the _user\\_id_ query parameter is blocked from the broadcaster's channel.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The ID in the _user\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:vips** scope.\n* The OAuth token is not valid.\n* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "403": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token." + }, + "404": { + "description": "* The ID in _broadcaster\\_id_ was not found.\n* The ID in _user\\_id_ was not found." + }, + "409": { + "description": "The 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": { + "description": "* 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)).\n* The user in the _user\\_id_ query parameter is already a VIP." + }, + "425": { + "description": "The broadcaster must complete the Build a Community requirement before they may assign VIPs." + }, + "429": { + "description": "The broadcaster exceeded the number of VIP that they may add within a 10-second window. See Rate Limits for this endpoint above." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:vips" + ] + } + ] + }, + "delete": { + "summary": "Removes the specified user as a VIP in the broadcaster’s channel.", + "description": "Removes the specified user as a VIP in the broadcaster’s channel.\n\nIf the broadcaster is removing the user’s VIP status, the ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token; otherwise, if the user is removing their VIP status themselves, the ID in the _user\\_id_ query parameter must match the user ID in the access token.\n\n**Rate Limits**: The broadcaster may remove a maximum of 10 VIPs within a 10-second window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:vips** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Remove Channel VIP", + "url": "https://dev.twitch.tv/docs/api/reference#remove-channel-vip" + }, + "operationId": "remove-channel-vip", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user to remove VIP status from.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster who owns the channel where the user has VIP status.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the VIP status from the user.\n\n__Examples__\n\n_Request:_\n\nRemoves the VIP user from the broadcaster’s channel.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/channels/vips?broadcaster_id=123&user_id=456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The ID in _broadcaster\\_id_ is not valid.\n* The ID in _user\\_id_ is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:vips** scope.\n* The OAuth token is not valid.\n* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the OAuth token." + }, + "403": { + "description": "* The user in _broadcaster\\_id_ doesn't have permission to remove the user's VIP status." + }, + "404": { + "description": "* The ID in _broadcaster\\_id_ was not found.\n* The ID in _user\\_id_ was not found." + }, + "422": { + "description": "* The user in _user\\_id_ is not a VIP in the broadcaster's channel." + }, + "429": { + "description": "The broadcaster exceeded the number of VIPs that they may remove within a 10-second window. See Rate Limits for this endpoint above." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:vips" + ] + } + ] + } + }, + "/moderation/shield_mode": { + "put": { + "summary": "Activates or deactivates the broadcaster’s Shield Mode.", + "description": "Activates or deactivates the broadcaster’s Shield Mode.\n\nTwitch’s Shield Mode feature is like a panic button that broadcasters can push to protect themselves from chat abuse coming from one or more accounts. When activated, Shield Mode applies the overrides that the broadcaster configured in the Twitch UX. If the broadcaster hasn’t configured Shield Mode, it applies default overrides.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:manage:shield\\_mode** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Update Shield Mode Status", + "url": "https://dev.twitch.tv/docs/api/reference#update-shield-mode-status" + }, + "operationId": "update-shield-mode-status", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose Shield Mode you want to activate or deactivate.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that is one of the broadcaster’s moderators. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateShieldModeStatusBody" + }, + "examples": { + "Example": { + "value": { + "is_active": false + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the broadcaster’s Shield Mode status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateShieldModeStatusResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/moderation/shield_mode?broadcaster_id=12345&moderator_id=98765' \\\n-H 'Authorization: Bearer kpvy3cjboypmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0yan9c87zr6t' \\\n-H 'Content-Type: application/json' \\\n-d '{\"is_active\":false}'\n```", + "value": { + "data": [ + { + "is_active": false, + "moderator_id": "98765", + "moderator_name": "SimplySimple", + "moderator_login": "simplysimple", + "last_activated_at": "2022-07-26T17:16:03.123Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The `is_active` field is required.\n* The value in the `is_active` field is not valid." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:manage:shield\\_mode** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:manage:shield_mode" + ] + } + ] + }, + "get": { + "summary": "Gets the broadcaster’s Shield Mode activation status.", + "description": "Gets the broadcaster’s Shield Mode activation status.\n\nTo receive notification when the broadcaster activates and deactivates Shield Mode, subscribe to the [channel.shield\\_mode.begin](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelshield%5Fmodebegin) and [channel.shield\\_mode.end](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelshield%5Fmodeend) subscription types.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **moderator:read:shield\\_mode** or **moderator:manage:shield\\_mode** scope.", + "tags": [ + "Moderation" + ], + "externalDocs": { + "description": "Get Shield Mode Status", + "url": "https://dev.twitch.tv/docs/api/reference#get-shield-mode-status" + }, + "operationId": "get-shield-mode-status", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose Shield Mode activation status you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "moderator_id", + "in": "query", + "description": "The ID of the broadcaster or a user that is one of the broadcaster’s moderators. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s Shield Mode activation status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetShieldModeStatusResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/moderation/shield_mode?broadcaster_id=12345&moderator_id=98765' \\\n-H 'Authorization: Bearer kpvy3cjboypmiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfn0yan9c87zr6t'\n```", + "value": { + "data": [ + { + "is_active": true, + "moderator_id": "98765", + "moderator_name": "SimplySimple", + "moderator_login": "simplysimple", + "last_activated_at": "2022-07-26T17:16:03.123Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in _moderator\\_id_ must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **moderator:read:shield\\_mode** or **moderator:manage:shield\\_mode** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* The user in _moderator\\_id_ is not one of the broadcaster's moderators." + } + }, + "security": [ + { + "twitch_auth": [ + "moderator:read:shield_mode", + "moderator:manage:shield_mode" + ] + } + ] + } + }, + "/polls": { + "get": { + "summary": "Gets a list of polls that the broadcaster created.", + "description": "Gets a list of polls that the broadcaster created.\n\nPolls are available for 90 days after they’re created.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:polls** or **channel:manage:polls** scope.", + "tags": [ + "Polls" + ], + "externalDocs": { + "description": "Get Polls", + "url": "https://dev.twitch.tv/docs/api/reference#get-polls" + }, + "operationId": "get-polls", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that created the polls. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "A list of IDs that identify the polls to return. To specify more than one ID, include this parameter for each poll you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 20 IDs. \n \nSpecify this parameter only if you want to filter the list that the request returns. The endpoint ignores duplicate IDs and those not owned by this broadcaster.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 20 items per page. The default is 20.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster's polls.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPollsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the specified broadcaster’s list of polls.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/polls?broadcaster_id=141981764&id=ed961efd-8a3f-4cf5-a9d0-e616c590cd2a' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "ed961efd-8a3f-4cf5-a9d0-e616c590cd2a", + "broadcaster_id": "55696719", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Heads or Tails?", + "choices": [ + { + "id": "4c123012-1351-4f33-84b7-43856e7a0f47", + "title": "Heads", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + }, + { + "id": "279087e3-54a7-467e-bcd0-c1393fcea4f0", + "title": "Tails", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + } + ], + "bits_voting_enabled": false, + "bits_per_vote": 0, + "channel_points_voting_enabled": false, + "channel_points_per_vote": 0, + "status": "ACTIVE", + "duration": 1800, + "started_at": "2021-03-19T06:08:33.871278372Z" + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **channel:read:polls** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header must match the client ID specified in the access token." + }, + "404": { + "description": "* None of the IDs in the _id_ query parameters were found." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:polls", + "channel:manage:polls" + ] + } + ] + }, + "post": { + "summary": "Creates a poll that viewers in the broadcaster’s channel can vote on.", + "description": "Creates a poll that viewers in the broadcaster’s channel can vote on.\n\nThe poll begins as soon as it’s created. You may run only one poll at a time.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:polls** scope.", + "tags": [ + "Polls" + ], + "externalDocs": { + "description": "Create Poll", + "url": "https://dev.twitch.tv/docs/api/reference#create-poll" + }, + "operationId": "create-poll", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePollBody" + }, + "examples": { + "Example": { + "value": { + "broadcaster_id": "141981764", + "title": "Heads or Tails?", + "choices": [ + { + "title": "Heads" + }, + { + "title": "Tails" + } + ], + "channel_points_voting_enabled": true, + "channel_points_per_vote": 100, + "duration": 1800 + }, + "description": "Creates a poll for the specified broadcaster." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created the poll.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePollResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nCreates a poll for the specified broadcaster.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/polls' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"broadcaster_id\":\"141981764\",\n \"title\":\"Heads or Tails?\",\n \"choices\":[{\n \"title\":\"Heads\"\n },\n {\n \"title\":\"Tails\"\n }],\n \"channel_points_voting_enabled\":true,\n \"channel_points_per_vote\":100,\n \"duration\":1800\n}'\n```", + "value": { + "data": [ + { + "id": "ed961efd-8a3f-4cf5-a9d0-e616c590cd2a", + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Heads or Tails?", + "choices": [ + { + "id": "4c123012-1351-4f33-84b7-43856e7a0f47", + "title": "Heads", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + }, + { + "id": "279087e3-54a7-467e-bcd0-c1393fcea4f0", + "title": "Tails", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + } + ], + "bits_voting_enabled": false, + "bits_per_vote": 0, + "channel_points_voting_enabled": true, + "channel_points_per_vote": 100, + "status": "ACTIVE", + "duration": 1800, + "started_at": "2021-03-19T06:08:33.871278372Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `broadcaster_id` field is required.\n* The `title` field is required.\n* The `choices` field is required.\n* The `duration` field is required.\n* The value in `duration` is outside the allowed range of values.\n* The value in `channel_points_per_vote` is outside the allowed range of values.\n* The value in `bits_per_vote` is outside the allowed range of values.\n* The poll's `title` is too long.\n* The choice's `title` is too long.\n* The choice's `title` failed AutoMod checks.\n* The number of choices in the poll may not be less than 2 or greater that 5.\n* The broadcaster already has a poll that's running; you may not create another poll until the current poll completes." + }, + "401": { + "description": "* The ID in `broadcaster_id` must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token is missing the **channel:manage:polls** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:polls" + ] + } + ] + }, + "patch": { + "summary": "End an active poll.", + "description": "Ends an active poll. You have the option to end it or end it and archive it.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:polls** scope.", + "tags": [ + "Polls" + ], + "externalDocs": { + "description": "End Poll", + "url": "https://dev.twitch.tv/docs/api/reference#end-poll" + }, + "operationId": "end-poll", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPollBody" + }, + "examples": { + "Example": { + "value": { + "broadcaster_id": "141981764", + "id": "ed961efd-8a3f-4cf5-a9d0-e616c590cd2a", + "status": "TERMINATED" + }, + "description": "Ends the specific poll, but allows the results to be visible for viewers." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully ended the poll.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPollResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nEnds the specific poll, but allows the results to be visible for viewers.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/polls' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"broadcaster_id\":\"141981764\",\n \"id\":\"ed961efd-8a3f-4cf5-a9d0-e616c590cd2a\",\n \"status\":\"TERMINATED\"\n}'\n```", + "value": { + "data": [ + { + "id": "ed961efd-8a3f-4cf5-a9d0-e616c590cd2a", + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Heads or Tails?", + "choices": [ + { + "id": "4c123012-1351-4f33-84b7-43856e7a0f47", + "title": "Heads", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + }, + { + "id": "279087e3-54a7-467e-bcd0-c1393fcea4f0", + "title": "Tails", + "votes": 0, + "channel_points_votes": 0, + "bits_votes": 0 + } + ], + "bits_voting_enabled": false, + "bits_per_vote": 0, + "channel_points_voting_enabled": true, + "channel_points_per_vote": 100, + "status": "TERMINATED", + "duration": 1800, + "started_at": "2021-03-19T06:08:33.871278372Z", + "ended_at": "2021-03-19T06:11:26.746889614Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `broadcaster_id` field is required.\n* The `id` field is required.\n* The `status` field is required.\n* The value in the `status` field is not valid.\n* The poll must be active to terminate or archive it." + }, + "401": { + "description": "* The ID in `broadcaster_id` must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:polls** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header must match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:polls" + ] + } + ] + } + }, + "/predictions": { + "get": { + "summary": "Gets a list of Channel Points Predictions that the broadcaster created.", + "description": "Gets a list of Channel Points Predictions that the broadcaster created.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:predictions** or **channel:manage:predictions** scope.", + "tags": [ + "Predictions" + ], + "externalDocs": { + "description": "Get Predictions", + "url": "https://dev.twitch.tv/docs/api/reference#get-predictions" + }, + "operationId": "get-predictions", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose predictions you want to get. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the prediction to get. To specify more than one ID, include this parameter for each prediction you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 25 IDs. The endpoint ignores duplicate IDs and those not owned by the broadcaster.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 25 items per page. The default is 20.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of predictions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPredictionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the specified broadcaster’s list of predictions.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/predictions?broadcaster_id=55696719&id=d6676d5c-c86e-44d2-bfc4-100fb48f0656' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "d6676d5c-c86e-44d2-bfc4-100fb48f0656", + "broadcaster_id": "55696719", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Will there be any leaks today?", + "winning_outcome_id": null, + "outcomes": [ + { + "id": "021e9234-5893-49b4-982e-cfe9a0aaddd9", + "title": "Yes", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "BLUE" + }, + { + "id": "ded84c26-13cb-4b48-8cb5-5bae3ec3a66e", + "title": "No", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "PINK" + } + ], + "prediction_window": 600, + "status": "ACTIVE", + "created_at": "2021-04-28T16:03:06.320848689Z", + "ended_at": null, + "locked_at": null + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:predictions** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:predictions", + "channel:manage:predictions" + ] + } + ] + }, + "post": { + "summary": "Create a Channel Points Prediction.", + "description": "Creates a Channel Points Prediction.\n\nWith a Channel Points Prediction, the broadcaster poses a question and viewers try to predict the outcome. The prediction runs as soon as it’s created. The broadcaster may run only one prediction at a time.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:predictions** scope.", + "tags": [ + "Predictions" + ], + "externalDocs": { + "description": "Create Prediction", + "url": "https://dev.twitch.tv/docs/api/reference#create-prediction" + }, + "operationId": "create-prediction", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePredictionBody" + }, + "examples": { + "Example": { + "value": { + "broadcaster_id": "141981764", + "title": "Any leeks in the stream?", + "outcomes": [ + { + "title": "Yes, give it time." + }, + { + "title": "Definitely not." + } + ], + "prediction_window": 120 + }, + "description": "Creates a Channel Points Prediction for the specified broadcaster." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created the Channel Points Prediction.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePredictionResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nCreates a Channel Points Prediction for the specified broadcaster.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/predictions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"broadcaster_id\": \"141981764\",\n \"title\": \"Any leeks in the stream?\",\n \"outcomes\": [\n {\n \"title\": \"Yes, give it time.\"\n },\n {\n \"title\": \"Definitely not.\"\n }\n ],\n \"prediction_window\": 120\n}'\n```", + "value": { + "data": [ + { + "id": "bc637af0-7766-4525-9308-4112f4cbf178", + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Any leeks in the stream?", + "winning_outcome_id": null, + "outcomes": [ + { + "id": "73085848-a94d-4040-9d21-2cb7a89374b7", + "title": "Yes, give it time.", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "BLUE" + }, + { + "id": "906b70ba-1f12-47ea-9e95-e5f93d20e9cc", + "title": "Definitely not.", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "PINK" + } + ], + "prediction_window": 120, + "status": "ACTIVE", + "created_at": "2021-04-28T17:11:22.595914172Z", + "ended_at": null, + "locked_at": null + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `broadcaster_id` field is required.\n* The `title` field is required.\n* The `outcomes` field is required.\n* The `prediction_window` field is required.\n* The value in `prediction_window` is outside the allowed range of values.\n* The prediction's `title` is too long.\n* The outcome's `title` is too long.\n* The outcome's `title` failed AutoMod checks.\n* There must be 2 outcomes in the prediction.\n* The broadcaster already has a prediction that's running; you may not create another prediction until the current prediction is resolved or canceled." + }, + "401": { + "description": "* The ID in `broadcaster_id` must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:predictions** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "429": { + "description": "" + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:predictions" + ] + } + ] + }, + "patch": { + "summary": "Locks, resolves, or cancels a Channel Points Prediction.", + "description": "Locks, resolves, or cancels a Channel Points Prediction.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:predictions** scope.", + "tags": [ + "Predictions" + ], + "externalDocs": { + "description": "End Prediction", + "url": "https://dev.twitch.tv/docs/api/reference#end-prediction" + }, + "operationId": "end-prediction", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPredictionBody" + } + } + } + }, + "responses": { + "200": { + "description": "Successfully ended the prediction.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPredictionResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nResolves the specified Channel Points Prediction.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/predictions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"broadcaster_id\": \"141981764\",\n \"id\": \"bc637af0-7766-4525-9308-4112f4cbf178\",\n \"status\": \"RESOLVED\",\n \"winning_outcome_id\": \"73085848-a94d-4040-9d21-2cb7a89374b7\"\n}'\n```", + "value": { + "data": [ + { + "id": "bc637af0-7766-4525-9308-4112f4cbf178", + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "title": "Will we win all the games?", + "winning_outcome_id": "73085848-a94d-4040-9d21-2cb7a89374b7", + "outcomes": [ + { + "id": "73085848-a94d-4040-9d21-2cb7a89374b7", + "title": "yes", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "BLUE" + }, + { + "id": "86010b2e-9764-4136-9359-fd1c9c5a8033", + "title": "no", + "users": 0, + "channel_points": 0, + "top_predictors": null, + "color": "PINK" + } + ], + "prediction_window": 120, + "status": "RESOLVED", + "created_at": "2021-04-28T21:48:19.480371331Z", + "ended_at": "2021-04-28T21:54:24.026833954Z", + "locked_at": "2021-04-28T21:48:34.636685705Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `broadcaster_id` field is required.\n* The `id` field is required.\n* The `status` field is required.\n* The `winning_outcome_id` field is required if `status` is RESOLVED.\n* The value in the `status` field is not valid.\n* To update the prediction's status to RESOLVED or CANCELED, its current status must be ACTIVE or LOCKED.\n* To update the prediction's status to LOCKED, its current status must be ACTIVE." + }, + "401": { + "description": "* The ID in `broadcaster_id` must match the user ID in the OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:predictions** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The prediction in the `id` field was not found.\n* The outcome in the `winning_outcome_id` field was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:predictions" + ] + } + ] + } + }, + "/raids": { + "post": { + "summary": "Raid another channel by sending the broadcaster’s viewers to the targeted channel.", + "description": "Raid another channel by sending the broadcaster’s viewers to the targeted channel.\n\nWhen you call the API from a chat bot or extension, the Twitch UX pops up a window at the top of the chat room that identifies the number of viewers in the raid. The raid occurs when the broadcaster clicks **Raid Now** or after the 90-second countdown expires.\n\nTo determine whether the raid successfully occurred, you must subscribe to the [Channel Raid](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#channelraid) event. For more information, see [Get notified when a raid begins](https://dev.twitch.tv/docs/api/raids#get-notified-when-a-raid-begins).\n\nTo cancel a pending raid, use the [Cancel a raid](https://dev.twitch.tv/docs/api/reference#cancel-a-raid) endpoint.\n\n**Rate Limit**: The limit is 10 requests within a 10-minute window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:raids** scope.", + "tags": [ + "Raids" + ], + "externalDocs": { + "description": "Start a raid", + "url": "https://dev.twitch.tv/docs/api/reference#start-a-raid" + }, + "operationId": "start-a-raid", + "parameters": [ + { + "name": "from_broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that’s sending the raiding party. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + } + }, + { + "name": "to_broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster to raid.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully 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.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartRaidResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/raids?from_broadcaster_id=12345678&to_broadcaster_id=87654321' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```", + "value": { + "data": [ + { + "created_at": "2022-02-18T07:20:50.52Z", + "is_mature": false + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The raiding broadcaster is blocked from the targeted channel.\n* The targeted channel doesn't accept raids from this broadcaster.\n* There are too many viewers in the raiding party.\n* The IDs in _from\\_broadcaster\\_id_ and _to\\_broadcaster\\_id_ cannot be the same ID.\n* The ID in the _from\\_broadcaster\\_id_ query parameter is not valid.\n* The ID in the _to\\_broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in _from\\_broadcaster\\_id_ must match the user ID found in the request’s OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:raids** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The targeted channel was not found." + }, + "409": { + "description": "* The broadcaster is already in the process of raiding another channel." + }, + "429": { + "description": "* The broadcaster exceeded the number of raid requests that they may make. The limit is 10 requests within a 10-minute window." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:raids" + ] + } + ] + }, + "delete": { + "summary": "Cancel a pending raid.", + "description": "Cancel a pending raid.\n\nYou can cancel a raid at any point up until the broadcaster clicks **Raid Now** in the Twitch UX or the 90-second countdown expires.\n\n**Rate Limit**: The limit is 10 requests within a 10-minute window.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:raids** scope.", + "tags": [ + "Raids" + ], + "externalDocs": { + "description": "Cancel a raid", + "url": "https://dev.twitch.tv/docs/api/reference#cancel-a-raid" + }, + "operationId": "cancel-a-raid", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that initiated the raid. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "The pending raid was successfully canceled.\n\n__Examples__\n\n_Request:_\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/raids?broadcaster_id=12345678' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t'\n```" + }, + "400": { + "description": "* The ID in the _broadcaster\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID found in the request’s OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:raids** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The broadcaster doesn't have a pending raid to cancel." + }, + "429": { + "description": "* The broadcaster exceeded the number of raid requests that they may make. The limit is 10 requests within a 10-minute window." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:raids" + ] + } + ] + } + }, + "/schedule": { + "get": { + "summary": "Gets the broadcaster’s streaming schedule.", + "description": "Gets the broadcaster’s streaming schedule. You can get the entire schedule or specific segments of the schedule. [Learn More](https://help.twitch.tv/s/article/channel-page-setup#Schedule)\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Get Channel Stream Schedule", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-stream-schedule" + }, + "operationId": "get-channel-stream-schedule", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the streaming schedule you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the scheduled segment to return. To specify more than one segment, include the ID of each segment you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 100 IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "start_time", + "in": "query", + "description": "The UTC date and time that identifies when in the broadcaster’s schedule to start returning segments. If not specified, the request returns segments starting after the current UTC date and time. Specify the date and time in RFC3339 format (for example, `2022-09-01T00:00:00Z`).", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "utc_offset", + "in": "query", + "description": "Not supported.", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 25 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s streaming schedule.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelStreamScheduleResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the specified broadcaster’s streaming schedule.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/schedule?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": { + "segments": [ + { + "id": "eyJzZWdtZW50SUQiOiJlNGFjYzcyNC0zNzFmLTQwMmMtODFjYS0yM2FkYTc5NzU5ZDQiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyNn0=", + "start_time": "2021-07-01T18:00:00Z", + "end_time": "2021-07-01T19:00:00Z", + "title": "TwitchDev Monthly Update // July 1, 2021", + "canceled_until": null, + "category": { + "id": "509670", + "name": "Science & Technology" + }, + "is_recurring": false + } + ], + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "vacation": null + }, + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The ID in the _id_ query parameter is not valid.\n* The format of the date and time in the _start\\_time_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify a valid app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the Client ID in the access token." + }, + "403": { + "description": "* Only partners and affiliates may add non-recurring broadcast segments." + }, + "404": { + "description": "* The broadcaster has not created a streaming schedule." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/schedule/icalendar": { + "get": { + "summary": "Gets the broadcaster’s streaming schedule as an iCalendar.", + "description": "Gets the broadcaster’s streaming schedule as an [iCalendar](https://datatracker.ietf.org/doc/html/rfc5545).\n\n__Authorization:__\n\nThe Client-Id and Authorization headers are not required.\n\n__Response Body:__\n\nThe response body contains the iCalendar data (see [RFC5545](https://datatracker.ietf.org/doc/html/rfc5545)).\n\nThe Content-Type response header is set to `text/calendar`.", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Get Channel iCalendar", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-icalendar" + }, + "operationId": "get-channel-icalendar", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the streaming schedule you want to get.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s schedule as an iCalendar.", + "content": { + "text/calendar": { + "examples": { + "Example": { + "description": "_Request:_\n\nGets the specified broadcaster’s streaming schedule as an iCalendar.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/schedule/icalendar?broadcaster_id=141981764'\n```", + "value": "BEGIN:VCALENDAR\nPRODID:-//twitch.tv//StreamSchedule//1.0\nVERSION:2.0\nCALSCALE:GREGORIAN\nREFRESH-INTERVAL;VALUE=DURATION:PT1H\nNAME:TwitchDev\nBEGIN:VEVENT\nUID:e4acc724-371f-402c-81ca-23ada79759d4\nDTSTAMP:20210323T040131Z\nDTSTART;TZID=/America/New_York:20210701T140000\nDTEND;TZID=/America/New_York:20210701T150000\nSUMMARY:TwitchDev Monthly Update // July 1, 2021\nDESCRIPTION:Science & Technology.\nCATEGORIES:Science & Technology\nEND:VEVENT\nEND:VCALENDAR%" + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid." + } + } + } + }, + "/schedule/settings": { + "patch": { + "summary": "Updates the broadcaster’s schedule settings, such as scheduling a vacation.", + "description": "Updates the broadcaster’s schedule settings, such as scheduling a vacation.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:schedule** scope.", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Update Channel Stream Schedule", + "url": "https://dev.twitch.tv/docs/api/reference#update-channel-stream-schedule" + }, + "operationId": "update-channel-stream-schedule", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose schedule settings you want to update. The ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "is_vacation_enabled", + "in": "query", + "description": "A Boolean value that indicates whether the broadcaster has scheduled a vacation. Set to **true** to enable Vacation Mode and add vacation dates, or **false** to cancel a previously scheduled vacation.", + "schema": { + "type": "boolean" + } + }, + { + "name": "vacation_start_time", + "in": "query", + "description": "The UTC date and time of when the broadcaster’s vacation starts. Specify the date and time in RFC3339 format (for example, 2021-05-16T00:00:00Z). Required if _is\\_vacation\\_enabled_ is **true**.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "vacation_end_time", + "in": "query", + "description": "The UTC date and time of when the broadcaster’s vacation ends. Specify the date and time in RFC3339 format (for example, 2021-05-30T23:59:59Z). Required if _is\\_vacation\\_enabled_ is **true**.", + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "timezone", + "in": "query", + "description": "The time zone that the broadcaster broadcasts from. Specify the time zone using [IANA time zone database](https://www.iana.org/time-zones) format (for example, America/New\\_York). Required if _is\\_vacation\\_enabled_ is **true**.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully updated the broadcaster’s schedule settings.\n\n__Examples__\n\n_Request:_\n\nSchedules the broadcaster’s vacation.\n\n```bash\ncurl -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' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The format of the string in _vacation\\_start\\_time_ is not valid.\n* The format of the string in _vacation\\_end\\_time_ is not valid.\n* The date in _vacation\\_end\\_time_ must be later than the date in _vacation\\_start\\_time_." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:schedule** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* The broadcaster's schedule was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:schedule" + ] + } + ] + } + }, + "/schedule/segment": { + "post": { + "summary": "Adds a single or recurring broadcast to the broadcaster’s streaming schedule.", + "description": "Adds a single or recurring broadcast to the broadcaster’s streaming schedule. For information about scheduling broadcasts, see [Stream Schedule](https://help.twitch.tv/s/article/channel-page-setup#Schedule).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:schedule** scope.", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Create Channel Stream Schedule Segment", + "url": "https://dev.twitch.tv/docs/api/reference#create-channel-stream-schedule-segment" + }, + "operationId": "create-channel-stream-schedule-segment", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the schedule to add the broadcast segment to. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateChannelStreamScheduleSegmentBody" + }, + "examples": { + "Example": { + "value": { + "start_time": "2021-07-01T18:00:00Z", + "timezone": "America/New_York", + "is_recurring": false, + "duration": "60", + "category_id": "509670", + "title": "TwitchDev Monthly Update // July 1, 2021" + }, + "description": "Adds a non-recurring broadcast to the broadcaster’s streaming schedule." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully added the broadcast segment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateChannelStreamScheduleSegmentResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nAdds a non-recurring broadcast to the broadcaster’s streaming schedule.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/schedule/segment?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\n \"start_time\": \"2021-07-01T18:00:00Z\",\n \"timezone\": \"America/New_York\",\n \"is_recurring\": false,\n \"duration\": \"60\",\n \"category_id\": \"509670\",\n \"title\": \"TwitchDev Monthly Update // July 1, 2021\"\n}'\n```", + "value": { + "data": { + "segments": [ + { + "id": "eyJzZWdtZW50SUQiOiJlNGFjYzcyNC0zNzFmLTQwMmMtODFjYS0yM2FkYTc5NzU5ZDQiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyNn0=", + "start_time": "2021-07-01T18:00:00Z", + "end_time": "2021-07-01T19:00:00Z", + "title": "TwitchDev Monthly Update // July 1, 2021", + "canceled_until": null, + "category": { + "id": "509670", + "name": "Science & Technology" + }, + "is_recurring": false + } + ], + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "vacation": null + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The format of the date and time in the `start_time` field is not valid.\n* The value in the `timezone` field is not valid.\n* The value in the `duration` field is not valid.\n* The ID in the `category_id` field is not valid.\n* The string in the `title` field is too long." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:schedule** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "403": { + "description": "* Only partners and affiliates may add non-recurring broadcast segments." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:schedule" + ] + } + ] + }, + "patch": { + "summary": "Updates a scheduled broadcast segment.", + "description": "Updates a scheduled broadcast segment.\n\nFor recurring segments, updating a segment’s title, category, duration, and timezone, changes all segments in the recurring schedule, not just the specified segment.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:schedule** scope.", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Update Channel Stream Schedule Segment", + "url": "https://dev.twitch.tv/docs/api/reference#update-channel-stream-schedule-segment" + }, + "operationId": "update-channel-stream-schedule-segment", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster who owns the broadcast segment to update. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the broadcast segment to update.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateChannelStreamScheduleSegmentBody" + }, + "examples": { + "Example": { + "value": { + "duration": "120" + }, + "description": "Updates the duration of a non-recurring broadcast segment." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the broadcast segment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateChannelStreamScheduleSegmentResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nUpdates the duration of a non-recurring broadcast segment.\n\n```bash\ncurl -X PATCH 'https://api.twitch.tv/helix/schedule/segment?broadcaster_id=141981764&id=eyJzZWdtZW50SUQiOiJlNGFjYzcyNC0zNzFmLTQwMmMtODFjYS0yM2FkYTc5NzU5ZDQiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyNn0=' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n-H 'Content-Type: application/json' \\\n-d '{\n \"duration\": \"120\"\n}'\n```", + "value": { + "data": { + "segments": [ + { + "id": "eyJzZWdtZW50SUQiOiJlNGFjYzcyNC0zNzFmLTQwMmMtODFjYS0yM2FkYTc5NzU5ZDQiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyNn0=", + "start_time": "2021-07-01T18:00:00Z", + "end_time": "2021-07-01T20:00:00Z", + "title": "TwitchDev Monthly Update // July 1, 2021", + "canceled_until": null, + "category": { + "id": "509670", + "name": "Science & Technology" + }, + "is_recurring": false + } + ], + "broadcaster_id": "141981764", + "broadcaster_name": "TwitchDev", + "broadcaster_login": "twitchdev", + "vacation": null + } + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _id_ query parameter is required.\n* The ID in the _id_ query parameter is not valid.\n* The format of the date and time in the `start_time` field is not valid.\n* The value in the `timezone` field is not valid.\n* The value in the `duration` field is not valid.\n* The ID in the `category_id` field is not valid.\n* The string in the `title` field is too long." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:schedule** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the access token." + }, + "404": { + "description": "* The specified broadcast segment was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:schedule" + ] + } + ] + }, + "delete": { + "summary": "Deletes a broadcast from the broadcaster’s streaming schedule.", + "description": "Removes a broadcast segment from the broadcaster’s streaming schedule.\n\n**NOTE**: For recurring segments, removing a segment removes all segments in the recurring schedule.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:schedule** scope.", + "tags": [ + "Schedule" + ], + "externalDocs": { + "description": "Delete Channel Stream Schedule Segment", + "url": "https://dev.twitch.tv/docs/api/reference#delete-channel-stream-schedule-segment" + }, + "operationId": "delete-channel-stream-schedule-segment", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the streaming schedule. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "id", + "in": "query", + "description": "The ID of the broadcast segment to remove.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the broadcast segment.\n\n__Examples__\n\n_Request:_\n\nRemoves the segment from the broadcaster’s streaming schedule.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/schedule/segment?broadcaster_id=141981764&id=eyJzZWdtZW50SUQiOiI4Y2EwN2E2NC0xYTZkLTRjYWItYWE5Ni0xNjIyYzNjYWUzZDkiLCJpc29ZZWFyIjoyMDIxLCJpc29XZWVrIjoyMX0=' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```" + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The ID in the _broadcaster\\_id_ query parameter is not valid.\n* The _id_ query parameter is required.\n* The ID in the _id_ query parameter is not valid." + }, + "401": { + "description": "* The ID in the _broadcaster\\_id_ query parameter must match the user ID in the user access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:schedule** scope.\n* The access token is not valid.\n* The ID in the Client-Id header must match the client ID in the OAuth token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:schedule" + ] + } + ] + } + }, + "/search/categories": { + "get": { + "summary": "Gets the games or categories that match the specified query.", + "description": "Gets the games or categories that match the specified query.\n\nTo match, the category’s name must contain all parts of the query string. For example, if the query string is 42, the response includes any category name that contains 42 in the title. If the query string is a phrase like _love computer_, the response includes any category name that contains the words love and computer anywhere in the name. The comparison is case insensitive.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Search" + ], + "externalDocs": { + "description": "Search Categories", + "url": "https://dev.twitch.tv/docs/api/reference#search-categories" + }, + "operationId": "search-categories", + "parameters": [ + { + "name": "query", + "in": "query", + "description": "The URI-encoded search string. For example, encode _#archery_ as `%23archery` and search strings like _angel of death_ as `angel%20of%20death`.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of category names that matched the specified query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchCategoriesResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the list of games and categories that contain _fort_ in the name.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/search/categories?query=fort' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "id": "33214", + "name": "Fortnite", + "box_art_url": "https://static-cdn.jtvnw.net/ttv-boxart/33214-52x72.jpg" + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjp7IkN" + } + } + } + } + } + } + }, + "400": { + "description": "* The _query_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/search/channels": { + "get": { + "summary": "Gets the channels that match the specified query and have streamed content within the past 6 months.", + "description": "Gets the channels that match the specified query and have streamed content within the past 6 months.\n\nThe fields that the API uses for comparison depends on the value that the _live\\_only_ query parameter is set to. If _live\\_only_ is **false**, the API matches on the broadcaster’s login name. However, if _live\\_only_ is **true**, the API matches on the broadcaster’s name and category name.\n\nTo match, the beginning of the broadcaster’s name or category must match the query string. The comparison is case insensitive. If the query string is angel\\_of\\_death, it matches all names that begin with angel\\_of\\_death. However, if the query string is a phrase like _angel of death_, it matches to names starting with angelofdeath or names starting with angel\\_of\\_death.\n\nBy default, the results include both live and offline channels. To get only live channels set the _live\\_only_ query parameter to **true**.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Search" + ], + "externalDocs": { + "description": "Search Channels", + "url": "https://dev.twitch.tv/docs/api/reference#search-channels" + }, + "operationId": "search-channels", + "parameters": [ + { + "name": "query", + "in": "query", + "description": "The URI-encoded search string. For example, encode search strings like _angel of death_ as `angel%20of%20death`.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "live_only", + "in": "query", + "description": "A Boolean value that determines whether the response includes only channels that are currently streaming live. Set to **true** to get only channels that are streaming live; otherwise, **false** to get live and offline channels. The default is **false**.", + "schema": { + "type": "boolean" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of category names that matched the specified query string.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchChannelsResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets the list of live and offline channels where the broadcaster’s name contains _loserfruit_.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/search/channels?query=loserfruit' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "broadcaster_language": "en", + "broadcaster_login": "loserfruit", + "display_name": "Loserfruit", + "game_id": "498000", + "game_name": "House Flipper", + "id": "41245072", + "is_live": false, + "tag_ids": [], + "tags": [], + "thumbnail_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/fd17325a-7dc2-46c6-8617-e90ec259501c-profile_image-300x300.png", + "title": "loserfruit", + "started_at": "" + } + ], + "pagination": { + "cursor": "Mg==" + } + } + }, + "Example 2": { + "description": "_Request:_\n\nGets the list of live channels where the broadcaster’s name or category name contains _a\\_seagull_.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/search/channels?query=a_seagull&live_only=true' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "broadcaster_language": "en", + "broadcaster_login": "a_seagull", + "display_name": "A_Seagull", + "game_id": "506442", + "game_name": "DOOM Eternal", + "id": "19070311", + "is_live": true, + "tag_ids": [], + "tags": [ + "English" + ], + "thumbnail_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/a_seagull-profile_image-4d2d235688c7dc66-300x300.png", + "title": "a_seagull", + "started_at": "2020-03-18T17:56:00Z" + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The _query_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/streams/key": { + "get": { + "summary": "Gets the channel’s stream key.", + "description": "Gets the channel’s stream key.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:stream\\_key** scope.", + "tags": [ + "Streams" + ], + "externalDocs": { + "description": "Get Stream Key", + "url": "https://dev.twitch.tv/docs/api/reference#get-stream-key" + }, + "operationId": "get-stream-key", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster that owns the channel. The ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the stream’s key.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamKeyResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/streams/key' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "stream_key": "live_44322889_a34ub37c8ajv98a0" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ field is required.\n* The ID in the _broadcaster\\_id_ field is not valid." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:stream\\_key** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header must match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:stream_key" + ] + } + ] + } + }, + "/streams": { + "get": { + "summary": "Gets a list of all streams.", + "description": "Gets a list of all streams. The list is in descending order by the number of viewers watching the stream. Because viewers come and go during a stream, it’s possible to find duplicate or missing streams in the list as you page through the results.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Streams" + ], + "externalDocs": { + "description": "Get Streams", + "url": "https://dev.twitch.tv/docs/api/reference#get-streams" + }, + "operationId": "get-streams", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "A user ID used to filter the list of streams. Returns only the streams of those users that are broadcasting. You may specify a maximum of 100 IDs. To specify multiple IDs, include the _user\\_id_ parameter for each user. For example, `&user_id=1234&user_id=5678`.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "user_login", + "in": "query", + "description": "A user login name used to filter the list of streams. Returns only the streams of those users that are broadcasting. You may specify a maximum of 100 login names. To specify multiple names, include the _user\\_login_ parameter for each user. For example, `&user_login=foo&user_login=bar`.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "game_id", + "in": "query", + "description": "A game (category) ID used to filter the list of streams. Returns only the streams that are broadcasting the game (category). You may specify a maximum of 100 IDs. To specify multiple IDs, include the _game\\_id_ parameter for each game. For example, `&game_id=9876&game_id=5432`.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "type", + "in": "query", + "description": "The type of stream to filter the list of streams by. Possible values are: \n \n* all\n* live\n \nThe default is _all_.", + "schema": { + "type": "string", + "enum": [ + "all", + "live" + ] + } + }, + { + "name": "language", + "in": "query", + "description": "A language code used to filter the list of streams. Returns only streams that broadcast in the specified language. Specify the language using an ISO 639-1 two-letter language code or _other_ if the broadcast uses a language not in the list of [supported stream languages](https://help.twitch.tv/s/article/languages-on-twitch#streamlang). \n \nYou may specify a maximum of 100 language codes. To specify multiple languages, include the _language_ parameter for each language. For example, `&language=de&language=fr`.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of streams.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamsResponse" + }, + "examples": { + "Example 1": { + "description": "_Request:_\n\nGets information about the 20 most active streams.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/streams' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "id": "123456789", + "user_id": "98765", + "user_login": "sandysanderman", + "user_name": "SandySanderman", + "game_id": "494131", + "game_name": "Little Nightmares", + "type": "live", + "title": "hablamos y le damos a Little Nightmares 1", + "tags": [ + "Español" + ], + "viewer_count": 78365, + "started_at": "2021-03-10T15:04:21Z", + "language": "es", + "thumbnail_url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_auronplay-{width}x{height}.jpg", + "tag_ids": [], + "is_mature": false + } + ], + "pagination": { + "cursor": "eyJiIjp7IkN1cnNvciI6ImV5SnpJam8zT0RNMk5TNDBORFF4TlRjMU1UY3hOU3dpWkNJNlptRnNjMlVzSW5RaU9uUnlkV1Y5In0sImEiOnsiQ3Vyc29yIjoiZXlKeklqb3hOVGs0TkM0MU56RXhNekExTVRZNU1ESXNJbVFpT21aaGJITmxMQ0owSWpwMGNuVmxmUT09In19" + } + } + }, + "Example 2": { + "description": "_Request:_\n\nGets streams for the specified logins. If the user is not live, the response doesn’t include them.\n\n```bash\ncurl -X GET\n'https://api.twitch.tv/helix/streams?user_login=afro&user_login=cohhcarnage&user_login=lana_lux' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "40952121085", + "user_id": "101051819", + "user_login": "afro", + "user_name": "Afro", + "game_id": "32982", + "game_name": "Grand Theft Auto V", + "type": "live", + "title": "Jacob: Digital Den Laptops & Routers | NoPixel | !MAINGEAR !FCF", + "tags": [ + "English" + ], + "viewer_count": 1490, + "started_at": "2021-03-10T03:18:11Z", + "language": "en", + "thumbnail_url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_afro-{width}x{height}.jpg", + "tag_ids": [], + "is_mature": false + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The value in the _type_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the Client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/streams/followed": { + "get": { + "summary": "Gets the list of broadcasters that the user follows and that are streaming live.", + "description": "Gets the list of broadcasters that the user follows and that are streaming live.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:follows** scope.", + "tags": [ + "Streams" + ], + "externalDocs": { + "description": "Get Followed Streams", + "url": "https://dev.twitch.tv/docs/api/reference#get-followed-streams" + }, + "operationId": "get-followed-streams", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the user whose list of followed streams you want to get. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 100.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of broadcasters that the user follows and that are streaming live.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFollowedStreamsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the streams that the broadcaster follows.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/streams/followed?user_id=141981764' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "id": "42170724654", + "user_id": "132954738", + "user_login": "aws", + "user_name": "AWS", + "game_id": "417752", + "game_name": "Talk Shows & Podcasts", + "type": "live", + "title": "AWS Howdy Partner! Y'all welcome ExtraHop to the show!", + "viewer_count": 20, + "started_at": "2021-03-31T20:57:26Z", + "language": "en", + "thumbnail_url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_aws-{width}x{height}.jpg", + "tag_ids": [], + "tags": [ + "English" + ] + } + ], + "pagination": { + "cursor": "eyJiIjp7IkN1cnNvciI6ImV5SnpJam8zT0RNMk5TNDBORFF4TlRjMU1UY3hOU3dpWkNJNlptRnNjMlVzSW5RaU9uUnlkV1Y5In0sImEiOnsiQ3Vyc29yIjoiZXlKeklqb3hOVGs0TkM0MU56RXhNekExTVRZNU1ESXNJbVFpT21aaGJITmxMQ0owSWpwMGNuVmxmUT09In19" + } + } + } + } + } + } + }, + "400": { + "description": "* The _user\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _user\\_id_ must match the user ID found in the access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:follows** scope.\n* The OAuth token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:follows" + ] + } + ] + } + }, + "/streams/markers": { + "post": { + "summary": "Adds a marker to a live stream.", + "description": "Adds a marker to a live stream. A marker is an arbitrary point in a live stream that the broadcaster or editor wants to mark, so they can return to that spot later to create video highlights (see Video Producer, Highlights in the Twitch UX).\n\nYou may not add markers:\n\n* If the stream is not live\n* If the stream has not enabled video on demand (VOD)\n* If the stream is a premiere (a live, first-viewing event that combines uploaded videos with live chat)\n* If the stream is a rerun of a past broadcast, including past premieres.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:broadcast** scope.", + "tags": [ + "Streams" + ], + "externalDocs": { + "description": "Create Stream Marker", + "url": "https://dev.twitch.tv/docs/api/reference#create-stream-marker" + }, + "operationId": "create-stream-marker", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateStreamMarkerBody" + }, + "examples": { + "Example": { + "value": { + "user_id": "123", + "description": "hello, this is a marker!" + }, + "description": "Creates a marker at the current location in user 123’s stream." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully created the marker.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateStreamMarkerResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nCreates a marker at the current location in user 123’s stream.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/streams/markers' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H 'Content-Type: application/json' \\\n-d '{\"user_id\":\"123\", \"description\":\"hello, this is a marker!\"}'\n```", + "value": { + "data": [ + { + "id": 123, + "created_at": "2018-08-20T20:10:03Z", + "description": "hello, this is a marker!", + "position_seconds": 244 + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The `user_id` field is required.\n* The length of the string in the `description` field is too long." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:manage:broadcast** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* 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": { + "description": "* The user in the `user_id` field is not streaming live.\n* The ID in the user\\_id field is not valid.\n* The user hasn't enabled video on demand (VOD)." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:broadcast" + ] + } + ] + }, + "get": { + "summary": "Gets a list of markers from the user’s most recent stream or from the specified VOD/video.", + "description": "Gets a list of markers from the user’s most recent stream or from the specified VOD/video. A marker is an arbitrary point in a live stream that the broadcaster or editor marked, so they can return to that spot later to create video highlights (see Video Producer, Highlights in the Twitch UX).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:broadcast** or **channel:manage:broadcast** scope.", + "tags": [ + "Streams" + ], + "externalDocs": { + "description": "Get Stream Markers", + "url": "https://dev.twitch.tv/docs/api/reference#get-stream-markers" + }, + "operationId": "get-stream-markers", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "A user ID. The request returns the markers from this user’s most recent video. This ID must match the user ID in the access token or the user in the access token must be one of the broadcaster’s editors. \n \nThis parameter and the _video\\_id_ query parameter are mutually exclusive.", + "schema": { + "type": "string" + } + }, + { + "name": "video_id", + "in": "query", + "description": "A video on demand (VOD)/video ID. The request returns the markers from this VOD/video. The user in the access token must own the video or the user must be one of the broadcaster’s editors. \n \nThis parameter and the _user\\_id_ query parameter are mutually exclusive.", + "schema": { + "type": "string" + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of markers.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamMarkersResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the first 5 markers in the most recent stream of user 123.\n\n```bash\ncurl -X GET\n'https://api.twitch.tv/helix/streams/markers?user_id=123&first=5' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "user_id": "123", + "user_name": "TwitchName", + "user_login": "twitchname", + "videos": [ + { + "video_id": "456", + "markers": [ + { + "id": "106b8d6243a4f883d25ad75e6cdffdc4", + "created_at": "2018-08-20T20:10:03Z", + "description": "hello, this is a marker!", + "position_seconds": 244, + "URL": "https://twitch.tv/twitchname/manager/highlighter/456?t=0h4m06s" + } + ] + } + ] + } + ], + "pagination": { + "cursor": "eyJiIjpudWxsLCJhIjoiMjk1MjA0Mzk3OjI1Mzpib29rbWFyazoxMDZiOGQ1Y" + } + } + } + } + } + } + }, + "400": { + "description": "* The request must specify either the _user\\_id_ or _video\\_id_ query parameter, but not both." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:broadcast** or **user:manage:broadcast** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* 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": { + "description": "* The user specified in the _user\\_id_ query parameter doesn't have videos." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:broadcast", + "channel:manage:broadcast" + ] + } + ] + } + }, + "/subscriptions": { + "get": { + "summary": "Gets a list of users that subscribe to the specified broadcaster.", + "description": "Gets a list of users that subscribe to the specified broadcaster.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:read:subscriptions** scope.\n\nA Twitch extensions may use an app access token if the broadcaster has granted the **channel:read:subscriptions** scope from within the Twitch Extensions manager.", + "tags": [ + "Subscriptions" + ], + "externalDocs": { + "description": "Get Broadcaster Subscriptions", + "url": "https://dev.twitch.tv/docs/api/reference#get-broadcaster-subscriptions" + }, + "operationId": "get-broadcaster-subscriptions", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The broadcaster’s ID. This ID must match the user ID in the access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "Filters the list to include only the specified subscribers. To specify more than one subscriber, include this parameter for each subscriber. For example, `&user_id=1234&user_id=5678`. You may specify a maximum of 100 subscribers.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100 items per page. The default is 20.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. Do not specify if you set the _user\\_id_ query parameter. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. Do not specify if you set the _user\\_id_ query parameter. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster’s list of subscribers.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetBroadcasterSubscriptionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/subscriptions?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "broadcaster_id": "141981764", + "broadcaster_login": "twitchdev", + "broadcaster_name": "TwitchDev", + "gifter_id": "12826", + "gifter_login": "twitch", + "gifter_name": "Twitch", + "is_gift": true, + "tier": "1000", + "plan_name": "Channel Subscription (twitchdev)", + "user_id": "527115020", + "user_name": "twitchgaming", + "user_login": "twitchgaming" + } + ], + "pagination": { + "cursor": "xxxx" + }, + "total": 13, + "points": 13 + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID found in the request’s OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:read:subscriptions** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:read:subscriptions", + "channel:read:subscriptions" + ] + } + ] + } + }, + "/subscriptions/user": { + "get": { + "summary": "Checks whether the user subscribes to the broadcaster’s channel.", + "description": "Checks whether the user subscribes to the broadcaster’s channel.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:subscriptions** scope.\n\nA Twitch extensions may use an app access token if the broadcaster has granted the **user:read:subscriptions** scope from within the Twitch Extensions manager.", + "tags": [ + "Subscriptions" + ], + "externalDocs": { + "description": "Check User Subscription", + "url": "https://dev.twitch.tv/docs/api/reference#check-user-subscription" + }, + "operationId": "check-user-subscription", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of a partner or affiliate broadcaster.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID of the user that you’re checking to see whether they subscribe to the broadcaster in _broadcaster\\_id_. This ID must match the user ID in the access Token.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "The user subscribes to the broadcaster.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckUserSubscriptionResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nChecks whether the user subscribes to the broadcaster’s channel.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/subscriptions/user?broadcaster_id=149747285&user_id=141981764' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "broadcaster_id": "149747285", + "broadcaster_name": "TwitchPresents", + "broadcaster_login": "twitchpresents", + "is_gift": false, + "tier": "1000" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required.\n* The _user\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _user\\_id_ must match the user ID found in the request’s OAuth token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:subscriptions** scope.\n* The access token is not valid.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The user in _user\\_id_ does not subscribe to the broadcaster in _broadcaster\\_id_." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:subscriptions", + "user:read:subscriptions" + ] + } + ] + } + }, + "/tags/streams": { + "get": { + "summary": "Gets the list of all stream tags that Twitch defines. You can also filter the list by one or more tag IDs.", + "description": "**IMPORTANT** Twitch is moving from Twitch-defined tags to channel-defined tags. **IMPORTANT** As of February 28, 2023, this endpoint returns an empty array. On July 13, 2023, it will return a 410 response.\n\nGets a list of all stream tags that Twitch defines. The broadcaster may apply any of these to their channel except automatic tags. For an online list of the possible tags, see [List of All Tags](https://www.twitch.tv/directory/all/tags).\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Tags" + ], + "externalDocs": { + "description": "Get All Stream Tags", + "url": "https://dev.twitch.tv/docs/api/reference#get-all-stream-tags" + }, + "operationId": "get-all-stream-tags", + "parameters": [ + { + "name": "tag_id", + "in": "query", + "description": "The ID of the tag to get. Used to filter the list of tags. To specify more than one tag, include the _tag\\_id_ parameter for each tag to get. For example, `tag_id=1234&tag_id=5678`. The maximum number of IDs you may specify is 100\\. Ignores invalid IDs but not duplicate IDs.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of tags.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAllStreamTagsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the first page of stream tags that Twitch defines.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/tags/streams' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets the first page of stream tags.\ntwitch api get /tags/streams\n\n# Twitch CLI example that gets the specified stream tags.\ntwitch api get /tags/streams -q tag_id=39490173-ed5f-4271-96a8-26ab546ee1e9 -q tag_id=233f4789-1ad0-403c-aaf9-7d37a22264e7\n```", + "value": { + "data": [ + { + "tag_id": "621fb5bf-5498-4d8f-b4ac-db4d40d401bf", + "is_auto": false, + "localization_names": { + "bg-bg": "Изчистване на 1 кредит", + "cs-cz": "1 čistý kredit", + "da-dk": "1 credit klaret", + "de-de": "Mit 1 Leben abschließen", + "el-gr": "1 μόνο πίστωση", + "en-us": "1 Credit Clear" + }, + "localization_descriptions": { + "bg-bg": "За потоци с акцент върху завършване на аркадна игра с монети, в която не се използва продължаване", + "cs-cz": "Pro vysílání s důrazem na plnění mincových arkádových her bez použití pokračování.", + "da-dk": "Til streams med vægt på at gennemføre et arkadespil uden at bruge continues", + "de-de": "Für Streams mit dem Ziel, ein Coin-op-Arcade-Game mit nur einem Leben abzuschließen.", + "el-gr": "Για μεταδόσεις με έμφαση στην ολοκλήρωση παλαιού τύπου ηλεκτρονικών παιχνιδιών που λειτουργούν με κέρμα, χωρίς να χρησιμοποιούν συνέχειες", + "en-us": "For streams with an emphasis on completing a coin-op arcade game without using any continues" + } + } + ], + "pagination": { + "cursor": "eyJiI..." + } + } + } + } + } + } + }, + "400": { + "description": "* The _tag\\_id_ query parameter is empty (for example, `&tag_id=`).\n* The list of tag IDs is too long." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the Client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ], + "deprecated": true + } + }, + "/streams/tags": { + "get": { + "summary": "Gets the list of stream tags that the broadcaster or Twitch added to their channel.", + "description": "**IMPORTANT** Twitch is moving from Twitch-defined tags to channel-defined tags. **IMPORTANT** As of February 28, 2023, this endpoint returns an empty array. On July 13, 2023, it will return a 410 response. If you use this endpoint, please update your code to use [Get Channel Information](https://dev.twitch.tv/docs/api/reference#get-channel-information).\n\nGets the list of stream tags that the broadcaster or Twitch added to their channel.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Tags" + ], + "externalDocs": { + "description": "Get Stream Tags", + "url": "https://dev.twitch.tv/docs/api/reference#get-stream-tags" + }, + "operationId": "get-stream-tags", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose stream tags you want to get.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of tags.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamTagsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the TwitchGaming channel’s tags.\n\n```bash\ncurl -X GET\n'https://api.twitch.tv/helix/streams/tags?broadcaster_id=527115020' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```\n\n```bash\n# Twitch CLI example that gets the TwitchGaming channel's tags.\ntwitch api get /streams/tags -q broadcaster_id=527115020\n```", + "value": { + "data": [ + { + "tag_id": "6ea6bca4-4712-4ab9-a906-e3336a9d8039", + "is_auto": true, + "localization_names": { + "bg-bg": "английски", + "cs-cz": "Angličtina", + "da-dk": "Engelsk", + "de-de": "Englisch", + "el-gr": "Αγγλικά", + "en-us": "English" + }, + "localization_descriptions": { + "bg-bg": "За потоци с използване на английски", + "cs-cz": "Pro vysílání obsahující angličtinu.", + "da-dk": "Til streams, hvori der indgår engelsk", + "de-de": "Für Streams auf Englisch.", + "el-gr": "Για μεταδόσεις που περιλαμβάνουν τη χρήση Αγγλικών", + "en-us": "For streams featuring the use of English" + } + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ field is required.\n* The ID in the _broadcaster\\_id_ field is not valid." + }, + "401": { + "description": "* The Authorization header is required and must specify an app access token or user access token.\n* The access token is not valid.\n* The ID in the Client-Id header must match the Client ID in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ], + "deprecated": true + } + }, + "/teams/channel": { + "get": { + "summary": "Gets the list of Twitch teams that the broadcaster is a member of.", + "description": "Gets the list of Twitch teams that the broadcaster is a member of.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Teams" + ], + "externalDocs": { + "description": "Get Channel Teams", + "url": "https://dev.twitch.tv/docs/api/reference#get-channel-teams" + }, + "operationId": "get-channel-teams", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose teams you want to get.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of teams.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetChannelTeamsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets a list of Twitch Teams that the specified broadcaster is a member of.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/teams/channel?broadcaster_id=96909659' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "broadcaster_id": "96909659", + "broadcaster_name": "CSharpFritz", + "broadcaster_login": "csharpfritz", + "background_image_url": null, + "banner": null, + "created_at": "2019-02-11T12:09:22Z", + "updated_at": "2020-11-18T15:56:41Z", + "info": "

An outgoing and enthusiastic group of friendly channels that write code, teach about technology, and promote the technical community.

", + "thumbnail_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/team-livecoders-team_logo_image-bf1d9a87ca81432687de60e24ad9593d-600x600.png", + "team_name": "livecoders", + "team_display_name": "Live Coders", + "id": "6358" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is missing or invalid." + }, + "401": { + "description": "* The Authorization header must contain an app access token or user access token.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The broadcaster was not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/teams": { + "get": { + "summary": "Gets information about the specified Twitch team.", + "description": "Gets information about the specified Twitch team. [Read More](https://help.twitch.tv/s/article/twitch-teams)\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Teams" + ], + "externalDocs": { + "description": "Get Teams", + "url": "https://dev.twitch.tv/docs/api/reference#get-teams" + }, + "operationId": "get-teams", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "The name of the team to get. This parameter and the _id_ parameter are mutually exclusive; you must specify the team’s name or ID but not both.", + "schema": { + "type": "string" + } + }, + { + "name": "id", + "in": "query", + "description": "The ID of the team to get. This parameter and the _name_ parameter are mutually exclusive; you must specify the team’s name or ID but not both.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the team's information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTeamsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the specified team.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/teams?id=6358' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz'\n```", + "value": { + "data": [ + { + "users": [ + { + "user_id": "278217731", + "user_name": "mastermndio", + "user_login": "mastermndio" + }, + { + "user_id": "41284990", + "user_name": "jenninexus", + "user_login": "jenninexus" + } + ], + "background_image_url": null, + "banner": null, + "created_at": "2019-02-11T12:09:22Z", + "updated_at": "2020-11-18T15:56:41Z", + "info": "

An outgoing and enthusiastic group of friendly channels that write code, teach about technology, and promote the technical community.

", + "thumbnail_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/team-livecoders-team_logo_image-bf1d9a87ca81432687de60e24ad9593d-600x600.png", + "team_name": "livecoders", + "team_display_name": "Live Coders", + "id": "6358" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _name_ or _id_ query parameter is required.\n* Specify either the _name_ or _id_ query parameter but not both.\n* The ID in the _id_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header must contain an app access token or user access token.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The specified team was not found." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + } + }, + "/users": { + "get": { + "summary": "Gets information about one or more users.", + "description": "Gets information about one or more users. \n \nYou may look up users using their user ID, login name, or both but the sum total of the number of users you may look up is 100\\. For example, you may specify 50 IDs and 50 names or 100 IDs or names, but you cannot specify 100 IDs and 100 names. \n \nIf you don’t specify IDs or login names, the request returns information about the user in the access token if you specify a user access token. \n \nTo include the user’s verified email address in the response, you must use a user access token that includes the **user:read:email** scope.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Get Users", + "url": "https://dev.twitch.tv/docs/api/reference#get-users" + }, + "operationId": "get-users", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The ID of the user to get. To specify more than one user, include the _id_ parameter for each user to get. For example, `id=1234&id=5678`. The maximum number of IDs you may specify is 100.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "login", + "in": "query", + "description": "The login name of the user to get. To specify more than one user, include the _login_ parameter for each user to get. For example, `login=foo&login=bar`. The maximum number of login names you may specify is 100.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the specified users’ information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUsersResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the specified user.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/users?id=141981764' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "141981764", + "login": "twitchdev", + "display_name": "TwitchDev", + "type": "", + "broadcaster_type": "partner", + "description": "Supporting third-party developers building Twitch integrations from chatbots to game integrations.", + "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/8a6381c7-d0c0-4576-b179-38bd5ce1d6af-profile_image-300x300.png", + "offline_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/3f13ab61-ec78-4fe6-8481-8682cb3b0ac2-channel_offline_image-1920x1080.png", + "view_count": 5980557, + "email": "not-real@email.com", + "created_at": "2016-12-14T20:32:28Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The \\*id\\* or \\*login\\* query parameter is required unless the request uses a user access token.\n* The request exceeded the maximum allowed number of \\*id\\* and/or \\*login\\* query parameters." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "put": { + "summary": "Updates the user’s information.", + "description": "Updates the specified user’s information. The user ID in the OAuth token identifies the user whose information you want to update.\n\nTo include the user’s verified email address in the response, the user access token must also include the **user:read:email** scope.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:edit** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Update User", + "url": "https://dev.twitch.tv/docs/api/reference#update-user" + }, + "operationId": "update-user", + "parameters": [ + { + "name": "description", + "in": "query", + "description": "The string to update the channel’s description to. The description is limited to a maximum of 300 characters. \n \nTo remove the description, specify this parameter but don’t set it’s value (for example, `?description=`).", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully updated the specified user's information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nUpdates the description of the specified user.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/users?description=BaldAngel' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "44322889", + "login": "dallas", + "display_name": "dallas", + "type": "staff", + "broadcaster_type": "affiliate", + "description": "BaldAngel", + "profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/4d1f36cbf1f0072d-profile_image-300x300.png", + "offline_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/dallas-channel_offline_image-2e82c1df2a464df7-1920x1080.jpeg", + "view_count": 6995, + "email": "not-real@email.com", + "created_at": "2013-06-03T19:12:02.580593Z" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The string in the _description_ query parameter is too long." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:edit** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:edit" + ] + } + ] + } + }, + "/users/blocks": { + "get": { + "summary": "Gets the list of users that the broadcaster has blocked.", + "description": "Gets the list of users that the broadcaster has blocked. [Read More](https://help.twitch.tv/s/article/how-to-manage-harassment-in-chat?language=en%5FUS#BlockWhispersandMessagesfromStrangers)\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:blocked\\_users** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Get User Block List", + "url": "https://dev.twitch.tv/docs/api/reference#get-user-block-list" + }, + "operationId": "get-user-block-list", + "parameters": [ + { + "name": "broadcaster_id", + "in": "query", + "description": "The ID of the broadcaster whose list of blocked users you want to get.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the broadcaster's list of blocked users.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserBlockListResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the specified broadcaster’s list of blocked users.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n```", + "value": { + "data": [ + { + "user_id": "135093069", + "user_login": "bluelava", + "display_name": "BlueLava" + }, + { + "user_id": "27419011", + "user_login": "travistyoj", + "display_name": "TravistyOJ" + } + ] + } + } + } + } + } + }, + "400": { + "description": "* The _broadcaster\\_id_ query parameter is required." + }, + "401": { + "description": "* The ID in _broadcaster\\_id_ must match the user ID found in the request’s access token.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:blocked\\_users** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:blocked_users" + ] + } + ] + }, + "put": { + "summary": "Blocks the specified user from interacting with or having contact with the broadcaster.", + "description": "Blocks the specified user from interacting with or having contact with the broadcaster. The user ID in the OAuth token identifies the broadcaster who is blocking the user.\n\nTo learn more about blocking users, see [Block Other Users on Twitch](https://help.twitch.tv/s/article/how-to-manage-harassment-in-chat?language=en%5FUS#BlockWhispersandMessagesfromStrangers).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:manage:blocked\\_users** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Block User", + "url": "https://dev.twitch.tv/docs/api/reference#block-user" + }, + "operationId": "block-user", + "parameters": [ + { + "name": "target_user_id", + "in": "query", + "description": "The ID of the user to block. The API ignores the request if the broadcaster has already blocked the user.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "source_context", + "in": "query", + "description": "The location where the harassment took place that is causing the brodcaster to block the user. Possible values are: \n \n* chat\n* whisper\n \n.", + "schema": { + "type": "string", + "enum": [ + "chat", + "whisper" + ] + } + }, + { + "name": "reason", + "in": "query", + "description": "The reason that the broadcaster is blocking the user. Possible values are: \n \n* harassment\n* spam\n* other", + "schema": { + "type": "string", + "enum": [ + "harassment", + "spam", + "other" + ] + } + } + ], + "responses": { + "204": { + "description": "Successfully blocked the user.\n\n__Examples__\n\n_Request:_\n\nBlocks the specified user.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n```" + }, + "400": { + "description": "* The _target\\_user\\_id_ query parameter is required.\n* The ID in _target\\_user\\_id_ cannot be the same as the user ID in the access token.\n* The value in _source\\_context_ is not valid.\n* The value in _reason_ is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:manage:blocked\\_users** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:manage:blocked_users" + ] + } + ] + }, + "delete": { + "summary": "Removes the user from the broadcaster’s list of blocked users.", + "description": "Removes the user from the broadcaster’s list of blocked users. The user ID in the OAuth token identifies the broadcaster who’s removing the block.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:manage:blocked\\_users** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Unblock User", + "url": "https://dev.twitch.tv/docs/api/reference#unblock-user" + }, + "operationId": "unblock-user", + "parameters": [ + { + "name": "target_user_id", + "in": "query", + "description": "The ID of the user to remove from the broadcaster’s list of blocked users. The API ignores the request if the broadcaster hasn’t blocked the user.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "Successfully removed the block.\n\n__Examples__\n\n_Request:_\n\nUnblocks the specified user.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: wbmytr93xzw8zbg0p1izqyzzc5mbiz' \\\n```" + }, + "400": { + "description": "* The _target\\_user\\_id_ query parameter is required." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:blocked\\_users** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:manage:blocked_users" + ] + } + ] + } + }, + "/users/extensions/list": { + "get": { + "summary": "Gets a list of all extensions (both active and inactive) that the broadcaster has installed.", + "description": "Gets a list of all extensions (both active and inactive) that the broadcaster has installed. The user ID in the access token identifies the broadcaster.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:read:broadcast** or **user:edit:broadcast** scope. To include inactive extensions, you must include the **user:edit:broadcast** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Get User Extensions", + "url": "https://dev.twitch.tv/docs/api/reference#get-user-extensions" + }, + "operationId": "get-user-extensions", + "responses": { + "200": { + "description": "Successfully retrieved the user's installed extensions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserExtensionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the extensions that the user has installed.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/users/extensions/list' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "wi08ebtatdc7oj83wtl9uxwz807l8b", + "version": "1.1.8", + "name": "Streamlabs Leaderboard", + "can_activate": true, + "type": [ + "panel" + ] + }, + { + "id": "d4uvtfdr04uq6raoenvj7m86gdk16v", + "version": "2.0.2", + "name": "Prime Subscription and Loot Reminder", + "can_activate": true, + "type": [ + "overlay" + ] + }, + { + "id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0", + "version": "1.1.0", + "name": "TopClip", + "can_activate": true, + "type": [ + "mobile", + "panel" + ] + }, + { + "id": "zfh2irvx2jb4s60f02jq0ajm8vwgka", + "version": "1.0.19", + "name": "Streamlabs", + "can_activate": true, + "type": [ + "mobile", + "overlay" + ] + }, + { + "id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj", + "version": "0.0.1", + "name": "Dev Experience Test", + "can_activate": true, + "type": [ + "component", + "mobile", + "panel", + "overlay" + ] + } + ] + } + } + } + } + } + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:read:broadcast** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "user:read:broadcast", + "user:edit:broadcast", + "user:edit:broadcast" + ] + } + ] + } + }, + "/users/extensions": { + "get": { + "summary": "Gets the active extensions that the broadcaster has installed for each configuration.", + "description": "Gets the active extensions that the broadcaster has installed for each configuration.\n\nNOTE: To include extensions that you have under development, you must specify a user access token that includes the **user:read:broadcast** or **user:edit:broadcast** scope.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Get User Active Extensions", + "url": "https://dev.twitch.tv/docs/api/reference#get-user-active-extensions" + }, + "operationId": "get-user-active-extensions", + "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "The ID of the broadcaster whose active extensions you want to get. \n \nThis parameter is required if you specify an app access token and is optional if you specify a user access token. If you specify a user access token and don’t specify this parameter, the API uses the user ID from the access token.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the user's active extensions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserActiveExtensionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets the user’s active extensions. The API gets the user from the access token.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/users/extensions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": { + "panel": { + "1": { + "active": true, + "id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0", + "version": "1.1.0", + "name": "TopClip" + }, + "2": { + "active": true, + "id": "wi08ebtatdc7oj83wtl9uxwz807l8b", + "version": "1.1.8", + "name": "Streamlabs Leaderboard" + }, + "3": { + "active": true, + "id": "naty2zwfp7vecaivuve8ef1hohh6bo", + "version": "1.0.9", + "name": "Streamlabs Stream Schedule & Countdown" + } + }, + "overlay": { + "1": { + "active": true, + "id": "zfh2irvx2jb4s60f02jq0ajm8vwgka", + "version": "1.0.19", + "name": "Streamlabs" + } + }, + "component": { + "1": { + "active": true, + "id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj", + "version": "0.0.1", + "name": "Dev Experience Test", + "x": 0, + "y": 0 + }, + "2": { + "active": false + } + } + } + } + } + } + } + } + }, + "400": { + "description": "* The _user\\_id_ query parameter is required if you specify an app access token." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "put": { + "summary": "Updates an installed extension’s information.", + "description": "Updates an installed extension’s information. You can update the extension’s activation state, ID, and version number. The user ID in the access token identifies the broadcaster whose extensions you’re updating.\n\nNOTE: If you try to activate an extension under multiple extension types, the last write wins (and there is no guarantee of write order).\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:edit:broadcast** scope.", + "tags": [ + "Users" + ], + "externalDocs": { + "description": "Update User Extensions", + "url": "https://dev.twitch.tv/docs/api/reference#update-user-extensions" + }, + "operationId": "update-user-extensions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserExtensionsBody" + }, + "examples": { + "Example": { + "value": { + "data": { + "panel": { + "1": { + "active": true, + "id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0", + "version": "1.1.0" + }, + "2": { + "active": true, + "id": "wi08ebtatdc7oj83wtl9uxwz807l8b", + "version": "1.1.8" + }, + "3": { + "active": true, + "id": "naty2zwfp7vecaivuve8ef1hohh6bo", + "version": "1.0.9" + } + }, + "overlay": { + "1": { + "active": true, + "id": "zfh2irvx2jb4s60f02jq0ajm8vwgka", + "version": "1.0.19" + } + }, + "component": { + "1": { + "active": true, + "id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj", + "version": "0.0.1", + "x": 0, + "y": 0 + }, + "2": { + "active": false + } + } + } + }, + "description": "Updates the the user’s installed extensions." + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully updated the active extensions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserExtensionsResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nUpdates the the user’s installed extensions.\n\n```bash\ncurl -X PUT 'https://api.twitch.tv/helix/users/extensions' \\\n-H 'Authorization: Bearer cfabdegwdoklmawdzdo98xt2fo512y' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2' \\\n-H \"Content-Type: application/json\" \\\n-d '{\n \"data\": {\n \"panel\": {\n \"1\": {\n \"active\": true,\n \"id\": \"rh6jq1q334hqc2rr1qlzqbvwlfl3x0\",\n \"version\": \"1.1.0\"\n },\n \"2\": {\n \"active\": true,\n \"id\": \"wi08ebtatdc7oj83wtl9uxwz807l8b\",\n \"version\": \"1.1.8\"\n },\n \"3\": {\n \"active\": true,\n \"id\": \"naty2zwfp7vecaivuve8ef1hohh6bo\",\n \"version\": \"1.0.9\"\n }\n },\n \"overlay\": {\n \"1\": {\n \"active\": true,\n \"id\": \"zfh2irvx2jb4s60f02jq0ajm8vwgka\",\n \"version\": \"1.0.19\"\n }\n },\n \"component\": {\n \"1\": {\n \"active\": true,\n \"id\": \"lqnf3zxk0rv0g7gq92mtmnirjz2cjj\",\n \"version\": \"0.0.1\",\n \"x\": 0,\n \"y\": 0\n },\n \"2\": {\n \"active\": false\n }\n }\n }\n}'\n```", + "value": { + "data": { + "panel": { + "1": { + "active": true, + "id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0", + "version": "1.1.0", + "name": "TopClip" + }, + "2": { + "active": true, + "id": "wi08ebtatdc7oj83wtl9uxwz807l8b", + "version": "1.1.8", + "name": "Streamlabs Leaderboard" + }, + "3": { + "active": true, + "id": "naty2zwfp7vecaivuve8ef1hohh6bo", + "version": "1.0.9", + "name": "Streamlabs Stream Schedule & Countdown" + } + }, + "overlay": { + "1": { + "active": true, + "id": "zfh2irvx2jb4s60f02jq0ajm8vwgka", + "version": "1.0.19", + "name": "Streamlabs" + } + }, + "component": { + "1": { + "active": true, + "id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj", + "version": "0.0.1", + "name": "Dev Experience Test", + "x": 0, + "y": 0 + }, + "2": { + "active": false + } + } + } + } + } + } + } + } + }, + "400": { + "description": "* The JSON payload is malformed." + }, + "401": { + "description": "* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:edit:broadcast** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* An extension with the specified `id` and `version` values was not found." + } + }, + "security": [ + { + "twitch_auth": [ + "user:edit:broadcast" + ] + } + ] + } + }, + "/videos": { + "get": { + "summary": "Gets information about one or more published videos.", + "description": "Gets information about one or more published videos. You may get videos by ID, by user, or by game/category.\n\nYou may apply several filters to get a subset of the videos. The filters are applied as an AND operation to each video. For example, if _language_ is set to ‘de’ and _game\\_id_ is set to 21779, the response includes only videos that show playing League of Legends by users that stream in German. The filters apply only if you get videos by user ID or game ID.\n\n__Authorization:__\n\nRequires an [app access token](https://dev.twitch.tv/docs/authentication#app-access-tokens) or [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens).", + "tags": [ + "Videos" + ], + "externalDocs": { + "description": "Get Videos", + "url": "https://dev.twitch.tv/docs/api/reference#get-videos" + }, + "operationId": "get-videos", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "A list of IDs that identify the videos you want to get. To get more than one video, include this parameter for each video you want to get. For example, `id=1234&id=5678`. You may specify a maximum of 100 IDs. The endpoint ignores duplicate IDs and IDs that weren't found (if there's at least one valid ID). \n \nThe _id_, _user\\_id_, and _game\\_id_ parameters are mutually exclusive.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "explode": true + }, + { + "name": "user_id", + "in": "query", + "description": "The ID of the user whose list of videos you want to get. \n \nThe _id_, _user\\_id_, and _game\\_id_ parameters are mutually exclusive.", + "schema": { + "type": "string" + } + }, + { + "name": "game_id", + "in": "query", + "description": "A category or game ID. The response contains a maximum of 500 videos that show this content. To get category/game IDs, use the [Search Categories](https://dev.twitch.tv/docs/api/reference#search-categories) endpoint. \n \nThe _id_, _user\\_id_, and _game\\_id_ parameters are mutually exclusive.", + "schema": { + "type": "string" + } + }, + { + "name": "language", + "in": "query", + "description": "A filter used to filter the list of videos by the language that the video owner broadcasts in. For example, to get videos that were broadcast in German, set this parameter to the ISO 639-1 two-letter code for German (i.e., DE). For a list of supported languages, see [Supported Stream Language](https://help.twitch.tv/s/article/languages-on-twitch#streamlang). If the language is not supported, use “other.” \n \nSpecify this parameter only if you specify the _game\\_id_ query parameter.", + "schema": { + "type": "string" + } + }, + { + "name": "period", + "in": "query", + "description": "A filter used to filter the list of videos by when they were published. For example, videos published in the last week. Possible values are: \n \n* all\n* day\n* month\n* week\n \nThe default is \"all,\" which returns videos published in all periods. \n \nSpecify this parameter only if you specify the _game\\_id_ or _user\\_id_ query parameter.", + "schema": { + "type": "string", + "enum": [ + "all", + "day", + "month", + "week" + ] + } + }, + { + "name": "sort", + "in": "query", + "description": "The order to sort the returned videos in. Possible values are: \n \n* time — Sort the results in descending order by when they were created (i.e., latest video first).\n* trending — Sort the results in descending order by biggest gains in viewership (i.e., highest trending video first).\n* views — Sort the results in descending order by most views (i.e., highest number of views first).\n \nThe default is \"time.\" \n \nSpecify this parameter only if you specify the _game\\_id_ or _user\\_id_ query parameter.", + "schema": { + "type": "string", + "enum": [ + "time", + "trending", + "views" + ] + } + }, + { + "name": "type", + "in": "query", + "description": "A filter used to filter the list of videos by the video's type. Possible case-sensitive values are: \n \n* all\n* archive — On-demand videos (VODs) of past streams.\n* highlight — Highlight reels of past streams.\n* upload — External videos that the broadcaster uploaded using the Video Producer.\n \nThe default is \"all,\" which returns all video types. \n \nSpecify this parameter only if you specify the _game\\_id_ or _user\\_id_ query parameter.", + "schema": { + "type": "string", + "enum": [ + "all", + "archive", + "highlight", + "upload" + ] + } + }, + { + "name": "first", + "in": "query", + "description": "The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100\\. The default is 20. \n \nSpecify this parameter only if you specify the _game\\_id_ or _user\\_id_ query parameter.", + "schema": { + "type": "string" + } + }, + { + "name": "after", + "in": "query", + "description": "The cursor used to get the next page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) \n \nSpecify this parameter only if you specify the _user\\_id_ query parameter.", + "schema": { + "type": "string" + } + }, + { + "name": "before", + "in": "query", + "description": "The cursor used to get the previous page of results. The **Pagination** object in the response contains the cursor’s value. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) \n \nSpecify this parameter only if you specify the _user\\_id_ query parameter.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved the list of videos.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetVideosResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nGets information about the specified video.\n\n```bash\ncurl -X GET 'https://api.twitch.tv/helix/videos?id=335921245' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + { + "id": "335921245", + "stream_id": null, + "user_id": "141981764", + "user_login": "twitchdev", + "user_name": "TwitchDev", + "title": "Twitch Developers 101", + "description": "Welcome to Twitch development! Here is a quick overview of our products and information to help you get started.", + "created_at": "2018-11-14T21:30:18Z", + "published_at": "2018-11-14T22:04:30Z", + "url": "https://www.twitch.tv/videos/335921245", + "thumbnail_url": "https://static-cdn.jtvnw.net/cf_vods/d2nvs31859zcd8/twitchdev/335921245/ce0f3a7f-57a3-4152-bc06-0c6610189fb3/thumb/index-0000000000-%{width}x%{height}.jpg", + "viewable": "public", + "view_count": 1863062, + "language": "en", + "type": "upload", + "duration": "3m21s", + "muted_segments": [ + { + "duration": 30, + "offset": 120 + } + ] + } + ], + "pagination": {} + } + } + } + } + } + }, + "400": { + "description": "* The request must specify either the _id_ or _user\\_id_ or _game\\_id_ query parameter.\n* The _id_, _user\\_id_, and _game\\_id_ query parameters are mutually exclusive; you must specify only one of them.\n* The value in the _id_ query parameter is not valid.\n* The ID in the _game\\_id_ query parameter is not valid.\n* The value in the _type_ query parameter is not valid.\n* The value in the _period_ query parameter is not valid.\n* The value in the _sort_ query parameter is not valid." + }, + "401": { + "description": "* The Authorization header is required and must contain an app access token or user access token.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "404": { + "description": "* The ID in the _game\\_id_ query parameter was not found.\n* The ID in the _id_ query parameter was not found. Returned only if all the IDs were not found; otherwise, the ID is ignored." + } + }, + "security": [ + { + "twitch_auth": [] + } + ] + }, + "delete": { + "summary": "Deletes one or more videos.", + "description": "Deletes one or more videos. You may delete past broadcasts, highlights, or uploads.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **channel:manage:videos** scope.", + "tags": [ + "Videos" + ], + "externalDocs": { + "description": "Delete Videos", + "url": "https://dev.twitch.tv/docs/api/reference#delete-videos" + }, + "operationId": "delete-videos", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "The list of videos to delete. To specify more than one video, include the _id_ parameter for each video to delete. For example, `id=1234&id=5678`. You can delete a maximum of 5 videos per request. Ignores invalid video IDs. \n \nIf the user doesn’t have permission to delete one of the videos in the list, none of the videos are deleted.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": true, + "explode": true + } + ], + "responses": { + "200": { + "description": "Successfully deleted the list of videos.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteVideosResponse" + }, + "examples": { + "Example": { + "description": "_Request:_\n\nDeletes the two specified videos.\n\n```bash\ncurl -X DELETE 'https://api.twitch.tv/helix/videos?id=1234&id=9876' \\\n-H 'Authorization: Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx' \\\n-H 'Client-Id: uo6dggojyb8d6soh92zknwmi5ej1q2'\n```", + "value": { + "data": [ + "1234", + "9876" + ] + } + } + } + } + } + }, + "400": { + "description": "* The _id_ query parameter is required.\n* The request exceeded the number of allowed _id_ query parameters." + }, + "401": { + "description": "* The caller is not authorized to delete the specified video.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **channel:manage:videos** scope.\n* The access token is not valid.\n* The ID specified in the Client-Id header does not match the client ID specified in the access token." + } + }, + "security": [ + { + "twitch_auth": [ + "channel:manage:videos" + ] + } + ] + } + }, + "/whispers": { + "post": { + "summary": "Sends a whisper message to the specified user.", + "description": "Sends a whisper message to the specified user.\n\nNOTE: The user sending the whisper must have a verified phone number (see the **Phone Number** setting in your [Security and Privacy](https://www.twitch.tv/settings/security) settings).\n\nNOTE: The API may silently drop whispers that it suspects of violating Twitch policies. (The API does not indicate that it dropped the whisper; it returns a 204 status code as if it succeeded.)\n\n**Rate Limits**: You may whisper to a maximum of 40 unique recipients per day. Within the per day limit, you may whisper a maximum of 3 whispers per second and a maximum of 100 whispers per minute.\n\n__Authorization:__\n\nRequires a [user access token](https://dev.twitch.tv/docs/authentication#user-access-tokens) that includes the **user:manage:whispers** scope.", + "tags": [ + "Whispers" + ], + "externalDocs": { + "description": "Send Whisper", + "url": "https://dev.twitch.tv/docs/api/reference#send-whisper" + }, + "operationId": "send-whisper", + "parameters": [ + { + "name": "from_user_id", + "in": "query", + "description": "The ID of the user sending the whisper. This user must have a verified phone number. This ID must match the user ID in the user access token.", + "schema": { + "type": "string" + }, + "required": true + }, + { + "name": "to_user_id", + "in": "query", + "description": "The ID of the user to receive the whisper.", + "schema": { + "type": "string" + }, + "required": true + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendWhisperBody" + }, + "examples": { + "Example": { + "value": { + "message": "hello" + }, + "description": "Send the user a whisper message." + } + } + } + } + }, + "responses": { + "204": { + "description": "Successfully sent the whisper message or the message was silently dropped.\n\n__Examples__\n\n_Request:_\n\nSend the user a whisper message.\n\n```bash\ncurl -X POST 'https://api.twitch.tv/helix/whispers?from_user_id=123&to_user_id=456' \\\n-H 'Authorization: Bearer kpvy3cjboyptmdkiacwr0c19hotn5s' \\\n-H 'Client-Id: hof5gwx0su6owfnys0nyan9c87zr6t' \\\n-H 'Content-Type: application/json' \\\n-d '{\"message\":\"hello\"}'\n```" + }, + "400": { + "description": "* The ID in the _from\\_user\\_id_ and _to\\_user\\_id_ query parameters must be different.\n* The `message` field must not contain an empty string.\n* 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).\n* Whisper messages may not be sent to suspended users.\n* The ID in the _from\\_user\\_id_ query parameter is not valid.\n* The ID in the _to\\_user\\_id_ query parameter is not valid." + }, + "401": { + "description": "* The user in the _from\\_user\\_id_ query parameter must have a verified phone number.\n* The Authorization header is required and must contain a user access token.\n* The user access token must include the **user:manage:whispers** scope.\n* The access token is not valid.\n* This ID in _from\\_user\\_id_ must match the user ID in the user access token.\n* The client ID specified in the Client-Id header does not match the client ID specified in the access token." + }, + "403": { + "description": "* Suspended users may not send whisper messages.\n* The account that's sending the message doesn't allow sending whispers." + }, + "404": { + "description": "* The ID in _to\\_user\\_id_ was not found." + }, + "429": { + "description": "* The sending user exceeded the number of whisper requests that they may make. See Rate Limits for this endpoint above." + } + }, + "security": [ + { + "twitch_auth": [ + "user:manage:whispers" + ] + } + ] + } + } + }, + "components": { + "schemas": { + "StartCommercialBody": { + "type": "object", + "required": [ + "broadcaster_id", + "length" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the partner or affiliate broadcaster that wants to run the commercial. This ID must match the user ID found in the OAuth token." + }, + "length": { + "type": "integer", + "description": "The length of the commercial to run, in seconds. Twitch tries to serve a commercial that’s the requested length, but it may be shorter or longer. The maximum length you should request is 180 seconds.", + "format": "int32" + } + } + }, + "StartCommercialResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "An array that contains a single object with the status of your start commercial request.", + "items": { + "type": "object", + "required": [ + "length", + "message", + "retry_after" + ], + "properties": { + "length": { + "type": "integer", + "description": "The length of the commercial you requested. If you request a commercial that’s longer than 180 seconds, the API uses 180 seconds.", + "format": "int32" + }, + "message": { + "type": "string", + "description": "A message that indicates whether Twitch was able to serve an ad." + }, + "retry_after": { + "type": "integer", + "description": "The number of seconds you must wait before running another commercial.", + "format": "int32" + } + } + } + } + } + }, + "GetAdScheduleResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains information related to the channel’s ad schedule.", + "items": { + "type": "object", + "required": [ + "snooze_count", + "snooze_refresh_at", + "next_ad_at", + "duration", + "last_ad_at", + "preroll_free_time" + ], + "properties": { + "snooze_count": { + "type": "integer", + "description": "The number of snoozes available for the broadcaster.", + "format": "int32" + }, + "snooze_refresh_at": { + "type": "string", + "description": "The UTC timestamp when the broadcaster will gain an additional snooze, in RFC3339 format.", + "format": "date-time" + }, + "next_ad_at": { + "type": "string", + "description": "The UTC timestamp of the broadcaster’s next scheduled ad, in RFC3339 format. Empty if the channel has no ad scheduled or is not live.", + "format": "date-time" + }, + "duration": { + "type": "integer", + "description": "The length in seconds of the scheduled upcoming ad break.", + "format": "int32" + }, + "last_ad_at": { + "type": "string", + "description": "The UTC timestamp of the broadcaster’s last ad-break, in RFC3339 format. Empty if the channel has not run an ad or is not live.", + "format": "date-time" + }, + "preroll_free_time": { + "type": "integer", + "description": "The amount of pre-roll free time remaining for the channel in seconds. Returns 0 if they are currently not pre-roll free.", + "format": "int32" + } + } + } + } + } + }, + "SnoozeNextAdResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains information about the channel’s snoozes and next upcoming ad after successfully snoozing.", + "items": { + "type": "object", + "required": [ + "snooze_count", + "snooze_refresh_at", + "next_ad_at" + ], + "properties": { + "snooze_count": { + "type": "integer", + "description": "The number of snoozes available for the broadcaster.", + "format": "int32" + }, + "snooze_refresh_at": { + "type": "string", + "description": "The UTC timestamp when the broadcaster will gain an additional snooze, in RFC3339 format.", + "format": "date-time" + }, + "next_ad_at": { + "type": "string", + "description": "The UTC timestamp of the broadcaster’s next scheduled ad, in RFC3339 format.", + "format": "date-time" + } + } + } + } + } + }, + "ExtensionAnalytics": { + "type": "object", + "required": [ + "extension_id", + "URL", + "type", + "date_range" + ], + "properties": { + "extension_id": { + "type": "string", + "description": "An ID that identifies the extension that the report was generated for." + }, + "URL": { + "type": "string", + "description": "The URL that you use to download the report. The URL is valid for 5 minutes." + }, + "type": { + "type": "string", + "description": "The type of report." + }, + "date_range": { + "description": "The reporting window’s start and end dates, in RFC3339 format.", + "type": "object", + "required": [ + "started_at", + "ended_at" + ], + "properties": { + "started_at": { + "type": "string", + "description": "The reporting window’s start date.", + "format": "date-time" + }, + "ended_at": { + "type": "string", + "description": "The reporting window’s end date.", + "format": "date-time" + } + } + } + } + }, + "GetExtensionAnalyticsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of reports. The reports are returned in no particular order; however, the data within each report is in ascending order by date (newest first). The report contains one row of data per day of the reporting window; the report contains rows for only those days that the extension was used. The array is empty if there are no reports.", + "items": { + "$ref": "#/components/schemas/ExtensionAnalytics" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "GameAnalytics": { + "type": "object", + "required": [ + "game_id", + "URL", + "type", + "date_range" + ], + "properties": { + "game_id": { + "type": "string", + "description": "An ID that identifies the game that the report was generated for." + }, + "URL": { + "type": "string", + "description": "The URL that you use to download the report. The URL is valid for 5 minutes." + }, + "type": { + "type": "string", + "description": "The type of report." + }, + "date_range": { + "description": "The reporting window’s start and end dates, in RFC3339 format.", + "type": "object", + "required": [ + "started_at", + "ended_at" + ], + "properties": { + "started_at": { + "type": "string", + "description": "The reporting window’s start date.", + "format": "date-time" + }, + "ended_at": { + "type": "string", + "description": "The reporting window’s end date.", + "format": "date-time" + } + } + } + } + }, + "GetGameAnalyticsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of reports. The reports are returned in no particular order; however, the data within each report is in ascending order by date (newest first). The report contains one row of data per day of the reporting window; the report contains rows for only those days that the game was used. A report is available only if the game was broadcast for at least 5 hours over the reporting period. The array is empty if there are no reports.", + "items": { + "$ref": "#/components/schemas/GameAnalytics" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "BitsLeaderboard": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name", + "rank", + "score" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that identifies a user on the leaderboard." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "rank": { + "type": "integer", + "description": "The user’s position on the leaderboard.", + "format": "int32" + }, + "score": { + "type": "integer", + "description": "The number of Bits the user has cheered.", + "format": "int32" + } + } + }, + "GetBitsLeaderboardResponse": { + "type": "object", + "required": [ + "data", + "date_range", + "total" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of leaderboard leaders. The leaders are returned in rank order by how much they’ve cheered. The array is empty if nobody has cheered bits.", + "items": { + "$ref": "#/components/schemas/BitsLeaderboard" + } + }, + "date_range": { + "description": "The reporting window’s start and end dates, in RFC3339 format. The dates are calculated by using the _started\\_at_ and _period_ query parameters. If you don’t specify the _started\\_at_ query parameter, the fields contain empty strings.", + "type": "object", + "required": [ + "started_at", + "ended_at" + ], + "properties": { + "started_at": { + "type": "string", + "description": "The reporting window’s start date.", + "format": "date-time" + }, + "ended_at": { + "type": "string", + "description": "The reporting window’s end date.", + "format": "date-time" + } + } + }, + "total": { + "type": "integer", + "description": "The number of ranked users in `data`. This is the value in the _count_ query parameter or the total number of entries on the leaderboard, whichever is less.", + "format": "int32" + } + } + }, + "CheermoteImageFormat": { + "type": "object", + "properties": { + "1": { + "type": "string" + }, + "2": { + "type": "string" + }, + "3": { + "type": "string" + }, + "4": { + "type": "string" + }, + "1.5": { + "type": "string" + } + } + }, + "CheermoteImageTheme": { + "type": "object", + "properties": { + "animated": { + "$ref": "#/components/schemas/CheermoteImageFormat" + }, + "static": { + "$ref": "#/components/schemas/CheermoteImageFormat" + } + } + }, + "CheermoteImages": { + "type": "object", + "properties": { + "light": { + "$ref": "#/components/schemas/CheermoteImageTheme" + }, + "dark": { + "$ref": "#/components/schemas/CheermoteImageTheme" + } + } + }, + "Cheermote": { + "type": "object", + "required": [ + "prefix", + "tiers", + "type", + "order", + "last_updated", + "is_charitable" + ], + "properties": { + "prefix": { + "type": "string", + "description": "The name portion of the Cheermote string that you use in chat to cheer Bits. The full Cheermote string is the concatenation of {prefix} + {number of Bits}. For example, if the prefix is “Cheer” and you want to cheer 100 Bits, the full Cheermote string is Cheer100\\. When the Cheermote string is entered in chat, Twitch converts it to the image associated with the Bits tier that was cheered." + }, + "tiers": { + "type": "array", + "description": "A list of tier levels that the Cheermote supports. Each tier identifies the range of Bits that you can cheer at that tier level and an image that graphically identifies the tier level.", + "items": { + "type": "object", + "required": [ + "min_bits", + "id", + "color", + "images", + "can_cheer", + "show_in_bits_card" + ], + "properties": { + "min_bits": { + "type": "integer", + "description": "The minimum number of Bits that you must cheer at this tier level. The maximum number of Bits that you can cheer at this level is determined by the required minimum Bits of the next tier level minus 1\\. For example, if `min_bits` is 1 and `min_bits` for the next tier is 100, the Bits range for this tier level is 1 through 99\\. The minimum Bits value of the last tier is the maximum number of Bits you can cheer using this Cheermote. For example, 10000.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "The tier level. Possible tiers are: \n \n* 1\n* 100\n* 500\n* 1000\n* 5000\n* 10000\n* 100000", + "enum": [ + "1", + "100", + "500", + "1000", + "5000", + "10000", + "100000" + ] + }, + "color": { + "type": "string", + "description": "The hex code of the color associated with this tier level (for example, #979797)." + }, + "images": { + "$ref": "#/components/schemas/CheermoteImages" + }, + "can_cheer": { + "type": "boolean", + "description": "A Boolean value that determines whether users can cheer at this tier level." + }, + "show_in_bits_card": { + "type": "boolean", + "description": "A Boolean value that determines whether this tier level is shown in the Bits card. Is **true** if this tier level is shown in the Bits card." + } + } + } + }, + "type": { + "type": "string", + "description": "The type of Cheermote. Possible values are: \n \n* global\\_first\\_party — A Twitch-defined Cheermote that is shown in the Bits card.\n* global\\_third\\_party — A Twitch-defined Cheermote that is not shown in the Bits card.\n* channel\\_custom — A broadcaster-defined Cheermote.\n* display\\_only — Do not use; for internal use only.\n* sponsored — A sponsor-defined Cheermote. When used, the sponsor adds additional Bits to the amount that the user cheered. For example, if the user cheered Terminator100, the broadcaster might receive 110 Bits, which includes the sponsor's 10 Bits contribution.", + "enum": [ + "global_first_party", + "global_third_party", + "channel_custom", + "display_only", + "sponsored" + ] + }, + "order": { + "type": "integer", + "description": "The order that the Cheermotes are shown in the Bits card. The numbers may not be consecutive. For example, the numbers may jump from 1 to 7 to 13\\. The order numbers are unique within a Cheermote type (for example, global\\_first\\_party) but may not be unique amongst all Cheermotes in the response.", + "format": "int32" + }, + "last_updated": { + "type": "string", + "description": "The date and time, in RFC3339 format, when this Cheermote was last updated.", + "format": "date-time" + }, + "is_charitable": { + "type": "boolean", + "description": "A Boolean value that indicates whether this Cheermote provides a charitable contribution match during charity campaigns." + } + } + }, + "GetCheermotesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of Cheermotes. The list is in ascending order by the `order` field’s value.", + "items": { + "$ref": "#/components/schemas/Cheermote" + } + } + } + }, + "ExtensionTransaction": { + "type": "object", + "required": [ + "id", + "timestamp", + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "user_id", + "user_login", + "user_name", + "product_type", + "product_data" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the transaction." + }, + "timestamp": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of the transaction.", + "format": "date-time" + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that owns the channel where the transaction occurred." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "user_id": { + "type": "string", + "description": "The ID of the user that purchased the digital product." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "product_type": { + "type": "string", + "description": "The type of transaction. Possible values are: \n \n* BITS\\_IN\\_EXTENSION", + "enum": [ + "BITS_IN_EXTENSION" + ] + }, + "product_data": { + "description": "Contains details about the digital product.", + "type": "object", + "required": [ + "sku", + "domain", + "cost", + "inDevelopment", + "displayName", + "expiration", + "broadcast" + ], + "properties": { + "sku": { + "type": "string", + "description": "An ID that identifies the digital product." + }, + "domain": { + "type": "string", + "description": "Set to `twitch.ext.` \\+ ``." + }, + "cost": { + "description": "Contains details about the digital product’s cost.", + "type": "object", + "required": [ + "amount", + "type" + ], + "properties": { + "amount": { + "type": "integer", + "description": "The amount exchanged for the digital product.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of currency exchanged. Possible values are: \n \n* bits", + "enum": [ + "bits" + ] + } + } + }, + "inDevelopment": { + "type": "boolean", + "description": "A Boolean value that determines whether the product is in development. Is **true** if the digital product is in development and cannot be exchanged." + }, + "displayName": { + "type": "string", + "description": "The name of the digital product." + }, + "expiration": { + "type": "string", + "description": "This field is always empty since you may purchase only unexpired products." + }, + "broadcast": { + "type": "boolean", + "description": "A Boolean value that determines whether the data was broadcast to all instances of the extension. Is **true** if the data was broadcast to all instances." + } + } + } + } + }, + "GetExtensionTransactionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of transactions.", + "items": { + "$ref": "#/components/schemas/ExtensionTransaction" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "ChannelInformation": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "broadcaster_language", + "game_name", + "game_id", + "title", + "delay", + "tags", + "content_classification_labels", + "is_branded_content" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that uniquely identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_language": { + "type": "string", + "description": "The broadcaster’s preferred language. The value is an ISO 639-1 two-letter language code (for example, _en_ for English). The value is set to “other” if the language is not a Twitch supported language." + }, + "game_name": { + "type": "string", + "description": "The name of the game that the broadcaster is playing or last played. The value is an empty string if the broadcaster has never played a game." + }, + "game_id": { + "type": "string", + "description": "An ID that uniquely identifies the game that the broadcaster is playing or last played. The value is an empty string if the broadcaster has never played a game." + }, + "title": { + "type": "string", + "description": "The title of the stream that the broadcaster is currently streaming or last streamed. The value is an empty string if the broadcaster has never streamed." + }, + "delay": { + "type": "integer", + "description": "The value of the broadcaster’s stream delay setting, in seconds. This field’s value defaults to zero unless 1) the request specifies a user access token, 2) the ID in the _broadcaster\\_id_ query parameter matches the user ID in the access token, and 3) the broadcaster has partner status and they set a non-zero stream delay value.", + "format": "int32" + }, + "tags": { + "type": "array", + "description": "The tags applied to the channel.", + "items": { + "type": "string" + } + }, + "content_classification_labels": { + "type": "array", + "description": "The CCLs applied to the channel.", + "items": { + "type": "string" + } + }, + "is_branded_content": { + "type": "boolean", + "description": "Boolean flag indicating if the channel has branded content." + } + } + }, + "GetChannelInformationResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains information about the specified channels. The list is empty if the specified channels weren’t found.", + "items": { + "$ref": "#/components/schemas/ChannelInformation" + } + } + } + }, + "ModifyChannelInformationBody": { + "type": "object", + "properties": { + "game_id": { + "type": "string", + "description": "The ID of the game that the user plays. The game is not updated if the ID isn’t a game ID that Twitch recognizes. To unset this field, use “0” or “” (an empty string)." + }, + "broadcaster_language": { + "type": "string", + "description": "The user’s preferred language. Set the value to an ISO 639-1 two-letter language code (for example, _en_ for English). Set to “other” if the user’s preferred language is not a Twitch supported language. The language isn’t updated if the language code isn’t a Twitch supported language." + }, + "title": { + "type": "string", + "description": "The title of the user’s stream. You may not set this field to an empty string." + }, + "delay": { + "type": "integer", + "description": "The number of seconds you want your broadcast buffered before streaming it live. The delay helps ensure fairness during competitive play. Only users with Partner status may set this field. The maximum delay is 900 seconds (15 minutes).", + "format": "int32" + }, + "tags": { + "type": "array", + "description": "A list of channel-defined tags to apply to the channel. To remove all tags from the channel, set tags to an empty array. Tags help identify the content that the channel streams. [Learn More](https://help.twitch.tv/s/article/guide-to-tags) \n \nA channel may specify a maximum of 10 tags. Each tag is limited to a maximum of 25 characters and may not be an empty string or contain spaces or special characters. Tags are case insensitive. For readability, consider using camelCasing or PascalCasing.", + "items": { + "type": "string" + } + }, + "content_classification_labels": { + "type": "array", + "description": "List of labels that should be set as the Channel’s CCLs.", + "items": { + "type": "object", + "required": [ + "id", + "is_enabled" + ], + "properties": { + "id": { + "type": "string", + "description": "ID of the [Content Classification Labels](https://blog.twitch.tv/en/2023/06/20/introducing-content-classification-labels/) that must be added/removed from the channel. Can be one of the following values: \n \n* DrugsIntoxication\n* SexualThemes\n* ViolentGraphic\n* Gambling\n* ProfanityVulgarity", + "enum": [ + "DrugsIntoxication", + "SexualThemes", + "ViolentGraphic", + "Gambling", + "ProfanityVulgarity" + ] + }, + "is_enabled": { + "type": "boolean", + "description": "Boolean flag indicating whether the label should be enabled (true) or disabled for the channel." + } + } + } + }, + "is_branded_content": { + "type": "boolean", + "description": "Boolean flag indicating if the channel has branded content." + } + } + }, + "ChannelEditor": { + "type": "object", + "required": [ + "user_id", + "user_name", + "created_at" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that uniquely identifies a user with editor permissions." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "created_at": { + "type": "string", + "description": "The date and time, in RFC3339 format, when the user became one of the broadcaster’s editors.", + "format": "date-time" + } + } + }, + "GetChannelEditorsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of users that are editors for the specified broadcaster. The list is empty if the broadcaster doesn’t have editors.", + "items": { + "$ref": "#/components/schemas/ChannelEditor" + } + } + } + }, + "GetFollowedChannelsResponse": { + "type": "object", + "required": [ + "data", + "total" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of broadcasters that the user follows. The list is in descending order by `followed_at` (with the most recently followed broadcaster first). The list is empty if the user doesn’t follow anyone.", + "items": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "followed_at" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that uniquely identifies the broadcaster that this user is following." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "followed_at": { + "type": "string", + "description": "The UTC timestamp when the user started following the broadcaster.", + "format": "date-time" + } + } + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination).", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + }, + "total": { + "type": "integer", + "description": "The total number of broadcasters that the user follows. As someone pages through the list, the number may change as the user follows or unfollows broadcasters.", + "format": "int32" + } + } + }, + "GetChannelFollowersResponse": { + "type": "object", + "required": [ + "data", + "total" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users that follow the specified broadcaster. The list is in descending order by `followed_at` (with the most recent follower first). The list is empty if nobody follows the broadcaster, the specified `user_id` isn’t in the follower list, the user access token is missing the **moderator:read:followers** scope, or the user isn’t the broadcaster or moderator for the channel.", + "items": { + "type": "object", + "required": [ + "followed_at", + "user_id", + "user_login", + "user_name" + ], + "properties": { + "followed_at": { + "type": "string", + "description": "The UTC timestamp when the user started following the broadcaster.", + "format": "date-time" + }, + "user_id": { + "type": "string", + "description": "An ID that uniquely identifies the user that’s following the broadcaster." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + } + } + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination).", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + }, + "total": { + "type": "integer", + "description": "The total number of users that follow this broadcaster. As someone pages through the list, the number of users may change as users follow or unfollow the broadcaster.", + "format": "int32" + } + } + }, + "CreateCustomRewardsBody": { + "type": "object", + "required": [ + "title", + "cost" + ], + "properties": { + "title": { + "type": "string", + "description": "The custom reward’s title. The title may contain a maximum of 45 characters and it must be unique amongst all of the broadcaster’s custom rewards." + }, + "cost": { + "type": "integer", + "description": "The cost of the reward, in Channel Points. The minimum is 1 point.", + "format": "int64" + }, + "prompt": { + "type": "string", + "description": "The prompt shown to the viewer when they redeem the reward. Specify a prompt if `is_user_input_required` is **true**. The prompt is limited to a maximum of 200 characters." + }, + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward is enabled. Viewers see only enabled rewards. The default is **true**." + }, + "background_color": { + "type": "string", + "description": "The background color to use for the reward. Specify the color using Hex format (for example, #9147FF)." + }, + "is_user_input_required": { + "type": "boolean", + "description": "A Boolean value that determines whether the user needs to enter information when redeeming the reward. See the `prompt` field. The default is **false**." + }, + "is_max_per_stream_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to limit the maximum number of redemptions allowed per live stream (see the `max_per_stream` field). The default is **false**." + }, + "max_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per live stream. Applied only if `is_max_per_stream_enabled` is **true**. The minimum value is 1.", + "format": "int32" + }, + "is_max_per_user_per_stream_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to limit the maximum number of redemptions allowed per user per stream (see the `max_per_user_per_stream` field). The default is **false**." + }, + "max_per_user_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per user per stream. Applied only if `is_max_per_user_per_stream_enabled` is **true**. The minimum value is 1.", + "format": "int32" + }, + "is_global_cooldown_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to apply a cooldown period between redemptions (see the `global_cooldown_seconds` field for the duration of the cooldown period). The default is **false**." + }, + "global_cooldown_seconds": { + "type": "integer", + "description": "The cooldown period, in seconds. Applied only if the `is_global_cooldown_enabled` field is **true**. The minimum value is 1; however, the minimum value is 60 for it to be shown in the Twitch UX.", + "format": "int32" + }, + "should_redemptions_skip_request_queue": { + "type": "boolean", + "description": "A Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If **false**, status is set to UNFULFILLED and follows the normal request queue process. The default is **false**." + } + } + }, + "CustomReward": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "id", + "title", + "prompt", + "cost", + "image", + "default_image", + "background_color", + "is_enabled", + "is_user_input_required", + "max_per_stream_setting", + "max_per_user_per_stream_setting", + "global_cooldown_setting", + "is_paused", + "is_in_stock", + "should_redemptions_skip_request_queue", + "redemptions_redeemed_current_stream", + "cooldown_expires_at" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID that uniquely identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "id": { + "type": "string", + "description": "The ID that uniquely identifies this custom reward." + }, + "title": { + "type": "string", + "description": "The title of the reward." + }, + "prompt": { + "type": "string", + "description": "The prompt shown to the viewer when they redeem the reward if user input is required. See the `is_user_input_required` field." + }, + "cost": { + "type": "integer", + "description": "The cost of the reward in Channel Points.", + "format": "int64" + }, + "image": { + "description": "A set of custom images for the reward. This field is **null** if the broadcaster didn’t upload images.", + "type": "object", + "required": [ + "url_1x", + "url_2x", + "url_4x" + ], + "properties": { + "url_1x": { + "type": "string", + "description": "The URL to a small version of the image." + }, + "url_2x": { + "type": "string", + "description": "The URL to a medium version of the image." + }, + "url_4x": { + "type": "string", + "description": "The URL to a large version of the image." + } + } + }, + "default_image": { + "description": "A set of default images for the reward.", + "type": "object", + "required": [ + "url_1x", + "url_2x", + "url_4x" + ], + "properties": { + "url_1x": { + "type": "string", + "description": "The URL to a small version of the image." + }, + "url_2x": { + "type": "string", + "description": "The URL to a medium version of the image." + }, + "url_4x": { + "type": "string", + "description": "The URL to a large version of the image." + } + } + }, + "background_color": { + "type": "string", + "description": "The background color to use for the reward. The color is in Hex format (for example, #00E5CB)." + }, + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward is enabled. Is **true** if enabled; otherwise, **false**. Disabled rewards aren’t shown to the user." + }, + "is_user_input_required": { + "type": "boolean", + "description": "A Boolean value that determines whether the user must enter information when they redeem the reward. Is **true** if the user is prompted." + }, + "max_per_stream_setting": { + "description": "The settings used to determine whether to apply a maximum to the number of redemptions allowed per live stream.", + "type": "object", + "required": [ + "is_enabled", + "max_per_stream" + ], + "properties": { + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per live stream. Is **true** if the reward applies a limit." + }, + "max_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per live stream.", + "format": "int64" + } + } + }, + "max_per_user_per_stream_setting": { + "description": "The settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream.", + "type": "object", + "required": [ + "is_enabled", + "max_per_user_per_stream" + ], + "properties": { + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per user per live stream. Is **true** if the reward applies a limit." + }, + "max_per_user_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per user per live stream.", + "format": "int64" + } + } + }, + "global_cooldown_setting": { + "description": "The settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown.", + "type": "object", + "required": [ + "is_enabled", + "global_cooldown_seconds" + ], + "properties": { + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to apply a cooldown period. Is **true** if a cooldown period is enabled." + }, + "global_cooldown_seconds": { + "type": "integer", + "description": "The cooldown period, in seconds.", + "format": "int64" + } + } + }, + "is_paused": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward is currently paused. Is **true** if the reward is paused. Viewers can’t redeem paused rewards." + }, + "is_in_stock": { + "type": "boolean", + "description": "A Boolean value that determines whether the reward is currently in stock. Is **true** if the reward is in stock. Viewers can’t redeem out of stock rewards." + }, + "should_redemptions_skip_request_queue": { + "type": "boolean", + "description": "A Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If **false**, status is set to UNFULFILLED and follows the normal request queue process." + }, + "redemptions_redeemed_current_stream": { + "type": "integer", + "description": "The number of redemptions redeemed during the current live stream. The number counts against the `max_per_stream_setting` limit. This field is **null** if the broadcaster’s stream isn’t live or _max\\_per\\_stream\\_setting_ isn’t enabled.", + "format": "int32", + "nullable": true + }, + "cooldown_expires_at": { + "type": "string", + "description": "The timestamp of when the cooldown period expires. Is **null** if the reward isn’t in a cooldown state. See the `global_cooldown_setting` field.", + "format": "date-time", + "nullable": true + } + } + }, + "CreateCustomRewardsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single custom reward you created.", + "items": { + "$ref": "#/components/schemas/CustomReward" + } + } + } + }, + "GetCustomRewardResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of custom rewards. The list is in ascending order by `id`. If the broadcaster hasn’t created custom rewards, the list is empty.", + "items": { + "$ref": "#/components/schemas/CustomReward" + } + } + } + }, + "CustomRewardRedemption": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "id", + "user_id", + "user_name", + "user_login", + "reward", + "user_input", + "status", + "redeemed_at" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID that uniquely identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "id": { + "type": "string", + "description": "The ID that uniquely identifies this redemption.." + }, + "user_id": { + "type": "string", + "description": "The ID of the user that redeemed the reward." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "reward": { + "description": "An object that describes the reward that the user redeemed.", + "type": "object", + "required": [ + "id", + "title", + "prompt", + "cost" + ], + "properties": { + "id": { + "type": "string", + "description": "The ID that uniquely identifies the reward." + }, + "title": { + "type": "string", + "description": "The reward’s title." + }, + "prompt": { + "type": "string", + "description": "The prompt displayed to the viewer if user input is required." + }, + "cost": { + "type": "integer", + "description": "The reward’s cost, in Channel Points.", + "format": "int64" + } + } + }, + "user_input": { + "type": "string", + "description": "The text that the user entered at the prompt when they redeemed the reward; otherwise, an empty string if user input was not required." + }, + "status": { + "type": "string", + "description": "The state of the redemption. Possible values are: \n \n* CANCELED\n* FULFILLED\n* UNFULFILLED", + "enum": [ + "CANCELED", + "FULFILLED", + "UNFULFILLED" + ] + }, + "redeemed_at": { + "type": "string", + "description": "The date and time of when the reward was redeemed, in RFC3339 format.", + "format": "date-time" + } + } + }, + "GetCustomRewardRedemptionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of redemptions for the specified reward. The list is empty if there are no redemptions that match the redemption criteria.", + "items": { + "$ref": "#/components/schemas/CustomRewardRedemption" + } + } + } + }, + "UpdateCustomRewardBody": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The reward’s title. The title may contain a maximum of 45 characters and it must be unique amongst all of the broadcaster’s custom rewards." + }, + "prompt": { + "type": "string", + "description": "The prompt shown to the viewer when they redeem the reward. Specify a prompt if `is_user_input_required` is **true**. The prompt is limited to a maximum of 200 characters." + }, + "cost": { + "type": "integer", + "description": "The cost of the reward, in channel points. The minimum is 1 point.", + "format": "int64" + }, + "background_color": { + "type": "string", + "description": "The background color to use for the reward. Specify the color using Hex format (for example, \\\\#00E5CB)." + }, + "is_enabled": { + "type": "boolean", + "description": "A Boolean value that indicates whether the reward is enabled. Set to **true** to enable the reward. Viewers see only enabled rewards." + }, + "is_user_input_required": { + "type": "boolean", + "description": "A Boolean value that determines whether users must enter information to redeem the reward. Set to **true** if user input is required. See the `prompt` field." + }, + "is_max_per_stream_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to limit the maximum number of redemptions allowed per live stream (see the `max_per_stream` field). Set to **true** to limit redemptions." + }, + "max_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per live stream. Applied only if `is_max_per_stream_enabled` is **true**. The minimum value is 1.", + "format": "int64" + }, + "is_max_per_user_per_stream_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to limit the maximum number of redemptions allowed per user per stream (see `max_per_user_per_stream`). The minimum value is 1\\. Set to **true** to limit redemptions." + }, + "max_per_user_per_stream": { + "type": "integer", + "description": "The maximum number of redemptions allowed per user per stream. Applied only if `is_max_per_user_per_stream_enabled` is **true**.", + "format": "int64" + }, + "is_global_cooldown_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether to apply a cooldown period between redemptions. Set to **true** to apply a cooldown period. For the duration of the cooldown period, see `global_cooldown_seconds`." + }, + "global_cooldown_seconds": { + "type": "integer", + "description": "The cooldown period, in seconds. Applied only if `is_global_cooldown_enabled` is **true**. The minimum value is 1; however, for it to be shown in the Twitch UX, the minimum value is 60.", + "format": "int64" + }, + "is_paused": { + "type": "boolean", + "description": "A Boolean value that determines whether to pause the reward. Set to **true** to pause the reward. Viewers can’t redeem paused rewards.." + }, + "should_redemptions_skip_request_queue": { + "type": "boolean", + "description": "A Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If **false**, status is set to UNFULFILLED and follows the normal request queue process." + } + } + }, + "UpdateCustomRewardResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list contains the single reward that you updated.", + "items": { + "$ref": "#/components/schemas/CustomReward" + } + } + } + }, + "UpdateRedemptionStatusBody": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "type": "string", + "description": "The status to set the redemption to. Possible values are: \n \n* CANCELED\n* FULFILLED\n \nSetting the status to CANCELED refunds the user’s channel points.", + "enum": [ + "CANCELED", + "FULFILLED" + ] + } + } + }, + "UpdateRedemptionStatusResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list contains the single redemption that you updated.", + "items": { + "$ref": "#/components/schemas/CustomRewardRedemption" + } + } + } + }, + "CharityCampaign": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "charity_name", + "charity_description", + "charity_logo", + "charity_website", + "current_amount", + "target_amount" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the charity campaign." + }, + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster that’s running the campaign." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "charity_name": { + "type": "string", + "description": "The charity’s name." + }, + "charity_description": { + "type": "string", + "description": "A description of the charity." + }, + "charity_logo": { + "type": "string", + "description": "A URL to an image of the charity’s logo. The image’s type is PNG and its size is 100px X 100px." + }, + "charity_website": { + "type": "string", + "description": "A URL to the charity’s website." + }, + "current_amount": { + "description": "The current amount of donations that the campaign has received.", + "type": "object", + "required": [ + "value", + "decimal_places", + "currency" + ], + "properties": { + "value": { + "type": "integer", + "description": "The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550.", + "format": "int32" + }, + "decimal_places": { + "type": "integer", + "description": "The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: \n \n`value / 10^decimal_places`", + "format": "int32" + }, + "currency": { + "type": "string", + "description": "The ISO-4217 three-letter currency code that identifies the type of currency in `value`." + } + } + }, + "target_amount": { + "description": "The campaign’s fundraising goal. This field is **null** if the broadcaster has not defined a fundraising goal.", + "type": "object", + "required": [ + "value", + "decimal_places", + "currency" + ], + "properties": { + "value": { + "type": "integer", + "description": "The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550.", + "format": "int32" + }, + "decimal_places": { + "type": "integer", + "description": "The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: \n \n`value / 10^decimal_places`", + "format": "int32" + }, + "currency": { + "type": "string", + "description": "The ISO-4217 three-letter currency code that identifies the type of currency in `value`." + } + } + } + } + }, + "GetCharityCampaignResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the charity campaign that the broadcaster is currently running. The list is empty if the broadcaster is not running a charity campaign; the campaign information is not available after the campaign ends.", + "items": { + "$ref": "#/components/schemas/CharityCampaign" + } + } + } + }, + "CharityCampaignDonation": { + "type": "object", + "required": [ + "id", + "campaign_id", + "user_id", + "user_login", + "user_name", + "amount" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the donation. The ID is unique across campaigns." + }, + "campaign_id": { + "type": "string", + "description": "An ID that identifies the charity campaign that the donation applies to." + }, + "user_id": { + "type": "string", + "description": "An ID that identifies a user that donated money to the campaign." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "amount": { + "description": "An object that contains the amount of money that the user donated.", + "type": "object", + "required": [ + "value", + "decimal_places", + "currency" + ], + "properties": { + "value": { + "type": "integer", + "description": "The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550.", + "format": "int32" + }, + "decimal_places": { + "type": "integer", + "description": "The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: \n \n`value / 10^decimal_places`", + "format": "int32" + }, + "currency": { + "type": "string", + "description": "The ISO-4217 three-letter currency code that identifies the type of currency in `value`." + } + } + } + } + }, + "GetCharityCampaignDonationsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the donations that users have made to the broadcaster’s charity campaign. The list is empty if the broadcaster is not currently running a charity campaign; the donation information is not available after the campaign ends.", + "items": { + "$ref": "#/components/schemas/CharityCampaignDonation" + } + }, + "pagination": { + "description": "An object that contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "Chatter": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of a user that’s connected to the broadcaster’s chat room." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + } + } + }, + "GetChattersResponse": { + "type": "object", + "required": [ + "data", + "total" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users that are connected to the broadcaster’s chat room. The list is empty if no users are connected to the chat room.", + "items": { + "$ref": "#/components/schemas/Chatter" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + }, + "total": { + "type": "integer", + "description": "The total number of users that are connected to the broadcaster’s chat room. As you page through the list, the number of users may change as users join and leave the chat room.", + "format": "int32" + } + } + }, + "ChannelEmote": { + "type": "object", + "required": [ + "id", + "name", + "images", + "tier", + "emote_type", + "emote_set_id", + "format", + "scale", + "theme_mode" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this emote." + }, + "name": { + "type": "string", + "description": "The name of the emote. This is the name that viewers type in the chat window to get the emote to appear." + }, + "images": { + "description": "The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. \n \n**NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs.", + "type": "object", + "required": [ + "url_1x", + "url_2x", + "url_4x" + ], + "properties": { + "url_1x": { + "type": "string", + "description": "A URL to the small version (28px x 28px) of the emote." + }, + "url_2x": { + "type": "string", + "description": "A URL to the medium version (56px x 56px) of the emote." + }, + "url_4x": { + "type": "string", + "description": "A URL to the large version (112px x 112px) of the emote." + } + } + }, + "tier": { + "type": "string", + "description": "The subscriber tier at which the emote is unlocked. This field contains the tier information only if `emote_type` is set to `subscriptions`, otherwise, it's an empty string." + }, + "emote_type": { + "type": "string", + "description": "The type of emote. The possible values are: \n \n* bitstier — A custom Bits tier emote.\n* follower — A custom follower emote.\n* subscriptions — A custom subscriber emote.", + "enum": [ + "bitstier", + "follower", + "subscriptions" + ] + }, + "emote_set_id": { + "type": "string", + "description": "An ID that identifies the emote set that the emote belongs to." + }, + "format": { + "type": "array", + "description": "The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only `static`. But if the emote is available as a static PNG and an animated GIF, the array contains `static` and `animated`. The possible formats are: \n \n* animated — An animated GIF is available for this emote.\n* static — A static PNG file is available for this emote.", + "items": { + "type": "string", + "enum": [ + "animated", + "static" + ] + } + }, + "scale": { + "type": "array", + "description": "The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\\. Possible sizes are: \n \n* 1.0 — A small version (28px x 28px) is available.\n* 2.0 — A medium version (56px x 56px) is available.\n* 3.0 — A large version (112px x 112px) is available.", + "items": { + "type": "string", + "enum": [ + "1.0", + "2.0", + "3.0" + ] + } + }, + "theme_mode": { + "type": "array", + "description": "The background themes that the emote is available in. Possible themes are: \n \n* dark\n* light", + "items": { + "type": "string", + "enum": [ + "dark", + "light" + ] + } + } + } + }, + "GetChannelEmotesResponse": { + "type": "object", + "required": [ + "data", + "template" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of emotes that the specified broadcaster created. If the broadcaster hasn't created custom emotes, the list is empty.", + "items": { + "$ref": "#/components/schemas/ChannelEmote" + } + }, + "template": { + "type": "string", + "description": "A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object." + } + } + }, + "GlobalEmote": { + "type": "object", + "required": [ + "id", + "name", + "images", + "format", + "scale", + "theme_mode" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this emote." + }, + "name": { + "type": "string", + "description": "The name of the emote. This is the name that viewers type in the chat window to get the emote to appear." + }, + "images": { + "description": "The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. \n \n**NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs.", + "type": "object", + "required": [ + "url_1x", + "url_2x", + "url_4x" + ], + "properties": { + "url_1x": { + "type": "string", + "description": "A URL to the small version (28px x 28px) of the emote." + }, + "url_2x": { + "type": "string", + "description": "A URL to the medium version (56px x 56px) of the emote." + }, + "url_4x": { + "type": "string", + "description": "A URL to the large version (112px x 112px) of the emote." + } + } + }, + "format": { + "type": "array", + "description": "The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only `static`. But if the emote is available as a static PNG and an animated GIF, the array contains `static` and `animated`. The possible formats are: \n \n* animated — An animated GIF is available for this emote.\n* static — A static PNG file is available for this emote.", + "items": { + "type": "string", + "enum": [ + "animated", + "static" + ] + } + }, + "scale": { + "type": "array", + "description": "The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\\. Possible sizes are: \n \n* 1.0 — A small version (28px x 28px) is available.\n* 2.0 — A medium version (56px x 56px) is available.\n* 3.0 — A large version (112px x 112px) is available.", + "items": { + "type": "string", + "enum": [ + "1.0", + "2.0", + "3.0" + ] + } + }, + "theme_mode": { + "type": "array", + "description": "The background themes that the emote is available in. Possible themes are: \n \n* dark\n* light", + "items": { + "type": "string", + "enum": [ + "dark", + "light" + ] + } + } + } + }, + "GetGlobalEmotesResponse": { + "type": "object", + "required": [ + "data", + "template" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of global emotes.", + "items": { + "$ref": "#/components/schemas/GlobalEmote" + } + }, + "template": { + "type": "string", + "description": "A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object." + } + } + }, + "Emote": { + "type": "object", + "required": [ + "id", + "name", + "images", + "emote_type", + "emote_set_id", + "owner_id", + "format", + "scale", + "theme_mode" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that uniquely identifies this emote." + }, + "name": { + "type": "string", + "description": "The name of the emote. This is the name that viewers type in the chat window to get the emote to appear." + }, + "images": { + "description": "The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. \n \n**NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs.", + "type": "object", + "required": [ + "url_1x", + "url_2x", + "url_4x" + ], + "properties": { + "url_1x": { + "type": "string", + "description": "A URL to the small version (28px x 28px) of the emote." + }, + "url_2x": { + "type": "string", + "description": "A URL to the medium version (56px x 56px) of the emote." + }, + "url_4x": { + "type": "string", + "description": "A URL to the large version (112px x 112px) of the emote." + } + } + }, + "emote_type": { + "type": "string", + "description": "The type of emote. The possible values are: \n \n* bitstier — A Bits tier emote.\n* follower — A follower emote.\n* subscriptions — A subscriber emote.", + "enum": [ + "bitstier", + "follower", + "subscriptions" + ] + }, + "emote_set_id": { + "type": "string", + "description": "An ID that identifies the emote set that the emote belongs to." + }, + "owner_id": { + "type": "string", + "description": "The ID of the broadcaster who owns the emote." + }, + "format": { + "type": "array", + "description": "The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only `static`. But if the emote is available as a static PNG and an animated GIF, the array contains `static` and `animated`. The possible formats are: \n \n* animated — An animated GIF is available for this emote.\n* static — A static PNG file is available for this emote.", + "items": { + "type": "string", + "enum": [ + "animated", + "static" + ] + } + }, + "scale": { + "type": "array", + "description": "The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\\. Possible sizes are: \n \n* 1.0 — A small version (28px x 28px) is available.\n* 2.0 — A medium version (56px x 56px) is available.\n* 3.0 — A large version (112px x 112px) is available.", + "items": { + "type": "string", + "enum": [ + "1.0", + "2.0", + "3.0" + ] + } + }, + "theme_mode": { + "type": "array", + "description": "The background themes that the emote is available in. Possible themes are: \n \n* dark\n* light", + "items": { + "type": "string", + "enum": [ + "dark", + "light" + ] + } + } + } + }, + "GetEmoteSetsResponse": { + "type": "object", + "required": [ + "data", + "template" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of emotes found in the specified emote sets. The list is empty if none of the IDs were found. The list is in the same order as the set IDs specified in the request. Each set contains one or more emoticons.", + "items": { + "$ref": "#/components/schemas/Emote" + } + }, + "template": { + "type": "string", + "description": "A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object." + } + } + }, + "ChatBadge": { + "type": "object", + "required": [ + "set_id", + "versions" + ], + "properties": { + "set_id": { + "type": "string", + "description": "An ID that identifies this set of chat badges. For example, Bits or Subscriber." + }, + "versions": { + "type": "array", + "description": "The list of chat badges in this set.", + "items": { + "type": "object", + "required": [ + "id", + "image_url_1x", + "image_url_2x", + "image_url_4x", + "title", + "description", + "click_action", + "click_url" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this version of the badge. The ID can be any value. For example, for Bits, the ID is the Bits tier level, but for World of Warcraft, it could be Alliance or Horde." + }, + "image_url_1x": { + "type": "string", + "description": "A URL to the small version (18px x 18px) of the badge." + }, + "image_url_2x": { + "type": "string", + "description": "A URL to the medium version (36px x 36px) of the badge." + }, + "image_url_4x": { + "type": "string", + "description": "A URL to the large version (72px x 72px) of the badge." + }, + "title": { + "type": "string", + "description": "The title of the badge." + }, + "description": { + "type": "string", + "description": "The description of the badge." + }, + "click_action": { + "type": "string", + "description": "The action to take when clicking on the badge. Set to `null` if no action is specified." + }, + "click_url": { + "type": "string", + "description": "The URL to navigate to when clicking on the badge. Set to `null` if no URL is specified." + } + } + } + } + } + }, + "GetChannelChatBadgesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of chat badges. The list is sorted in ascending order by `set_id`, and within a set, the list is sorted in ascending order by `id`.", + "items": { + "$ref": "#/components/schemas/ChatBadge" + } + } + } + }, + "GetGlobalChatBadgesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of chat badges. The list is sorted in ascending order by `set_id`, and within a set, the list is sorted in ascending order by `id`.", + "items": { + "$ref": "#/components/schemas/ChatBadge" + } + } + } + }, + "ChatSettings": { + "type": "object", + "required": [ + "broadcaster_id", + "emote_mode", + "follower_mode", + "follower_mode_duration", + "slow_mode", + "slow_mode_wait_time", + "subscriber_mode", + "unique_chat_mode" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster specified in the request." + }, + "emote_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether chat messages must contain only emotes. Is **true** if chat messages may contain only emotes; otherwise, **false**." + }, + "follower_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster restricts the chat room to followers only. \n \nIs **true** if the broadcaster restricts the chat room to followers only; otherwise, **false**. \n \nSee the `follower_mode_duration` field for how long users must follow the broadcaster before being able to participate in the chat room." + }, + "follower_mode_duration": { + "type": "integer", + "description": "The length of time, in minutes, that users must follow the broadcaster before being able to participate in the chat room. Is **null** if `follower_mode` is **false**.", + "format": "int32", + "nullable": true + }, + "moderator_id": { + "type": "string", + "description": "The moderator’s ID. The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\\_settings** scope." + }, + "non_moderator_chat_delay": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster adds a short delay before chat messages appear in the chat room. This gives chat moderators and bots a chance to remove them before viewers can see the message. See the `non_moderator_chat_delay_duration` field for the length of the delay. Is **true** if the broadcaster applies a delay; otherwise, **false**. \n \nThe response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\\_settings** scope and the user in the _moderator\\_id_ query parameter is one of the broadcaster’s moderators." + }, + "non_moderator_chat_delay_duration": { + "type": "integer", + "description": "The amount of time, in seconds, that messages are delayed before appearing in chat. Is **null** if `non_moderator_chat_delay` is **false**. \n \nThe response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\\_settings** scope and the user in the _moderator\\_id_ query parameter is one of the broadcaster’s moderators.", + "format": "int32", + "nullable": true + }, + "slow_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster limits how often users in the chat room are allowed to send messages. \n \nIs **true** if the broadcaster applies a delay; otherwise, **false**. \n \nSee the `slow_mode_wait_time` field for the delay." + }, + "slow_mode_wait_time": { + "type": "integer", + "description": "The amount of time, in seconds, that users must wait between sending messages. \n \nIs **null** if slow\\_mode is **false**.", + "format": "int32", + "nullable": true + }, + "subscriber_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether only users that subscribe to the broadcaster’s channel may talk in the chat room. \n \nIs **true** if the broadcaster restricts the chat room to subscribers only; otherwise, **false**." + }, + "unique_chat_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster requires users to post only unique messages in the chat room. \n \nIs **true** if the broadcaster requires unique messages only; otherwise, **false**." + } + } + }, + "GetChatSettingsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of chat settings. The list contains a single object with all the settings.", + "items": { + "$ref": "#/components/schemas/ChatSettings" + } + } + } + }, + "GetUserEmotesResponse": { + "type": "object", + "required": [ + "data", + "template" + ], + "properties": { + "data": { + "type": "array", + "description": "", + "items": { + "type": "object", + "required": [ + "id", + "name", + "emote_type", + "emote_set_id", + "owner_id", + "format", + "scale", + "theme_mode" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that uniquely identifies this emote." + }, + "name": { + "type": "string", + "description": "The User ID of broadcaster whose channel is receiving the unban request." + }, + "emote_type": { + "type": "string", + "description": "The type of emote. The possible values are: \n \n* **bitstier** — A Bits tier emote.\n* **follower** — A follower emote.\n* **subscriptions** — A subscriber emote.", + "enum": [ + "bitstier", + "follower", + "subscriptions" + ] + }, + "emote_set_id": { + "type": "string", + "description": "An ID that identifies the emote set that the emote belongs to." + }, + "owner_id": { + "type": "string", + "description": "The ID of the broadcaster who owns the emote." + }, + "format": { + "type": "array", + "description": "The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only static. But if the emote is available as a static PNG and an animated GIF, the array contains static and animated. \n \n* **animated** — An animated GIF is available for this emote.\n* **static** — A static PNG file is available for this emote.", + "items": { + "type": "string" + } + }, + "scale": { + "type": "array", + "description": "The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\\. \n \n* **1.0** — A small version (28px x 28px) is available.\n* **2.0** — A medium version (56px x 56px) is available.\n* **3.0** — A large version (112px x 112px) is available.", + "items": { + "type": "string" + } + }, + "theme_mode": { + "type": "array", + "description": "The background themes that the emote is available in. \n \n* **dark**\n* **light**", + "items": { + "type": "string" + } + } + } + } + }, + "template": { + "type": "string", + "description": "A templated URL. Uses the values from the _id_, _format_, _scale_, and _theme\\_mode_ fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. \n \n For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL](https://dev.twitch.tv/docs/irc/emotes#cdn-template) format." + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. \n \n For more information about pagination support, see [Twitch API Guide - Pagination](https://dev.twitch.tv/docs/api/guide#pagination).", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter." + } + } + } + } + }, + "UpdateChatSettingsBody": { + "type": "object", + "properties": { + "emote_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether chat messages must contain only emotes. \n \nSet to **true** if only emotes are allowed; otherwise, **false**. The default is **false**." + }, + "follower_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster restricts the chat room to followers only. \n \nSet to **true** if the broadcaster restricts the chat room to followers only; otherwise, **false**. The default is **true**. \n \nTo specify how long users must follow the broadcaster before being able to participate in the chat room, see the `follower_mode_duration` field." + }, + "follower_mode_duration": { + "type": "integer", + "description": "The length of time, in minutes, that users must follow the broadcaster before being able to participate in the chat room. Set only if `follower_mode` is **true**. Possible values are: 0 (no restriction) through 129600 (3 months). The default is 0.", + "format": "int32" + }, + "non_moderator_chat_delay": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster adds a short delay before chat messages appear in the chat room. This gives chat moderators and bots a chance to remove them before viewers can see the message. \n \nSet to **true** if the broadcaster applies a delay; otherwise, **false**. The default is **false**. \n \nTo specify the length of the delay, see the `non_moderator_chat_delay_duration` field." + }, + "non_moderator_chat_delay_duration": { + "type": "integer", + "description": "The amount of time, in seconds, that messages are delayed before appearing in chat. Set only if `non_moderator_chat_delay` is **true**. Possible values are: \n \n* 2 — 2 second delay (recommended)\n* 4 — 4 second delay\n* 6 — 6 second delay", + "format": "int32", + "enum": [ + 2, + 4, + 6 + ] + }, + "slow_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster limits how often users in the chat room are allowed to send messages. Set to **true** if the broadcaster applies a wait period between messages; otherwise, **false**. The default is **false**. \n \nTo specify the delay, see the `slow_mode_wait_time` field." + }, + "slow_mode_wait_time": { + "type": "integer", + "description": "The amount of time, in seconds, that users must wait between sending messages. Set only if `slow_mode` is **true**. \n \nPossible values are: 3 (3 second delay) through 120 (2 minute delay). The default is 30 seconds.", + "format": "int32" + }, + "subscriber_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether only users that subscribe to the broadcaster’s channel may talk in the chat room. \n \nSet to **true** if the broadcaster restricts the chat room to subscribers only; otherwise, **false**. The default is **false**." + }, + "unique_chat_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster requires users to post only unique messages in the chat room. \n \nSet to **true** if the broadcaster allows only unique messages; otherwise, **false**. The default is **false**." + } + } + }, + "ChatSettingsUpdated": { + "type": "object", + "required": [ + "broadcaster_id", + "emote_mode", + "follower_mode", + "follower_mode_duration", + "non_moderator_chat_delay", + "non_moderator_chat_delay_duration", + "slow_mode", + "slow_mode_wait_time", + "subscriber_mode", + "unique_chat_mode" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster specified in the request." + }, + "emote_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether chat messages must contain only emotes. Is **true** if chat messages may contain only emotes; otherwise, **false**." + }, + "follower_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster restricts the chat room to followers only. \n \nIs **true** if the broadcaster restricts the chat room to followers only; otherwise, **false**. \n \nSee the `follower_mode_duration` field for how long users must follow the broadcaster before being able to participate in the chat room." + }, + "follower_mode_duration": { + "type": "integer", + "description": "The length of time, in minutes, that users must follow the broadcaster before being able to participate in the chat room. Is **null** if `follower_mode` is **false**.", + "format": "int32", + "nullable": true + }, + "moderator_id": { + "type": "string", + "description": "The moderator’s ID. The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\\_settings** scope." + }, + "non_moderator_chat_delay": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster adds a short delay before chat messages appear in the chat room. This gives chat moderators and bots a chance to remove them before viewers can see the message. See the `non_moderator_chat_delay_duration` field for the length of the delay. Is **true** if the broadcaster applies a delay; otherwise, **false**." + }, + "non_moderator_chat_delay_duration": { + "type": "integer", + "description": "The amount of time, in seconds, that messages are delayed before appearing in chat. Is **null** if `non_moderator_chat_delay` is **false**.", + "format": "int32", + "nullable": true + }, + "slow_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster limits how often users in the chat room are allowed to send messages. \n \nIs **true** if the broadcaster applies a delay; otherwise, **false**. \n \nSee the `slow_mode_wait_time` field for the delay." + }, + "slow_mode_wait_time": { + "type": "integer", + "description": "The amount of time, in seconds, that users must wait between sending messages. \n \nIs **null** if slow\\_mode is **false**.", + "format": "int32", + "nullable": true + }, + "subscriber_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether only users that subscribe to the broadcaster’s channel may talk in the chat room. \n \nIs **true** if the broadcaster restricts the chat room to subscribers only; otherwise, **false**." + }, + "unique_chat_mode": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster requires users to post only unique messages in the chat room. \n \nIs **true** if the broadcaster requires unique messages only; otherwise, **false**." + } + } + }, + "UpdateChatSettingsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of chat settings. The list contains a single object with all the settings.", + "items": { + "$ref": "#/components/schemas/ChatSettingsUpdated" + } + } + } + }, + "SendChatAnnouncementBody": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "The announcement to make in the broadcaster’s chat room. Announcements are limited to a maximum of 500 characters; announcements longer than 500 characters are truncated." + }, + "color": { + "type": "string", + "description": "The color used to highlight the announcement. Possible case-sensitive values are: \n \n* blue\n* green\n* orange\n* purple\n* primary (default)\n \nIf `color` is set to _primary_ or is not set, the channel’s accent color is used to highlight the announcement (see **Profile Accent Color** under [profile settings](https://www.twitch.tv/settings/profile), **Channel and Videos**, and **Brand**).", + "enum": [ + "blue", + "green", + "orange", + "purple", + "primary (default)" + ] + } + } + }, + "SendChatMessageBody": { + "type": "object", + "required": [ + "broadcaster_id", + "sender_id", + "message" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster whose chat room the message will be sent to." + }, + "sender_id": { + "type": "string", + "description": "The ID of the user sending the message. This ID must match the user ID in the user access token." + }, + "message": { + "type": "string", + "description": "The message to send. The message is limited to a maximum of 500 characters. Chat messages can also include emoticons. To include emoticons, use the name of the emote. The names are case sensitive. Don’t include colons around the name (e.g., :bleedPurple:). If Twitch recognizes the name, Twitch converts the name to the emote before writing the chat message to the chat room" + }, + "reply_parent_message_id": { + "type": "string", + "description": "The ID of the chat message being replied to." + } + } + }, + "SendChatMessageResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "", + "items": { + "type": "object", + "required": [ + "message_id", + "is_sent" + ], + "properties": { + "message_id": { + "type": "string", + "description": "The message id for the message that was sent." + }, + "is_sent": { + "type": "boolean", + "description": "If the message passed all checks and was sent." + }, + "drop_reason": { + "type": "array", + "description": "The reason the message was dropped, if any.", + "items": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string", + "description": "Code for why the message was dropped." + }, + "message": { + "type": "string", + "description": "Message for why the message was dropped." + } + } + } + } + } + } + } + } + }, + "UserChatColor": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name", + "color" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that uniquely identifies the user." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "color": { + "type": "string", + "description": "The Hex color code that the user uses in chat for their name. If the user hasn’t specified a color in their settings, the string is empty." + } + } + }, + "GetUserChatColorResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users and the color code they use for their name.", + "items": { + "$ref": "#/components/schemas/UserChatColor" + } + } + } + }, + "CreateClipResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "", + "items": { + "type": "object", + "required": [ + "edit_url", + "id" + ], + "properties": { + "edit_url": { + "type": "string", + "description": "A URL that you can use to edit the clip’s title, identify the part of the clip to publish, and publish the clip. [Learn More](https://help.twitch.tv/s/article/how-to-use-clips) \n \nThe URL is valid for up to 24 hours or until the clip is published, whichever comes first." + }, + "id": { + "type": "string", + "description": "An ID that uniquely identifies the clip." + } + } + } + } + } + }, + "Clip": { + "type": "object", + "required": [ + "id", + "url", + "embed_url", + "broadcaster_id", + "broadcaster_name", + "creator_id", + "creator_name", + "video_id", + "game_id", + "language", + "title", + "view_count", + "created_at", + "thumbnail_url", + "duration", + "vod_offset", + "is_featured" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that uniquely identifies the clip." + }, + "url": { + "type": "string", + "description": "A URL to the clip." + }, + "embed_url": { + "type": "string", + "description": "A URL that you can use in an iframe to embed the clip (see [Embedding Video and Clips](https://dev.twitch.tv/docs/embed/video-and-clips))." + }, + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster that the video was clipped from." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "creator_id": { + "type": "string", + "description": "An ID that identifies the user that created the clip." + }, + "creator_name": { + "type": "string", + "description": "The user’s display name." + }, + "video_id": { + "type": "string", + "description": "An ID that identifies the video that the clip came from. This field contains an empty string if the video is not available." + }, + "game_id": { + "type": "string", + "description": "The ID of the game that was being played when the clip was created." + }, + "language": { + "type": "string", + "description": "The ISO 639-1 two-letter language code that the broadcaster broadcasts in. For example, _en_ for English. The value is _other_ if the broadcaster uses a language that Twitch doesn’t support." + }, + "title": { + "type": "string", + "description": "The title of the clip." + }, + "view_count": { + "type": "integer", + "description": "The number of times the clip has been viewed.", + "format": "int32" + }, + "created_at": { + "type": "string", + "description": "The date and time of when the clip was created. The date and time is in RFC3339 format.", + "format": "date-time" + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to a thumbnail image of the clip." + }, + "duration": { + "type": "number", + "description": "The length of the clip, in seconds. Precision is 0.1.", + "format": "float" + }, + "vod_offset": { + "type": "integer", + "description": "The zero-based offset, in seconds, to where the clip starts in the video (VOD). Is **null** if the video is not available or hasn’t been created yet from the live stream (see `video_id`). \n \nNote that there’s a delay between when a clip is created during a broadcast and when the offset is set. During the delay period, `vod_offset` is **null**. The delay is indeterminant but is typically minutes long.", + "format": "int32", + "nullable": true + }, + "is_featured": { + "type": "boolean", + "description": "A Boolean value that indicates if the clip is featured or not." + } + } + }, + "GetClipsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of video clips. For clips returned by _game\\_id_ or _broadcaster\\_id_, the list is in descending order by view count. For lists returned by _id_, the list is in the same order as the input IDs.", + "items": { + "$ref": "#/components/schemas/Clip" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards." + } + } + } + } + }, + "GetConduitsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "List of information about the client’s conduits.", + "items": { + "type": "object", + "required": [ + "id", + "shard_count" + ], + "properties": { + "id": { + "type": "string", + "description": "Conduit ID." + }, + "shard_count": { + "type": "integer", + "description": "Number of shards associated with this conduit.", + "format": "int32" + } + } + } + } + } + }, + "CreateConduitsBody": { + "type": "object", + "required": [ + "shard_count" + ], + "properties": { + "shard_count": { + "type": "integer", + "description": "The number of shards to create for this conduit.", + "format": "int32" + } + } + }, + "CreateConduitsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "List of information about the client’s conduits.", + "items": { + "type": "object", + "required": [ + "id", + "shard_count" + ], + "properties": { + "id": { + "type": "string", + "description": "Conduit ID." + }, + "shard_count": { + "type": "integer", + "description": "Number of shards created for this conduit.", + "format": "int32" + } + } + } + } + } + }, + "UpdateConduitsBody": { + "type": "object", + "required": [ + "id", + "shard_count" + ], + "properties": { + "id": { + "type": "string", + "description": "Conduit ID." + }, + "shard_count": { + "type": "integer", + "description": "The new number of shards for this conduit.", + "format": "int32" + } + } + }, + "UpdateConduitsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "List of information about the client’s conduits.", + "items": { + "type": "object", + "required": [ + "id", + "shard_count" + ], + "properties": { + "id": { + "type": "string", + "description": "Conduit ID." + }, + "shard_count": { + "type": "integer", + "description": "Number of shards associated with this conduit after the update.", + "format": "int32" + } + } + } + } + } + }, + "GetConduitShardsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "List of information about a conduit's shards.", + "items": { + "type": "object", + "required": [ + "id", + "status", + "transport" + ], + "properties": { + "id": { + "type": "string", + "description": "Shard ID." + }, + "status": { + "type": "string", + "description": "The shard status. The subscriber receives events only for enabled shards. Possible values are: \n \n* enabled — The shard is enabled.\n* webhook\\_callback\\_verification\\_pending — The shard is pending verification of the specified callback URL.\n* webhook\\_callback\\_verification\\_failed — The specified callback URL failed verification.\n* notification\\_failures\\_exceeded — The notification delivery failure rate was too high.\n* websocket\\_disconnected — The client closed the connection.\n* websocket\\_failed\\_ping\\_pong — The client failed to respond to a ping message.\n* websocket\\_received\\_inbound\\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).\n* websocket\\_internal\\_error — The Twitch WebSocket server experienced an unexpected error.\n* websocket\\_network\\_timeout — The Twitch WebSocket server timed out writing the message to the client.\n* websocket\\_network\\_error — The Twitch WebSocket server experienced a network error writing the message to the client.", + "enum": [ + "enabled", + "webhook_callback_verification_pending", + "webhook_callback_verification_failed", + "notification_failures_exceeded", + "websocket_disconnected", + "websocket_failed_ping_pong", + "websocket_received_inbound_traffic", + "websocket_internal_error", + "websocket_network_timeout", + "websocket_network_error" + ] + }, + "transport": { + "description": "The transport details used to send the notifications.", + "type": "object", + "required": [ + "method" + ], + "properties": { + "method": { + "type": "string", + "description": "The transport method. Possible values are: \n \n* webhook\n* websocket", + "enum": [ + "webhook", + "websocket" + ] + }, + "callback": { + "type": "string", + "description": "The callback URL where the notifications are sent. Included only if method is set to webhook." + }, + "session_id": { + "type": "string", + "description": "An ID that identifies the WebSocket that notifications are sent to. Included only if method is set to websocket." + }, + "connected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was established. Included only if method is set to websocket.", + "format": "date-time" + }, + "disconnected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was lost. Included only if method is set to websocket.", + "format": "date-time" + } + } + } + } + } + }, + "pagination": { + "description": "Contains information used to page through a list of results. The object is empty if there are no more pages left to page through.", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter." + } + } + } + } + }, + "UpdateConduitShardsBody": { + "type": "object", + "required": [ + "conduit_id", + "shards" + ], + "properties": { + "conduit_id": { + "type": "string", + "description": "Conduit ID." + }, + "shards": { + "type": "array", + "description": "List of shards to update.", + "items": { + "type": "object", + "required": [ + "id", + "transport" + ], + "properties": { + "id": { + "type": "string", + "description": "Shard ID." + }, + "transport": { + "description": "The transport details that you want Twitch to use when sending you notifications.", + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The transport method. Possible values are: \n \n* webhook\n* websocket", + "enum": [ + "webhook", + "websocket" + ] + }, + "callback": { + "type": "string", + "description": "The callback URL where the notifications are sent. The URL must use the HTTPS protocol and port 443\\. See Processing an event.Specify this field only if method is set to webhook.NOTE: Redirects are not followed." + }, + "secret": { + "type": "string", + "description": "The secret used to verify the signature. The secret must be an ASCII string that’s a minimum of 10 characters long and a maximum of 100 characters long. For information about how the secret is used, see Verifying the event message.Specify this field only if method is set to webhook." + }, + "session_id": { + "type": "string", + "description": "An ID that identifies the WebSocket to send notifications to. When you connect to EventSub using WebSockets, the server returns the ID in the Welcome message.Specify this field only if method is set to websocket." + } + } + } + } + } + } + } + }, + "UpdateConduitShardsResponse": { + "type": "object", + "required": [ + "data", + "errors" + ], + "properties": { + "data": { + "type": "array", + "description": "List of successful shard updates.", + "items": { + "type": "object", + "required": [ + "id", + "status", + "transport" + ], + "properties": { + "id": { + "type": "string", + "description": "Shard ID." + }, + "status": { + "type": "string", + "description": "The shard status. The subscriber receives events only for enabled shards. Possible values are: \n \n* enabled — The shard is enabled.\n* webhook\\_callback\\_verification\\_pending — The shard is pending verification of the specified callback URL.\n* webhook\\_callback\\_verification\\_failed — The specified callback URL failed verification.\n* notification\\_failures\\_exceeded — The notification delivery failure rate was too high.\n* websocket\\_disconnected — The client closed the connection.\n* websocket\\_failed\\_ping\\_pong — The client failed to respond to a ping message.\n* websocket\\_received\\_inbound\\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).\n* websocket\\_internal\\_error — The Twitch WebSocket server experienced an unexpected error.\n* websocket\\_network\\_timeout — The Twitch WebSocket server timed out writing the message to the client.\n* websocket\\_network\\_error — The Twitch WebSocket server experienced a network error writing the message to the client.", + "enum": [ + "enabled", + "webhook_callback_verification_pending", + "webhook_callback_verification_failed", + "notification_failures_exceeded", + "websocket_disconnected", + "websocket_failed_ping_pong", + "websocket_received_inbound_traffic", + "websocket_internal_error", + "websocket_network_timeout", + "websocket_network_error" + ] + }, + "transport": { + "description": "The transport details used to send the notifications.", + "type": "object", + "required": [ + "method" + ], + "properties": { + "method": { + "type": "string", + "description": "The transport method. Possible values are: \n \n* webhook\n* websocket", + "enum": [ + "webhook", + "websocket" + ] + }, + "callback": { + "type": "string", + "description": "The callback URL where the notifications are sent. Included only if method is set to webhook." + }, + "session_id": { + "type": "string", + "description": "An ID that identifies the WebSocket that notifications are sent to. Included only if method is set to websocket." + }, + "connected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was established. Included only if method is set to websocket.", + "format": "date-time" + }, + "disconnected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was lost. Included only if method is set to websocket.", + "format": "date-time" + } + } + } + } + } + }, + "errors": { + "type": "array", + "description": "List of unsuccessful updates.", + "items": { + "type": "object", + "required": [ + "id", + "message", + "code" + ], + "properties": { + "id": { + "type": "string", + "description": "Shard ID." + }, + "message": { + "type": "string", + "description": "The error that occurred while updating the shard. Possible errors: \n \n* The length of the string in the secret field is not valid.\n* The URL in the transport's callback field is not valid. The URL must use the HTTPS protocol and the 443 port number.\n* The value specified in the method field is not valid.\n* The callback field is required if you specify the webhook transport method.\n* The session\\_id field is required if you specify the WebSocket transport method.\n* The websocket session is not connected.\n* The shard id is outside of the conduit’s range." + }, + "code": { + "type": "string", + "description": "Error codes used to represent a specific error condition while attempting to update shards." + } + } + } + } + } + }, + "ContentClassificationLabel": { + "type": "object", + "required": [ + "id", + "description", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the CCL." + }, + "description": { + "type": "string", + "description": "Localized description of the CCL." + }, + "name": { + "type": "string", + "description": "Localized name of the CCL." + } + } + }, + "GetContentClassificationLabelsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains information about the available content classification labels.", + "items": { + "$ref": "#/components/schemas/ContentClassificationLabel" + } + } + } + }, + "DropsEntitlement": { + "type": "object", + "required": [ + "id", + "benefit_id", + "timestamp", + "user_id", + "game_id", + "fulfillment_status", + "last_updated" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the entitlement." + }, + "benefit_id": { + "type": "string", + "description": "An ID that identifies the benefit (reward)." + }, + "timestamp": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the entitlement was granted.", + "format": "date-time" + }, + "user_id": { + "type": "string", + "description": "An ID that identifies the user who was granted the entitlement." + }, + "game_id": { + "type": "string", + "description": "An ID that identifies the game the user was playing when the reward was entitled." + }, + "fulfillment_status": { + "type": "string", + "description": "The entitlement’s fulfillment status. Possible values are: \n \n* CLAIMED\n* FULFILLED", + "enum": [ + "CLAIMED", + "FULFILLED" + ] + }, + "last_updated": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the entitlement was last updated.", + "format": "date-time" + } + } + }, + "GetDropsEntitlementsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of entitlements.", + "items": { + "$ref": "#/components/schemas/DropsEntitlement" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value to page forward through the results." + } + } + } + } + }, + "UpdateDropsEntitlementsBody": { + "type": "object", + "properties": { + "entitlement_ids": { + "type": "array", + "description": "A list of IDs that identify the entitlements to update. You may specify a maximum of 100 IDs.", + "items": { + "type": "string" + } + }, + "fulfillment_status": { + "type": "string", + "description": "The fulfillment status to set the entitlements to. Possible values are: \n \n* CLAIMED — The user claimed the benefit.\n* FULFILLED — The developer granted the benefit that the user claimed.", + "enum": [ + "CLAIMED", + "FULFILLED" + ] + } + } + }, + "DropsEntitlementUpdated": { + "type": "object", + "required": [ + "status", + "ids" + ], + "properties": { + "status": { + "type": "string", + "description": "A string that indicates whether the status of the entitlements in the `ids` field were successfully updated. Possible values are: \n \n* INVALID\\_ID — The entitlement IDs in the `ids` field are not valid.\n* NOT\\_FOUND — The entitlement IDs in the `ids` field were not found.\n* SUCCESS — The status of the entitlements in the `ids` field were successfully updated.\n* UNAUTHORIZED — The user or organization identified by the user access token is not authorized to update the entitlements.\n* UPDATE\\_FAILED — The update failed. These are considered transient errors and the request should be retried later.", + "enum": [ + "INVALID_ID", + "NOT_FOUND", + "SUCCESS", + "UNAUTHORIZED", + "UPDATE_FAILED" + ] + }, + "ids": { + "type": "array", + "description": "The list of entitlements that the status in the `status` field applies to.", + "items": { + "type": "string" + } + } + } + }, + "UpdateDropsEntitlementsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that indicates which entitlements were successfully updated and those that weren’t.", + "items": { + "$ref": "#/components/schemas/DropsEntitlementUpdated" + } + } + } + }, + "ExtensionConfigurationSegment": { + "type": "object", + "required": [ + "segment", + "content", + "version" + ], + "properties": { + "segment": { + "type": "string", + "description": "The type of segment. Possible values are: \n \n* broadcaster\n* developer\n* global", + "enum": [ + "broadcaster", + "developer", + "global" + ] + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that installed the extension. The object includes this field only if the `segment` query parameter is set to developer or broadcaster." + }, + "content": { + "type": "string", + "description": "The contents of the segment. This string may be a plain-text string or a string-encoded JSON object." + }, + "version": { + "type": "string", + "description": "The version number that identifies this definition of the segment’s data." + } + } + }, + "GetExtensionConfigurationSegmentResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of requested configuration segments. The list is returned in the same order that you specified the list of segments in the request.", + "items": { + "$ref": "#/components/schemas/ExtensionConfigurationSegment" + } + } + } + }, + "SetExtensionConfigurationSegmentBody": { + "type": "object", + "required": [ + "extension_id", + "segment" + ], + "properties": { + "extension_id": { + "type": "string", + "description": "The ID of the extension to update." + }, + "segment": { + "type": "string", + "description": "The configuration segment to update. Possible case-sensitive values are: \n \n* broadcaster\n* developer\n* global", + "enum": [ + "broadcaster", + "developer", + "global" + ] + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that installed the extension. Include this field only if the `segment` is set to developer or broadcaster." + }, + "content": { + "type": "string", + "description": "The contents of the segment. This string may be a plain-text string or a string-encoded JSON object." + }, + "version": { + "type": "string", + "description": "The version number that identifies this definition of the segment’s data. If not specified, the latest definition is updated." + } + } + }, + "SetExtensionRequiredConfigurationBody": { + "type": "object", + "required": [ + "extension_id", + "extension_version", + "required_configuration" + ], + "properties": { + "extension_id": { + "type": "string", + "description": "The ID of the extension to update." + }, + "extension_version": { + "type": "string", + "description": "The version of the extension to update." + }, + "required_configuration": { + "type": "string", + "description": "The required\\_configuration string to use with the extension." + } + } + }, + "SendExtensionPubSubMessageBody": { + "type": "object", + "required": [ + "target", + "broadcaster_id", + "message" + ], + "properties": { + "target": { + "type": "array", + "description": "The target of the message. Possible values are: \n \n* broadcast\n* global\n* whisper-\n \nIf `is_global_broadcast` is **true**, you must set this field to global. The broadcast and global values are mutually exclusive; specify only one of them.", + "items": { + "type": "string", + "enum": [ + "broadcast", + "global", + "whisper-" + ] + } + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster to send the message to. Don’t include this field if `is_global_broadcast` is set to **true**." + }, + "is_global_broadcast": { + "type": "boolean", + "description": "A Boolean value that determines whether the message should be sent to all channels where your extension is active. Set to **true** if the message should be sent to all channels. The default is **false**." + }, + "message": { + "type": "string", + "description": "The message to send. The message can be a plain-text string or a string-encoded JSON object. The message is limited to a maximum of 5 KB." + } + } + }, + "ExtensionLiveChannel": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_name", + "game_name", + "game_id", + "title" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that is streaming live and has installed or activated the extension." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "game_name": { + "type": "string", + "description": "The name of the category or game being streamed." + }, + "game_id": { + "type": "string", + "description": "The ID of the category or game being streamed." + }, + "title": { + "type": "string", + "description": "The title of the broadcaster’s stream. May be an empty string if not specified." + } + } + }, + "GetExtensionLiveChannelsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of broadcasters that are streaming live and that have installed or activated the extension.", + "items": { + "$ref": "#/components/schemas/ExtensionLiveChannel" + } + }, + "pagination": { + "type": "string", + "description": "This field contains the cursor used to page through the results. The field is empty if there are no more pages left to page through. Note that this field is a string compared to other endpoints that use a **Pagination** object. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)" + } + } + }, + "ExtensionSecret": { + "type": "object", + "required": [ + "format_version", + "secrets" + ], + "properties": { + "format_version": { + "type": "integer", + "description": "The version number that identifies this definition of the secret’s data.", + "format": "int32" + }, + "secrets": { + "type": "array", + "description": "The list of secrets.", + "items": { + "type": "object", + "required": [ + "content", + "active_at", + "expires_at" + ], + "properties": { + "content": { + "type": "string", + "description": "The raw secret that you use with JWT encoding." + }, + "active_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that you may begin using this secret to sign a JWT.", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that you must stop using this secret to decode a JWT.", + "format": "date-time" + } + } + } + } + } + }, + "GetExtensionSecretsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of shared secrets that the extension created.", + "items": { + "$ref": "#/components/schemas/ExtensionSecret" + } + } + } + }, + "CreateExtensionSecretResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the newly added secrets.", + "items": { + "$ref": "#/components/schemas/ExtensionSecret" + } + } + } + }, + "SendExtensionChatMessageBody": { + "type": "object", + "required": [ + "text", + "extension_id", + "extension_version" + ], + "properties": { + "text": { + "type": "string", + "description": "The message. The message may contain a maximum of 280 characters." + }, + "extension_id": { + "type": "string", + "description": "The ID of the extension that’s sending the chat message." + }, + "extension_version": { + "type": "string", + "description": "The extension’s version number." + } + } + }, + "ExtensionIconUrls": { + "type": "object", + "description": "A dictionary that contains URLs to different sizes of the default icon. The dictionary’s key identifies the icon’s size (for example, 24x24), and the dictionary’s value contains the URL to the icon.", + "properties": { + "100x100": { + "type": "string" + }, + "24x24": { + "type": "string" + }, + "300x200": { + "type": "string" + } + } + }, + "Extension": { + "type": "object", + "required": [ + "author_name", + "bits_enabled", + "can_install", + "configuration_location", + "description", + "eula_tos_url", + "has_chat_support", + "icon_url", + "icon_urls", + "id", + "name", + "privacy_policy_url", + "request_identity_link", + "screenshot_urls", + "state", + "subscriptions_support_level", + "summary", + "support_email", + "version", + "viewer_summary", + "views", + "allowlisted_config_urls", + "allowlisted_panel_urls" + ], + "properties": { + "author_name": { + "type": "string", + "description": "The name of the user or organization that owns the extension." + }, + "bits_enabled": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension has features that use Bits. Is **true** if the extension has features that use Bits." + }, + "can_install": { + "type": "boolean", + "description": "A Boolean value that determines whether a user can install the extension on their channel. Is **true** if a user can install the extension. \n \nTypically, this is set to **false** if the extension is currently in testing mode and requires users to be allowlisted (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \\-> **Extension** \\-> **Version** \\-> **Access**)." + }, + "configuration_location": { + "type": "string", + "description": "The location of where the extension’s configuration is stored. Possible values are: \n \n* hosted — The Extensions Configuration Service hosts the configuration.\n* custom — The Extension Backend Service (EBS) hosts the configuration.\n* none — The extension doesn't require configuration.", + "enum": [ + "hosted", + "custom", + "none" + ] + }, + "description": { + "type": "string", + "description": "A longer description of the extension. It appears on the details page." + }, + "eula_tos_url": { + "type": "string", + "description": "A URL to the extension’s Terms of Service." + }, + "has_chat_support": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension can communicate with the installed channel’s chat. Is **true** if the extension can communicate with the channel’s chat room." + }, + "icon_url": { + "type": "string", + "description": "A URL to the default icon that’s displayed in the Extensions directory." + }, + "icon_urls": { + "$ref": "#/components/schemas/ExtensionIconUrls" + }, + "id": { + "type": "string", + "description": "The extension’s ID." + }, + "name": { + "type": "string", + "description": "The extension’s name." + }, + "privacy_policy_url": { + "type": "string", + "description": "A URL to the extension’s privacy policy." + }, + "request_identity_link": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension wants to explicitly ask viewers to link their Twitch identity." + }, + "screenshot_urls": { + "type": "array", + "description": "A list of URLs to screenshots that are shown in the Extensions marketplace.", + "items": { + "type": "string" + } + }, + "state": { + "type": "string", + "description": "The extension’s state. Possible values are: \n \n* Approved\n* AssetsUploaded\n* Deleted\n* Deprecated\n* InReview\n* InTest\n* PendingAction\n* Rejected\n* Released", + "enum": [ + "Approved", + "AssetsUploaded", + "Deleted", + "Deprecated", + "InReview", + "InTest", + "PendingAction", + "Rejected", + "Released" + ] + }, + "subscriptions_support_level": { + "type": "string", + "description": "Indicates whether the extension can view the user’s subscription level on the channel that the extension is installed on. Possible values are: \n \n* none — The extension can't view the user’s subscription level.\n* optional — The extension can view the user’s subscription level.", + "enum": [ + "none", + "optional" + ] + }, + "summary": { + "type": "string", + "description": "A short description of the extension that streamers see when hovering over the discovery splash screen in the Extensions manager." + }, + "support_email": { + "type": "string", + "description": "The email address that users use to get support for the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version number." + }, + "viewer_summary": { + "type": "string", + "description": "A brief description displayed on the channel to explain how the extension works." + }, + "views": { + "description": "Describes all views-related information such as how the extension is displayed on mobile devices.", + "type": "object", + "required": [ + "mobile", + "panel", + "video_overlay", + "component", + "config" + ], + "properties": { + "mobile": { + "description": "Describes how the extension is displayed on mobile devices.", + "type": "object", + "required": [ + "viewer_url" + ], + "properties": { + "viewer_url": { + "type": "string", + "description": "The HTML file that is shown to viewers on mobile devices. This page is presented to viewers as a panel behind the chat area of the mobile app." + } + } + }, + "panel": { + "description": "Describes how the extension is rendered if the extension may be activated as a panel extension.", + "type": "object", + "required": [ + "viewer_url", + "height", + "can_link_external_content" + ], + "properties": { + "viewer_url": { + "type": "string", + "description": "The HTML file that is shown to viewers on the channel page when the extension is activated in a Panel slot." + }, + "height": { + "type": "integer", + "description": "The height, in pixels, of the panel component that the extension is rendered in.", + "format": "int32" + }, + "can_link_external_content": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension can link to non-Twitch domains." + } + } + }, + "video_overlay": { + "description": "Describes how the extension is rendered if the extension may be activated as a video-overlay extension.", + "type": "object", + "required": [ + "viewer_url", + "can_link_external_content" + ], + "properties": { + "viewer_url": { + "type": "string", + "description": "The HTML file that is shown to viewers on the channel page when the extension is activated on the Video - Overlay slot." + }, + "can_link_external_content": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension can link to non-Twitch domains." + } + } + }, + "component": { + "description": "Describes how the extension is rendered if the extension may be activated as a video-component extension.", + "type": "object", + "required": [ + "viewer_url", + "aspect_ratio_x", + "aspect_ratio_y", + "autoscale", + "scale_pixels", + "target_height", + "can_link_external_content" + ], + "properties": { + "viewer_url": { + "type": "string", + "description": "The HTML file that is shown to viewers on the channel page when the extension is activated in a Video - Component slot." + }, + "aspect_ratio_x": { + "type": "integer", + "description": "The width value of the ratio (width : height) which determines the extension’s width, and how the extension’s iframe will resize in different video player environments.", + "format": "int32" + }, + "aspect_ratio_y": { + "type": "integer", + "description": "The height value of the ratio (width : height) which determines the extension’s height, and how the extension’s iframe will resize in different video player environments.", + "format": "int32" + }, + "autoscale": { + "type": "boolean", + "description": "A Boolean value that determines whether to apply CSS zoom. If **true**, a CSS zoom is applied such that the size of the extension is variable but the inner dimensions are fixed based on Scale Pixels. This allows your extension to render as if it is of fixed width and height. If **false**, the inner dimensions of the extension iframe are variable, meaning your extension must implement responsiveness." + }, + "scale_pixels": { + "type": "integer", + "description": "The base width, in pixels, of the extension to use when scaling (see `autoscale`). This value is ignored if `autoscale` is **false**.", + "format": "int32" + }, + "target_height": { + "type": "integer", + "description": "The height as a percent of the maximum height of a video component extension. Values are between 1% - 100%.", + "format": "int32" + }, + "can_link_external_content": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension can link to non-Twitch domains." + } + } + }, + "config": { + "description": "Describes the view that is shown to broadcasters while they are configuring your extension within the Extension Manager.", + "type": "object", + "required": [ + "viewer_url", + "can_link_external_content" + ], + "properties": { + "viewer_url": { + "type": "string", + "description": "The HTML file shown to broadcasters while they are configuring your extension within the Extension Manager." + }, + "can_link_external_content": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension can link to non-Twitch domains." + } + } + } + } + }, + "allowlisted_config_urls": { + "type": "array", + "description": "Allowlisted configuration URLs for displaying the extension (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \\-> **Extension** \\-> **Version** \\-> **Capabilities**).", + "items": { + "type": "string" + } + }, + "allowlisted_panel_urls": { + "type": "array", + "description": "Allowlisted panel URLs for displaying the extension (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \\-> **Extension** \\-> **Version** \\-> **Capabilities**).", + "items": { + "type": "string" + } + } + } + }, + "GetExtensionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the specified extension.", + "items": { + "$ref": "#/components/schemas/Extension" + } + } + } + }, + "GetReleasedExtensionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the specified extension.", + "items": { + "$ref": "#/components/schemas/Extension" + } + } + } + }, + "ExtensionBitsProduct": { + "type": "object", + "required": [ + "sku", + "cost", + "in_development", + "display_name", + "expiration", + "is_broadcast" + ], + "properties": { + "sku": { + "type": "string", + "description": "The product's SKU. The SKU is unique across an extension's products." + }, + "cost": { + "description": "An object that contains the product's cost information.", + "type": "object", + "required": [ + "amount", + "type" + ], + "properties": { + "amount": { + "type": "integer", + "description": "The product's price.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of currency. Possible values are: \n \n* bits", + "enum": [ + "bits" + ] + } + } + }, + "in_development": { + "type": "boolean", + "description": "A Boolean value that indicates whether the product is in development. If **true**, the product is not available for public use." + }, + "display_name": { + "type": "string", + "description": "The product's name as displayed in the extension." + }, + "expiration": { + "type": "string", + "description": "The date and time, in RFC3339 format, when the product expires.", + "format": "date-time" + }, + "is_broadcast": { + "type": "boolean", + "description": "A Boolean value that determines whether Bits product purchase events are broadcast to all instances of an extension on a channel. The events are broadcast via the `onTransactionComplete` helper callback. Is **true** if the event is broadcast to all instances." + } + } + }, + "GetExtensionBitsProductsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of Bits products that the extension created. The list is in ascending SKU order. The list is empty if the extension hasn’t created any products or they’re all expired or disabled.", + "items": { + "$ref": "#/components/schemas/ExtensionBitsProduct" + } + } + } + }, + "UpdateExtensionBitsProductBody": { + "type": "object", + "required": [ + "sku", + "cost", + "display_name" + ], + "properties": { + "sku": { + "type": "string", + "description": "The product's SKU. The SKU must be unique within an extension. The product's SKU cannot be changed. The SKU may contain only alphanumeric characters, dashes (-), underscores (\\_), and periods (.) and is limited to a maximum of 255 characters. No spaces." + }, + "cost": { + "description": "An object that contains the product's cost information.", + "type": "object", + "required": [ + "amount", + "type" + ], + "properties": { + "amount": { + "type": "integer", + "description": "The product's price.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of currency. Possible values are: \n \n* bits — The minimum price is 1 and the maximum is 10000.", + "enum": [ + "bits" + ] + } + } + }, + "display_name": { + "type": "string", + "description": "The product's name as displayed in the extension. The maximum length is 255 characters." + }, + "in_development": { + "type": "boolean", + "description": "A Boolean value that indicates whether the product is in development. Set to **true** if the product is in development and not available for public use. The default is **false**." + }, + "expiration": { + "type": "string", + "description": "The date and time, in RFC3339 format, when the product expires. If not set, the product does not expire. To disable the product, set the expiration date to a date in the past.", + "format": "date-time" + }, + "is_broadcast": { + "type": "boolean", + "description": "A Boolean value that determines whether Bits product purchase events are broadcast to all instances of the extension on a channel. The events are broadcast via the `onTransactionComplete` helper callback. The default is **false**." + } + } + }, + "UpdateExtensionBitsProductResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of Bits products that the extension created. The list is in ascending SKU order. The list is empty if the extension hasn't created any products or they're all expired or disabled.", + "items": { + "$ref": "#/components/schemas/ExtensionBitsProduct" + } + } + } + }, + "CreateEventSubSubscriptionBody": { + "type": "object", + "required": [ + "type", + "version", + "condition", + "transport" + ], + "properties": { + "type": { + "type": "string", + "description": "The type of subscription to create. For a list of subscriptions that you can create, see [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types). Set this field to the value in the **Name** column of the Subscription Types table.", + "enum": [ + "automod.message.hold", + "automod.message.update", + "automod.settings.update", + "automod.terms.update", + "channel.update", + "channel.follow", + "channel.ad_break.begin", + "channel.chat.clear", + "channel.chat.clear_user_messages", + "channel.chat.message", + "channel.chat.message_delete", + "channel.chat.notification", + "channel.chat_settings.update", + "channel.chat.user_message_hold", + "channel.chat.user_message_update", + "channel.subscribe", + "channel.subscription.end", + "channel.subscription.gift", + "channel.subscription.message", + "channel.cheer", + "channel.raid", + "channel.ban", + "channel.unban", + "channel.unban_request.create", + "channel.unban_request.resolve", + "channel.moderate", + "channel.moderator.add", + "channel.moderator.remove", + "channel.guest_star_session.begin", + "channel.guest_star_session.end", + "channel.guest_star_guest.update", + "channel.guest_star_settings.update", + "channel.channel_points_automatic_reward.add", + "channel.channel_points_custom_reward.add", + "channel.channel_points_custom_reward.update", + "channel.channel_points_custom_reward.remove", + "channel.channel_points_custom_reward_redemption.add", + "channel.channel_points_custom_reward_redemption.update", + "channel.poll.begin", + "channel.poll.progress", + "channel.poll.end", + "channel.prediction.begin", + "channel.prediction.progress", + "channel.prediction.lock", + "channel.prediction.end", + "channel.vip.add", + "channel.vip.remove", + "channel.charity_campaign.donate", + "channel.charity_campaign.start", + "channel.charity_campaign.progress", + "channel.charity_campaign.stop", + "conduit.shard.disabled", + "drop.entitlement.grant", + "extension.bits_transaction.create", + "channel.goal.begin", + "channel.goal.progress", + "channel.goal.end", + "channel.hype_train.begin", + "channel.hype_train.progress", + "channel.hype_train.end", + "channel.shield_mode.begin", + "channel.shield_mode.end", + "channel.shoutout.create", + "channel.shoutout.receive", + "stream.online", + "stream.offline", + "user.authorization.grant", + "user.authorization.revoke", + "user.update", + "user.whisper.message" + ] + }, + "version": { + "type": "string", + "description": "The version number that identifies the definition of the subscription type that you want the response to use." + }, + "condition": { + "type": "object", + "description": "A JSON object that contains the parameter values that are specific to the specified subscription type. For the object’s required and optional fields, see the subscription type’s documentation." + }, + "transport": { + "description": "The transport details that you want Twitch to use when sending you notifications.", + "type": "object", + "required": [ + "method" + ], + "properties": { + "method": { + "type": "string", + "description": "The transport method. Possible values are: \n \n* webhook\n* websocket\n* conduit", + "enum": [ + "webhook", + "websocket", + "conduit" + ] + }, + "callback": { + "type": "string", + "description": "The callback URL where the notifications are sent. The URL must use the HTTPS protocol and port 443\\. See [Processing an event](https://dev.twitch.tv/docs/eventsub/handling-webhook-events#processing-an-event). Specify this field only if `method` is set to **webhook**.\n\n**NOTE**: Redirects are not followed." + }, + "secret": { + "type": "string", + "description": "The secret used to verify the signature. The secret must be an ASCII string that’s a minimum of 10 characters long and a maximum of 100 characters long. For information about how the secret is used, see [Verifying the event message](https://dev.twitch.tv/docs/eventsub/handling-webhook-events#verifying-the-event-message). Specify this field only if `method` is set to **webhook**." + }, + "session_id": { + "type": "string", + "description": "An ID that identifies the WebSocket to send notifications to. When you connect to EventSub using WebSockets, the server returns the ID in the Welcome message. Specify this field only if `method` is set to **websocket**." + }, + "conduit_id": { + "type": "string", + "description": "An ID that identifies the conduit to send notifications to. When you create a conduit, the server returns the conduit ID. Specify this field only if `method` is set to **conduit**." + } + } + } + } + }, + "EventSubSubscription": { + "type": "object", + "required": [ + "id", + "status", + "type", + "version", + "condition", + "created_at", + "transport", + "cost" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the subscription." + }, + "status": { + "type": "string", + "description": "The subscription's status. The subscriber receives events only for **enabled** subscriptions. Possible values are: \n \n* enabled — The subscription is enabled.\n* webhook\\_callback\\_verification\\_pending — The subscription is pending verification of the specified callback URL.\n* webhook\\_callback\\_verification\\_failed — The specified callback URL failed verification.\n* notification\\_failures\\_exceeded — The notification delivery failure rate was too high.\n* authorization\\_revoked — The authorization was revoked for one or more users specified in the **Condition** object.\n* moderator\\_removed — The moderator that authorized the subscription is no longer one of the broadcaster's moderators.\n* user\\_removed — One of the users specified in the **Condition** object was removed.\n* version\\_removed — The subscription to subscription type and version is no longer supported.\n* beta\\_maintenance — The subscription to the beta subscription type was removed due to maintenance.\n* websocket\\_disconnected — The client closed the connection.\n* websocket\\_failed\\_ping\\_pong — The client failed to respond to a ping message.\n* websocket\\_received\\_inbound\\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).\n* websocket\\_connection\\_unused — The client failed to subscribe to events within the required time.\n* websocket\\_internal\\_error — The Twitch WebSocket server experienced an unexpected error.\n* websocket\\_network\\_timeout — The Twitch WebSocket server timed out writing the message to the client.\n* websocket\\_network\\_error — The Twitch WebSocket server experienced a network error writing the message to the client.", + "enum": [ + "enabled", + "webhook_callback_verification_pending", + "webhook_callback_verification_failed", + "notification_failures_exceeded", + "authorization_revoked", + "moderator_removed", + "user_removed", + "version_removed", + "beta_maintenance", + "websocket_disconnected", + "websocket_failed_ping_pong", + "websocket_received_inbound_traffic", + "websocket_connection_unused", + "websocket_internal_error", + "websocket_network_timeout", + "websocket_network_error" + ] + }, + "type": { + "type": "string", + "description": "The subscription's type. See [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types).", + "enum": [ + "automod.message.hold", + "automod.message.update", + "automod.settings.update", + "automod.terms.update", + "channel.update", + "channel.follow", + "channel.ad_break.begin", + "channel.chat.clear", + "channel.chat.clear_user_messages", + "channel.chat.message", + "channel.chat.message_delete", + "channel.chat.notification", + "channel.chat_settings.update", + "channel.chat.user_message_hold", + "channel.chat.user_message_update", + "channel.subscribe", + "channel.subscription.end", + "channel.subscription.gift", + "channel.subscription.message", + "channel.cheer", + "channel.raid", + "channel.ban", + "channel.unban", + "channel.unban_request.create", + "channel.unban_request.resolve", + "channel.moderate", + "channel.moderator.add", + "channel.moderator.remove", + "channel.guest_star_session.begin", + "channel.guest_star_session.end", + "channel.guest_star_guest.update", + "channel.guest_star_settings.update", + "channel.channel_points_automatic_reward.add", + "channel.channel_points_custom_reward.add", + "channel.channel_points_custom_reward.update", + "channel.channel_points_custom_reward.remove", + "channel.channel_points_custom_reward_redemption.add", + "channel.channel_points_custom_reward_redemption.update", + "channel.poll.begin", + "channel.poll.progress", + "channel.poll.end", + "channel.prediction.begin", + "channel.prediction.progress", + "channel.prediction.lock", + "channel.prediction.end", + "channel.vip.add", + "channel.vip.remove", + "channel.charity_campaign.donate", + "channel.charity_campaign.start", + "channel.charity_campaign.progress", + "channel.charity_campaign.stop", + "conduit.shard.disabled", + "drop.entitlement.grant", + "extension.bits_transaction.create", + "channel.goal.begin", + "channel.goal.progress", + "channel.goal.end", + "channel.hype_train.begin", + "channel.hype_train.progress", + "channel.hype_train.end", + "channel.shield_mode.begin", + "channel.shield_mode.end", + "channel.shoutout.create", + "channel.shoutout.receive", + "stream.online", + "stream.offline", + "user.authorization.grant", + "user.authorization.revoke", + "user.update", + "user.whisper.message" + ] + }, + "version": { + "type": "string", + "description": "The version number that identifies this definition of the subscription's data." + }, + "condition": { + "type": "object", + "description": "The subscription's parameter values. This is a string-encoded JSON object whose contents are determined by the subscription type." + }, + "created_at": { + "type": "string", + "description": "The date and time (in RFC3339 format) of when the subscription was created.", + "format": "date-time" + }, + "transport": { + "description": "The transport details used to send the notifications.", + "type": "object", + "required": [ + "method" + ], + "properties": { + "method": { + "type": "string", + "description": "The transport method. Possible values are: \n \n* webhook\n* websocket", + "enum": [ + "webhook", + "websocket" + ] + }, + "callback": { + "type": "string", + "description": "The callback URL where the notifications are sent. Included only if `method` is set to **webhook**." + }, + "session_id": { + "type": "string", + "description": "An ID that identifies the WebSocket that notifications are sent to. Included only if `method` is set to **websocket**." + }, + "connected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was established. Included only if `method` is set to **websocket**.", + "format": "date-time" + }, + "disconnected_at": { + "type": "string", + "description": "The UTC date and time that the WebSocket connection was lost. Included only if `method` is set to **websocket**.", + "format": "date-time" + } + } + }, + "cost": { + "type": "integer", + "description": "The amount that the subscription counts against your limit. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits)", + "format": "int32" + } + } + }, + "CreateEventSubSubscriptionResponse": { + "type": "object", + "required": [ + "data", + "total", + "total_cost", + "max_total_cost" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single subscription that you created.", + "items": { + "$ref": "#/components/schemas/EventSubSubscription" + } + }, + "total": { + "type": "integer", + "description": "The total number of subscriptions you’ve created.", + "format": "int32" + }, + "total_cost": { + "type": "integer", + "description": "The sum of all of your subscription costs. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits)", + "format": "int32" + }, + "max_total_cost": { + "type": "integer", + "description": "The maximum total cost that you’re allowed to incur for all subscriptions you create.", + "format": "int32" + } + } + }, + "GetEventSubSubscriptionsResponse": { + "type": "object", + "required": [ + "data", + "total", + "total_cost", + "max_total_cost" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of subscriptions. The list is ordered by the oldest subscription first. The list is empty if the client hasn't created subscriptions or there are no subscriptions that match the specified filter criteria.", + "items": { + "$ref": "#/components/schemas/EventSubSubscription" + } + }, + "total": { + "type": "integer", + "description": "The total number of subscriptions that you've created.", + "format": "int32" + }, + "total_cost": { + "type": "integer", + "description": "The sum of all of your subscription costs. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits)", + "format": "int32" + }, + "max_total_cost": { + "type": "integer", + "description": "The maximum total cost that you're allowed to incur for all subscriptions that you create.", + "format": "int32" + }, + "pagination": { + "description": "An object that contains the cursor used to get the next page of subscriptions. The object is empty if there are no more pages to get. The number of subscriptions returned per page is undertermined.", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor value that you set the _after_ query parameter to." + } + } + } + } + }, + "Game": { + "type": "object", + "required": [ + "id", + "name", + "box_art_url", + "igdb_id" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the category or game." + }, + "name": { + "type": "string", + "description": "The category’s or game’s name." + }, + "box_art_url": { + "type": "string", + "description": "A URL to the category’s or game’s box art. You must replace the `{width}x{height}` placeholder with the size of image you want." + }, + "igdb_id": { + "type": "string", + "description": "The ID that [IGDB](https://www.igdb.com/) uses to identify this game. If the IGDB ID is not available to Twitch, this field is set to an empty string." + } + } + }, + "GetTopGamesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of broadcasts. The broadcasts are sorted by the number of viewers, with the most popular first.", + "items": { + "$ref": "#/components/schemas/Game" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ or _before_ query parameter to get the next or previous page of results." + } + } + } + } + }, + "GetGamesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of categories and games. The list is empty if the specified categories and games weren’t found.", + "items": { + "$ref": "#/components/schemas/Game" + } + } + } + }, + "CreatorGoal": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "type", + "description", + "current_amount", + "target_amount", + "created_at" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this goal." + }, + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster that created the goal." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "type": { + "type": "string", + "description": "The type of goal. Possible values are: \n \n* follower — The goal is to increase followers.\n* subscription — The goal is to increase subscriptions. This type shows the net increase or decrease in tier points associated with the subscriptions.\n* subscription\\_count — The goal is to increase subscriptions. This type shows the net increase or decrease in the number of subscriptions.\n* new\\_subscription — The goal is to increase subscriptions. This type shows only the net increase in tier points associated with the subscriptions (it does not account for users that unsubscribed since the goal started).\n* new\\_subscription\\_count — The goal is to increase subscriptions. This type shows only the net increase in the number of subscriptions (it does not account for users that unsubscribed since the goal started).", + "enum": [ + "follower", + "subscription", + "subscription_count", + "new_subscription", + "new_subscription_count" + ] + }, + "description": { + "type": "string", + "description": "A description of the goal. Is an empty string if not specified." + }, + "current_amount": { + "type": "integer", + "description": "The goal’s current value. \n \nThe goal’s `type` determines how this value is increased or decreased. \n \n* If `type` is follower, this field is set to the broadcaster's current number of followers. This number increases with new followers and decreases when users unfollow the broadcaster.\n* If `type` is subscription, this field is increased and decreased by the points value associated with the subscription tier. For example, if a tier-two subscription is worth 2 points, this field is increased or decreased by 2, not 1.\n* If `type` is subscription\\_count, this field is increased by 1 for each new subscription and decreased by 1 for each user that unsubscribes.\n* If `type` is new\\_subscription, this field is increased by the points value associated with the subscription tier. For example, if a tier-two subscription is worth 2 points, this field is increased by 2, not 1.\n* If `type` is new\\_subscription\\_count, this field is increased by 1 for each new subscription.", + "format": "int32" + }, + "target_amount": { + "type": "integer", + "description": "The goal’s target value. For example, if the broadcaster has 200 followers before creating the goal, and their goal is to double that number, this field is set to 400.", + "format": "int32" + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the broadcaster created the goal.", + "format": "date-time" + } + } + }, + "GetCreatorGoalsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of goals. The list is empty if the broadcaster hasn’t created goals.", + "items": { + "$ref": "#/components/schemas/CreatorGoal" + } + } + } + }, + "GetChannelGuestStarSettingsResponse": { + "type": "object", + "required": [ + "is_moderator_send_live_enabled", + "slot_count", + "is_browser_source_audio_enabled", + "group_layout", + "browser_source_token" + ], + "properties": { + "is_moderator_send_live_enabled": { + "type": "boolean", + "description": "Flag determining if Guest Star moderators have access to control whether a guest is live once assigned to a slot." + }, + "slot_count": { + "type": "integer", + "description": "Number of slots the Guest Star call interface will allow the host to add to a call. Required to be between 1 and 6.", + "format": "int32" + }, + "is_browser_source_audio_enabled": { + "type": "boolean", + "description": "Flag determining if Browser Sources subscribed to sessions on this channel should output audio" + }, + "group_layout": { + "type": "string", + "description": "This setting determines how the guests within a session should be laid out within the browser source. Can be one of the following values: \n \n* `TILED_LAYOUT`: All live guests are tiled within the browser source with the same size.\n* `SCREENSHARE_LAYOUT`: All live guests are tiled within the browser source with the same size. If there is an active screen share, it is sized larger than the other guests.", + "enum": [ + "TILED_LAYOUT", + "SCREENSHARE_LAYOUT" + ] + }, + "browser_source_token": { + "type": "string", + "description": "View only token to generate browser source URLs" + } + } + }, + "UpdateChannelGuestStarSettingsBody": { + "type": "object", + "properties": { + "is_moderator_send_live_enabled": { + "type": "boolean", + "description": "Flag determining if Guest Star moderators have access to control whether a guest is live once assigned to a slot." + }, + "slot_count": { + "type": "integer", + "description": "Number of slots the Guest Star call interface will allow the host to add to a call. Required to be between 1 and 6.", + "format": "int32" + }, + "is_browser_source_audio_enabled": { + "type": "boolean", + "description": "Flag determining if Browser Sources subscribed to sessions on this channel should output audio" + }, + "group_layout": { + "type": "string", + "description": "This setting determines how the guests within a session should be laid out within the browser source. Can be one of the following values: \n \n* `TILED_LAYOUT`: All live guests are tiled within the browser source with the same size.\n* `SCREENSHARE_LAYOUT`: All live guests are tiled within the browser source with the same size. If there is an active screen share, it is sized larger than the other guests.\n* `HORIZONTAL_LAYOUT`: All live guests are arranged in a horizontal bar within the browser source\n* `VERTICAL_LAYOUT`: All live guests are arranged in a vertical bar within the browser source", + "enum": [ + "TILED_LAYOUT", + "SCREENSHARE_LAYOUT", + "HORIZONTAL_LAYOUT", + "VERTICAL_LAYOUT" + ] + }, + "regenerate_browser_sources": { + "type": "boolean", + "description": "Flag determining if Guest Star should regenerate the auth token associated with the channel’s browser sources. Providing a true value for this will immediately invalidate all browser sources previously configured in your streaming software." + } + } + }, + "Guest": { + "type": "object", + "required": [ + "slot_id", + "is_live", + "user_id", + "user_display_name", + "user_login", + "volume", + "assigned_at", + "audio_settings", + "video_settings" + ], + "properties": { + "slot_id": { + "type": "string", + "description": "ID representing this guest’s slot assignment. \n \n* Host is always in slot \"0\"\n* Guests are assigned the following consecutive IDs (e.g, \"1\", \"2\", \"3\", etc)\n* Screen Share is represented as a special guest with the ID \"SCREENSHARE\"\n* The identifier here matches the ID referenced in browser source links used in broadcasting software." + }, + "is_live": { + "type": "boolean", + "description": "Flag determining whether or not the guest is visible in the browser source in the host’s streaming software." + }, + "user_id": { + "type": "string", + "description": "User ID of the guest assigned to this slot." + }, + "user_display_name": { + "type": "string", + "description": "Display name of the guest assigned to this slot." + }, + "user_login": { + "type": "string", + "description": "Login of the guest assigned to this slot." + }, + "volume": { + "type": "integer", + "description": "Value from 0 to 100 representing the host’s volume setting for this guest.", + "format": "int32" + }, + "assigned_at": { + "type": "string", + "description": "Timestamp when this guest was assigned a slot in the session.", + "format": "date-time" + }, + "audio_settings": { + "description": "Information about the guest’s audio settings", + "type": "object", + "required": [ + "is_host_enabled", + "is_guest_enabled", + "is_available" + ], + "properties": { + "is_host_enabled": { + "type": "boolean", + "description": "Flag determining whether the host is allowing the guest’s audio to be seen or heard within the session." + }, + "is_guest_enabled": { + "type": "boolean", + "description": "Flag determining whether the guest is allowing their audio to be transmitted to the session." + }, + "is_available": { + "type": "boolean", + "description": "Flag determining whether the guest has an appropriate audio device available to be transmitted to the session." + } + } + }, + "video_settings": { + "description": "Information about the guest’s video settings", + "type": "object", + "required": [ + "is_host_enabled", + "is_guest_enabled", + "is_available" + ], + "properties": { + "is_host_enabled": { + "type": "boolean", + "description": "Flag determining whether the host is allowing the guest’s video to be seen or heard within the session." + }, + "is_guest_enabled": { + "type": "boolean", + "description": "Flag determining whether the guest is allowing their video to be transmitted to the session." + }, + "is_available": { + "type": "boolean", + "description": "Flag determining whether the guest has an appropriate video device available to be transmitted to the session." + } + } + } + } + }, + "GuestStarSession": { + "type": "object", + "required": [ + "id", + "guests" + ], + "properties": { + "id": { + "type": "string", + "description": "ID uniquely representing the Guest Star session." + }, + "guests": { + "type": "array", + "description": "List of guests currently interacting with the Guest Star session.", + "items": { + "$ref": "#/components/schemas/Guest" + } + } + } + }, + "GetGuestStarSessionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "Summary of the session details", + "items": { + "$ref": "#/components/schemas/GuestStarSession" + } + } + } + }, + "CreateGuestStarSessionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "Summary of the session details.", + "items": { + "$ref": "#/components/schemas/GuestStarSession" + } + } + } + }, + "EndGuestStarSessionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "Summary of the session details when the session was ended.", + "items": { + "$ref": "#/components/schemas/GuestStarSession" + } + } + } + }, + "GuestStarInvite": { + "type": "object", + "required": [ + "user_id", + "invited_at", + "status", + "is_video_enabled", + "is_audio_enabled", + "is_video_available", + "is_audio_available" + ], + "properties": { + "user_id": { + "type": "string", + "description": "Twitch User ID corresponding to the invited guest" + }, + "invited_at": { + "type": "string", + "description": "Timestamp when this user was invited to the session.", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "Status representing the invited user’s join state. Can be one of the following: \n \n* `INVITED`: The user has been invited to the session but has not acknowledged it.\n* `ACCEPTED`: The invited user has acknowledged the invite and joined the waiting room, but may still be setting up their media devices or otherwise preparing to join the call.\n* `READY`: The invited user has signaled they are ready to join the call from the waiting room." + }, + "is_video_enabled": { + "type": "boolean", + "description": "Flag signaling that the invited user has chosen to disable their local video device. The user has hidden themselves, but they may choose to reveal their video feed upon joining the session." + }, + "is_audio_enabled": { + "type": "boolean", + "description": "Flag signaling that the invited user has chosen to disable their local audio device. The user has muted themselves, but they may choose to unmute their audio feed upon joining the session." + }, + "is_video_available": { + "type": "boolean", + "description": "Flag signaling that the invited user has a video device available for sharing." + }, + "is_audio_available": { + "type": "boolean", + "description": "Flag signaling that the invited user has an audio device available for sharing." + } + } + }, + "GetGuestStarInvitesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of invite objects describing the invited user as well as their ready status.", + "items": { + "$ref": "#/components/schemas/GuestStarInvite" + } + } + } + }, + "HypeTrainEvent": { + "type": "object", + "required": [ + "id", + "event_type", + "event_timestamp", + "version", + "event_data" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this event." + }, + "event_type": { + "type": "string", + "description": "The type of event. The string is in the form, hypetrain.{event\\_name}. The request returns only progress event types (i.e., hypetrain.progression)." + }, + "event_timestamp": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the event occurred.", + "format": "date-time" + }, + "version": { + "type": "string", + "description": "The version number of the definition of the event’s data. For example, the value is 1 if the data in `event_data` uses the first definition of the event’s data." + }, + "event_data": { + "description": "The event’s data.", + "type": "object", + "required": [ + "broadcaster_id", + "cooldown_end_time", + "expires_at", + "goal", + "id", + "last_contribution", + "level", + "started_at", + "top_contributions", + "total" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that’s running the Hype Train." + }, + "cooldown_end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that another Hype Train can start.", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the Hype Train ends.", + "format": "date-time" + }, + "goal": { + "type": "integer", + "description": "The value needed to reach the next level.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "An ID that identifies this Hype Train." + }, + "last_contribution": { + "description": "The most recent contribution towards the Hype Train’s goal.", + "type": "object", + "required": [ + "total", + "type", + "user" + ], + "properties": { + "total": { + "type": "integer", + "description": "The total amount contributed. If `type` is BITS, `total` represents the amount of Bits used. If `type` is SUBS, `total` is 500, 1000, or 2500 to represent tier 1, 2, or 3 subscriptions, respectively.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The contribution method used. Possible values are: \n \n* BITS — Cheering with Bits.\n* SUBS — Subscription activity like subscribing or gifting subscriptions.\n* OTHER — Covers other contribution methods not listed.", + "enum": [ + "BITS", + "SUBS", + "OTHER" + ] + }, + "user": { + "type": "string", + "description": "The ID of the user that made the contribution." + } + } + }, + "level": { + "type": "integer", + "description": "The highest level that the Hype Train reached (the levels are 1 through 5).", + "format": "int32" + }, + "started_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that this Hype Train started.", + "format": "date-time" + }, + "top_contributions": { + "type": "array", + "description": "The top contributors for each contribution type. For example, the top contributor using BITS (by aggregate) and the top contributor using SUBS (by count).", + "items": { + "type": "object", + "required": [ + "total", + "type", + "user" + ], + "properties": { + "total": { + "type": "integer", + "description": "The total amount contributed. If `type` is BITS, `total` represents the amount of Bits used. If `type` is SUBS, `total` is 500, 1000, or 2500 to represent tier 1, 2, or 3 subscriptions, respectively.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The contribution method used. Possible values are: \n \n* BITS — Cheering with Bits.\n* SUBS — Subscription activity like subscribing or gifting subscriptions.\n* OTHER — Covers other contribution methods not listed.", + "enum": [ + "BITS", + "SUBS", + "OTHER" + ] + }, + "user": { + "type": "string", + "description": "The ID of the user that made the contribution." + } + } + } + }, + "total": { + "type": "integer", + "description": "The current total amount raised.", + "format": "int32" + } + } + } + } + }, + "GetHypeTrainEventsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of Hype Train events. The list is empty if the broadcaster hasn’t run a Hype Train within the last 5 days.", + "items": { + "$ref": "#/components/schemas/HypeTrainEvent" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "CheckAutoModStatusBody": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of messages to check. The list must contain at least one message and may contain up to a maximum of 100 messages.", + "items": { + "type": "object", + "required": [ + "msg_id", + "msg_text" + ], + "properties": { + "msg_id": { + "type": "string", + "description": "A caller-defined ID used to correlate this message with the same message in the response." + }, + "msg_text": { + "type": "string", + "description": "The message to check." + } + } + } + } + } + }, + "AutoModStatus": { + "type": "object", + "required": [ + "msg_id", + "is_permitted" + ], + "properties": { + "msg_id": { + "type": "string", + "description": "The caller-defined ID passed in the request." + }, + "is_permitted": { + "type": "boolean", + "description": "A Boolean value that indicates whether Twitch would approve the message for chat or hold it for moderator review or block it from chat. Is **true** if Twitch would approve the message; otherwise, **false** if Twitch would hold the message for moderator review or block it from chat." + } + } + }, + "CheckAutoModStatusResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of messages and whether Twitch would approve them for chat.", + "items": { + "$ref": "#/components/schemas/AutoModStatus" + } + } + } + }, + "ManageHeldAutoModMessagesBody": { + "type": "object", + "required": [ + "user_id", + "msg_id", + "action" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The moderator who is approving or denying the held message. This ID must match the user ID in the access token." + }, + "msg_id": { + "type": "string", + "description": "The ID of the message to allow or deny." + }, + "action": { + "type": "string", + "description": "The action to take for the message. Possible values are: \n \n* ALLOW\n* DENY", + "enum": [ + "ALLOW", + "DENY" + ] + } + } + }, + "AutoModSettings": { + "type": "object", + "required": [ + "broadcaster_id", + "moderator_id", + "overall_level", + "disability", + "aggression", + "sexuality_sex_or_gender", + "misogyny", + "bullying", + "swearing", + "race_ethnicity_or_religion", + "sex_based_terms" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The broadcaster’s ID." + }, + "moderator_id": { + "type": "string", + "description": "The moderator’s ID." + }, + "overall_level": { + "type": "integer", + "description": "The default AutoMod level for the broadcaster. This field is **null** if the broadcaster has set one or more of the individual settings.", + "format": "int32", + "nullable": true + }, + "disability": { + "type": "integer", + "description": "The Automod level for discrimination against disability.", + "format": "int32" + }, + "aggression": { + "type": "integer", + "description": "The Automod level for hostility involving aggression.", + "format": "int32" + }, + "sexuality_sex_or_gender": { + "type": "integer", + "description": "The AutoMod level for discrimination based on sexuality, sex, or gender.", + "format": "int32" + }, + "misogyny": { + "type": "integer", + "description": "The Automod level for discrimination against women.", + "format": "int32" + }, + "bullying": { + "type": "integer", + "description": "The Automod level for hostility involving name calling or insults.", + "format": "int32" + }, + "swearing": { + "type": "integer", + "description": "The Automod level for profanity.", + "format": "int32" + }, + "race_ethnicity_or_religion": { + "type": "integer", + "description": "The Automod level for racial discrimination.", + "format": "int32" + }, + "sex_based_terms": { + "type": "integer", + "description": "The Automod level for sexual content.", + "format": "int32" + } + } + }, + "GetAutoModSettingsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of AutoMod settings. The list contains a single object that contains all the AutoMod settings.", + "items": { + "$ref": "#/components/schemas/AutoModSettings" + } + } + } + }, + "UpdateAutoModSettingsBody": { + "type": "object", + "properties": { + "aggression": { + "type": "integer", + "description": "The Automod level for hostility involving aggression.", + "format": "int32" + }, + "bullying": { + "type": "integer", + "description": "The Automod level for hostility involving name calling or insults.", + "format": "int32" + }, + "disability": { + "type": "integer", + "description": "The Automod level for discrimination against disability.", + "format": "int32" + }, + "misogyny": { + "type": "integer", + "description": "The Automod level for discrimination against women.", + "format": "int32" + }, + "overall_level": { + "type": "integer", + "description": "The default AutoMod level for the broadcaster.", + "format": "int32" + }, + "race_ethnicity_or_religion": { + "type": "integer", + "description": "The Automod level for racial discrimination.", + "format": "int32" + }, + "sex_based_terms": { + "type": "integer", + "description": "The Automod level for sexual content.", + "format": "int32" + }, + "sexuality_sex_or_gender": { + "type": "integer", + "description": "The AutoMod level for discrimination based on sexuality, sex, or gender.", + "format": "int32" + }, + "swearing": { + "type": "integer", + "description": "The Automod level for profanity.", + "format": "int32" + } + } + }, + "UpdateAutoModSettingsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of AutoMod settings. The list contains a single object that contains all the AutoMod settings.", + "items": { + "$ref": "#/components/schemas/AutoModSettings" + } + } + } + }, + "BannedUser": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name", + "expires_at", + "created_at", + "reason", + "moderator_id", + "moderator_login", + "moderator_name" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of the banned user." + }, + "user_login": { + "type": "string", + "description": "The banned user’s login name." + }, + "user_name": { + "type": "string", + "description": "The banned user’s display name." + }, + "expires_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the timeout expires, or an empty string if the user is permanently banned.", + "format": "date-time" + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the user was banned.", + "format": "date-time" + }, + "reason": { + "type": "string", + "description": "The reason the user was banned or put in a timeout if the moderator provided one." + }, + "moderator_id": { + "type": "string", + "description": "The ID of the moderator that banned the user or put them in a timeout." + }, + "moderator_login": { + "type": "string", + "description": "The moderator’s login name." + }, + "moderator_name": { + "type": "string", + "description": "The moderator’s display name." + } + } + }, + "GetBannedUsersResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users that were banned or put in a timeout.", + "items": { + "$ref": "#/components/schemas/BannedUser" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "BanUserBody": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "Identifies the user and type of ban.", + "type": "object", + "required": [ + "user_id" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of the user to ban or put in a timeout." + }, + "duration": { + "type": "integer", + "description": "To ban a user indefinitely, don’t include this field. \n \nTo put a user in a timeout, include this field and specify the timeout period, in seconds. The minimum timeout is 1 second and the maximum is 1,209,600 seconds (2 weeks). \n \nTo end a user’s timeout early, set this field to 1, or use the [Unban user](https://dev.twitch.tv/docs/api/reference#unban-user) endpoint.", + "format": "int32" + }, + "reason": { + "type": "string", + "description": "The reason the you’re banning the user or putting them in a timeout. The text is user defined and is limited to a maximum of 500 characters." + } + } + } + } + }, + "BanUserResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the user you successfully banned or put in a timeout.", + "items": { + "type": "object", + "required": [ + "broadcaster_id", + "moderator_id", + "user_id", + "created_at", + "end_time" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The broadcaster whose chat room the user was banned from chatting in." + }, + "moderator_id": { + "type": "string", + "description": "The moderator that banned or put the user in the timeout." + }, + "user_id": { + "type": "string", + "description": "The user that was banned or put in a timeout." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the ban or timeout was placed.", + "format": "date-time" + }, + "end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the timeout will end. Is **null** if the user was banned instead of being put in a timeout.", + "format": "date-time", + "nullable": true + } + } + } + } + } + }, + "GetUnbanRequestsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains information about the channel's unban requests.", + "items": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "moderator_id", + "moderator_login", + "moderator_name", + "user_id", + "user_login", + "user_name", + "text", + "status", + "created_at", + "resolved_at", + "resolution_text" + ], + "properties": { + "id": { + "type": "string", + "description": "Unban request ID." + }, + "broadcaster_id": { + "type": "string", + "description": "User ID of broadcaster whose channel is receiving the unban request." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster's display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster's login name." + }, + "moderator_id": { + "type": "string", + "description": "User ID of moderator who approved/denied the request." + }, + "moderator_login": { + "type": "string", + "description": "The moderator's login name." + }, + "moderator_name": { + "type": "string", + "description": "The moderator's display name." + }, + "user_id": { + "type": "string", + "description": "User ID of the requestor who is asking for an unban." + }, + "user_login": { + "type": "string", + "description": "The user's login name." + }, + "user_name": { + "type": "string", + "description": "The user's display name." + }, + "text": { + "type": "string", + "description": "Text of the request from the requesting user." + }, + "status": { + "type": "string", + "description": "Status of the request. One of: \n \n* pending\n* approved\n* denied\n* acknowledged\n* canceled" + }, + "created_at": { + "type": "string", + "description": "Timestamp of when the unban request was created.", + "format": "date-time" + }, + "resolved_at": { + "type": "string", + "description": "Timestamp of when moderator/broadcaster approved or denied the request.", + "format": "date-time" + }, + "resolution_text": { + "type": "string", + "description": "Text input by the resolver (moderator) of the unban. request" + } + } + } + }, + "pagination": { + "description": "Contains information used to page through a list of results. The object is empty if there are no more pages left to page through.", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter." + } + } + } + } + }, + "ResolveUnbanRequestsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "", + "items": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "moderator_id", + "moderator_login", + "moderator_name", + "user_id", + "user_login", + "user_name", + "text", + "status", + "created_at", + "resolved_at", + "resolution_text" + ], + "properties": { + "id": { + "type": "string", + "description": "Unban request ID." + }, + "broadcaster_id": { + "type": "string", + "description": "User ID of broadcaster whose channel is receiving the unban request." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "moderator_id": { + "type": "string", + "description": "User ID of moderator who approved/denied the request." + }, + "moderator_login": { + "type": "string", + "description": "The moderator’s login name." + }, + "moderator_name": { + "type": "string", + "description": "The moderator’s display name." + }, + "user_id": { + "type": "string", + "description": "User ID of the requestor who is asking for an unban." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "text": { + "type": "string", + "description": "Text of the request from the requesting user." + }, + "status": { + "type": "string", + "description": "Status of the request. One of: \n \n* approved\n* denied" + }, + "created_at": { + "type": "string", + "description": "Timestamp of when the unban request was created.", + "format": "date-time" + }, + "resolved_at": { + "type": "string", + "description": "Timestamp of when moderator/broadcaster approved or denied the request.", + "format": "date-time" + }, + "resolution_text": { + "type": "string", + "description": "Text input by the resolver (moderator) of the unban request." + } + } + } + } + } + }, + "BlockedTerm": { + "type": "object", + "required": [ + "broadcaster_id", + "moderator_id", + "id", + "text", + "created_at", + "updated_at", + "expires_at" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The broadcaster that owns the list of blocked terms." + }, + "moderator_id": { + "type": "string", + "description": "The moderator that blocked the word or phrase from being used in the broadcaster’s chat room." + }, + "id": { + "type": "string", + "description": "An ID that identifies this blocked term." + }, + "text": { + "type": "string", + "description": "The blocked word or phrase." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the term was blocked.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the term was updated. \n \nWhen the term is added, this timestamp is the same as `created_at`. The timestamp changes as AutoMod continues to deny the term.", + "format": "date-time" + }, + "expires_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) that the blocked term is set to expire. After the block expires, users may use the term in the broadcaster’s chat room. \n \nThis field is **null** if the term was added manually or was permanently blocked by AutoMod.", + "format": "date-time", + "nullable": true + } + } + }, + "GetBlockedTermsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of blocked terms. The list is in descending order of when they were created (see the `created_at` timestamp).", + "items": { + "$ref": "#/components/schemas/BlockedTerm" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "AddBlockedTermBody": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string", + "description": "The word or phrase to block from being used in the broadcaster’s chat room. The term must contain a minimum of 2 characters and may contain up to a maximum of 500 characters. \n \nTerms may include a wildcard character (\\*). The wildcard character must appear at the beginning or end of a word or set of characters. For example, \\*foo or foo\\*. \n \nIf the blocked term already exists, the response contains the existing blocked term." + } + } + }, + "AddBlockedTermResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single blocked term that the broadcaster added.", + "items": { + "$ref": "#/components/schemas/BlockedTerm" + } + } + } + }, + "GetModeratedChannelsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of channels that the user has moderator privileges in.", + "items": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that uniquely identifies the channel this user can moderate." + }, + "broadcaster_login": { + "type": "string", + "description": "The channel’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The channels’ display name." + } + } + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through.", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter." + } + } + } + } + }, + "UserModerator": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of the user that has permission to moderate the broadcaster’s channel." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + } + } + }, + "GetModeratorsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of moderators.", + "items": { + "$ref": "#/components/schemas/UserModerator" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "UserVip": { + "type": "object", + "required": [ + "user_id", + "user_name", + "user_login" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that uniquely identifies the VIP user." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + } + } + }, + "GetVIPsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of VIPs. The list is empty if the broadcaster doesn’t have VIP users.", + "items": { + "$ref": "#/components/schemas/UserVip" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "UpdateShieldModeStatusBody": { + "type": "object", + "required": [ + "is_active" + ], + "properties": { + "is_active": { + "type": "boolean", + "description": "A Boolean value that determines whether to activate Shield Mode. Set to **true** to activate Shield Mode; otherwise, **false** to deactivate Shield Mode." + } + } + }, + "UpdateShieldModeStatusResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains a single object with the broadcaster’s updated Shield Mode status.", + "items": { + "type": "object", + "required": [ + "is_active", + "moderator_id", + "moderator_login", + "moderator_name", + "last_activated_at" + ], + "properties": { + "is_active": { + "type": "boolean", + "description": "A Boolean value that determines whether Shield Mode is active. Is **true** if Shield Mode is active; otherwise, **false**." + }, + "moderator_id": { + "type": "string", + "description": "An ID that identifies the moderator that last activated Shield Mode." + }, + "moderator_login": { + "type": "string", + "description": "The moderator’s login name." + }, + "moderator_name": { + "type": "string", + "description": "The moderator’s display name." + }, + "last_activated_at": { + "type": "string", + "description": "The UTC timestamp (in RFC3339 format) of when Shield Mode was last activated.", + "format": "date-time" + } + } + } + } + } + }, + "GetShieldModeStatusResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains a single object with the broadcaster’s Shield Mode status.", + "items": { + "type": "object", + "required": [ + "is_active", + "moderator_id", + "moderator_login", + "moderator_name", + "last_activated_at" + ], + "properties": { + "is_active": { + "type": "boolean", + "description": "A Boolean value that determines whether Shield Mode is active. Is **true** if the broadcaster activated Shield Mode; otherwise, **false**." + }, + "moderator_id": { + "type": "string", + "description": "An ID that identifies the moderator that last activated Shield Mode. Is an empty string if Shield Mode hasn’t been previously activated." + }, + "moderator_login": { + "type": "string", + "description": "The moderator’s login name. Is an empty string if Shield Mode hasn’t been previously activated." + }, + "moderator_name": { + "type": "string", + "description": "The moderator’s display name. Is an empty string if Shield Mode hasn’t been previously activated." + }, + "last_activated_at": { + "type": "string", + "description": "The UTC timestamp (in RFC3339 format) of when Shield Mode was last activated. Is an empty string if Shield Mode hasn’t been previously activated.", + "format": "date-time" + } + } + } + } + } + }, + "Poll": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "title", + "choices", + "bits_voting_enabled", + "bits_per_vote", + "channel_points_voting_enabled", + "channel_points_per_vote", + "status", + "duration", + "started_at", + "ended_at" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the poll." + }, + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster that created the poll." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "title": { + "type": "string", + "description": "The question that viewers are voting on. For example, _What game should I play next?_ The title may contain a maximum of 60 characters." + }, + "choices": { + "type": "array", + "description": "A list of choices that viewers can choose from. The list will contain a minimum of two choices and up to a maximum of five choices.", + "items": { + "type": "object", + "required": [ + "id", + "title", + "votes", + "channel_points_votes", + "bits_votes" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this choice." + }, + "title": { + "type": "string", + "description": "The choice’s title. The title may contain a maximum of 25 characters." + }, + "votes": { + "type": "integer", + "description": "The total number of votes cast for this choice.", + "format": "int32" + }, + "channel_points_votes": { + "type": "integer", + "description": "The number of votes cast using Channel Points.", + "format": "int32" + }, + "bits_votes": { + "type": "integer", + "description": "Not used; will be set to 0.", + "format": "int32" + } + } + } + }, + "bits_voting_enabled": { + "type": "boolean", + "description": "Not used; will be set to **false**." + }, + "bits_per_vote": { + "type": "integer", + "description": "Not used; will be set to 0.", + "format": "int32" + }, + "channel_points_voting_enabled": { + "type": "boolean", + "description": "A Boolean value that indicates whether viewers may cast additional votes using Channel Points. For information about Channel Points, see [Channel Points Guide](https://help.twitch.tv/s/article/channel-points-guide)." + }, + "channel_points_per_vote": { + "type": "integer", + "description": "The number of points the viewer must spend to cast one additional vote.", + "format": "int32" + }, + "status": { + "type": "string", + "description": "The poll’s status. Valid values are: \n \n* ACTIVE — The poll is running.\n* COMPLETED — The poll ended on schedule (see the `duration` field).\n* TERMINATED — The poll was terminated before its scheduled end.\n* ARCHIVED — The poll has been archived and is no longer visible on the channel.\n* MODERATED — The poll was deleted.\n* INVALID — Something went wrong while determining the state.", + "enum": [ + "ACTIVE", + "COMPLETED", + "TERMINATED", + "ARCHIVED", + "MODERATED", + "INVALID" + ] + }, + "duration": { + "type": "integer", + "description": "The length of time (in seconds) that the poll will run for.", + "format": "int32" + }, + "started_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the poll began.", + "format": "date-time" + }, + "ended_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the poll ended. If `status` is ACTIVE, this field is set to **null**.", + "format": "date-time", + "nullable": true + } + } + }, + "GetPollsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list of polls. The polls are returned in descending order of start time unless you specify IDs in the request, in which case they're returned in the same order as you passed them in the request. The list is empty if the broadcaster hasn't created polls.", + "items": { + "$ref": "#/components/schemas/Poll" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request's _after_ query parameter." + } + } + } + } + }, + "CreatePollBody": { + "type": "object", + "required": [ + "broadcaster_id", + "title", + "choices", + "duration" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that’s running the poll. This ID must match the user ID in the user access token." + }, + "title": { + "type": "string", + "description": "The question that viewers will vote on. For example, _What game should I play next?_ The question may contain a maximum of 60 characters." + }, + "choices": { + "type": "array", + "description": "A list of choices that viewers may choose from. The list must contain a minimum of 2 choices and up to a maximum of 5 choices.", + "items": { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string", + "description": "One of the choices the viewer may select. The choice may contain a maximum of 25 characters." + } + } + } + }, + "duration": { + "type": "integer", + "description": "The length of time (in seconds) that the poll will run for. The minimum is 15 seconds and the maximum is 1800 seconds (30 minutes).", + "format": "int32" + }, + "channel_points_voting_enabled": { + "type": "boolean", + "description": "A Boolean value that indicates whether viewers may cast additional votes using Channel Points. If **true**, the viewer may cast more than one vote but each additional vote costs the number of Channel Points specified in `channel_points_per_vote`. The default is **false** (viewers may cast only one vote). For information about Channel Points, see [Channel Points Guide](https://help.twitch.tv/s/article/channel-points-guide)." + }, + "channel_points_per_vote": { + "type": "integer", + "description": "The number of points that the viewer must spend to cast one additional vote. The minimum is 1 and the maximum is 1000000\\. Set only if `ChannelPointsVotingEnabled` is **true**.", + "format": "int32" + } + } + }, + "CreatePollResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single poll that you created.", + "items": { + "$ref": "#/components/schemas/Poll" + } + } + } + }, + "EndPollBody": { + "type": "object", + "required": [ + "broadcaster_id", + "id", + "status" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that’s running the poll. This ID must match the user ID in the user access token." + }, + "id": { + "type": "string", + "description": "The ID of the poll to update." + }, + "status": { + "type": "string", + "description": "The status to set the poll to. Possible case-sensitive values are: \n \n* TERMINATED — Ends the poll before the poll is scheduled to end. The poll remains publicly visible.\n* ARCHIVED — Ends the poll before the poll is scheduled to end, and then archives it so it's no longer publicly visible.", + "enum": [ + "TERMINATED", + "ARCHIVED" + ] + } + } + }, + "EndPollResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the poll that you ended.", + "items": { + "$ref": "#/components/schemas/Poll" + } + } + } + }, + "PredictionOutcome": { + "type": "object", + "required": [ + "id", + "title", + "users", + "channel_points", + "top_predictors", + "color" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this outcome." + }, + "title": { + "type": "string", + "description": "The outcome’s text." + }, + "users": { + "type": "integer", + "description": "The number of unique viewers that chose this outcome.", + "format": "int32" + }, + "channel_points": { + "type": "integer", + "description": "The number of Channel Points spent by viewers on this outcome.", + "format": "int32" + }, + "top_predictors": { + "type": "array", + "description": "A list of viewers who were the top predictors; otherwise, **null** if none.", + "items": { + "type": "object", + "required": [ + "user_id", + "user_name", + "user_login", + "channel_points_used", + "channel_points_won" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that identifies the viewer." + }, + "user_name": { + "type": "string", + "description": "The viewer’s display name." + }, + "user_login": { + "type": "string", + "description": "The viewer’s login name." + }, + "channel_points_used": { + "type": "integer", + "description": "The number of Channel Points the viewer spent.", + "format": "int32" + }, + "channel_points_won": { + "type": "integer", + "description": "The number of Channel Points distributed to the viewer.", + "format": "int32" + } + } + }, + "nullable": true + }, + "color": { + "type": "string", + "description": "The color that visually identifies this outcome in the UX. Possible values are: \n \n* BLUE\n* PINK\n \nIf the number of outcomes is two, the color is BLUE for the first outcome and PINK for the second outcome. If there are more than two outcomes, the color is BLUE for all outcomes.", + "enum": [ + "BLUE", + "PINK" + ] + } + } + }, + "Prediction": { + "type": "object", + "required": [ + "id", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "title", + "winning_outcome_id", + "outcomes", + "prediction_window", + "status", + "created_at", + "ended_at", + "locked_at" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this prediction." + }, + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster that created the prediction." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "title": { + "type": "string", + "description": "The question that the prediction asks. For example, _Will I finish this entire pizza?_" + }, + "winning_outcome_id": { + "type": "string", + "description": "The ID of the winning outcome. Is **null** unless `status` is RESOLVED.", + "nullable": true + }, + "outcomes": { + "type": "array", + "description": "The list of possible outcomes for the prediction.", + "items": { + "$ref": "#/components/schemas/PredictionOutcome" + } + }, + "prediction_window": { + "type": "integer", + "description": "The length of time (in seconds) that the prediction will run for.", + "format": "int32" + }, + "status": { + "type": "string", + "description": "The prediction’s status. Valid values are: \n \n* ACTIVE — The Prediction is running and viewers can make predictions.\n* CANCELED — The broadcaster canceled the Prediction and refunded the Channel Points to the participants.\n* LOCKED — The broadcaster locked the Prediction, which means viewers can no longer make predictions.\n* RESOLVED — The winning outcome was determined and the Channel Points were distributed to the viewers who predicted the correct outcome.", + "enum": [ + "ACTIVE", + "CANCELED", + "LOCKED", + "RESOLVED" + ] + }, + "created_at": { + "type": "string", + "description": "The UTC date and time of when the Prediction began.", + "format": "date-time" + }, + "ended_at": { + "type": "string", + "description": "The UTC date and time of when the Prediction ended. If `status` is ACTIVE, this is set to **null**.", + "format": "date-time", + "nullable": true + }, + "locked_at": { + "type": "string", + "description": "The UTC date and time of when the Prediction was locked. If `status` is not LOCKED, this is set to **null**.", + "format": "date-time", + "nullable": true + } + } + }, + "GetPredictionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The broadcaster’s list of Channel Points Predictions. The list is sorted in descending ordered by when the prediction began (the most recent prediction is first). The list is empty if the broadcaster hasn’t created predictions.", + "items": { + "$ref": "#/components/schemas/Prediction" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter." + } + } + } + } + }, + "CreatePredictionBody": { + "type": "object", + "required": [ + "broadcaster_id", + "title", + "outcomes", + "prediction_window" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that’s running the prediction. This ID must match the user ID in the user access token." + }, + "title": { + "type": "string", + "description": "The question that the broadcaster is asking. For example, _Will I finish this entire pizza?_ The title is limited to a maximum of 45 characters." + }, + "outcomes": { + "type": "array", + "description": "The list of possible outcomes that the viewers may choose from. The list must contain a minimum of 2 choices and up to a maximum of 10 choices.", + "items": { + "type": "object", + "required": [ + "title" + ], + "properties": { + "title": { + "type": "string", + "description": "The text of one of the outcomes that the viewer may select. The title is limited to a maximum of 25 characters." + } + } + } + }, + "prediction_window": { + "type": "integer", + "description": "The length of time (in seconds) that the prediction will run for. The minimum is 30 seconds and the maximum is 1800 seconds (30 minutes).", + "format": "int32" + } + } + }, + "CreatePredictionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single prediction that you created.", + "items": { + "$ref": "#/components/schemas/Prediction" + } + } + } + }, + "EndPredictionBody": { + "type": "object", + "required": [ + "broadcaster_id", + "id", + "status" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that’s running the prediction. This ID must match the user ID in the user access token." + }, + "id": { + "type": "string", + "description": "The ID of the prediction to update." + }, + "status": { + "type": "string", + "description": "The status to set the prediction to. Possible case-sensitive values are: \n \n* RESOLVED — The winning outcome is determined and the Channel Points are distributed to the viewers who predicted the correct outcome.\n* CANCELED — The broadcaster is canceling the prediction and sending refunds to the participants.\n* LOCKED — The broadcaster is locking the prediction, which means viewers may no longer make predictions.\n \nThe broadcaster can update an active prediction to LOCKED, RESOLVED, or CANCELED; and update a locked prediction to RESOLVED or CANCELED. \n \nThe broadcaster has up to 24 hours after the prediction window closes to resolve the prediction. If not, Twitch sets the status to CANCELED and returns the points.", + "enum": [ + "RESOLVED", + "CANCELED", + "LOCKED" + ] + }, + "winning_outcome_id": { + "type": "string", + "description": "The ID of the winning outcome. You must set this parameter if you set `status` to RESOLVED." + } + } + }, + "EndPredictionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single prediction that you updated.", + "items": { + "$ref": "#/components/schemas/Prediction" + } + } + } + }, + "StartRaidResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains a single object with information about the pending raid.", + "items": { + "type": "object", + "required": [ + "created_at", + "is_mature" + ], + "properties": { + "created_at": { + "type": "string", + "description": "The UTC date and time, in RFC3339 format, of when the raid was requested.", + "format": "date-time" + }, + "is_mature": { + "type": "boolean", + "description": "A Boolean value that indicates whether the channel being raided contains mature content." + } + } + } + } + } + }, + "ChannelStreamScheduleSegment": { + "type": "object", + "required": [ + "id", + "start_time", + "end_time", + "title", + "canceled_until", + "category", + "is_recurring" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this broadcast segment." + }, + "start_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcast starts.", + "format": "date-time" + }, + "end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcast ends.", + "format": "date-time" + }, + "title": { + "type": "string", + "description": "The broadcast segment’s title." + }, + "canceled_until": { + "type": "string", + "description": "Indicates whether the broadcaster canceled this segment of a recurring broadcast. If the broadcaster canceled this segment, this field is set to the same value that’s in the `end_time` field; otherwise, it’s set to **null**.", + "nullable": true + }, + "category": { + "description": "The type of content that the broadcaster plans to stream or **null** if not specified.", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the category that best represents the content that the broadcaster plans to stream. For example, the game’s ID if the broadcaster will play a game or the Just Chatting ID if the broadcaster will host a talk show." + }, + "name": { + "type": "string", + "description": "The name of the category. For example, the game’s title if the broadcaster will play a game or Just Chatting if the broadcaster will host a talk show." + } + } + }, + "is_recurring": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcast is part of a recurring series that streams at the same time each week or is a one-time broadcast. Is **true** if the broadcast is part of a recurring series." + } + } + }, + "GetChannelStreamScheduleResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "The broadcaster’s streaming schedule.", + "type": "object", + "required": [ + "segments", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "vacation" + ], + "properties": { + "segments": { + "type": "array", + "description": "The list of broadcasts in the broadcaster’s streaming schedule.", + "items": { + "$ref": "#/components/schemas/ChannelStreamScheduleSegment" + } + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that owns the broadcast schedule." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "vacation": { + "description": "The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled.", + "type": "object", + "required": [ + "start_time", + "end_time" + ], + "properties": { + "start_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation starts.", + "format": "date-time" + }, + "end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation ends.", + "format": "date-time" + } + } + }, + "pagination": { + "description": "The information used to page through a list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination).", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value." + } + } + } + } + } + } + }, + "CreateChannelStreamScheduleSegmentBody": { + "type": "object", + "required": [ + "start_time", + "timezone", + "duration" + ], + "properties": { + "start_time": { + "type": "string", + "description": "The date and time that the broadcast segment starts. Specify the date and time in RFC3339 format (for example, 2021-07-01T18:00:00Z).", + "format": "date-time" + }, + "timezone": { + "type": "string", + "description": "The time zone where the broadcast takes place. Specify the time zone using [IANA time zone database](https://www.iana.org/time-zones) format (for example, America/New\\_York)." + }, + "duration": { + "type": "string", + "description": "The length of time, in minutes, that the broadcast is scheduled to run. The duration must be in the range 30 through 1380 (23 hours)." + }, + "is_recurring": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcast recurs weekly. Is **true** if the broadcast recurs weekly. Only partners and affiliates may add non-recurring broadcasts." + }, + "category_id": { + "type": "string", + "description": "The ID of the category that best represents the broadcast’s content. To get the category ID, use the [Search Categories](https://dev.twitch.tv/docs/api/reference#search-categories) endpoint." + }, + "title": { + "type": "string", + "description": "The broadcast’s title. The title may contain a maximum of 140 characters." + } + } + }, + "CreateChannelStreamScheduleSegmentResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "The broadcaster’s streaming scheduled.", + "type": "object", + "required": [ + "segments", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "vacation" + ], + "properties": { + "segments": { + "type": "array", + "description": "A list that contains the single broadcast segment that you added.", + "items": { + "$ref": "#/components/schemas/ChannelStreamScheduleSegment" + } + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that owns the broadcast schedule." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "vacation": { + "description": "The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled.", + "type": "object", + "required": [ + "start_time", + "end_time" + ], + "properties": { + "start_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation starts.", + "format": "date-time" + }, + "end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation ends.", + "format": "date-time" + } + } + } + } + } + } + }, + "UpdateChannelStreamScheduleSegmentBody": { + "type": "object", + "properties": { + "start_time": { + "type": "string", + "description": "The date and time that the broadcast segment starts. Specify the date and time in RFC3339 format (for example, 2022-08-02T06:00:00Z). \n \n**NOTE**: Only partners and affiliates may update a broadcast’s start time and only for non-recurring segments.", + "format": "date-time" + }, + "duration": { + "type": "string", + "description": "The length of time, in minutes, that the broadcast is scheduled to run. The duration must be in the range 30 through 1380 (23 hours)." + }, + "category_id": { + "type": "string", + "description": "The ID of the category that best represents the broadcast’s content. To get the category ID, use the [Search Categories](https://dev.twitch.tv/docs/api/reference#search-categories) endpoint." + }, + "title": { + "type": "string", + "description": "The broadcast’s title. The title may contain a maximum of 140 characters." + }, + "is_canceled": { + "type": "boolean", + "description": "A Boolean value that indicates whether the broadcast is canceled. Set to **true** to cancel the segment. \n \n**NOTE**: For recurring segments, the API cancels the first segment after the current UTC date and time and not the specified segment (unless the specified segment is the next segment after the current UTC date and time)." + }, + "timezone": { + "type": "string", + "description": "The time zone where the broadcast takes place. Specify the time zone using [IANA time zone database](https://www.iana.org/time-zones) format (for example, America/New\\_York)." + } + } + }, + "UpdateChannelStreamScheduleSegmentResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "The broadcaster’s streaming scheduled.", + "type": "object", + "required": [ + "segments", + "broadcaster_id", + "broadcaster_name", + "broadcaster_login", + "vacation" + ], + "properties": { + "segments": { + "type": "array", + "description": "A list that contains the single broadcast segment that you updated.", + "items": { + "$ref": "#/components/schemas/ChannelStreamScheduleSegment" + } + }, + "broadcaster_id": { + "type": "string", + "description": "The ID of the broadcaster that owns the broadcast schedule." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "vacation": { + "description": "The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled.", + "type": "object", + "required": [ + "start_time", + "end_time" + ], + "properties": { + "start_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation starts.", + "format": "date-time" + }, + "end_time": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation ends.", + "format": "date-time" + } + } + } + } + } + } + }, + "Category": { + "type": "object", + "required": [ + "box_art_url", + "name", + "id" + ], + "properties": { + "box_art_url": { + "type": "string", + "description": "A URL to an image of the game’s box art or streaming category." + }, + "name": { + "type": "string", + "description": "The name of the game or category." + }, + "id": { + "type": "string", + "description": "An ID that uniquely identifies the game or category." + } + } + }, + "SearchCategoriesResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of games or categories that match the query. The list is empty if there are no matches.", + "items": { + "$ref": "#/components/schemas/Category" + } + } + } + }, + "Channel": { + "type": "object", + "required": [ + "broadcaster_language", + "broadcaster_login", + "display_name", + "game_id", + "game_name", + "id", + "is_live", + "tag_ids", + "tags", + "thumbnail_url", + "title", + "started_at" + ], + "properties": { + "broadcaster_language": { + "type": "string", + "description": "The ISO 639-1 two-letter language code of the language used by the broadcaster. For example, _en_ for English. If the broadcaster uses a language not in the list of [supported stream languages](https://help.twitch.tv/s/article/languages-on-twitch#streamlang), the value is _other_." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "display_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "game_id": { + "type": "string", + "description": "The ID of the game that the broadcaster is playing or last played." + }, + "game_name": { + "type": "string", + "description": "The name of the game that the broadcaster is playing or last played." + }, + "id": { + "type": "string", + "description": "An ID that uniquely identifies the channel (this is the broadcaster’s ID)." + }, + "is_live": { + "type": "boolean", + "description": "A Boolean value that determines whether the broadcaster is streaming live. Is **true** if the broadcaster is streaming live; otherwise, **false**." + }, + "tag_ids": { + "type": "array", + "description": "**IMPORTANT** As of February 28, 2023, this field is deprecated and returns only an empty array. If you use this field, please update your code to use the `tags` field. \n \nThe list of tags that apply to the stream. The list contains IDs only when the channel is steaming live. For a list of possible tags, see [List of All Tags](https://www.twitch.tv/directory/all/tags). The list doesn’t include Category Tags.", + "items": { + "type": "string" + }, + "deprecated": true + }, + "tags": { + "type": "array", + "description": "The tags applied to the channel.", + "items": { + "type": "string" + } + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to a thumbnail of the broadcaster’s profile image." + }, + "title": { + "type": "string", + "description": "The stream’s title. Is an empty string if the broadcaster didn’t set it." + }, + "started_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcaster started streaming. The string is empty if the broadcaster is not streaming live.", + "format": "date-time" + } + } + }, + "SearchChannelsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of channels that match the query. The list is empty if there are no matches.", + "items": { + "$ref": "#/components/schemas/Channel" + } + } + } + }, + "GetStreamKeyResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the channel’s stream key.", + "items": { + "type": "object", + "required": [ + "stream_key" + ], + "properties": { + "stream_key": { + "type": "string", + "description": "The channel’s stream key." + } + } + } + } + } + }, + "Stream": { + "type": "object", + "required": [ + "id", + "user_id", + "user_login", + "user_name", + "game_id", + "game_name", + "type", + "title", + "viewer_count", + "started_at", + "language", + "thumbnail_url", + "tag_ids", + "tags", + "is_mature" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the stream. You can use this ID later to look up the video on demand (VOD)." + }, + "user_id": { + "type": "string", + "description": "The ID of the user that’s broadcasting the stream." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "game_id": { + "type": "string", + "description": "The ID of the category or game being played." + }, + "game_name": { + "type": "string", + "description": "The ID of the category or game being played." + }, + "type": { + "type": "string", + "description": "The type of stream. Possible values are: \n \n* live\n \nIf an error occurs, this field is set to an empty string.", + "enum": [ + "live" + ] + }, + "title": { + "type": "string", + "description": "The stream’s title. Is an empty string if not set." + }, + "viewer_count": { + "type": "integer", + "description": "The number of users watching the stream.", + "format": "int32" + }, + "started_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the broadcast began.", + "format": "date-time" + }, + "language": { + "type": "string", + "description": "The language that the stream uses. This is an ISO 639-1 two-letter language code or _other_ if the stream uses a language not in the list of [supported stream languages](https://help.twitch.tv/s/article/languages-on-twitch#streamlang)." + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to an image of a frame from the last 5 minutes of the stream. Replace the width and height placeholders in the URL (`{width}x{height}`) with the size of the image you want, in pixels." + }, + "tag_ids": { + "type": "array", + "description": "**IMPORTANT** As of February 28, 2023, this field is deprecated and returns only an empty array. If you use this field, please update your code to use the `tags` field. \n \nThe list of tags that apply to the stream. The list contains IDs only when the channel is steaming live. For a list of possible tags, see [List of All Tags](https://www.twitch.tv/directory/all/tags). The list doesn’t include Category Tags.", + "items": { + "type": "string" + }, + "deprecated": true + }, + "tags": { + "type": "array", + "description": "The tags applied to the stream.", + "items": { + "type": "string" + } + }, + "is_mature": { + "type": "boolean", + "description": "A Boolean value that indicates whether the stream is meant for mature audiences." + } + } + }, + "GetStreamsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of streams.", + "items": { + "$ref": "#/components/schemas/Stream" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards." + } + } + } + } + }, + "GetFollowedStreamsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of live streams of broadcasters that the specified user follows. The list is in descending order by the number of viewers watching the stream. Because viewers come and go during a stream, it’s possible to find duplicate or missing streams in the list as you page through the results. The list is empty if none of the followed broadcasters are streaming live.", + "items": { + "$ref": "#/components/schemas/Stream" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value." + } + } + } + } + }, + "CreateStreamMarkerBody": { + "type": "object", + "required": [ + "user_id" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of the broadcaster that’s streaming content. This ID must match the user ID in the access token or the user in the access token must be one of the broadcaster’s editors." + }, + "description": { + "type": "string", + "description": "A short description of the marker to help the user remember why they marked the location. The maximum length of the description is 140 characters." + } + } + }, + "StreamMarkerCreated": { + "type": "object", + "required": [ + "id", + "created_at", + "position_seconds", + "description" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this marker." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the user created the marker.", + "format": "date-time" + }, + "position_seconds": { + "type": "integer", + "description": "The relative offset (in seconds) of the marker from the beginning of the stream.", + "format": "int32" + }, + "description": { + "type": "string", + "description": "A description that the user gave the marker to help them remember why they marked the location." + } + } + }, + "CreateStreamMarkerResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single marker that you added.", + "items": { + "$ref": "#/components/schemas/StreamMarkerCreated" + } + } + } + }, + "StreamMarkers": { + "type": "object", + "required": [ + "user_id", + "user_name", + "user_login", + "videos", + "video_id", + "markers" + ], + "properties": { + "user_id": { + "type": "string", + "description": "The ID of the user that created the marker." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + }, + "videos": { + "type": "array", + "description": "A list of videos that contain markers. The list contains a single video.", + "items": { + "type": "object" + } + }, + "video_id": { + "type": "string", + "description": "An ID that identifies this video." + }, + "markers": { + "type": "array", + "description": "The list of markers in this video. The list in ascending order by when the marker was created.", + "items": { + "type": "object", + "required": [ + "id", + "created_at", + "description", + "position_seconds", + "url" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies this marker." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the user created the marker.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description that the user gave the marker to help them remember why they marked the location. Is an empty string if the user didn’t provide one." + }, + "position_seconds": { + "type": "integer", + "description": "The relative offset (in seconds) of the marker from the beginning of the stream.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "A URL that opens the video in Twitch Highlighter." + } + } + } + } + } + }, + "GetStreamMarkersResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of markers grouped by the user that created the marks.", + "items": { + "$ref": "#/components/schemas/StreamMarkers" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards." + } + } + } + } + }, + "BroadcasterSubscription": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "gifter_id", + "gifter_login", + "gifter_name", + "is_gift", + "plan_name", + "tier", + "user_id", + "user_name", + "user_login" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "gifter_id": { + "type": "string", + "description": "The ID of the user that gifted the subscription to the user. Is an empty string if `is_gift` is **false**." + }, + "gifter_login": { + "type": "string", + "description": "The gifter’s login name. Is an empty string if `is_gift` is **false**." + }, + "gifter_name": { + "type": "string", + "description": "The gifter’s display name. Is an empty string if `is_gift` is **false**." + }, + "is_gift": { + "type": "boolean", + "description": "A Boolean value that determines whether the subscription is a gift subscription. Is **true** if the subscription was gifted." + }, + "plan_name": { + "type": "string", + "description": "The name of the subscription." + }, + "tier": { + "type": "string", + "description": "The type of subscription. Possible values are: \n \n* 1000 — Tier 1\n* 2000 — Tier 2\n* 3000 — Tier 3", + "enum": [ + "1000", + "2000", + "3000" + ] + }, + "user_id": { + "type": "string", + "description": "An ID that identifies the subscribing user." + }, + "user_name": { + "type": "string", + "description": "The user’s display name." + }, + "user_login": { + "type": "string", + "description": "The user’s login name." + } + } + }, + "GetBroadcasterSubscriptionsResponse": { + "type": "object", + "required": [ + "data", + "points", + "total" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users that subscribe to the broadcaster. The list is empty if the broadcaster has no subscribers.", + "items": { + "$ref": "#/components/schemas/BroadcasterSubscription" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next or previous page of results. Use the cursor to set the request’s _after_ or _before_ query parameter depending on whether you’re paging forwards or backwards." + } + } + }, + "points": { + "type": "integer", + "description": "The current number of subscriber points earned by this broadcaster. Points are based on the subscription tier of each user that subscribes to this broadcaster. For example, a Tier 1 subscription is worth 1 point, Tier 2 is worth 2 points, and Tier 3 is worth 6 points. The number of points determines the number of emote slots that are unlocked for the broadcaster (see [Subscriber Emote Slots](https://help.twitch.tv/s/article/subscriber-emote-guide#emoteslots)).", + "format": "int32" + }, + "total": { + "type": "integer", + "description": "The total number of users that subscribe to this broadcaster.", + "format": "int32" + } + } + }, + "UserSubscription": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "is_gift", + "tier" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "gifter_id": { + "type": "string", + "description": "The ID of the user that gifted the subscription. The object includes this field only if `is_gift` is **true**." + }, + "gifter_login": { + "type": "string", + "description": "The gifter’s login name. The object includes this field only if `is_gift` is **true**." + }, + "gifter_name": { + "type": "string", + "description": "The gifter’s display name. The object includes this field only if `is_gift` is **true**." + }, + "is_gift": { + "type": "boolean", + "description": "A Boolean value that determines whether the subscription is a gift subscription. Is **true** if the subscription was gifted." + }, + "tier": { + "type": "string", + "description": "The type of subscription. Possible values are: \n \n* 1000 — Tier 1\n* 2000 — Tier 2\n* 3000 — Tier 3", + "enum": [ + "1000", + "2000", + "3000" + ] + } + } + }, + "CheckUserSubscriptionResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains a single object with information about the user’s subscription.", + "items": { + "$ref": "#/components/schemas/UserSubscription" + } + } + } + }, + "StreamTag": { + "type": "object", + "required": [ + "tag_id", + "is_auto", + "localization_names", + "localization_descriptions" + ], + "properties": { + "tag_id": { + "type": "string", + "description": "An ID that identifies this tag." + }, + "is_auto": { + "type": "boolean", + "description": "A Boolean value that determines whether the tag is an automatic tag. An automatic tag is one that Twitch adds to the stream. Broadcasters may not add automatic tags to their channel. The value is **true** if the tag is an automatic tag; otherwise, **false**." + }, + "localization_names": { + "type": "object", + "description": "A dictionary that contains the localized names of the tag. The key is in the form, -. For example, en-us. The value is the localized name.", + "additionalProperties": { + "type": "string" + } + }, + "localization_descriptions": { + "type": "object", + "description": "A dictionary that contains the localized descriptions of the tag. The key is in the form, -. For example, en-us. The value is the localized description.", + "additionalProperties": { + "type": "string" + } + } + } + }, + "GetAllStreamTagsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of stream tags that the broadcaster can apply to their channel.", + "items": { + "$ref": "#/components/schemas/StreamTag" + } + }, + "pagination": { + "description": "The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value to page forwards through the results." + } + } + } + }, + "deprecated": true + }, + "GetStreamTagsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of stream tags. The list is empty if the broadcaster or Twitch hasn’t added tags to the broadcaster’s channel.", + "items": { + "$ref": "#/components/schemas/StreamTag" + } + } + }, + "deprecated": true + }, + "ChannelTeam": { + "type": "object", + "required": [ + "broadcaster_id", + "broadcaster_login", + "broadcaster_name", + "background_image_url", + "banner", + "created_at", + "updated_at", + "info", + "thumbnail_url", + "team_name", + "team_display_name", + "id" + ], + "properties": { + "broadcaster_id": { + "type": "string", + "description": "An ID that identifies the broadcaster." + }, + "broadcaster_login": { + "type": "string", + "description": "The broadcaster’s login name." + }, + "broadcaster_name": { + "type": "string", + "description": "The broadcaster’s display name." + }, + "background_image_url": { + "type": "string", + "description": "A URL to the team’s background image." + }, + "banner": { + "type": "string", + "description": "A URL to the team’s banner." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the team was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of the last time the team was updated.", + "format": "date-time" + }, + "info": { + "type": "string", + "description": "The team’s description. The description may contain formatting such as Markdown, HTML, newline (\\\\n) characters, etc." + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to a thumbnail image of the team’s logo." + }, + "team_name": { + "type": "string", + "description": "The team’s name." + }, + "team_display_name": { + "type": "string", + "description": "The team’s display name." + }, + "id": { + "type": "string", + "description": "An ID that identifies the team." + } + } + }, + "GetChannelTeamsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of teams that the broadcaster is a member of. Returns an empty array if the broadcaster is not a member of a team.", + "items": { + "$ref": "#/components/schemas/ChannelTeam" + } + } + } + }, + "Team": { + "type": "object", + "required": [ + "users", + "background_image_url", + "banner", + "created_at", + "updated_at", + "info", + "thumbnail_url", + "team_name", + "team_display_name", + "id" + ], + "properties": { + "users": { + "type": "array", + "description": "The list of team members.", + "items": { + "type": "object", + "required": [ + "user_id", + "user_login", + "user_name" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that identifies the team member." + }, + "user_login": { + "type": "string", + "description": "The team member’s login name." + }, + "user_name": { + "type": "string", + "description": "The team member’s display name." + } + } + } + }, + "background_image_url": { + "type": "string", + "description": "A URL to the team’s background image." + }, + "banner": { + "type": "string", + "description": "A URL to the team’s banner." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of when the team was created.", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "description": "The UTC date and time (in RFC3339 format) of the last time the team was updated.", + "format": "date-time" + }, + "info": { + "type": "string", + "description": "The team’s description. The description may contain formatting such as Markdown, HTML, newline (\\\\n) characters, etc." + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to a thumbnail image of the team’s logo." + }, + "team_name": { + "type": "string", + "description": "The team’s name." + }, + "team_display_name": { + "type": "string", + "description": "The team’s display name." + }, + "id": { + "type": "string", + "description": "An ID that identifies the team." + } + } + }, + "GetTeamsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list that contains the single team that you requested.", + "items": { + "$ref": "#/components/schemas/Team" + } + } + } + }, + "User": { + "type": "object", + "required": [ + "id", + "login", + "display_name", + "type", + "broadcaster_type", + "description", + "profile_image_url", + "offline_image_url", + "view_count", + "created_at" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the user." + }, + "login": { + "type": "string", + "description": "The user's login name." + }, + "display_name": { + "type": "string", + "description": "The user's display name." + }, + "type": { + "type": "string", + "description": "The type of user. Possible values are: \n \n* admin — Twitch administrator\n* global\\_mod\n* staff — Twitch staff\n* \"\" — Normal user", + "enum": [ + "admin", + "global_mod", + "staff", + "" + ] + }, + "broadcaster_type": { + "type": "string", + "description": "The type of broadcaster. Possible values are: \n \n* affiliate — An [affiliate broadcaster](https://help.twitch.tv/s/article/joining-the-affiliate-program)\n* partner — A [partner broadcaster](https://help.twitch.tv/s/article/partner-program-overview)\n* \"\" — A normal broadcaster", + "enum": [ + "affiliate", + "partner", + "" + ] + }, + "description": { + "type": "string", + "description": "The user's description of their channel." + }, + "profile_image_url": { + "type": "string", + "description": "A URL to the user's profile image." + }, + "offline_image_url": { + "type": "string", + "description": "A URL to the user's offline image." + }, + "view_count": { + "type": "integer", + "description": "The number of times the user's channel has been viewed. \n \n**NOTE**: This field has been deprecated (see [Get Users API endpoint – \"view\\_count\" deprecation](https://discuss.dev.twitch.tv/t/get-users-api-endpoint-view-count-deprecation/37777)). Any data in this field is not valid and should not be used.", + "format": "int32" + }, + "email": { + "type": "string", + "description": "The user's verified email address. The object includes this field only if the user access token includes the **user:read:email** scope. \n \nIf the request contains more than one user, only the user associated with the access token that provided consent will include an email address — the email address for all other users will be empty." + }, + "created_at": { + "type": "string", + "description": "The UTC date and time that the user's account was created. The timestamp is in RFC3339 format.", + "format": "date-time" + } + } + }, + "GetUsersResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of users.", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "UpdateUserResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "A list contains the single user that you updated.", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "UserBlockList": { + "type": "object", + "required": [ + "user_id", + "user_login", + "display_name" + ], + "properties": { + "user_id": { + "type": "string", + "description": "An ID that identifies the blocked user." + }, + "user_login": { + "type": "string", + "description": "The blocked user’s login name." + }, + "display_name": { + "type": "string", + "description": "The blocked user’s display name." + } + } + }, + "GetUserBlockListResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of blocked users. The list is in descending order by when the user was blocked.", + "items": { + "$ref": "#/components/schemas/UserBlockList" + } + } + } + }, + "UserExtension": { + "type": "object", + "required": [ + "id", + "version", + "name", + "can_activate", + "type" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension's version." + }, + "name": { + "type": "string", + "description": "The extension's name." + }, + "can_activate": { + "type": "boolean", + "description": "A Boolean value that determines whether the extension is configured and can be activated. Is **true** if the extension is configured and can be activated." + }, + "type": { + "type": "array", + "description": "The extension types that you can activate for this extension. Possible values are: \n \n* component\n* mobile\n* overlay\n* panel", + "items": { + "type": "string", + "enum": [ + "component", + "mobile", + "overlay", + "panel" + ] + } + } + } + }, + "GetUserExtensionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of extensions that the user has installed.", + "items": { + "$ref": "#/components/schemas/UserExtension" + } + } + } + }, + "UserExtensionPanel": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured a panel extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + }, + "name": { + "type": "string", + "description": "The extension’s name." + } + } + }, + "UserExtensionPanelUpdate": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured a panel extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + } + } + }, + "UserExtensionOverlay": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured an overlay extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + }, + "name": { + "type": "string", + "description": "The extension’s name." + } + } + }, + "UserExtensionOverlayUpdate": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured an overlay extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + } + } + }, + "UserExtensionComponent": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured a component extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + }, + "name": { + "type": "string", + "description": "The extension’s name." + }, + "x": { + "type": "integer", + "description": "The x-coordinate where the extension is placed.", + "format": "int32" + }, + "y": { + "type": "integer", + "description": "The y-coordinate where the extension is placed.", + "format": "int32" + } + } + }, + "UserExtensionComponentUpdate": { + "type": "object", + "required": [ + "active" + ], + "properties": { + "active": { + "type": "boolean", + "description": "A Boolean value that determines the extension’s activation state. If **false**, the user has not configured a component extension." + }, + "id": { + "type": "string", + "description": "An ID that identifies the extension." + }, + "version": { + "type": "string", + "description": "The extension’s version." + }, + "x": { + "type": "integer", + "description": "The x-coordinate where the extension is placed.", + "format": "int32" + }, + "y": { + "type": "integer", + "description": "The y-coordinate where the extension is placed.", + "format": "int32" + } + } + }, + "GetUserActiveExtensionsResponse": { + "type": "object", + "properties": { + "data": { + "description": "The active extensions that the broadcaster has installed.", + "type": "object", + "properties": { + "panel": { + "type": "object", + "description": "A dictionary that contains the data for a panel extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the panel’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionPanel" + } + }, + "overlay": { + "type": "object", + "description": "A dictionary that contains the data for a video-overlay extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the overlay’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionOverlay" + } + }, + "component": { + "type": "object", + "description": "A dictionary that contains the data for a video-component extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the component’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionComponent" + } + } + } + } + } + }, + "UpdateUserExtensionsBody": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "The extensions to update. The `data` field is a dictionary of extension types. The dictionary’s possible keys are: panel, overlay, or component. The key’s value is a dictionary of extensions. \n \nFor the extension’s dictionary, the key is a sequential number beginning with 1\\. For panel and overlay extensions, the key’s value is an object that contains the following fields: `active` (true/false), `id` (the extension’s ID), and `version` (the extension’s version). \n \nFor component extensions, the key’s value includes the above fields plus the `x` and `y` fields, which identify the coordinate where the extension is placed.", + "properties": { + "panel": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionPanelUpdate" + } + }, + "overlay": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionOverlayUpdate" + } + }, + "component": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionComponentUpdate" + } + } + } + } + } + }, + "UpdateUserExtensionsResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "description": "The extensions that the broadcaster updated.", + "type": "object", + "required": [ + "panel", + "overlay", + "component" + ], + "properties": { + "panel": { + "type": "object", + "description": "A dictionary that contains the data for a panel extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the panel’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionPanel" + } + }, + "overlay": { + "type": "object", + "description": "A dictionary that contains the data for a video-overlay extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the overlay’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionOverlay" + } + }, + "component": { + "type": "object", + "description": "A dictionary that contains the data for a video-component extension. The dictionary’s key is a sequential number beginning with 1\\. The following fields contain the component’s data for each key.", + "additionalProperties": { + "$ref": "#/components/schemas/UserExtensionComponent" + } + } + } + } + } + }, + "Video": { + "type": "object", + "required": [ + "id", + "stream_id", + "user_id", + "user_login", + "user_name", + "title", + "description", + "created_at", + "published_at", + "url", + "thumbnail_url", + "viewable", + "view_count", + "language", + "type", + "duration", + "muted_segments" + ], + "properties": { + "id": { + "type": "string", + "description": "An ID that identifies the video." + }, + "stream_id": { + "type": "string", + "description": "The ID of the stream that the video originated from if the video's type is \"archive;\" otherwise, **null**.", + "nullable": true + }, + "user_id": { + "type": "string", + "description": "The ID of the broadcaster that owns the video." + }, + "user_login": { + "type": "string", + "description": "The broadcaster's login name." + }, + "user_name": { + "type": "string", + "description": "The broadcaster's display name." + }, + "title": { + "type": "string", + "description": "The video's title." + }, + "description": { + "type": "string", + "description": "The video's description." + }, + "created_at": { + "type": "string", + "description": "The date and time, in UTC, of when the video was created. The timestamp is in RFC3339 format.", + "format": "date-time" + }, + "published_at": { + "type": "string", + "description": "The date and time, in UTC, of when the video was published. The timestamp is in RFC3339 format.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The video's URL." + }, + "thumbnail_url": { + "type": "string", + "description": "A URL to a thumbnail image of the video. Before using the URL, you must replace the `%{width}` and `%{height}` placeholders with the width and height of the thumbnail you want returned. Due to current limitations, `${width}` must be 320 and `${height}` must be 180." + }, + "viewable": { + "type": "string", + "description": "The video's viewable state. Always set to **public**." + }, + "view_count": { + "type": "integer", + "description": "The number of times that users have watched the video.", + "format": "int32" + }, + "language": { + "type": "string", + "description": "The ISO 639-1 two-letter language code that the video was broadcast in. For example, the language code is DE if the video was broadcast in German. For a list of supported languages, see [Supported Stream Language](https://help.twitch.tv/s/article/languages-on-twitch#streamlang). The language value is \"other\" if the video was broadcast in a language not in the list of supported languages." + }, + "type": { + "type": "string", + "description": "The video's type. Possible values are: \n \n* archive — An on-demand video (VOD) of one of the broadcaster's past streams.\n* highlight — A highlight reel of one of the broadcaster's past streams. See [Creating Highlights](https://help.twitch.tv/s/article/creating-highlights-and-stream-markers).\n* upload — A video that the broadcaster uploaded to their video library. See Upload under [Video Producer](https://help.twitch.tv/s/article/video-on-demand?language=en%5FUS#videoproducer).", + "enum": [ + "archive", + "highlight", + "upload" + ] + }, + "duration": { + "type": "string", + "description": "The video's length in ISO 8601 duration format. For example, 3m21s represents 3 minutes, 21 seconds." + }, + "muted_segments": { + "type": "array", + "description": "The segments that Twitch Audio Recognition muted; otherwise, **null**.", + "items": { + "type": "object", + "required": [ + "duration", + "offset" + ], + "properties": { + "duration": { + "type": "integer", + "description": "The duration of the muted segment, in seconds.", + "format": "int32" + }, + "offset": { + "type": "integer", + "description": "The offset, in seconds, from the beginning of the video to where the muted segment begins.", + "format": "int32" + } + } + }, + "nullable": true + } + } + }, + "GetVideosResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of published videos that match the filter criteria.", + "items": { + "$ref": "#/components/schemas/Video" + } + }, + "pagination": { + "description": "Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination)", + "type": "object", + "properties": { + "cursor": { + "type": "string", + "description": "The cursor used to get the next page of results. Use the cursor to set the request's _after_ or _before_ query parameter depending on whether you're paging forwards or backwards through the results." + } + } + } + } + }, + "DeleteVideosResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "description": "The list of IDs of the videos that were deleted.", + "items": { + "type": "string" + } + } + } + }, + "SendWhisperBody": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "The whisper message to send. The message must not be empty. \n \nThe maximum message lengths are: \n \n* 500 characters if the user you're sending the message to hasn't whispered you before.\n* 10,000 characters if the user you're sending the message to has whispered you before.\n \nMessages that exceed the maximum length are truncated." + } + } + } + }, + "securitySchemes": { + "twitch_auth": { + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "https://id.twitch.tv/oauth2/authorize", + "refreshUrl": "https://id.twitch.tv/oauth2/token", + "scopes": { + "analytics:read:extensions": "View analytics data for the Twitch Extensions owned by the authenticated account.", + "analytics:read:games": "View analytics data for the games owned by the authenticated account.", + "bits:read": "View Bits information for a channel.", + "channel:manage:ads": "Manage ads schedule on a channel.", + "channel:read:ads": "Read the ads schedule and details on your channel.", + "channel:manage:broadcast": "Manage a channel’s broadcast configuration, including updating channel configuration and managing stream markers and stream tags.", + "channel:read:charity": "Read charity campaign details and user donations on your channel.", + "channel:edit:commercial": "Run commercials on a channel.", + "channel:read:editors": "View a list of users with the editor role for a channel.", + "channel:manage:extensions": "Manage a channel’s Extension configuration, including activating Extensions.", + "channel:read:goals": "View Creator Goals for a channel.", + "channel:read:guest_star": "Read Guest Star details for your channel.", + "channel:manage:guest_star": "Manage Guest Star for your channel.", + "channel:read:hype_train": "View Hype Train information for a channel.", + "channel:manage:moderators": "Add or remove the moderator role from users in your channel.", + "channel:read:polls": "View a channel’s polls.", + "channel:manage:polls": "Manage a channel’s polls.", + "channel:read:predictions": "View a channel’s Channel Points Predictions.", + "channel:manage:predictions": "Manage of channel’s Channel Points Predictions", + "channel:manage:raids": "Manage a channel raiding another channel.", + "channel:read:redemptions": "View Channel Points custom rewards and their redemptions on a channel.", + "channel:manage:redemptions": "Manage Channel Points custom rewards and their redemptions on a channel.", + "channel:manage:schedule": "Manage a channel’s stream schedule.", + "channel:read:stream_key": "View an authorized user’s stream key.", + "channel:read:subscriptions": "View a list of all subscribers to a channel and check if a user is subscribed to a channel.", + "channel:manage:videos": "Manage a channel’s videos, including deleting videos.", + "channel:read:vips": "Read the list of VIPs in your channel.", + "channel:manage:vips": "Add or remove the VIP role from users in your channel.", + "clips:edit": "Manage Clips for a channel.", + "moderation:read": "View a channel’s moderation data including Moderators, Bans, Timeouts, and Automod settings.", + "moderator:manage:announcements": "Send announcements in channels where you have the moderator role.", + "moderator:manage:automod": "Manage messages held for review by AutoMod in channels where you are a moderator.", + "moderator:read:automod_settings": "View a broadcaster’s AutoMod settings.", + "moderator:manage:automod_settings": "Manage a broadcaster’s AutoMod settings.", + "moderator:manage:banned_users": "Ban and unban users.", + "moderator:read:blocked_terms": "View a broadcaster’s list of blocked terms.", + "moderator:manage:blocked_terms": "Manage a broadcaster’s list of blocked terms.", + "moderator:manage:chat_messages": "Delete chat messages in channels where you have the moderator role", + "moderator:read:chat_settings": "View a broadcaster’s chat room settings.", + "moderator:manage:chat_settings": "Manage a broadcaster’s chat room settings.", + "moderator:read:chatters": "View the chatters in a broadcaster’s chat room.", + "moderator:read:followers": "Read the followers of a broadcaster.", + "moderator:read:guest_star": "Read Guest Star details for channels where you are a Guest Star moderator.", + "moderator:manage:guest_star": "Manage Guest Star for channels where you are a Guest Star moderator.", + "moderator:read:shield_mode": "View a broadcaster’s Shield Mode status.", + "moderator:manage:shield_mode": "Manage a broadcaster’s Shield Mode status.", + "moderator:read:shoutouts": "View a broadcaster’s shoutouts.", + "moderator:manage:shoutouts": "Manage a broadcaster’s shoutouts.", + "moderator:read:unban_requests": "View a broadcaster’s unban requests.", + "moderator:manage:unban_requests": "Manage a broadcaster’s unban requests.", + "user:edit": "Manage a user object.", + "user:read:blocked_users": "View the block list of a user.", + "user:manage:blocked_users": "Manage the block list of a user.", + "user:read:broadcast": "View a user’s broadcasting configuration, including Extension configurations.", + "user:manage:chat_color": "Update the color used for the user’s name in chat.", + "user:read:email": "View a user’s email address.", + "user:read:emotes": "View emotes available to a user", + "user:read:follows": "View the list of channels a user follows.", + "user:read:moderated_channels": "Read the list of channels you have moderator privileges in.", + "user:read:subscriptions": "View if an authorized user is subscribed to specific channels.", + "user:manage:whispers": "Read whispers that you send and receive, and send whispers on your behalf.", + "channel:bot": "Allows the client’s bot users access to a channel.", + "channel:moderate": "Perform moderation actions in a channel. The user requesting the scope must be a moderator in the channel.", + "chat:edit": "Send live stream chat messages using an IRC connection.", + "chat:read": "View live stream chat messages using an IRC connection.", + "user:bot": "Allows client’s bot to act as this user.", + "user:read:chat": "View live stream chat and room messages using EventSub.", + "user:write:chat": "Send live stream chat messages using", + "whispers:read": "View your whisper messages.", + "whispers:edit": "Send whisper messages." + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/NewtonsoftJson/_#G.VectorStoresClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/NewtonsoftJson/_#G.VectorStoresClient.g.verified.cs index 804e68b0ff..5efd63994b 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/NewtonsoftJson/_#G.VectorStoresClient.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/NewtonsoftJson/_#G.VectorStoresClient.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/SystemTextJson/_#G.VectorStoresClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/SystemTextJson/_#G.VectorStoresClient.g.verified.cs index 804e68b0ff..5efd63994b 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/SystemTextJson/_#G.VectorStoresClient.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenAi/SystemTextJson/_#G.VectorStoresClient.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/NewtonsoftJson/_#G.Api.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/NewtonsoftJson/_#G.Api.g.verified.cs index 760ed798e1..08fda805b4 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/NewtonsoftJson/_#G.Api.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/NewtonsoftJson/_#G.Api.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/SystemTextJson/_#G.Api.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/SystemTextJson/_#G.Api.g.verified.cs index 760ed798e1..08fda805b4 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/SystemTextJson/_#G.Api.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/OpenApi3_0_Yaml/SystemTextJson/_#G.Api.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/NewtonsoftJson/_#G.Api.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/NewtonsoftJson/_#G.Api.g.verified.cs index 66e05e45f8..89a2c87d84 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/NewtonsoftJson/_#G.Api.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/NewtonsoftJson/_#G.Api.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/SystemTextJson/_#G.Api.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/SystemTextJson/_#G.Api.g.verified.cs index 66e05e45f8..89a2c87d84 100644 --- a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/SystemTextJson/_#G.Api.g.verified.cs +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/SpecialCases/SystemTextJson/_#G.Api.g.verified.cs @@ -5,7 +5,6 @@ namespace G { /// - /// /// If no httpClient is provided, a new one will be created. /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. /// diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/Tests.Twitch_Diagnostics.verified.txt b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/Tests.Twitch_Diagnostics.verified.txt new file mode 100644 index 0000000000..ad47dbb93f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/Tests.Twitch_Diagnostics.verified.txt @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.GetAdSchedule.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.GetAdSchedule.g.verified.cs new file mode 100644 index 0000000000..08b5349790 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.GetAdSchedule.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.AdsClient.GetAdSchedule.g.cs + +#nullable enable + +namespace G +{ + public partial class AdsClient + { + /// + /// Returns ad schedule related information. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetAdScheduleAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels/ads?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.SnoozeNextAd.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.SnoozeNextAd.g.verified.cs new file mode 100644 index 0000000000..764523b86d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.SnoozeNextAd.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.AdsClient.SnoozeNextAd.g.cs + +#nullable enable + +namespace G +{ + public partial class AdsClient + { + /// + /// Pushes back the timestamp of the upcoming automatic mid-roll ad by 5 minutes. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SnoozeNextAdAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels/ads/schedule/snooze?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.StartCommercial.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.StartCommercial.g.verified.cs new file mode 100644 index 0000000000..5432a1ef0e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.StartCommercial.g.verified.cs @@ -0,0 +1,65 @@ +//HintName: G.AdsClient.StartCommercial.g.cs + +#nullable enable + +namespace G +{ + public partial class AdsClient + { + /// + /// Starts a commercial on the specified channel. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task StartCommercialAsync( + StartCommercialBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/channels/commercial", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Starts a commercial on the specified channel. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task StartCommercialAsync( + string broadcasterId, + int length, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new StartCommercialBody + { + BroadcasterId = broadcasterId, + Length = length, + }; + + return await StartCommercialAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.g.verified.cs new file mode 100644 index 0000000000..ef5e56670a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AdsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.AdsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class AdsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the AdsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public AdsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetExtensionAnalytics.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetExtensionAnalytics.g.verified.cs new file mode 100644 index 0000000000..96191eb5e4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetExtensionAnalytics.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.AnalyticsClient.GetExtensionAnalytics.g.cs + +#nullable enable + +namespace G +{ + public partial class AnalyticsClient + { + /// + /// Gets an analytics report for one or more extensions. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionAnalyticsAsync( + string extensionId, + GetExtensionAnalyticsType type, + global::System.DateTime startedAt, + global::System.DateTime endedAt, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + var typeValue = type switch + { + GetExtensionAnalyticsType.OverviewV2 => "overview_v2", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/analytics/extensions?extension_id={extensionId}&type={typeValue}&started_at={startedAt}&ended_at={endedAt}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetGameAnalytics.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetGameAnalytics.g.verified.cs new file mode 100644 index 0000000000..0d86b1cc36 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.GetGameAnalytics.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.AnalyticsClient.GetGameAnalytics.g.cs + +#nullable enable + +namespace G +{ + public partial class AnalyticsClient + { + /// + /// Gets an analytics report for one or more games. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGameAnalyticsAsync( + string gameId, + GetGameAnalyticsType type, + global::System.DateTime startedAt, + global::System.DateTime endedAt, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + var typeValue = type switch + { + GetGameAnalyticsType.OverviewV2 => "overview_v2", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/analytics/games?game_id={gameId}&type={typeValue}&started_at={startedAt}&ended_at={endedAt}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.g.verified.cs new file mode 100644 index 0000000000..72f2d00fea --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.AnalyticsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.AnalyticsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class AnalyticsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the AnalyticsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public AnalyticsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Api.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Api.g.verified.cs new file mode 100644 index 0000000000..6dbca9402c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Api.g.verified.cs @@ -0,0 +1,195 @@ +//HintName: G.Api.g.cs + +#nullable enable + +namespace G +{ + /// + /// Unofficial Swagger UI for Twitch API. + /// All endpoints are generated automatically from the [twitch docs](https://dev.twitch.tv/docs/api/reference) page. + /// __Features:__ + /// * Swagger UI for all Twitch API endpoints + /// * Schemas for _Request Query Parameters_, _Request Body_, _Response Body_ + /// * Some additional schemas like _Clip_, _ChatBadge_, _Prediction_, _Game_, _Channel_, _Video_ etc. + /// * Response codes and examples + /// * Generated types for TypeScript: [ts-twitch-api](https://github.com/DmitryScaletta/ts-twitch-api) + /// __Repository:__ [github.com/DmitryScaletta/twitch-api-swagger](https://github.com/DmitryScaletta/twitch-api-swagger) + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class Api : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// + /// + public AdsClient Ads => new AdsClient(_httpClient); + + /// + /// + /// + public AnalyticsClient Analytics => new AnalyticsClient(_httpClient); + + /// + /// + /// + public BitsClient Bits => new BitsClient(_httpClient); + + /// + /// + /// + public ChannelsClient Channels => new ChannelsClient(_httpClient); + + /// + /// + /// + public ChannelPointsClient ChannelPoints => new ChannelPointsClient(_httpClient); + + /// + /// + /// + public CharityClient Charity => new CharityClient(_httpClient); + + /// + /// + /// + public ChatClient Chat => new ChatClient(_httpClient); + + /// + /// + /// + public ClipsClient Clips => new ClipsClient(_httpClient); + + /// + /// + /// + public ConduitsClient Conduits => new ConduitsClient(_httpClient); + + /// + /// + /// + public CCLsClient CCLs => new CCLsClient(_httpClient); + + /// + /// + /// + public EntitlementsClient Entitlements => new EntitlementsClient(_httpClient); + + /// + /// + /// + public ExtensionsClient Extensions => new ExtensionsClient(_httpClient); + + /// + /// + /// + public EventSubClient EventSub => new EventSubClient(_httpClient); + + /// + /// + /// + public GamesClient Games => new GamesClient(_httpClient); + + /// + /// + /// + public GoalsClient Goals => new GoalsClient(_httpClient); + + /// + /// + /// + public GuestStarClient GuestStar => new GuestStarClient(_httpClient); + + /// + /// + /// + public HypeTrainClient HypeTrain => new HypeTrainClient(_httpClient); + + /// + /// + /// + public ModerationClient Moderation => new ModerationClient(_httpClient); + + /// + /// + /// + public PollsClient Polls => new PollsClient(_httpClient); + + /// + /// + /// + public PredictionsClient Predictions => new PredictionsClient(_httpClient); + + /// + /// + /// + public RaidsClient Raids => new RaidsClient(_httpClient); + + /// + /// + /// + public ScheduleClient Schedule => new ScheduleClient(_httpClient); + + /// + /// + /// + public SearchClient Search => new SearchClient(_httpClient); + + /// + /// + /// + public StreamsClient Streams => new StreamsClient(_httpClient); + + /// + /// + /// + public SubscriptionsClient Subscriptions => new SubscriptionsClient(_httpClient); + + /// + /// + /// + public TagsClient Tags => new TagsClient(_httpClient); + + /// + /// + /// + public TeamsClient Teams => new TeamsClient(_httpClient); + + /// + /// + /// + public UsersClient Users => new UsersClient(_httpClient); + + /// + /// + /// + public VideosClient Videos => new VideosClient(_httpClient); + + /// + /// + /// + public WhispersClient Whispers => new WhispersClient(_httpClient); + + /// + /// Creates a new instance of the Api. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public Api( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetBitsLeaderboard.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetBitsLeaderboard.g.verified.cs new file mode 100644 index 0000000000..b41a9fbcdc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetBitsLeaderboard.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.BitsClient.GetBitsLeaderboard.g.cs + +#nullable enable + +namespace G +{ + public partial class BitsClient + { + /// + /// Gets the Bits leaderboard for the authenticated broadcaster. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetBitsLeaderboardAsync( + int count, + GetBitsLeaderboardPeriod period, + global::System.DateTime startedAt, + string userId, + global::System.Threading.CancellationToken cancellationToken = default) + { + var periodValue = period switch + { + GetBitsLeaderboardPeriod.Day => "day", + GetBitsLeaderboardPeriod.Week => "week", + GetBitsLeaderboardPeriod.Month => "month", + GetBitsLeaderboardPeriod.Year => "year", + GetBitsLeaderboardPeriod.All => "all", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/bits/leaderboard?count={count}&period={periodValue}&started_at={startedAt}&user_id={userId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetCheermotes.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetCheermotes.g.verified.cs new file mode 100644 index 0000000000..b084c52ff7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetCheermotes.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.BitsClient.GetCheermotes.g.cs + +#nullable enable + +namespace G +{ + public partial class BitsClient + { + /// + /// Gets a list of Cheermotes that users can use to cheer Bits. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCheermotesAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/bits/cheermotes?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetExtensionTransactions.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetExtensionTransactions.g.verified.cs new file mode 100644 index 0000000000..f53e045282 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.GetExtensionTransactions.g.verified.cs @@ -0,0 +1,43 @@ +//HintName: G.BitsClient.GetExtensionTransactions.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class BitsClient + { + /// + /// Gets an extension’s list of transactions. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionTransactionsAsync( + string extensionId, + global::System.Collections.Generic.IList id, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/transactions?extension_id={extensionId}&{string.Join("&", id.Select(static x => $"id={x}"))}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.g.verified.cs new file mode 100644 index 0000000000..87433ce4b7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.BitsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.BitsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class BitsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the BitsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public BitsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.GetContentClassificationLabels.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.GetContentClassificationLabels.g.verified.cs new file mode 100644 index 0000000000..fb03750dc5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.GetContentClassificationLabels.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.CCLsClient.GetContentClassificationLabels.g.cs + +#nullable enable + +namespace G +{ + public partial class CCLsClient + { + /// + /// Gets information about Twitch content classification labels. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetContentClassificationLabelsAsync( + string locale, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/content_classification_labels?locale={locale}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.g.verified.cs new file mode 100644 index 0000000000..79ba7ecc62 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CCLsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.CCLsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class CCLsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the CCLsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public CCLsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.CreateCustomRewards.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.CreateCustomRewards.g.verified.cs new file mode 100644 index 0000000000..1574986c75 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.CreateCustomRewards.g.verified.cs @@ -0,0 +1,103 @@ +//HintName: G.ChannelPointsClient.CreateCustomRewards.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Creates a Custom Reward in the broadcaster’s channel. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateCustomRewardsAsync( + string broadcasterId, + CreateCustomRewardsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Creates a Custom Reward in the broadcaster’s channel. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateCustomRewardsAsync( + string broadcasterId, + string title, + long cost, + string? prompt = default, + bool isEnabled = default, + string? backgroundColor = default, + bool isUserInputRequired = default, + bool isMaxPerStreamEnabled = default, + int maxPerStream = default, + bool isMaxPerUserPerStreamEnabled = default, + int maxPerUserPerStream = default, + bool isGlobalCooldownEnabled = default, + int globalCooldownSeconds = default, + bool shouldRedemptionsSkipRequestQueue = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new CreateCustomRewardsBody + { + Title = title, + Cost = cost, + Prompt = prompt, + IsEnabled = isEnabled, + BackgroundColor = backgroundColor, + IsUserInputRequired = isUserInputRequired, + IsMaxPerStreamEnabled = isMaxPerStreamEnabled, + MaxPerStream = maxPerStream, + IsMaxPerUserPerStreamEnabled = isMaxPerUserPerStreamEnabled, + MaxPerUserPerStream = maxPerUserPerStream, + IsGlobalCooldownEnabled = isGlobalCooldownEnabled, + GlobalCooldownSeconds = globalCooldownSeconds, + ShouldRedemptionsSkipRequestQueue = shouldRedemptionsSkipRequestQueue, + }; + + return await CreateCustomRewardsAsync( + broadcasterId: broadcasterId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.DeleteCustomReward.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.DeleteCustomReward.g.verified.cs new file mode 100644 index 0000000000..46bfc95fd7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.DeleteCustomReward.g.verified.cs @@ -0,0 +1,32 @@ +//HintName: G.ChannelPointsClient.DeleteCustomReward.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Deletes a custom reward that the broadcaster created. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task DeleteCustomRewardAsync( + string broadcasterId, + string id, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards?broadcaster_id={broadcasterId}&id={id}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomReward.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomReward.g.verified.cs new file mode 100644 index 0000000000..711ac4aab1 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomReward.g.verified.cs @@ -0,0 +1,41 @@ +//HintName: G.ChannelPointsClient.GetCustomReward.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Gets a list of custom rewards that the specified broadcaster created. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCustomRewardAsync( + string broadcasterId, + global::System.Collections.Generic.IList id, + bool onlyManageableRewards, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards?broadcaster_id={broadcasterId}&{string.Join("&", id.Select(static x => $"id={x}"))}&only_manageable_rewards={onlyManageableRewards}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomRewardRedemption.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomRewardRedemption.g.verified.cs new file mode 100644 index 0000000000..01423da3c1 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.GetCustomRewardRedemption.g.verified.cs @@ -0,0 +1,62 @@ +//HintName: G.ChannelPointsClient.GetCustomRewardRedemption.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Gets a list of redemptions for a custom reward. + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCustomRewardRedemptionAsync( + string broadcasterId, + string rewardId, + GetCustomRewardRedemptionStatus status, + global::System.Collections.Generic.IList id, + GetCustomRewardRedemptionSort sort, + string after, + int first, + global::System.Threading.CancellationToken cancellationToken = default) + { + var statusValue = status switch + { + GetCustomRewardRedemptionStatus.CANCELED => "CANCELED", + GetCustomRewardRedemptionStatus.FULFILLED => "FULFILLED", + GetCustomRewardRedemptionStatus.UNFULFILLED => "UNFULFILLED", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + var sortValue = sort switch + { + GetCustomRewardRedemptionSort.OLDEST => "OLDEST", + GetCustomRewardRedemptionSort.NEWEST => "NEWEST", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards/redemptions?broadcaster_id={broadcasterId}&reward_id={rewardId}&status={statusValue}&{string.Join("&", id.Select(static x => $"id={x}"))}&sort={sortValue}&after={after}&first={first}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateCustomReward.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateCustomReward.g.verified.cs new file mode 100644 index 0000000000..d77e05e2d1 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateCustomReward.g.verified.cs @@ -0,0 +1,111 @@ +//HintName: G.ChannelPointsClient.UpdateCustomReward.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Updates a custom reward. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateCustomRewardAsync( + string broadcasterId, + string id, + UpdateCustomRewardBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards?broadcaster_id={broadcasterId}&id={id}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Updates a custom reward. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateCustomRewardAsync( + string broadcasterId, + string id, + string? title = default, + string? prompt = default, + long cost = default, + string? backgroundColor = default, + bool isEnabled = default, + bool isUserInputRequired = default, + bool isMaxPerStreamEnabled = default, + long maxPerStream = default, + bool isMaxPerUserPerStreamEnabled = default, + long maxPerUserPerStream = default, + bool isGlobalCooldownEnabled = default, + long globalCooldownSeconds = default, + bool isPaused = default, + bool shouldRedemptionsSkipRequestQueue = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateCustomRewardBody + { + Title = title, + Prompt = prompt, + Cost = cost, + BackgroundColor = backgroundColor, + IsEnabled = isEnabled, + IsUserInputRequired = isUserInputRequired, + IsMaxPerStreamEnabled = isMaxPerStreamEnabled, + MaxPerStream = maxPerStream, + IsMaxPerUserPerStreamEnabled = isMaxPerUserPerStreamEnabled, + MaxPerUserPerStream = maxPerUserPerStream, + IsGlobalCooldownEnabled = isGlobalCooldownEnabled, + GlobalCooldownSeconds = globalCooldownSeconds, + IsPaused = isPaused, + ShouldRedemptionsSkipRequestQueue = shouldRedemptionsSkipRequestQueue, + }; + + return await UpdateCustomRewardAsync( + broadcasterId: broadcasterId, + id: id, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateRedemptionStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateRedemptionStatus.g.verified.cs new file mode 100644 index 0000000000..c879eaf499 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.UpdateRedemptionStatus.g.verified.cs @@ -0,0 +1,78 @@ +//HintName: G.ChannelPointsClient.UpdateRedemptionStatus.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChannelPointsClient + { + /// + /// Updates a redemption’s status. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateRedemptionStatusAsync( + global::System.Collections.Generic.IList id, + string broadcasterId, + string rewardId, + UpdateRedemptionStatusBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channel_points/custom_rewards/redemptions?{string.Join("&", id.Select(static x => $"id={x}"))}&broadcaster_id={broadcasterId}&reward_id={rewardId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Updates a redemption’s status. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateRedemptionStatusAsync( + global::System.Collections.Generic.IList id, + string broadcasterId, + string rewardId, + UpdateRedemptionStatusBodyStatus status, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateRedemptionStatusBody + { + Status = status, + }; + + return await UpdateRedemptionStatusAsync( + id: id, + broadcasterId: broadcasterId, + rewardId: rewardId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.g.verified.cs new file mode 100644 index 0000000000..30d61df3a7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelPointsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChannelPointsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ChannelPointsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ChannelPointsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ChannelPointsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelEditors.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelEditors.g.verified.cs new file mode 100644 index 0000000000..25eb77d055 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelEditors.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChannelsClient.GetChannelEditors.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelsClient + { + /// + /// Gets the broadcaster’s list editors. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelEditorsAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels/editors?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelFollowers.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelFollowers.g.verified.cs new file mode 100644 index 0000000000..9d94e79119 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelFollowers.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.ChannelsClient.GetChannelFollowers.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelsClient + { + /// + /// Gets a list of users that follow the specified broadcaster. You can also use this endpoint to see whether a specific user follows the broadcaster. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelFollowersAsync( + string userId, + string broadcasterId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels/followers?user_id={userId}&broadcaster_id={broadcasterId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelInformation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelInformation.g.verified.cs new file mode 100644 index 0000000000..a48ace470c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetChannelInformation.g.verified.cs @@ -0,0 +1,37 @@ +//HintName: G.ChannelsClient.GetChannelInformation.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChannelsClient + { + /// + /// Gets information about one or more channels. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelInformationAsync( + global::System.Collections.Generic.IList broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels?{string.Join("&", broadcasterId.Select(static x => $"broadcasterId={x}"))}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetFollowedChannels.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetFollowedChannels.g.verified.cs new file mode 100644 index 0000000000..51b5cd7543 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.GetFollowedChannels.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.ChannelsClient.GetFollowedChannels.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelsClient + { + /// + /// Gets a list of broadcasters that the specified user follows. You can also use this endpoint to see whether a user follows a specific broadcaster. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetFollowedChannelsAsync( + string userId, + string broadcasterId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels/followed?user_id={userId}&broadcaster_id={broadcasterId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.ModifyChannelInformation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.ModifyChannelInformation.g.verified.cs new file mode 100644 index 0000000000..4a1aed1295 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.ModifyChannelInformation.g.verified.cs @@ -0,0 +1,79 @@ +//HintName: G.ChannelsClient.ModifyChannelInformation.g.cs + +#nullable enable + +namespace G +{ + public partial class ChannelsClient + { + /// + /// Updates a channel’s properties. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task ModifyChannelInformationAsync( + string broadcasterId, + ModifyChannelInformationBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/channels?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Updates a channel’s properties. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task ModifyChannelInformationAsync( + string broadcasterId, + string? gameId = default, + string? broadcasterLanguage = default, + string? title = default, + int delay = default, + global::System.Collections.Generic.IList? tags = default, + global::System.Collections.Generic.IList? contentClassificationLabels = default, + bool isBrandedContent = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new ModifyChannelInformationBody + { + GameId = gameId, + BroadcasterLanguage = broadcasterLanguage, + Title = title, + Delay = delay, + Tags = tags, + ContentClassificationLabels = contentClassificationLabels, + IsBrandedContent = isBrandedContent, + }; + + await ModifyChannelInformationAsync( + broadcasterId: broadcasterId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.g.verified.cs new file mode 100644 index 0000000000..03a2c9568c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChannelsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChannelsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ChannelsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ChannelsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ChannelsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaign.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaign.g.verified.cs new file mode 100644 index 0000000000..6a53288826 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaign.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.CharityClient.GetCharityCampaign.g.cs + +#nullable enable + +namespace G +{ + public partial class CharityClient + { + /// + /// Gets information about the broadcaster’s active charity campaign. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCharityCampaignAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/charity/campaigns?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaignDonations.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaignDonations.g.verified.cs new file mode 100644 index 0000000000..e5cb39c280 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.GetCharityCampaignDonations.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.CharityClient.GetCharityCampaignDonations.g.cs + +#nullable enable + +namespace G +{ + public partial class CharityClient + { + /// + /// Gets the list of donations that users have made to the broadcaster’s active charity campaign. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCharityCampaignDonationsAsync( + string broadcasterId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/charity/donations?broadcaster_id={broadcasterId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.g.verified.cs new file mode 100644 index 0000000000..a47dade843 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.CharityClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.CharityClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class CharityClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the CharityClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public CharityClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelChatBadges.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelChatBadges.g.verified.cs new file mode 100644 index 0000000000..cae0d8d769 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelChatBadges.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChatClient.GetChannelChatBadges.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets the broadcaster’s list of custom chat badges. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelChatBadgesAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/badges?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelEmotes.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelEmotes.g.verified.cs new file mode 100644 index 0000000000..6cd3388622 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChannelEmotes.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChatClient.GetChannelEmotes.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets the broadcaster’s list of custom emotes. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelEmotesAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/emotes?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatSettings.g.verified.cs new file mode 100644 index 0000000000..2d7f38bb0a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatSettings.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.ChatClient.GetChatSettings.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets the broadcaster’s chat settings. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChatSettingsAsync( + string broadcasterId, + string moderatorId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/settings?broadcaster_id={broadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatters.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatters.g.verified.cs new file mode 100644 index 0000000000..9d44b3d337 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetChatters.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.ChatClient.GetChatters.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets the list of users that are connected to the broadcaster’s chat session. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChattersAsync( + string broadcasterId, + string moderatorId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/chatters?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetEmoteSets.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetEmoteSets.g.verified.cs new file mode 100644 index 0000000000..3fb17c8d8d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetEmoteSets.g.verified.cs @@ -0,0 +1,37 @@ +//HintName: G.ChatClient.GetEmoteSets.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets emotes for one or more specified emote sets. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetEmoteSetsAsync( + global::System.Collections.Generic.IList emoteSetId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/emotes/set?{string.Join("&", emoteSetId.Select(static x => $"emoteSetId={x}"))}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalChatBadges.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalChatBadges.g.verified.cs new file mode 100644 index 0000000000..266796f9fc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalChatBadges.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.ChatClient.GetGlobalChatBadges.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets Twitch’s list of chat badges. + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGlobalChatBadgesAsync( + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/chat/badges/global", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalEmotes.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalEmotes.g.verified.cs new file mode 100644 index 0000000000..4b48c6ac73 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetGlobalEmotes.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.ChatClient.GetGlobalEmotes.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets all global emotes. + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGlobalEmotesAsync( + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/chat/emotes/global", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserChatColor.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserChatColor.g.verified.cs new file mode 100644 index 0000000000..0b276bc246 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserChatColor.g.verified.cs @@ -0,0 +1,37 @@ +//HintName: G.ChatClient.GetUserChatColor.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Gets the color used for the user’s name in chat. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetUserChatColorAsync( + global::System.Collections.Generic.IList userId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/color?{string.Join("&", userId.Select(static x => $"userId={x}"))}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserEmotes.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserEmotes.g.verified.cs new file mode 100644 index 0000000000..c08088e823 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.GetUserEmotes.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.ChatClient.GetUserEmotes.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// NEW Retrieves emotes available to the user across all channels. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetUserEmotesAsync( + string userId, + string broadcasterId, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/emotes/user?user_id={userId}&broadcaster_id={broadcasterId}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendAShoutout.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendAShoutout.g.verified.cs new file mode 100644 index 0000000000..5a0124a4d5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendAShoutout.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.ChatClient.SendAShoutout.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Sends a Shoutout to the specified broadcaster. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendAShoutoutAsync( + string fromBroadcasterId, + string toBroadcasterId, + string moderatorId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/shoutouts?from_broadcaster_id={fromBroadcasterId}&to_broadcaster_id={toBroadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatAnnouncement.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatAnnouncement.g.verified.cs new file mode 100644 index 0000000000..2cf96f9475 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatAnnouncement.g.verified.cs @@ -0,0 +1,69 @@ +//HintName: G.ChatClient.SendChatAnnouncement.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Sends an announcement to the broadcaster’s chat room. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendChatAnnouncementAsync( + string broadcasterId, + string moderatorId, + SendChatAnnouncementBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/announcements?broadcaster_id={broadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Sends an announcement to the broadcaster’s chat room. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendChatAnnouncementAsync( + string broadcasterId, + string moderatorId, + string message, + SendChatAnnouncementBodyColor? color = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SendChatAnnouncementBody + { + Message = message, + Color = color, + }; + + await SendChatAnnouncementAsync( + broadcasterId: broadcasterId, + moderatorId: moderatorId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatMessage.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatMessage.g.verified.cs new file mode 100644 index 0000000000..215771c027 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.SendChatMessage.g.verified.cs @@ -0,0 +1,71 @@ +//HintName: G.ChatClient.SendChatMessage.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// NEW Sends a message to the broadcaster’s chat room. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendChatMessageAsync( + SendChatMessageBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/chat/messages", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// NEW Sends a message to the broadcaster’s chat room. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendChatMessageAsync( + string broadcasterId, + string senderId, + string message, + string? replyParentMessageId = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SendChatMessageBody + { + BroadcasterId = broadcasterId, + SenderId = senderId, + Message = message, + ReplyParentMessageId = replyParentMessageId, + }; + + return await SendChatMessageAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateChatSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateChatSettings.g.verified.cs new file mode 100644 index 0000000000..124e23e019 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateChatSettings.g.verified.cs @@ -0,0 +1,96 @@ +//HintName: G.ChatClient.UpdateChatSettings.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Updates the broadcaster’s chat settings. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateChatSettingsAsync( + string broadcasterId, + string moderatorId, + UpdateChatSettingsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/settings?broadcaster_id={broadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Updates the broadcaster’s chat settings. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateChatSettingsAsync( + string broadcasterId, + string moderatorId, + bool emoteMode = default, + bool followerMode = default, + int followerModeDuration = default, + bool nonModeratorChatDelay = default, + int nonModeratorChatDelayDuration = default, + bool slowMode = default, + int slowModeWaitTime = default, + bool subscriberMode = default, + bool uniqueChatMode = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateChatSettingsBody + { + EmoteMode = emoteMode, + FollowerMode = followerMode, + FollowerModeDuration = followerModeDuration, + NonModeratorChatDelay = nonModeratorChatDelay, + NonModeratorChatDelayDuration = nonModeratorChatDelayDuration, + SlowMode = slowMode, + SlowModeWaitTime = slowModeWaitTime, + SubscriberMode = subscriberMode, + UniqueChatMode = uniqueChatMode, + }; + + return await UpdateChatSettingsAsync( + broadcasterId: broadcasterId, + moderatorId: moderatorId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateUserChatColor.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateUserChatColor.g.verified.cs new file mode 100644 index 0000000000..3e28d863d8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.UpdateUserChatColor.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.ChatClient.UpdateUserChatColor.g.cs + +#nullable enable + +namespace G +{ + public partial class ChatClient + { + /// + /// Updates the color used for the user’s name in chat. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateUserChatColorAsync( + string userId, + UpdateUserChatColorColor color, + global::System.Threading.CancellationToken cancellationToken = default) + { + var colorValue = color switch + { + UpdateUserChatColorColor.Blue => "blue", + UpdateUserChatColorColor.BlueViolet => "blue_violet", + UpdateUserChatColorColor.CadetBlue => "cadet_blue", + UpdateUserChatColorColor.Chocolate => "chocolate", + UpdateUserChatColorColor.Coral => "coral", + UpdateUserChatColorColor.DodgerBlue => "dodger_blue", + UpdateUserChatColorColor.Firebrick => "firebrick", + UpdateUserChatColorColor.GoldenRod => "golden_rod", + UpdateUserChatColorColor.Green => "green", + UpdateUserChatColorColor.HotPink => "hot_pink", + UpdateUserChatColorColor.OrangeRed => "orange_red", + UpdateUserChatColorColor.Red => "red", + UpdateUserChatColorColor.SeaGreen => "sea_green", + UpdateUserChatColorColor.SpringGreen => "spring_green", + UpdateUserChatColorColor.YellowGreen => "yellow_green", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Put, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/chat/color?user_id={userId}&color={colorValue}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.g.verified.cs new file mode 100644 index 0000000000..590012bb60 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ChatClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ChatClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ChatClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ChatClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ChatClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.CreateClip.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.CreateClip.g.verified.cs new file mode 100644 index 0000000000..622a13f30d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.CreateClip.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.ClipsClient.CreateClip.g.cs + +#nullable enable + +namespace G +{ + public partial class ClipsClient + { + /// + /// Creates a clip from the broadcaster’s stream. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateClipAsync( + string broadcasterId, + bool hasDelay, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/clips?broadcaster_id={broadcasterId}&has_delay={hasDelay}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.GetClips.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.GetClips.g.verified.cs new file mode 100644 index 0000000000..5bf8228f1b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.GetClips.g.verified.cs @@ -0,0 +1,53 @@ +//HintName: G.ClipsClient.GetClips.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class ClipsClient + { + /// + /// Gets one or more video clips. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetClipsAsync( + string broadcasterId, + string gameId, + global::System.Collections.Generic.IList id, + global::System.DateTime startedAt, + global::System.DateTime endedAt, + int first, + string before, + string after, + bool isFeatured, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/clips?broadcaster_id={broadcasterId}&game_id={gameId}&{string.Join("&", id.Select(static x => $"id={x}"))}&started_at={startedAt}&ended_at={endedAt}&first={first}&before={before}&after={after}&is_featured={isFeatured}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.g.verified.cs new file mode 100644 index 0000000000..f7f53768ba --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ClipsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ClipsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ClipsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ClipsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ClipsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.CreateConduits.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.CreateConduits.g.verified.cs new file mode 100644 index 0000000000..b1a4570f29 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.CreateConduits.g.verified.cs @@ -0,0 +1,62 @@ +//HintName: G.ConduitsClient.CreateConduits.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Creates a new conduit. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateConduitsAsync( + CreateConduitsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/eventsub/conduits", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// NEW Creates a new conduit. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateConduitsAsync( + int shardCount, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new CreateConduitsBody + { + ShardCount = shardCount, + }; + + return await CreateConduitsAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.DeleteConduit.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.DeleteConduit.g.verified.cs new file mode 100644 index 0000000000..a4c098ac3b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.DeleteConduit.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.ConduitsClient.DeleteConduit.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Deletes a specified conduit. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task DeleteConduitAsync( + string id, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/eventsub/conduits?id={id}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduitShards.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduitShards.g.verified.cs new file mode 100644 index 0000000000..69d16f981b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduitShards.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.ConduitsClient.GetConduitShards.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Gets a lists of all shards for a conduit. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetConduitShardsAsync( + string conduitId, + string status, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/eventsub/conduits/shards?conduit_id={conduitId}&status={status}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduits.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduits.g.verified.cs new file mode 100644 index 0000000000..f69a8b8d94 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.GetConduits.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.ConduitsClient.GetConduits.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Gets the conduits for a client ID. + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetConduitsAsync( + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/eventsub/conduits", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduitShards.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduitShards.g.verified.cs new file mode 100644 index 0000000000..cef29816ab --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduitShards.g.verified.cs @@ -0,0 +1,65 @@ +//HintName: G.ConduitsClient.UpdateConduitShards.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Updates shard(s) for a conduit. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateConduitShardsAsync( + UpdateConduitShardsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/eventsub/conduits/shards", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// NEW Updates shard(s) for a conduit. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateConduitShardsAsync( + string conduitId, + global::System.Collections.Generic.IList shards, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateConduitShardsBody + { + ConduitId = conduitId, + Shards = shards, + }; + + return await UpdateConduitShardsAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduits.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduits.g.verified.cs new file mode 100644 index 0000000000..cd4f3c2c82 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.UpdateConduits.g.verified.cs @@ -0,0 +1,65 @@ +//HintName: G.ConduitsClient.UpdateConduits.g.cs + +#nullable enable + +namespace G +{ + public partial class ConduitsClient + { + /// + /// NEW Updates a conduit’s shard count. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateConduitsAsync( + UpdateConduitsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/eventsub/conduits", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// NEW Updates a conduit’s shard count. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateConduitsAsync( + string id, + int shardCount, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateConduitsBody + { + Id = id, + ShardCount = shardCount, + }; + + return await UpdateConduitsAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.g.verified.cs new file mode 100644 index 0000000000..b76e678622 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ConduitsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ConduitsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ConduitsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ConduitsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ConduitsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.GetDropsEntitlements.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.GetDropsEntitlements.g.verified.cs new file mode 100644 index 0000000000..6730062275 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.GetDropsEntitlements.g.verified.cs @@ -0,0 +1,53 @@ +//HintName: G.EntitlementsClient.GetDropsEntitlements.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class EntitlementsClient + { + /// + /// Gets an organization’s list of entitlements that have been granted to a game, a user, or both. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetDropsEntitlementsAsync( + global::System.Collections.Generic.IList id, + string userId, + string gameId, + GetDropsEntitlementsFulfillmentStatus fulfillmentStatus, + string after, + int first, + global::System.Threading.CancellationToken cancellationToken = default) + { + var fulfillmentStatusValue = fulfillmentStatus switch + { + GetDropsEntitlementsFulfillmentStatus.CLAIMED => "CLAIMED", + GetDropsEntitlementsFulfillmentStatus.FULFILLED => "FULFILLED", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/entitlements/drops?{string.Join("&", id.Select(static x => $"id={x}"))}&user_id={userId}&game_id={gameId}&fulfillment_status={fulfillmentStatusValue}&after={after}&first={first}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.UpdateDropsEntitlements.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.UpdateDropsEntitlements.g.verified.cs new file mode 100644 index 0000000000..6cfe133fde --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.UpdateDropsEntitlements.g.verified.cs @@ -0,0 +1,65 @@ +//HintName: G.EntitlementsClient.UpdateDropsEntitlements.g.cs + +#nullable enable + +namespace G +{ + public partial class EntitlementsClient + { + /// + /// Updates the Drop entitlement’s fulfillment status. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateDropsEntitlementsAsync( + UpdateDropsEntitlementsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/entitlements/drops", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Updates the Drop entitlement’s fulfillment status. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateDropsEntitlementsAsync( + global::System.Collections.Generic.IList? entitlementIds = default, + UpdateDropsEntitlementsBodyFulfillmentStatus? fulfillmentStatus = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateDropsEntitlementsBody + { + EntitlementIds = entitlementIds, + FulfillmentStatus = fulfillmentStatus, + }; + + return await UpdateDropsEntitlementsAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.g.verified.cs new file mode 100644 index 0000000000..5be704b743 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EntitlementsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.EntitlementsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class EntitlementsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the EntitlementsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public EntitlementsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.CreateEventsubSubscription.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.CreateEventsubSubscription.g.verified.cs new file mode 100644 index 0000000000..c138026a42 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.CreateEventsubSubscription.g.verified.cs @@ -0,0 +1,71 @@ +//HintName: G.EventSubClient.CreateEventsubSubscription.g.cs + +#nullable enable + +namespace G +{ + public partial class EventSubClient + { + /// + /// Creates an EventSub subscription. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateEventsubSubscriptionAsync( + CreateEventSubSubscriptionBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/eventsub/subscriptions", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Creates an EventSub subscription. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateEventsubSubscriptionAsync( + CreateEventSubSubscriptionBodyType type, + string version, + object condition, + CreateEventSubSubscriptionBodyTransport transport, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new CreateEventSubSubscriptionBody + { + Type = type, + Version = version, + Condition = condition, + Transport = transport, + }; + + return await CreateEventsubSubscriptionAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.DeleteEventsubSubscription.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.DeleteEventsubSubscription.g.verified.cs new file mode 100644 index 0000000000..03937bddce --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.DeleteEventsubSubscription.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.EventSubClient.DeleteEventsubSubscription.g.cs + +#nullable enable + +namespace G +{ + public partial class EventSubClient + { + /// + /// Deletes an EventSub subscription. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task DeleteEventsubSubscriptionAsync( + string id, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/eventsub/subscriptions?id={id}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.GetEventsubSubscriptions.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.GetEventsubSubscriptions.g.verified.cs new file mode 100644 index 0000000000..1a3c944c8b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.GetEventsubSubscriptions.g.verified.cs @@ -0,0 +1,136 @@ +//HintName: G.EventSubClient.GetEventsubSubscriptions.g.cs + +#nullable enable + +namespace G +{ + public partial class EventSubClient + { + /// + /// Gets a list of EventSub subscriptions that the client in the access token created. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetEventsubSubscriptionsAsync( + GetEventsubSubscriptionsStatus status, + GetEventsubSubscriptionsType type, + string userId, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + var statusValue = status switch + { + GetEventsubSubscriptionsStatus.Enabled => "enabled", + GetEventsubSubscriptionsStatus.WebhookCallbackVerificationPending => "webhook_callback_verification_pending", + GetEventsubSubscriptionsStatus.WebhookCallbackVerificationFailed => "webhook_callback_verification_failed", + GetEventsubSubscriptionsStatus.NotificationFailuresExceeded => "notification_failures_exceeded", + GetEventsubSubscriptionsStatus.AuthorizationRevoked => "authorization_revoked", + GetEventsubSubscriptionsStatus.ModeratorRemoved => "moderator_removed", + GetEventsubSubscriptionsStatus.UserRemoved => "user_removed", + GetEventsubSubscriptionsStatus.VersionRemoved => "version_removed", + GetEventsubSubscriptionsStatus.BetaMaintenance => "beta_maintenance", + GetEventsubSubscriptionsStatus.WebsocketDisconnected => "websocket_disconnected", + GetEventsubSubscriptionsStatus.WebsocketFailedPingPong => "websocket_failed_ping_pong", + GetEventsubSubscriptionsStatus.WebsocketReceivedInboundTraffic => "websocket_received_inbound_traffic", + GetEventsubSubscriptionsStatus.WebsocketConnectionUnused => "websocket_connection_unused", + GetEventsubSubscriptionsStatus.WebsocketInternalError => "websocket_internal_error", + GetEventsubSubscriptionsStatus.WebsocketNetworkTimeout => "websocket_network_timeout", + GetEventsubSubscriptionsStatus.WebsocketNetworkError => "websocket_network_error", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + var typeValue = type switch + { + GetEventsubSubscriptionsType.Automodmessagehold => "automod.message.hold", + GetEventsubSubscriptionsType.Automodmessageupdate => "automod.message.update", + GetEventsubSubscriptionsType.Automodsettingsupdate => "automod.settings.update", + GetEventsubSubscriptionsType.Automodtermsupdate => "automod.terms.update", + GetEventsubSubscriptionsType.Channelupdate => "channel.update", + GetEventsubSubscriptionsType.Channelfollow => "channel.follow", + GetEventsubSubscriptionsType.ChanneladBreakbegin => "channel.ad_break.begin", + GetEventsubSubscriptionsType.Channelchatclear => "channel.chat.clear", + GetEventsubSubscriptionsType.ChannelchatclearUserMessages => "channel.chat.clear_user_messages", + GetEventsubSubscriptionsType.Channelchatmessage => "channel.chat.message", + GetEventsubSubscriptionsType.ChannelchatmessageDelete => "channel.chat.message_delete", + GetEventsubSubscriptionsType.Channelchatnotification => "channel.chat.notification", + GetEventsubSubscriptionsType.ChannelchatSettingsupdate => "channel.chat_settings.update", + GetEventsubSubscriptionsType.ChannelchatuserMessageHold => "channel.chat.user_message_hold", + GetEventsubSubscriptionsType.ChannelchatuserMessageUpdate => "channel.chat.user_message_update", + GetEventsubSubscriptionsType.Channelsubscribe => "channel.subscribe", + GetEventsubSubscriptionsType.Channelsubscriptionend => "channel.subscription.end", + GetEventsubSubscriptionsType.Channelsubscriptiongift => "channel.subscription.gift", + GetEventsubSubscriptionsType.Channelsubscriptionmessage => "channel.subscription.message", + GetEventsubSubscriptionsType.Channelcheer => "channel.cheer", + GetEventsubSubscriptionsType.Channelraid => "channel.raid", + GetEventsubSubscriptionsType.Channelban => "channel.ban", + GetEventsubSubscriptionsType.Channelunban => "channel.unban", + GetEventsubSubscriptionsType.ChannelunbanRequestcreate => "channel.unban_request.create", + GetEventsubSubscriptionsType.ChannelunbanRequestresolve => "channel.unban_request.resolve", + GetEventsubSubscriptionsType.Channelmoderate => "channel.moderate", + GetEventsubSubscriptionsType.Channelmoderatoradd => "channel.moderator.add", + GetEventsubSubscriptionsType.Channelmoderatorremove => "channel.moderator.remove", + GetEventsubSubscriptionsType.ChannelguestStarSessionbegin => "channel.guest_star_session.begin", + GetEventsubSubscriptionsType.ChannelguestStarSessionend => "channel.guest_star_session.end", + GetEventsubSubscriptionsType.ChannelguestStarGuestupdate => "channel.guest_star_guest.update", + GetEventsubSubscriptionsType.ChannelguestStarSettingsupdate => "channel.guest_star_settings.update", + GetEventsubSubscriptionsType.ChannelchannelPointsAutomaticRewardadd => "channel.channel_points_automatic_reward.add", + GetEventsubSubscriptionsType.ChannelchannelPointsCustomRewardadd => "channel.channel_points_custom_reward.add", + GetEventsubSubscriptionsType.ChannelchannelPointsCustomRewardupdate => "channel.channel_points_custom_reward.update", + GetEventsubSubscriptionsType.ChannelchannelPointsCustomRewardremove => "channel.channel_points_custom_reward.remove", + GetEventsubSubscriptionsType.ChannelchannelPointsCustomRewardRedemptionadd => "channel.channel_points_custom_reward_redemption.add", + GetEventsubSubscriptionsType.ChannelchannelPointsCustomRewardRedemptionupdate => "channel.channel_points_custom_reward_redemption.update", + GetEventsubSubscriptionsType.Channelpollbegin => "channel.poll.begin", + GetEventsubSubscriptionsType.Channelpollprogress => "channel.poll.progress", + GetEventsubSubscriptionsType.Channelpollend => "channel.poll.end", + GetEventsubSubscriptionsType.Channelpredictionbegin => "channel.prediction.begin", + GetEventsubSubscriptionsType.Channelpredictionprogress => "channel.prediction.progress", + GetEventsubSubscriptionsType.Channelpredictionlock => "channel.prediction.lock", + GetEventsubSubscriptionsType.Channelpredictionend => "channel.prediction.end", + GetEventsubSubscriptionsType.Channelvipadd => "channel.vip.add", + GetEventsubSubscriptionsType.Channelvipremove => "channel.vip.remove", + GetEventsubSubscriptionsType.ChannelcharityCampaigndonate => "channel.charity_campaign.donate", + GetEventsubSubscriptionsType.ChannelcharityCampaignstart => "channel.charity_campaign.start", + GetEventsubSubscriptionsType.ChannelcharityCampaignprogress => "channel.charity_campaign.progress", + GetEventsubSubscriptionsType.ChannelcharityCampaignstop => "channel.charity_campaign.stop", + GetEventsubSubscriptionsType.Conduitsharddisabled => "conduit.shard.disabled", + GetEventsubSubscriptionsType.Dropentitlementgrant => "drop.entitlement.grant", + GetEventsubSubscriptionsType.ExtensionbitsTransactioncreate => "extension.bits_transaction.create", + GetEventsubSubscriptionsType.Channelgoalbegin => "channel.goal.begin", + GetEventsubSubscriptionsType.Channelgoalprogress => "channel.goal.progress", + GetEventsubSubscriptionsType.Channelgoalend => "channel.goal.end", + GetEventsubSubscriptionsType.ChannelhypeTrainbegin => "channel.hype_train.begin", + GetEventsubSubscriptionsType.ChannelhypeTrainprogress => "channel.hype_train.progress", + GetEventsubSubscriptionsType.ChannelhypeTrainend => "channel.hype_train.end", + GetEventsubSubscriptionsType.ChannelshieldModebegin => "channel.shield_mode.begin", + GetEventsubSubscriptionsType.ChannelshieldModeend => "channel.shield_mode.end", + GetEventsubSubscriptionsType.Channelshoutoutcreate => "channel.shoutout.create", + GetEventsubSubscriptionsType.Channelshoutoutreceive => "channel.shoutout.receive", + GetEventsubSubscriptionsType.Streamonline => "stream.online", + GetEventsubSubscriptionsType.Streamoffline => "stream.offline", + GetEventsubSubscriptionsType.Userauthorizationgrant => "user.authorization.grant", + GetEventsubSubscriptionsType.Userauthorizationrevoke => "user.authorization.revoke", + GetEventsubSubscriptionsType.Userupdate => "user.update", + GetEventsubSubscriptionsType.Userwhispermessage => "user.whisper.message", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/eventsub/subscriptions?status={statusValue}&type={typeValue}&user_id={userId}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.g.verified.cs new file mode 100644 index 0000000000..e1665fac02 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.EventSubClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.EventSubClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class EventSubClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the EventSubClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public EventSubClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.CreateExtensionSecret.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.CreateExtensionSecret.g.verified.cs new file mode 100644 index 0000000000..05d7e01a67 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.CreateExtensionSecret.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.ExtensionsClient.CreateExtensionSecret.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Creates a shared secret used to sign and verify JWT tokens. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateExtensionSecretAsync( + string extensionId, + int delay, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/jwt/secrets?extension_id={extensionId}&delay={delay}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionBitsProducts.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionBitsProducts.g.verified.cs new file mode 100644 index 0000000000..54841dc448 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionBitsProducts.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ExtensionsClient.GetExtensionBitsProducts.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets the list of Bits products that belongs to the extension. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionBitsProductsAsync( + bool shouldIncludeAll, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/bits/extensions?should_include_all={shouldIncludeAll}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionConfigurationSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionConfigurationSegment.g.verified.cs new file mode 100644 index 0000000000..76dd2a24b2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionConfigurationSegment.g.verified.cs @@ -0,0 +1,47 @@ +//HintName: G.ExtensionsClient.GetExtensionConfigurationSegment.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets the specified configuration segment from the specified extension. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionConfigurationSegmentAsync( + string broadcasterId, + string extensionId, + GetExtensionConfigurationSegmentSegment segment, + global::System.Threading.CancellationToken cancellationToken = default) + { + var segmentValue = segment switch + { + GetExtensionConfigurationSegmentSegment.Broadcaster => "broadcaster", + GetExtensionConfigurationSegmentSegment.Developer => "developer", + GetExtensionConfigurationSegmentSegment.Global => "global", + _ => throw new global::System.NotImplementedException("Enum value not implemented."), + }; + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/configurations?broadcaster_id={broadcasterId}&extension_id={extensionId}&segment={segmentValue}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionLiveChannels.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionLiveChannels.g.verified.cs new file mode 100644 index 0000000000..1df6c82761 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionLiveChannels.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.ExtensionsClient.GetExtensionLiveChannels.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets a list of broadcasters that are streaming live and have installed or activated the extension. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionLiveChannelsAsync( + string extensionId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/live?extension_id={extensionId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionSecrets.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionSecrets.g.verified.cs new file mode 100644 index 0000000000..8cfe63f1b0 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensionSecrets.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.ExtensionsClient.GetExtensionSecrets.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets an extension’s list of shared secrets. + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionSecretsAsync( + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/extensions/jwt/secrets", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensions.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensions.g.verified.cs new file mode 100644 index 0000000000..6c4188c056 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetExtensions.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.ExtensionsClient.GetExtensions.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets information about an extension. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetExtensionsAsync( + string extensionId, + string extensionVersion, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions?extension_id={extensionId}&extension_version={extensionVersion}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetReleasedExtensions.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetReleasedExtensions.g.verified.cs new file mode 100644 index 0000000000..46b252f98c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.GetReleasedExtensions.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.ExtensionsClient.GetReleasedExtensions.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Gets information about a released extension. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetReleasedExtensionsAsync( + string extensionId, + string extensionVersion, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/released?extension_id={extensionId}&extension_version={extensionVersion}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionChatMessage.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionChatMessage.g.verified.cs new file mode 100644 index 0000000000..62a1b8601e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionChatMessage.g.verified.cs @@ -0,0 +1,67 @@ +//HintName: G.ExtensionsClient.SendExtensionChatMessage.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Sends a message to the specified broadcaster’s chat room. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendExtensionChatMessageAsync( + string broadcasterId, + SendExtensionChatMessageBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/chat?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Sends a message to the specified broadcaster’s chat room. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendExtensionChatMessageAsync( + string broadcasterId, + string text, + string extensionId, + string extensionVersion, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SendExtensionChatMessageBody + { + Text = text, + ExtensionId = extensionId, + ExtensionVersion = extensionVersion, + }; + + await SendExtensionChatMessageAsync( + broadcasterId: broadcasterId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionPubsubMessage.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionPubsubMessage.g.verified.cs new file mode 100644 index 0000000000..c6cec44dd8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SendExtensionPubsubMessage.g.verified.cs @@ -0,0 +1,65 @@ +//HintName: G.ExtensionsClient.SendExtensionPubsubMessage.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Sends a message to one or more viewers. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendExtensionPubsubMessageAsync( + SendExtensionPubSubMessageBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/extensions/pubsub", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Sends a message to one or more viewers. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendExtensionPubsubMessageAsync( + global::System.Collections.Generic.IList target, + string broadcasterId, + string message, + bool isGlobalBroadcast = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SendExtensionPubSubMessageBody + { + Target = target, + BroadcasterId = broadcasterId, + IsGlobalBroadcast = isGlobalBroadcast, + Message = message, + }; + + await SendExtensionPubsubMessageAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionConfigurationSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionConfigurationSegment.g.verified.cs new file mode 100644 index 0000000000..b356db26b9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionConfigurationSegment.g.verified.cs @@ -0,0 +1,68 @@ +//HintName: G.ExtensionsClient.SetExtensionConfigurationSegment.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Updates a configuration segment. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SetExtensionConfigurationSegmentAsync( + SetExtensionConfigurationSegmentBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Put, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/extensions/configurations", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Updates a configuration segment. + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SetExtensionConfigurationSegmentAsync( + string extensionId, + SetExtensionConfigurationSegmentBodySegment segment, + string? broadcasterId = default, + string? content = default, + string? version = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SetExtensionConfigurationSegmentBody + { + ExtensionId = extensionId, + Segment = segment, + BroadcasterId = broadcasterId, + Content = content, + Version = version, + }; + + await SetExtensionConfigurationSegmentAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionRequiredConfiguration.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionRequiredConfiguration.g.verified.cs new file mode 100644 index 0000000000..5027fc3a3c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.SetExtensionRequiredConfiguration.g.verified.cs @@ -0,0 +1,67 @@ +//HintName: G.ExtensionsClient.SetExtensionRequiredConfiguration.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Updates the extension’s required_configuration string. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SetExtensionRequiredConfigurationAsync( + string broadcasterId, + SetExtensionRequiredConfigurationBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Put, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/extensions/required_configuration?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// Updates the extension’s required_configuration string. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SetExtensionRequiredConfigurationAsync( + string broadcasterId, + string extensionId, + string extensionVersion, + string requiredConfiguration, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new SetExtensionRequiredConfigurationBody + { + ExtensionId = extensionId, + ExtensionVersion = extensionVersion, + RequiredConfiguration = requiredConfiguration, + }; + + await SetExtensionRequiredConfigurationAsync( + broadcasterId: broadcasterId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.UpdateExtensionBitsProduct.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.UpdateExtensionBitsProduct.g.verified.cs new file mode 100644 index 0000000000..69c7a36dd4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.UpdateExtensionBitsProduct.g.verified.cs @@ -0,0 +1,77 @@ +//HintName: G.ExtensionsClient.UpdateExtensionBitsProduct.g.cs + +#nullable enable + +namespace G +{ + public partial class ExtensionsClient + { + /// + /// Adds or updates a Bits product that the extension created. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateExtensionBitsProductAsync( + UpdateExtensionBitsProductBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Put, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + "/bits/extensions", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + + /// + /// Adds or updates a Bits product that the extension created. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateExtensionBitsProductAsync( + string sku, + UpdateExtensionBitsProductBodyCost cost, + string displayName, + bool inDevelopment = default, + global::System.DateTime expiration = default, + bool isBroadcast = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateExtensionBitsProductBody + { + Sku = sku, + Cost = cost, + DisplayName = displayName, + InDevelopment = inDevelopment, + Expiration = expiration, + IsBroadcast = isBroadcast, + }; + + return await UpdateExtensionBitsProductAsync( + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.g.verified.cs new file mode 100644 index 0000000000..2f05ae1328 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.ExtensionsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.ExtensionsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class ExtensionsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the ExtensionsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public ExtensionsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetGames.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetGames.g.verified.cs new file mode 100644 index 0000000000..e0b2292cdc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetGames.g.verified.cs @@ -0,0 +1,41 @@ +//HintName: G.GamesClient.GetGames.g.cs +using System.Linq; + +#nullable enable + +namespace G +{ + public partial class GamesClient + { + /// + /// Gets information about specified games. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGamesAsync( + global::System.Collections.Generic.IList id, + global::System.Collections.Generic.IList name, + global::System.Collections.Generic.IList igdbId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/games?{string.Join("&", id.Select(static x => $"id={x}"))}&{string.Join("&", name.Select(static x => $"name={x}"))}&{string.Join("&", igdbId.Select(static x => $"igdbId={x}"))}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetTopGames.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetTopGames.g.verified.cs new file mode 100644 index 0000000000..15aa4a249f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.GetTopGames.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.GamesClient.GetTopGames.g.cs + +#nullable enable + +namespace G +{ + public partial class GamesClient + { + /// + /// Gets information about all broadcasts on Twitch. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetTopGamesAsync( + int first, + string after, + string before, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/games/top?first={first}&after={after}&before={before}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.g.verified.cs new file mode 100644 index 0000000000..3e954b0164 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GamesClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GamesClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class GamesClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the GamesClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public GamesClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.GetCreatorGoals.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.GetCreatorGoals.g.verified.cs new file mode 100644 index 0000000000..e51c461117 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.GetCreatorGoals.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GoalsClient.GetCreatorGoals.g.cs + +#nullable enable + +namespace G +{ + public partial class GoalsClient + { + /// + /// Gets the broadcaster’s list of active goals. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetCreatorGoalsAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/goals?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.g.verified.cs new file mode 100644 index 0000000000..0746b4a64f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GoalsClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GoalsClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class GoalsClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the GoalsClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public GoalsClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.AssignGuestStarSlot.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.AssignGuestStarSlot.g.verified.cs new file mode 100644 index 0000000000..89d6fd6b6d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.AssignGuestStarSlot.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.GuestStarClient.AssignGuestStarSlot.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Allows a previously invited user to be assigned a slot within the active Guest Star session. + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task AssignGuestStarSlotAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string guestId, + string slotId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/slot?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&guest_id={guestId}&slot_id={slotId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.CreateGuestStarSession.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.CreateGuestStarSession.g.verified.cs new file mode 100644 index 0000000000..4bc21b4ae8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.CreateGuestStarSession.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GuestStarClient.CreateGuestStarSession.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Programmatically creates a Guest Star session on behalf of the broadcaster. + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task CreateGuestStarSessionAsync( + string broadcasterId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/session?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarInvite.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarInvite.g.verified.cs new file mode 100644 index 0000000000..368b60b3dd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarInvite.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GuestStarClient.DeleteGuestStarInvite.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Revokes a previously sent invite for a Guest Star session. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task DeleteGuestStarInviteAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string guestId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/invites?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&guest_id={guestId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarSlot.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarSlot.g.verified.cs new file mode 100644 index 0000000000..b5eedadd4b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.DeleteGuestStarSlot.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.GuestStarClient.DeleteGuestStarSlot.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Allows a caller to remove a slot assignment from a user participating in an active Guest Star session. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task DeleteGuestStarSlotAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string guestId, + string slotId, + string shouldReinviteGuest, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/slot?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&guest_id={guestId}&slot_id={slotId}&should_reinvite_guest={shouldReinviteGuest}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.EndGuestStarSession.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.EndGuestStarSession.g.verified.cs new file mode 100644 index 0000000000..2a0cb6f411 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.EndGuestStarSession.g.verified.cs @@ -0,0 +1,32 @@ +//HintName: G.GuestStarClient.EndGuestStarSession.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Programmatically ends a Guest Star session on behalf of the broadcaster. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task EndGuestStarSessionAsync( + string broadcasterId, + string sessionId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Delete, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/session?broadcaster_id={broadcasterId}&session_id={sessionId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetChannelGuestStarSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetChannelGuestStarSettings.g.verified.cs new file mode 100644 index 0000000000..fbd2344e72 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetChannelGuestStarSettings.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.GuestStarClient.GetChannelGuestStarSettings.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Gets the channel settings for configuration of the Guest Star feature for a particular host. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetChannelGuestStarSettingsAsync( + string broadcasterId, + string moderatorId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/channel_settings?broadcaster_id={broadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarInvites.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarInvites.g.verified.cs new file mode 100644 index 0000000000..b1c2bf401f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarInvites.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.GuestStarClient.GetGuestStarInvites.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Provides the caller with a list of pending invites to a Guest Star session. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGuestStarInvitesAsync( + string broadcasterId, + string moderatorId, + string sessionId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/invites?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarSession.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarSession.g.verified.cs new file mode 100644 index 0000000000..02c9288b2a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.GetGuestStarSession.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.GuestStarClient.GetGuestStarSession.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Gets information about an ongoing Guest Star session for a particular channel. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetGuestStarSessionAsync( + string broadcasterId, + string moderatorId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/session?broadcaster_id={broadcasterId}&moderator_id={moderatorId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.SendGuestStarInvite.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.SendGuestStarInvite.g.verified.cs new file mode 100644 index 0000000000..3b16f9484a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.SendGuestStarInvite.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GuestStarClient.SendGuestStarInvite.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Sends an invite to a specified guest on behalf of the broadcaster for a Guest Star session in progress. + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task SendGuestStarInviteAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string guestId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Post, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/invites?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&guest_id={guestId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateChannelGuestStarSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateChannelGuestStarSettings.g.verified.cs new file mode 100644 index 0000000000..871781707f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateChannelGuestStarSettings.g.verified.cs @@ -0,0 +1,73 @@ +//HintName: G.GuestStarClient.UpdateChannelGuestStarSettings.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Mutates the channel settings for configuration of the Guest Star feature for a particular host. + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateChannelGuestStarSettingsAsync( + string broadcasterId, + UpdateChannelGuestStarSettingsBody request, + global::System.Threading.CancellationToken cancellationToken = default) + { + request = request ?? throw new global::System.ArgumentNullException(nameof(request)); + + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Put, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/channel_settings?broadcaster_id={broadcasterId}", global::System.UriKind.RelativeOrAbsolute)); + httpRequest.Content = new global::System.Net.Http.StringContent( + content: global::Newtonsoft.Json.JsonConvert.SerializeObject(request), + encoding: global::System.Text.Encoding.UTF8, + mediaType: "application/json"); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + + /// + /// BETA Mutates the channel settings for configuration of the Guest Star feature for a particular host. + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateChannelGuestStarSettingsAsync( + string broadcasterId, + bool isModeratorSendLiveEnabled = default, + int slotCount = default, + bool isBrowserSourceAudioEnabled = default, + UpdateChannelGuestStarSettingsBodyGroupLayout? groupLayout = default, + bool regenerateBrowserSources = default, + global::System.Threading.CancellationToken cancellationToken = default) + { + var request = new UpdateChannelGuestStarSettingsBody + { + IsModeratorSendLiveEnabled = isModeratorSendLiveEnabled, + SlotCount = slotCount, + IsBrowserSourceAudioEnabled = isBrowserSourceAudioEnabled, + GroupLayout = groupLayout, + RegenerateBrowserSources = regenerateBrowserSources, + }; + + await UpdateChannelGuestStarSettingsAsync( + broadcasterId: broadcasterId, + request: request, + cancellationToken: cancellationToken).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlot.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlot.g.verified.cs new file mode 100644 index 0000000000..93161913d8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlot.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.GuestStarClient.UpdateGuestStarSlot.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Allows a user to update the assigned slot for a particular user within the active Guest Star session. + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateGuestStarSlotAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string sourceSlotId, + string destinationSlotId, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/slot?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&source_slot_id={sourceSlotId}&destination_slot_id={destinationSlotId}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlotSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlotSettings.g.verified.cs new file mode 100644 index 0000000000..aac6b2e841 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.UpdateGuestStarSlotSettings.g.verified.cs @@ -0,0 +1,44 @@ +//HintName: G.GuestStarClient.UpdateGuestStarSlotSettings.g.cs + +#nullable enable + +namespace G +{ + public partial class GuestStarClient + { + /// + /// BETA Allows a user to update slot settings for a particular guest within a Guest Star session. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task UpdateGuestStarSlotSettingsAsync( + string broadcasterId, + string moderatorId, + string sessionId, + string slotId, + bool isAudioEnabled, + bool isVideoEnabled, + bool isLive, + int volume, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Patch, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/guest_star/slot_settings?broadcaster_id={broadcasterId}&moderator_id={moderatorId}&session_id={sessionId}&slot_id={slotId}&is_audio_enabled={isAudioEnabled}&is_video_enabled={isVideoEnabled}&is_live={isLive}&volume={volume}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.g.verified.cs new file mode 100644 index 0000000000..6e9e5a9ddd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.GuestStarClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.GuestStarClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class GuestStarClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the GuestStarClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public GuestStarClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.GetHypeTrainEvents.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.GetHypeTrainEvents.g.verified.cs new file mode 100644 index 0000000000..53d32c1aa4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.GetHypeTrainEvents.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.HypeTrainClient.GetHypeTrainEvents.g.cs + +#nullable enable + +namespace G +{ + public partial class HypeTrainClient + { + /// + /// Gets information about the broadcaster’s current or most recent Hype Train event. + /// + /// + /// + /// + /// The token to cancel the operation with + /// + public async global::System.Threading.Tasks.Task GetHypeTrainEventsAsync( + string broadcasterId, + int first, + string after, + global::System.Threading.CancellationToken cancellationToken = default) + { + using var httpRequest = new global::System.Net.Http.HttpRequestMessage( + method: global::System.Net.Http.HttpMethod.Get, + requestUri: new global::System.Uri(_httpClient.BaseAddress?.AbsoluteUri + $"/hypetrain/events?broadcaster_id={broadcasterId}&first={first}&after={after}", global::System.UriKind.RelativeOrAbsolute)); + + using var response = await _httpClient.SendAsync( + request: httpRequest, + completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead, + cancellationToken: cancellationToken).ConfigureAwait(false); + response.EnsureSuccessStatusCode(); + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + return + global::Newtonsoft.Json.JsonConvert.DeserializeObject(content) ?? + throw new global::System.InvalidOperationException("Response deserialization failed for \"{content}\" "); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.g.verified.cs new file mode 100644 index 0000000000..004bad6924 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.HypeTrainClient.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.HypeTrainClient.g.cs + +#nullable enable + +namespace G +{ + /// + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + public sealed partial class HypeTrainClient : global::System.IDisposable + { + private readonly global::System.Net.Http.HttpClient _httpClient; + + /// + /// Creates a new instance of the HypeTrainClient. + /// If no httpClient is provided, a new one will be created. + /// If no baseUri is provided, the default baseUri from OpenAPI spec will be used. + /// + /// + /// + public HypeTrainClient( + global::System.Net.Http.HttpClient? httpClient = null, + global::System.Uri? baseUri = null) + { + _httpClient = httpClient ?? new global::System.Net.Http.HttpClient(); + _httpClient.BaseAddress ??= baseUri ?? new global::System.Uri("https://api.twitch.tv/helix"); + } + + /// + public void Dispose() + { + _httpClient.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermBody.g.verified.cs new file mode 100644 index 0000000000..6d2261d8a8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermBody.g.verified.cs @@ -0,0 +1,28 @@ +//HintName: G.Models.AddBlockedTermBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class AddBlockedTermBody + { + /// + /// The word or phrase to block from being used in the broadcaster’s chat room. The term must contain a minimum of 2 characters and may contain up to a maximum of 500 characters. + /// + /// Terms may include a wildcard character (\*). The wildcard character must appear at the beginning or end of a word or set of characters. For example, \*foo or foo\*. + /// + /// If the blocked term already exists, the response contains the existing blocked term. + /// + [global::Newtonsoft.Json.JsonProperty("text", Required = global::Newtonsoft.Json.Required.Always)] + public string Text { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermResponse.g.verified.cs new file mode 100644 index 0000000000..7bf85fb529 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AddBlockedTermResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.AddBlockedTermResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class AddBlockedTermResponse + { + /// + /// A list that contains the single blocked term that the broadcaster added. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModSettings.g.verified.cs new file mode 100644 index 0000000000..9dd566ed70 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModSettings.g.verified.cs @@ -0,0 +1,84 @@ +//HintName: G.Models.AutoModSettings.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class AutoModSettings + { + /// + /// The broadcaster’s ID. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The moderator’s ID. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// The default AutoMod level for the broadcaster. This field is **null** if the broadcaster has set one or more of the individual settings. + /// + [global::Newtonsoft.Json.JsonProperty("overall_level", Required = global::Newtonsoft.Json.Required.Always)] + public int? OverallLevel { get; set; } = default!; + + /// + /// The Automod level for discrimination against disability. + /// + [global::Newtonsoft.Json.JsonProperty("disability", Required = global::Newtonsoft.Json.Required.Always)] + public int Disability { get; set; } = default!; + + /// + /// The Automod level for hostility involving aggression. + /// + [global::Newtonsoft.Json.JsonProperty("aggression", Required = global::Newtonsoft.Json.Required.Always)] + public int Aggression { get; set; } = default!; + + /// + /// The AutoMod level for discrimination based on sexuality, sex, or gender. + /// + [global::Newtonsoft.Json.JsonProperty("sexuality_sex_or_gender", Required = global::Newtonsoft.Json.Required.Always)] + public int SexualitySexOrGender { get; set; } = default!; + + /// + /// The Automod level for discrimination against women. + /// + [global::Newtonsoft.Json.JsonProperty("misogyny", Required = global::Newtonsoft.Json.Required.Always)] + public int Misogyny { get; set; } = default!; + + /// + /// The Automod level for hostility involving name calling or insults. + /// + [global::Newtonsoft.Json.JsonProperty("bullying", Required = global::Newtonsoft.Json.Required.Always)] + public int Bullying { get; set; } = default!; + + /// + /// The Automod level for profanity. + /// + [global::Newtonsoft.Json.JsonProperty("swearing", Required = global::Newtonsoft.Json.Required.Always)] + public int Swearing { get; set; } = default!; + + /// + /// The Automod level for racial discrimination. + /// + [global::Newtonsoft.Json.JsonProperty("race_ethnicity_or_religion", Required = global::Newtonsoft.Json.Required.Always)] + public int RaceEthnicityOrReligion { get; set; } = default!; + + /// + /// The Automod level for sexual content. + /// + [global::Newtonsoft.Json.JsonProperty("sex_based_terms", Required = global::Newtonsoft.Json.Required.Always)] + public int SexBasedTerms { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModStatus.g.verified.cs new file mode 100644 index 0000000000..e53ee15c09 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.AutoModStatus.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.AutoModStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class AutoModStatus + { + /// + /// The caller-defined ID passed in the request. + /// + [global::Newtonsoft.Json.JsonProperty("msg_id", Required = global::Newtonsoft.Json.Required.Always)] + public string MsgId { get; set; } = default!; + + /// + /// A Boolean value that indicates whether Twitch would approve the message for chat or hold it for moderator review or block it from chat. Is **true** if Twitch would approve the message; otherwise, **false** if Twitch would hold the message for moderator review or block it from chat. + /// + [global::Newtonsoft.Json.JsonProperty("is_permitted", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsPermitted { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBody.g.verified.cs new file mode 100644 index 0000000000..2c3804b88a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBody.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.BanUserBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BanUserBody + { + /// + /// Identifies the user and type of ban. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public BanUserBodyData Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBodyData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBodyData.g.verified.cs new file mode 100644 index 0000000000..fe7c48abf1 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserBodyData.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.Models.BanUserBodyData.g.cs + +#nullable enable + +namespace G +{ + /// + /// Identifies the user and type of ban. + /// + public sealed partial class BanUserBodyData + { + /// + /// The ID of the user to ban or put in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// To ban a user indefinitely, don’t include this field. + /// + /// To put a user in a timeout, include this field and specify the timeout period, in seconds. The minimum timeout is 1 second and the maximum is 1,209,600 seconds (2 weeks). + /// + /// To end a user’s timeout early, set this field to 1, or use the [Unban user](https://dev.twitch.tv/docs/api/reference#unban-user) endpoint. + /// + [global::Newtonsoft.Json.JsonProperty("duration")] + public int Duration { get; set; } + + /// + /// The reason the you’re banning the user or putting them in a timeout. The text is user defined and is limited to a maximum of 500 characters. + /// + [global::Newtonsoft.Json.JsonProperty("reason")] + public string? Reason { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponse.g.verified.cs new file mode 100644 index 0000000000..e1de84030a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.BanUserResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BanUserResponse + { + /// + /// A list that contains the user you successfully banned or put in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponseData.g.verified.cs new file mode 100644 index 0000000000..034e54889f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BanUserResponseData.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.BanUserResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BanUserResponseData + { + /// + /// The broadcaster whose chat room the user was banned from chatting in. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The moderator that banned or put the user in the timeout. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// The user that was banned or put in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the ban or timeout was placed. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the timeout will end. Is **null** if the user was banned instead of being put in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("end_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime? EndTime { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BannedUser.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BannedUser.g.verified.cs new file mode 100644 index 0000000000..3c4334748b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BannedUser.g.verified.cs @@ -0,0 +1,72 @@ +//HintName: G.Models.BannedUser.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BannedUser + { + /// + /// The ID of the banned user. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The banned user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The banned user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the timeout expires, or an empty string if the user is permanently banned. + /// + [global::Newtonsoft.Json.JsonProperty("expires_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime ExpiresAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the user was banned. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// The reason the user was banned or put in a timeout if the moderator provided one. + /// + [global::Newtonsoft.Json.JsonProperty("reason", Required = global::Newtonsoft.Json.Required.Always)] + public string Reason { get; set; } = default!; + + /// + /// The ID of the moderator that banned the user or put them in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// The moderator’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_login", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorLogin { get; set; } = default!; + + /// + /// The moderator’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_name", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorName { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BitsLeaderboard.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BitsLeaderboard.g.verified.cs new file mode 100644 index 0000000000..022c942ca1 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BitsLeaderboard.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.BitsLeaderboard.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BitsLeaderboard + { + /// + /// An ID that identifies a user on the leaderboard. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The user’s position on the leaderboard. + /// + [global::Newtonsoft.Json.JsonProperty("rank", Required = global::Newtonsoft.Json.Required.Always)] + public int Rank { get; set; } = default!; + + /// + /// The number of Bits the user has cheered. + /// + [global::Newtonsoft.Json.JsonProperty("score", Required = global::Newtonsoft.Json.Required.Always)] + public int Score { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserReason.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserReason.g.verified.cs new file mode 100644 index 0000000000..c27f99e1ea --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserReason.g.verified.cs @@ -0,0 +1,29 @@ +//HintName: G.Models.BlockUserReason.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum BlockUserReason + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="harassment")] + Harassment, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="spam")] + Spam, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="other")] + Other, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserSourceContext.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserSourceContext.g.verified.cs new file mode 100644 index 0000000000..059d824fe8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockUserSourceContext.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.BlockUserSourceContext.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum BlockUserSourceContext + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="chat")] + Chat, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="whisper")] + Whisper, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockedTerm.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockedTerm.g.verified.cs new file mode 100644 index 0000000000..c611cb0989 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BlockedTerm.g.verified.cs @@ -0,0 +1,64 @@ +//HintName: G.Models.BlockedTerm.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BlockedTerm + { + /// + /// The broadcaster that owns the list of blocked terms. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The moderator that blocked the word or phrase from being used in the broadcaster’s chat room. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// An ID that identifies this blocked term. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The blocked word or phrase. + /// + [global::Newtonsoft.Json.JsonProperty("text", Required = global::Newtonsoft.Json.Required.Always)] + public string Text { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the term was blocked. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the term was updated. + /// + /// When the term is added, this timestamp is the same as `created_at`. The timestamp changes as AutoMod continues to deny the term. + /// + [global::Newtonsoft.Json.JsonProperty("updated_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime UpdatedAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the blocked term is set to expire. After the block expires, users may use the term in the broadcaster’s chat room. + /// + /// This field is **null** if the term was added manually or was permanently blocked by AutoMod. + /// + [global::Newtonsoft.Json.JsonProperty("expires_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime? ExpiresAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscription.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscription.g.verified.cs new file mode 100644 index 0000000000..0b03ed6cea --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscription.g.verified.cs @@ -0,0 +1,94 @@ +//HintName: G.Models.BroadcasterSubscription.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class BroadcasterSubscription + { + /// + /// An ID that identifies the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The ID of the user that gifted the subscription to the user. Is an empty string if `is_gift` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("gifter_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GifterId { get; set; } = default!; + + /// + /// The gifter’s login name. Is an empty string if `is_gift` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("gifter_login", Required = global::Newtonsoft.Json.Required.Always)] + public string GifterLogin { get; set; } = default!; + + /// + /// The gifter’s display name. Is an empty string if `is_gift` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("gifter_name", Required = global::Newtonsoft.Json.Required.Always)] + public string GifterName { get; set; } = default!; + + /// + /// A Boolean value that determines whether the subscription is a gift subscription. Is **true** if the subscription was gifted. + /// + [global::Newtonsoft.Json.JsonProperty("is_gift", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsGift { get; set; } = default!; + + /// + /// The name of the subscription. + /// + [global::Newtonsoft.Json.JsonProperty("plan_name", Required = global::Newtonsoft.Json.Required.Always)] + public string PlanName { get; set; } = default!; + + /// + /// The type of subscription. Possible values are: + /// + /// * 1000 — Tier 1 + /// * 2000 — Tier 2 + /// * 3000 — Tier 3 + /// + [global::Newtonsoft.Json.JsonProperty("tier", Required = global::Newtonsoft.Json.Required.Always)] + public BroadcasterSubscriptionTier Tier { get; set; } = default!; + + /// + /// An ID that identifies the subscribing user. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscriptionTier.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscriptionTier.g.verified.cs new file mode 100644 index 0000000000..071031db86 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.BroadcasterSubscriptionTier.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.BroadcasterSubscriptionTier.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of subscription. Possible values are: + /// + /// * 1000 — Tier 1 + /// * 2000 — Tier 2 + /// * 3000 — Tier 3 + /// + [global::System.Runtime.Serialization.DataContract] + public enum BroadcasterSubscriptionTier + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="1000")] + _1000, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="2000")] + _2000, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="3000")] + _3000, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Category.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Category.g.verified.cs new file mode 100644 index 0000000000..b27a74e8cd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Category.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.Category.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Category + { + /// + /// A URL to an image of the game’s box art or streaming category. + /// + [global::Newtonsoft.Json.JsonProperty("box_art_url", Required = global::Newtonsoft.Json.Required.Always)] + public string BoxArtUrl { get; set; } = default!; + + /// + /// The name of the game or category. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// An ID that uniquely identifies the game or category. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Channel.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Channel.g.verified.cs new file mode 100644 index 0000000000..837f908716 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Channel.g.verified.cs @@ -0,0 +1,92 @@ +//HintName: G.Models.Channel.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Channel + { + /// + /// The ISO 639-1 two-letter language code of the language used by the broadcaster. For example, _en_ for English. If the broadcaster uses a language not in the list of [supported stream languages](https://help.twitch.tv/s/article/languages-on-twitch#streamlang), the value is _other_. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_language", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLanguage { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("display_name", Required = global::Newtonsoft.Json.Required.Always)] + public string DisplayName { get; set; } = default!; + + /// + /// The ID of the game that the broadcaster is playing or last played. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The name of the game that the broadcaster is playing or last played. + /// + [global::Newtonsoft.Json.JsonProperty("game_name", Required = global::Newtonsoft.Json.Required.Always)] + public string GameName { get; set; } = default!; + + /// + /// An ID that uniquely identifies the channel (this is the broadcaster’s ID). + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster is streaming live. Is **true** if the broadcaster is streaming live; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_live", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsLive { get; set; } = default!; + + /// + /// **IMPORTANT** As of February 28, 2023, this field is deprecated and returns only an empty array. If you use this field, please update your code to use the `tags` field. + /// + /// The list of tags that apply to the stream. The list contains IDs only when the channel is steaming live. For a list of possible tags, see [List of All Tags](https://www.twitch.tv/directory/all/tags). The list doesn’t include Category Tags. + /// + [global::Newtonsoft.Json.JsonProperty("tag_ids", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList TagIds { get; set; } = default!; + + /// + /// The tags applied to the channel. + /// + [global::Newtonsoft.Json.JsonProperty("tags", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Tags { get; set; } = default!; + + /// + /// A URL to a thumbnail of the broadcaster’s profile image. + /// + [global::Newtonsoft.Json.JsonProperty("thumbnail_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ThumbnailUrl { get; set; } = default!; + + /// + /// The stream’s title. Is an empty string if the broadcaster didn’t set it. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the broadcaster started streaming. The string is empty if the broadcaster is not streaming live. + /// + [global::Newtonsoft.Json.JsonProperty("started_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEditor.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEditor.g.verified.cs new file mode 100644 index 0000000000..b6b019a238 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEditor.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.ChannelEditor.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChannelEditor + { + /// + /// An ID that uniquely identifies a user with editor permissions. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The date and time, in RFC3339 format, when the user became one of the broadcaster’s editors. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmote.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmote.g.verified.cs new file mode 100644 index 0000000000..e63fba626f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmote.g.verified.cs @@ -0,0 +1,88 @@ +//HintName: G.Models.ChannelEmote.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChannelEmote + { + /// + /// An ID that identifies this emote. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The name of the emote. This is the name that viewers type in the chat window to get the emote to appear. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. + /// + /// **NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs. + /// + [global::Newtonsoft.Json.JsonProperty("images", Required = global::Newtonsoft.Json.Required.Always)] + public ChannelEmoteImages Images { get; set; } = default!; + + /// + /// The subscriber tier at which the emote is unlocked. This field contains the tier information only if `emote_type` is set to `subscriptions`, otherwise, it's an empty string. + /// + [global::Newtonsoft.Json.JsonProperty("tier", Required = global::Newtonsoft.Json.Required.Always)] + public string Tier { get; set; } = default!; + + /// + /// The type of emote. The possible values are: + /// + /// * bitstier — A custom Bits tier emote. + /// * follower — A custom follower emote. + /// * subscriptions — A custom subscriber emote. + /// + [global::Newtonsoft.Json.JsonProperty("emote_type", Required = global::Newtonsoft.Json.Required.Always)] + public ChannelEmoteEmoteType EmoteType { get; set; } = default!; + + /// + /// An ID that identifies the emote set that the emote belongs to. + /// + [global::Newtonsoft.Json.JsonProperty("emote_set_id", Required = global::Newtonsoft.Json.Required.Always)] + public string EmoteSetId { get; set; } = default!; + + /// + /// The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only `static`. But if the emote is available as a static PNG and an animated GIF, the array contains `static` and `animated`. The possible formats are: + /// + /// * animated — An animated GIF is available for this emote. + /// * static — A static PNG file is available for this emote. + /// + [global::Newtonsoft.Json.JsonProperty("format", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Format { get; set; } = default!; + + /// + /// The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\. Possible sizes are: + /// + /// * 1.0 — A small version (28px x 28px) is available. + /// * 2.0 — A medium version (56px x 56px) is available. + /// * 3.0 — A large version (112px x 112px) is available. + /// + [global::Newtonsoft.Json.JsonProperty("scale", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Scale { get; set; } = default!; + + /// + /// The background themes that the emote is available in. Possible themes are: + /// + /// * dark + /// * light + /// + [global::Newtonsoft.Json.JsonProperty("theme_mode", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList ThemeMode { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteEmoteType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteEmoteType.g.verified.cs new file mode 100644 index 0000000000..a87a91e97e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteEmoteType.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.ChannelEmoteEmoteType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of emote. The possible values are: + /// + /// * bitstier — A custom Bits tier emote. + /// * follower — A custom follower emote. + /// * subscriptions — A custom subscriber emote. + /// + [global::System.Runtime.Serialization.DataContract] + public enum ChannelEmoteEmoteType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="bitstier")] + Bitstier, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="follower")] + Follower, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="subscriptions")] + Subscriptions, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteFormat.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteFormat.g.verified.cs new file mode 100644 index 0000000000..481d7ad011 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteFormat.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.ChannelEmoteFormat.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum ChannelEmoteFormat + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="animated")] + Animated, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="static")] + Static, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteImages.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteImages.g.verified.cs new file mode 100644 index 0000000000..98be6803d9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteImages.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.Models.ChannelEmoteImages.g.cs + +#nullable enable + +namespace G +{ + /// + /// The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. + /// + /// **NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs. + /// + public sealed partial class ChannelEmoteImages + { + /// + /// A URL to the small version (28px x 28px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_1x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url1x { get; set; } = default!; + + /// + /// A URL to the medium version (56px x 56px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_2x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url2x { get; set; } = default!; + + /// + /// A URL to the large version (112px x 112px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_4x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url4x { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteScale.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteScale.g.verified.cs new file mode 100644 index 0000000000..9ce83cac46 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteScale.g.verified.cs @@ -0,0 +1,29 @@ +//HintName: G.Models.ChannelEmoteScale.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum ChannelEmoteScale + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="1.0")] + _10, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="2.0")] + _20, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="3.0")] + _30, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteThemeMode.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteThemeMode.g.verified.cs new file mode 100644 index 0000000000..9acd7fcdfa --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelEmoteThemeMode.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.ChannelEmoteThemeMode.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum ChannelEmoteThemeMode + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="dark")] + Dark, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="light")] + Light, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelInformation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelInformation.g.verified.cs new file mode 100644 index 0000000000..7c9969a08e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelInformation.g.verified.cs @@ -0,0 +1,84 @@ +//HintName: G.Models.ChannelInformation.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChannelInformation + { + /// + /// An ID that uniquely identifies the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The broadcaster’s preferred language. The value is an ISO 639-1 two-letter language code (for example, _en_ for English). The value is set to “other” if the language is not a Twitch supported language. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_language", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLanguage { get; set; } = default!; + + /// + /// The name of the game that the broadcaster is playing or last played. The value is an empty string if the broadcaster has never played a game. + /// + [global::Newtonsoft.Json.JsonProperty("game_name", Required = global::Newtonsoft.Json.Required.Always)] + public string GameName { get; set; } = default!; + + /// + /// An ID that uniquely identifies the game that the broadcaster is playing or last played. The value is an empty string if the broadcaster has never played a game. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The title of the stream that the broadcaster is currently streaming or last streamed. The value is an empty string if the broadcaster has never streamed. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The value of the broadcaster’s stream delay setting, in seconds. This field’s value defaults to zero unless 1) the request specifies a user access token, 2) the ID in the _broadcaster\_id_ query parameter matches the user ID in the access token, and 3) the broadcaster has partner status and they set a non-zero stream delay value. + /// + [global::Newtonsoft.Json.JsonProperty("delay", Required = global::Newtonsoft.Json.Required.Always)] + public int Delay { get; set; } = default!; + + /// + /// The tags applied to the channel. + /// + [global::Newtonsoft.Json.JsonProperty("tags", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Tags { get; set; } = default!; + + /// + /// The CCLs applied to the channel. + /// + [global::Newtonsoft.Json.JsonProperty("content_classification_labels", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList ContentClassificationLabels { get; set; } = default!; + + /// + /// Boolean flag indicating if the channel has branded content. + /// + [global::Newtonsoft.Json.JsonProperty("is_branded_content", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsBrandedContent { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegment.g.verified.cs new file mode 100644 index 0000000000..270c5d2bbc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegment.g.verified.cs @@ -0,0 +1,60 @@ +//HintName: G.Models.ChannelStreamScheduleSegment.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChannelStreamScheduleSegment + { + /// + /// An ID that identifies this broadcast segment. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the broadcast starts. + /// + [global::Newtonsoft.Json.JsonProperty("start_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartTime { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the broadcast ends. + /// + [global::Newtonsoft.Json.JsonProperty("end_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndTime { get; set; } = default!; + + /// + /// The broadcast segment’s title. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// Indicates whether the broadcaster canceled this segment of a recurring broadcast. If the broadcaster canceled this segment, this field is set to the same value that’s in the `end_time` field; otherwise, it’s set to **null**. + /// + [global::Newtonsoft.Json.JsonProperty("canceled_until", Required = global::Newtonsoft.Json.Required.Always)] + public string? CanceledUntil { get; set; } = default!; + + /// + /// The type of content that the broadcaster plans to stream or **null** if not specified. + /// + [global::Newtonsoft.Json.JsonProperty("category", Required = global::Newtonsoft.Json.Required.Always)] + public ChannelStreamScheduleSegmentCategory Category { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcast is part of a recurring series that streams at the same time each week or is a one-time broadcast. Is **true** if the broadcast is part of a recurring series. + /// + [global::Newtonsoft.Json.JsonProperty("is_recurring", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsRecurring { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegmentCategory.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegmentCategory.g.verified.cs new file mode 100644 index 0000000000..bbd85c3bbd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelStreamScheduleSegmentCategory.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ChannelStreamScheduleSegmentCategory.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of content that the broadcaster plans to stream or **null** if not specified. + /// + public sealed partial class ChannelStreamScheduleSegmentCategory + { + /// + /// An ID that identifies the category that best represents the content that the broadcaster plans to stream. For example, the game’s ID if the broadcaster will play a game or the Just Chatting ID if the broadcaster will host a talk show. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The name of the category. For example, the game’s title if the broadcaster will play a game or Just Chatting if the broadcaster will host a talk show. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelTeam.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelTeam.g.verified.cs new file mode 100644 index 0000000000..eb9604267f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChannelTeam.g.verified.cs @@ -0,0 +1,90 @@ +//HintName: G.Models.ChannelTeam.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChannelTeam + { + /// + /// An ID that identifies the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// A URL to the team’s background image. + /// + [global::Newtonsoft.Json.JsonProperty("background_image_url", Required = global::Newtonsoft.Json.Required.Always)] + public string BackgroundImageUrl { get; set; } = default!; + + /// + /// A URL to the team’s banner. + /// + [global::Newtonsoft.Json.JsonProperty("banner", Required = global::Newtonsoft.Json.Required.Always)] + public string Banner { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the team was created. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of the last time the team was updated. + /// + [global::Newtonsoft.Json.JsonProperty("updated_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime UpdatedAt { get; set; } = default!; + + /// + /// The team’s description. The description may contain formatting such as Markdown, HTML, newline (\\n) characters, etc. + /// + [global::Newtonsoft.Json.JsonProperty("info", Required = global::Newtonsoft.Json.Required.Always)] + public string Info { get; set; } = default!; + + /// + /// A URL to a thumbnail image of the team’s logo. + /// + [global::Newtonsoft.Json.JsonProperty("thumbnail_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ThumbnailUrl { get; set; } = default!; + + /// + /// The team’s name. + /// + [global::Newtonsoft.Json.JsonProperty("team_name", Required = global::Newtonsoft.Json.Required.Always)] + public string TeamName { get; set; } = default!; + + /// + /// The team’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("team_display_name", Required = global::Newtonsoft.Json.Required.Always)] + public string TeamDisplayName { get; set; } = default!; + + /// + /// An ID that identifies the team. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaign.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaign.g.verified.cs new file mode 100644 index 0000000000..fef91ca2db --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaign.g.verified.cs @@ -0,0 +1,78 @@ +//HintName: G.Models.CharityCampaign.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CharityCampaign + { + /// + /// An ID that identifies the charity campaign. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// An ID that identifies the broadcaster that’s running the campaign. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The charity’s name. + /// + [global::Newtonsoft.Json.JsonProperty("charity_name", Required = global::Newtonsoft.Json.Required.Always)] + public string CharityName { get; set; } = default!; + + /// + /// A description of the charity. + /// + [global::Newtonsoft.Json.JsonProperty("charity_description", Required = global::Newtonsoft.Json.Required.Always)] + public string CharityDescription { get; set; } = default!; + + /// + /// A URL to an image of the charity’s logo. The image’s type is PNG and its size is 100px X 100px. + /// + [global::Newtonsoft.Json.JsonProperty("charity_logo", Required = global::Newtonsoft.Json.Required.Always)] + public string CharityLogo { get; set; } = default!; + + /// + /// A URL to the charity’s website. + /// + [global::Newtonsoft.Json.JsonProperty("charity_website", Required = global::Newtonsoft.Json.Required.Always)] + public string CharityWebsite { get; set; } = default!; + + /// + /// The current amount of donations that the campaign has received. + /// + [global::Newtonsoft.Json.JsonProperty("current_amount", Required = global::Newtonsoft.Json.Required.Always)] + public CharityCampaignCurrentAmount CurrentAmount { get; set; } = default!; + + /// + /// The campaign’s fundraising goal. This field is **null** if the broadcaster has not defined a fundraising goal. + /// + [global::Newtonsoft.Json.JsonProperty("target_amount", Required = global::Newtonsoft.Json.Required.Always)] + public CharityCampaignTargetAmount TargetAmount { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignCurrentAmount.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignCurrentAmount.g.verified.cs new file mode 100644 index 0000000000..bdee64a70a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignCurrentAmount.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.Models.CharityCampaignCurrentAmount.g.cs + +#nullable enable + +namespace G +{ + /// + /// The current amount of donations that the campaign has received. + /// + public sealed partial class CharityCampaignCurrentAmount + { + /// + /// The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550. + /// + [global::Newtonsoft.Json.JsonProperty("value", Required = global::Newtonsoft.Json.Required.Always)] + public int Value { get; set; } = default!; + + /// + /// The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: + /// + /// `value / 10^decimal_places` + /// + [global::Newtonsoft.Json.JsonProperty("decimal_places", Required = global::Newtonsoft.Json.Required.Always)] + public int DecimalPlaces { get; set; } = default!; + + /// + /// The ISO-4217 three-letter currency code that identifies the type of currency in `value`. + /// + [global::Newtonsoft.Json.JsonProperty("currency", Required = global::Newtonsoft.Json.Required.Always)] + public string Currency { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonation.g.verified.cs new file mode 100644 index 0000000000..538038f5e4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonation.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.CharityCampaignDonation.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CharityCampaignDonation + { + /// + /// An ID that identifies the donation. The ID is unique across campaigns. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// An ID that identifies the charity campaign that the donation applies to. + /// + [global::Newtonsoft.Json.JsonProperty("campaign_id", Required = global::Newtonsoft.Json.Required.Always)] + public string CampaignId { get; set; } = default!; + + /// + /// An ID that identifies a user that donated money to the campaign. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// An object that contains the amount of money that the user donated. + /// + [global::Newtonsoft.Json.JsonProperty("amount", Required = global::Newtonsoft.Json.Required.Always)] + public CharityCampaignDonationAmount Amount { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonationAmount.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonationAmount.g.verified.cs new file mode 100644 index 0000000000..d581f8cd78 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignDonationAmount.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.Models.CharityCampaignDonationAmount.g.cs + +#nullable enable + +namespace G +{ + /// + /// An object that contains the amount of money that the user donated. + /// + public sealed partial class CharityCampaignDonationAmount + { + /// + /// The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550. + /// + [global::Newtonsoft.Json.JsonProperty("value", Required = global::Newtonsoft.Json.Required.Always)] + public int Value { get; set; } = default!; + + /// + /// The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: + /// + /// `value / 10^decimal_places` + /// + [global::Newtonsoft.Json.JsonProperty("decimal_places", Required = global::Newtonsoft.Json.Required.Always)] + public int DecimalPlaces { get; set; } = default!; + + /// + /// The ISO-4217 three-letter currency code that identifies the type of currency in `value`. + /// + [global::Newtonsoft.Json.JsonProperty("currency", Required = global::Newtonsoft.Json.Required.Always)] + public string Currency { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignTargetAmount.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignTargetAmount.g.verified.cs new file mode 100644 index 0000000000..d1a7cd0c02 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CharityCampaignTargetAmount.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.Models.CharityCampaignTargetAmount.g.cs + +#nullable enable + +namespace G +{ + /// + /// The campaign’s fundraising goal. This field is **null** if the broadcaster has not defined a fundraising goal. + /// + public sealed partial class CharityCampaignTargetAmount + { + /// + /// The monetary amount. The amount is specified in the currency’s minor unit. For example, the minor units for USD is cents, so if the amount is $5.50 USD, `value` is set to 550. + /// + [global::Newtonsoft.Json.JsonProperty("value", Required = global::Newtonsoft.Json.Required.Always)] + public int Value { get; set; } = default!; + + /// + /// The number of decimal places used by the currency. For example, USD uses two decimal places. Use this number to translate `value` from minor units to major units by using the formula: + /// + /// `value / 10^decimal_places` + /// + [global::Newtonsoft.Json.JsonProperty("decimal_places", Required = global::Newtonsoft.Json.Required.Always)] + public int DecimalPlaces { get; set; } = default!; + + /// + /// The ISO-4217 three-letter currency code that identifies the type of currency in `value`. + /// + [global::Newtonsoft.Json.JsonProperty("currency", Required = global::Newtonsoft.Json.Required.Always)] + public string Currency { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadge.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadge.g.verified.cs new file mode 100644 index 0000000000..53d9f27516 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadge.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ChatBadge.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChatBadge + { + /// + /// An ID that identifies this set of chat badges. For example, Bits or Subscriber. + /// + [global::Newtonsoft.Json.JsonProperty("set_id", Required = global::Newtonsoft.Json.Required.Always)] + public string SetId { get; set; } = default!; + + /// + /// The list of chat badges in this set. + /// + [global::Newtonsoft.Json.JsonProperty("versions", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Versions { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadgeVersions.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadgeVersions.g.verified.cs new file mode 100644 index 0000000000..92dabf235d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatBadgeVersions.g.verified.cs @@ -0,0 +1,66 @@ +//HintName: G.Models.ChatBadgeVersions.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChatBadgeVersions + { + /// + /// An ID that identifies this version of the badge. The ID can be any value. For example, for Bits, the ID is the Bits tier level, but for World of Warcraft, it could be Alliance or Horde. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// A URL to the small version (18px x 18px) of the badge. + /// + [global::Newtonsoft.Json.JsonProperty("image_url_1x", Required = global::Newtonsoft.Json.Required.Always)] + public string ImageUrl1x { get; set; } = default!; + + /// + /// A URL to the medium version (36px x 36px) of the badge. + /// + [global::Newtonsoft.Json.JsonProperty("image_url_2x", Required = global::Newtonsoft.Json.Required.Always)] + public string ImageUrl2x { get; set; } = default!; + + /// + /// A URL to the large version (72px x 72px) of the badge. + /// + [global::Newtonsoft.Json.JsonProperty("image_url_4x", Required = global::Newtonsoft.Json.Required.Always)] + public string ImageUrl4x { get; set; } = default!; + + /// + /// The title of the badge. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The description of the badge. + /// + [global::Newtonsoft.Json.JsonProperty("description", Required = global::Newtonsoft.Json.Required.Always)] + public string Description { get; set; } = default!; + + /// + /// The action to take when clicking on the badge. Set to `null` if no action is specified. + /// + [global::Newtonsoft.Json.JsonProperty("click_action", Required = global::Newtonsoft.Json.Required.Always)] + public string ClickAction { get; set; } = default!; + + /// + /// The URL to navigate to when clicking on the badge. Set to `null` if no URL is specified. + /// + [global::Newtonsoft.Json.JsonProperty("click_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ClickUrl { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettings.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettings.g.verified.cs new file mode 100644 index 0000000000..15fd98a389 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettings.g.verified.cs @@ -0,0 +1,102 @@ +//HintName: G.Models.ChatSettings.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChatSettings + { + /// + /// The ID of the broadcaster specified in the request. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// A Boolean value that determines whether chat messages must contain only emotes. Is **true** if chat messages may contain only emotes; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("emote_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool EmoteMode { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster restricts the chat room to followers only. + /// + /// Is **true** if the broadcaster restricts the chat room to followers only; otherwise, **false**. + /// + /// See the `follower_mode_duration` field for how long users must follow the broadcaster before being able to participate in the chat room. + /// + [global::Newtonsoft.Json.JsonProperty("follower_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool FollowerMode { get; set; } = default!; + + /// + /// The length of time, in minutes, that users must follow the broadcaster before being able to participate in the chat room. Is **null** if `follower_mode` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("follower_mode_duration", Required = global::Newtonsoft.Json.Required.Always)] + public int? FollowerModeDuration { get; set; } = default!; + + /// + /// The moderator’s ID. The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\_settings** scope. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id")] + public string? ModeratorId { get; set; } + + /// + /// A Boolean value that determines whether the broadcaster adds a short delay before chat messages appear in the chat room. This gives chat moderators and bots a chance to remove them before viewers can see the message. See the `non_moderator_chat_delay_duration` field for the length of the delay. Is **true** if the broadcaster applies a delay; otherwise, **false**. + /// + /// The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\_settings** scope and the user in the _moderator\_id_ query parameter is one of the broadcaster’s moderators. + /// + [global::Newtonsoft.Json.JsonProperty("non_moderator_chat_delay")] + public bool NonModeratorChatDelay { get; set; } + + /// + /// The amount of time, in seconds, that messages are delayed before appearing in chat. Is **null** if `non_moderator_chat_delay` is **false**. + /// + /// The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\_settings** scope and the user in the _moderator\_id_ query parameter is one of the broadcaster’s moderators. + /// + [global::Newtonsoft.Json.JsonProperty("non_moderator_chat_delay_duration")] + public int? NonModeratorChatDelayDuration { get; set; } + + /// + /// A Boolean value that determines whether the broadcaster limits how often users in the chat room are allowed to send messages. + /// + /// Is **true** if the broadcaster applies a delay; otherwise, **false**. + /// + /// See the `slow_mode_wait_time` field for the delay. + /// + [global::Newtonsoft.Json.JsonProperty("slow_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool SlowMode { get; set; } = default!; + + /// + /// The amount of time, in seconds, that users must wait between sending messages. + /// + /// Is **null** if slow\_mode is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("slow_mode_wait_time", Required = global::Newtonsoft.Json.Required.Always)] + public int? SlowModeWaitTime { get; set; } = default!; + + /// + /// A Boolean value that determines whether only users that subscribe to the broadcaster’s channel may talk in the chat room. + /// + /// Is **true** if the broadcaster restricts the chat room to subscribers only; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("subscriber_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool SubscriberMode { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster requires users to post only unique messages in the chat room. + /// + /// Is **true** if the broadcaster requires unique messages only; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("unique_chat_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool UniqueChatMode { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettingsUpdated.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettingsUpdated.g.verified.cs new file mode 100644 index 0000000000..d3658f6f9c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ChatSettingsUpdated.g.verified.cs @@ -0,0 +1,98 @@ +//HintName: G.Models.ChatSettingsUpdated.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ChatSettingsUpdated + { + /// + /// The ID of the broadcaster specified in the request. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// A Boolean value that determines whether chat messages must contain only emotes. Is **true** if chat messages may contain only emotes; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("emote_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool EmoteMode { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster restricts the chat room to followers only. + /// + /// Is **true** if the broadcaster restricts the chat room to followers only; otherwise, **false**. + /// + /// See the `follower_mode_duration` field for how long users must follow the broadcaster before being able to participate in the chat room. + /// + [global::Newtonsoft.Json.JsonProperty("follower_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool FollowerMode { get; set; } = default!; + + /// + /// The length of time, in minutes, that users must follow the broadcaster before being able to participate in the chat room. Is **null** if `follower_mode` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("follower_mode_duration", Required = global::Newtonsoft.Json.Required.Always)] + public int? FollowerModeDuration { get; set; } = default!; + + /// + /// The moderator’s ID. The response includes this field only if the request specifies a user access token that includes the **moderator:read:chat\_settings** scope. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id")] + public string? ModeratorId { get; set; } + + /// + /// A Boolean value that determines whether the broadcaster adds a short delay before chat messages appear in the chat room. This gives chat moderators and bots a chance to remove them before viewers can see the message. See the `non_moderator_chat_delay_duration` field for the length of the delay. Is **true** if the broadcaster applies a delay; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("non_moderator_chat_delay", Required = global::Newtonsoft.Json.Required.Always)] + public bool NonModeratorChatDelay { get; set; } = default!; + + /// + /// The amount of time, in seconds, that messages are delayed before appearing in chat. Is **null** if `non_moderator_chat_delay` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("non_moderator_chat_delay_duration", Required = global::Newtonsoft.Json.Required.Always)] + public int? NonModeratorChatDelayDuration { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster limits how often users in the chat room are allowed to send messages. + /// + /// Is **true** if the broadcaster applies a delay; otherwise, **false**. + /// + /// See the `slow_mode_wait_time` field for the delay. + /// + [global::Newtonsoft.Json.JsonProperty("slow_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool SlowMode { get; set; } = default!; + + /// + /// The amount of time, in seconds, that users must wait between sending messages. + /// + /// Is **null** if slow\_mode is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("slow_mode_wait_time", Required = global::Newtonsoft.Json.Required.Always)] + public int? SlowModeWaitTime { get; set; } = default!; + + /// + /// A Boolean value that determines whether only users that subscribe to the broadcaster’s channel may talk in the chat room. + /// + /// Is **true** if the broadcaster restricts the chat room to subscribers only; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("subscriber_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool SubscriberMode { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcaster requires users to post only unique messages in the chat room. + /// + /// Is **true** if the broadcaster requires unique messages only; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("unique_chat_mode", Required = global::Newtonsoft.Json.Required.Always)] + public bool UniqueChatMode { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Chatter.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Chatter.g.verified.cs new file mode 100644 index 0000000000..6836563157 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Chatter.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.Chatter.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Chatter + { + /// + /// The ID of a user that’s connected to the broadcaster’s chat room. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBody.g.verified.cs new file mode 100644 index 0000000000..c0a18e9830 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBody.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CheckAutoModStatusBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheckAutoModStatusBody + { + /// + /// The list of messages to check. The list must contain at least one message and may contain up to a maximum of 100 messages. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBodyData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBodyData.g.verified.cs new file mode 100644 index 0000000000..1035e9a978 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusBodyData.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CheckAutoModStatusBodyData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheckAutoModStatusBodyData + { + /// + /// A caller-defined ID used to correlate this message with the same message in the response. + /// + [global::Newtonsoft.Json.JsonProperty("msg_id", Required = global::Newtonsoft.Json.Required.Always)] + public string MsgId { get; set; } = default!; + + /// + /// The message to check. + /// + [global::Newtonsoft.Json.JsonProperty("msg_text", Required = global::Newtonsoft.Json.Required.Always)] + public string MsgText { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusResponse.g.verified.cs new file mode 100644 index 0000000000..211738e14e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckAutoModStatusResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CheckAutoModStatusResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheckAutoModStatusResponse + { + /// + /// The list of messages and whether Twitch would approve them for chat. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckUserSubscriptionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckUserSubscriptionResponse.g.verified.cs new file mode 100644 index 0000000000..e3536d8bfb --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheckUserSubscriptionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CheckUserSubscriptionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheckUserSubscriptionResponse + { + /// + /// A list that contains a single object with information about the user’s subscription. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Cheermote.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Cheermote.g.verified.cs new file mode 100644 index 0000000000..72fed2de51 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Cheermote.g.verified.cs @@ -0,0 +1,60 @@ +//HintName: G.Models.Cheermote.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Cheermote + { + /// + /// The name portion of the Cheermote string that you use in chat to cheer Bits. The full Cheermote string is the concatenation of {prefix} + {number of Bits}. For example, if the prefix is “Cheer” and you want to cheer 100 Bits, the full Cheermote string is Cheer100\. When the Cheermote string is entered in chat, Twitch converts it to the image associated with the Bits tier that was cheered. + /// + [global::Newtonsoft.Json.JsonProperty("prefix", Required = global::Newtonsoft.Json.Required.Always)] + public string Prefix { get; set; } = default!; + + /// + /// A list of tier levels that the Cheermote supports. Each tier identifies the range of Bits that you can cheer at that tier level and an image that graphically identifies the tier level. + /// + [global::Newtonsoft.Json.JsonProperty("tiers", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Tiers { get; set; } = default!; + + /// + /// The type of Cheermote. Possible values are: + /// + /// * global\_first\_party — A Twitch-defined Cheermote that is shown in the Bits card. + /// * global\_third\_party — A Twitch-defined Cheermote that is not shown in the Bits card. + /// * channel\_custom — A broadcaster-defined Cheermote. + /// * display\_only — Do not use; for internal use only. + /// * sponsored — A sponsor-defined Cheermote. When used, the sponsor adds additional Bits to the amount that the user cheered. For example, if the user cheered Terminator100, the broadcaster might receive 110 Bits, which includes the sponsor's 10 Bits contribution. + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public CheermoteType Type { get; set; } = default!; + + /// + /// The order that the Cheermotes are shown in the Bits card. The numbers may not be consecutive. For example, the numbers may jump from 1 to 7 to 13\. The order numbers are unique within a Cheermote type (for example, global\_first\_party) but may not be unique amongst all Cheermotes in the response. + /// + [global::Newtonsoft.Json.JsonProperty("order", Required = global::Newtonsoft.Json.Required.Always)] + public int Order { get; set; } = default!; + + /// + /// The date and time, in RFC3339 format, when this Cheermote was last updated. + /// + [global::Newtonsoft.Json.JsonProperty("last_updated", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime LastUpdated { get; set; } = default!; + + /// + /// A Boolean value that indicates whether this Cheermote provides a charitable contribution match during charity campaigns. + /// + [global::Newtonsoft.Json.JsonProperty("is_charitable", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsCharitable { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageFormat.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageFormat.g.verified.cs new file mode 100644 index 0000000000..98e6157a35 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageFormat.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.CheermoteImageFormat.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheermoteImageFormat + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("1")] + public string? _1 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("2")] + public string? _2 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("3")] + public string? _3 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("4")] + public string? _4 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("1.5")] + public string? _1_5 { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageTheme.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageTheme.g.verified.cs new file mode 100644 index 0000000000..981e26cfe8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImageTheme.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CheermoteImageTheme.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheermoteImageTheme + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("animated")] + public CheermoteImageFormat? Animated { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("static")] + public CheermoteImageFormat? Static { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImages.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImages.g.verified.cs new file mode 100644 index 0000000000..e195555ff7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteImages.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CheermoteImages.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheermoteImages + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("light")] + public CheermoteImageTheme? Light { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("dark")] + public CheermoteImageTheme? Dark { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiers.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiers.g.verified.cs new file mode 100644 index 0000000000..501a961005 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiers.g.verified.cs @@ -0,0 +1,62 @@ +//HintName: G.Models.CheermoteTiers.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CheermoteTiers + { + /// + /// The minimum number of Bits that you must cheer at this tier level. The maximum number of Bits that you can cheer at this level is determined by the required minimum Bits of the next tier level minus 1\. For example, if `min_bits` is 1 and `min_bits` for the next tier is 100, the Bits range for this tier level is 1 through 99\. The minimum Bits value of the last tier is the maximum number of Bits you can cheer using this Cheermote. For example, 10000. + /// + [global::Newtonsoft.Json.JsonProperty("min_bits", Required = global::Newtonsoft.Json.Required.Always)] + public int MinBits { get; set; } = default!; + + /// + /// The tier level. Possible tiers are: + /// + /// * 1 + /// * 100 + /// * 500 + /// * 1000 + /// * 5000 + /// * 10000 + /// * 100000 + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public CheermoteTiersId Id { get; set; } = default!; + + /// + /// The hex code of the color associated with this tier level (for example, #979797). + /// + [global::Newtonsoft.Json.JsonProperty("color", Required = global::Newtonsoft.Json.Required.Always)] + public string Color { get; set; } = default!; + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("images", Required = global::Newtonsoft.Json.Required.Always)] + public CheermoteImages Images { get; set; } = default!; + + /// + /// A Boolean value that determines whether users can cheer at this tier level. + /// + [global::Newtonsoft.Json.JsonProperty("can_cheer", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanCheer { get; set; } = default!; + + /// + /// A Boolean value that determines whether this tier level is shown in the Bits card. Is **true** if this tier level is shown in the Bits card. + /// + [global::Newtonsoft.Json.JsonProperty("show_in_bits_card", Required = global::Newtonsoft.Json.Required.Always)] + public bool ShowInBitsCard { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiersId.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiersId.g.verified.cs new file mode 100644 index 0000000000..5e3ff0da7e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteTiersId.g.verified.cs @@ -0,0 +1,57 @@ +//HintName: G.Models.CheermoteTiersId.g.cs + +#nullable enable + +namespace G +{ + /// + /// The tier level. Possible tiers are: + /// + /// * 1 + /// * 100 + /// * 500 + /// * 1000 + /// * 5000 + /// * 10000 + /// * 100000 + /// + [global::System.Runtime.Serialization.DataContract] + public enum CheermoteTiersId + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="1")] + _1, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="100")] + _100, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="500")] + _500, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="1000")] + _1000, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="5000")] + _5000, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="10000")] + _10000, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="100000")] + _100000, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteType.g.verified.cs new file mode 100644 index 0000000000..e74268dd99 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CheermoteType.g.verified.cs @@ -0,0 +1,45 @@ +//HintName: G.Models.CheermoteType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of Cheermote. Possible values are: + /// + /// * global\_first\_party — A Twitch-defined Cheermote that is shown in the Bits card. + /// * global\_third\_party — A Twitch-defined Cheermote that is not shown in the Bits card. + /// * channel\_custom — A broadcaster-defined Cheermote. + /// * display\_only — Do not use; for internal use only. + /// * sponsored — A sponsor-defined Cheermote. When used, the sponsor adds additional Bits to the amount that the user cheered. For example, if the user cheered Terminator100, the broadcaster might receive 110 Bits, which includes the sponsor's 10 Bits contribution. + /// + [global::System.Runtime.Serialization.DataContract] + public enum CheermoteType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="global_first_party")] + GlobalFirstParty, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="global_third_party")] + GlobalThirdParty, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel_custom")] + ChannelCustom, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="display_only")] + DisplayOnly, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="sponsored")] + Sponsored, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Clip.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Clip.g.verified.cs new file mode 100644 index 0000000000..dcbb906627 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Clip.g.verified.cs @@ -0,0 +1,122 @@ +//HintName: G.Models.Clip.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Clip + { + /// + /// An ID that uniquely identifies the clip. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// A URL to the clip. + /// + [global::Newtonsoft.Json.JsonProperty("url", Required = global::Newtonsoft.Json.Required.Always)] + public string Url { get; set; } = default!; + + /// + /// A URL that you can use in an iframe to embed the clip (see [Embedding Video and Clips](https://dev.twitch.tv/docs/embed/video-and-clips)). + /// + [global::Newtonsoft.Json.JsonProperty("embed_url", Required = global::Newtonsoft.Json.Required.Always)] + public string EmbedUrl { get; set; } = default!; + + /// + /// An ID that identifies the broadcaster that the video was clipped from. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// An ID that identifies the user that created the clip. + /// + [global::Newtonsoft.Json.JsonProperty("creator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string CreatorId { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("creator_name", Required = global::Newtonsoft.Json.Required.Always)] + public string CreatorName { get; set; } = default!; + + /// + /// An ID that identifies the video that the clip came from. This field contains an empty string if the video is not available. + /// + [global::Newtonsoft.Json.JsonProperty("video_id", Required = global::Newtonsoft.Json.Required.Always)] + public string VideoId { get; set; } = default!; + + /// + /// The ID of the game that was being played when the clip was created. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The ISO 639-1 two-letter language code that the broadcaster broadcasts in. For example, _en_ for English. The value is _other_ if the broadcaster uses a language that Twitch doesn’t support. + /// + [global::Newtonsoft.Json.JsonProperty("language", Required = global::Newtonsoft.Json.Required.Always)] + public string Language { get; set; } = default!; + + /// + /// The title of the clip. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The number of times the clip has been viewed. + /// + [global::Newtonsoft.Json.JsonProperty("view_count", Required = global::Newtonsoft.Json.Required.Always)] + public int ViewCount { get; set; } = default!; + + /// + /// The date and time of when the clip was created. The date and time is in RFC3339 format. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// A URL to a thumbnail image of the clip. + /// + [global::Newtonsoft.Json.JsonProperty("thumbnail_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ThumbnailUrl { get; set; } = default!; + + /// + /// The length of the clip, in seconds. Precision is 0.1. + /// + [global::Newtonsoft.Json.JsonProperty("duration", Required = global::Newtonsoft.Json.Required.Always)] + public float Duration { get; set; } = default!; + + /// + /// The zero-based offset, in seconds, to where the clip starts in the video (VOD). Is **null** if the video is not available or hasn’t been created yet from the live stream (see `video_id`). + /// + /// Note that there’s a delay between when a clip is created during a broadcast and when the offset is set. During the delay period, `vod_offset` is **null**. The delay is indeterminant but is typically minutes long. + /// + [global::Newtonsoft.Json.JsonProperty("vod_offset", Required = global::Newtonsoft.Json.Required.Always)] + public int? VodOffset { get; set; } = default!; + + /// + /// A Boolean value that indicates if the clip is featured or not. + /// + [global::Newtonsoft.Json.JsonProperty("is_featured", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsFeatured { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ContentClassificationLabel.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ContentClassificationLabel.g.verified.cs new file mode 100644 index 0000000000..e5ad061e1b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ContentClassificationLabel.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.ContentClassificationLabel.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ContentClassificationLabel + { + /// + /// Unique identifier for the CCL. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Localized description of the CCL. + /// + [global::Newtonsoft.Json.JsonProperty("description", Required = global::Newtonsoft.Json.Required.Always)] + public string Description { get; set; } = default!; + + /// + /// Localized name of the CCL. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentBody.g.verified.cs new file mode 100644 index 0000000000..fb9a27f7db --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentBody.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.CreateChannelStreamScheduleSegmentBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateChannelStreamScheduleSegmentBody + { + /// + /// The date and time that the broadcast segment starts. Specify the date and time in RFC3339 format (for example, 2021-07-01T18:00:00Z). + /// + [global::Newtonsoft.Json.JsonProperty("start_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartTime { get; set; } = default!; + + /// + /// The time zone where the broadcast takes place. Specify the time zone using [IANA time zone database](https://www.iana.org/time-zones) format (for example, America/New\_York). + /// + [global::Newtonsoft.Json.JsonProperty("timezone", Required = global::Newtonsoft.Json.Required.Always)] + public string Timezone { get; set; } = default!; + + /// + /// The length of time, in minutes, that the broadcast is scheduled to run. The duration must be in the range 30 through 1380 (23 hours). + /// + [global::Newtonsoft.Json.JsonProperty("duration", Required = global::Newtonsoft.Json.Required.Always)] + public string Duration { get; set; } = default!; + + /// + /// A Boolean value that determines whether the broadcast recurs weekly. Is **true** if the broadcast recurs weekly. Only partners and affiliates may add non-recurring broadcasts. + /// + [global::Newtonsoft.Json.JsonProperty("is_recurring")] + public bool IsRecurring { get; set; } + + /// + /// The ID of the category that best represents the broadcast’s content. To get the category ID, use the [Search Categories](https://dev.twitch.tv/docs/api/reference#search-categories) endpoint. + /// + [global::Newtonsoft.Json.JsonProperty("category_id")] + public string? CategoryId { get; set; } + + /// + /// The broadcast’s title. The title may contain a maximum of 140 characters. + /// + [global::Newtonsoft.Json.JsonProperty("title")] + public string? Title { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponse.g.verified.cs new file mode 100644 index 0000000000..94d60e7c68 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateChannelStreamScheduleSegmentResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateChannelStreamScheduleSegmentResponse + { + /// + /// The broadcaster’s streaming scheduled. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public CreateChannelStreamScheduleSegmentResponseData Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseData.g.verified.cs new file mode 100644 index 0000000000..79446cbd3b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseData.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.CreateChannelStreamScheduleSegmentResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// The broadcaster’s streaming scheduled. + /// + public sealed partial class CreateChannelStreamScheduleSegmentResponseData + { + /// + /// A list that contains the single broadcast segment that you added. + /// + [global::Newtonsoft.Json.JsonProperty("segments", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Segments { get; set; } = default!; + + /// + /// The ID of the broadcaster that owns the broadcast schedule. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled. + /// + [global::Newtonsoft.Json.JsonProperty("vacation", Required = global::Newtonsoft.Json.Required.Always)] + public CreateChannelStreamScheduleSegmentResponseDataVacation Vacation { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs new file mode 100644 index 0000000000..5b0fd4c126 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CreateChannelStreamScheduleSegmentResponseDataVacation.g.cs + +#nullable enable + +namespace G +{ + /// + /// The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled. + /// + public sealed partial class CreateChannelStreamScheduleSegmentResponseDataVacation + { + /// + /// The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation starts. + /// + [global::Newtonsoft.Json.JsonProperty("start_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartTime { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation ends. + /// + [global::Newtonsoft.Json.JsonProperty("end_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndTime { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponse.g.verified.cs new file mode 100644 index 0000000000..900f7c2479 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateClipResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateClipResponse + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponseData.g.verified.cs new file mode 100644 index 0000000000..7f78669c55 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateClipResponseData.g.verified.cs @@ -0,0 +1,32 @@ +//HintName: G.Models.CreateClipResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateClipResponseData + { + /// + /// A URL that you can use to edit the clip’s title, identify the part of the clip to publish, and publish the clip. [Learn More](https://help.twitch.tv/s/article/how-to-use-clips) + /// + /// The URL is valid for up to 24 hours or until the clip is published, whichever comes first. + /// + [global::Newtonsoft.Json.JsonProperty("edit_url", Required = global::Newtonsoft.Json.Required.Always)] + public string EditUrl { get; set; } = default!; + + /// + /// An ID that uniquely identifies the clip. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsBody.g.verified.cs new file mode 100644 index 0000000000..d7797bbff2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsBody.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateConduitsBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateConduitsBody + { + /// + /// The number of shards to create for this conduit. + /// + [global::Newtonsoft.Json.JsonProperty("shard_count", Required = global::Newtonsoft.Json.Required.Always)] + public int ShardCount { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponse.g.verified.cs new file mode 100644 index 0000000000..d52c20bafa --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateConduitsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateConduitsResponse + { + /// + /// List of information about the client’s conduits. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponseData.g.verified.cs new file mode 100644 index 0000000000..2aefad5cbc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateConduitsResponseData.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CreateConduitsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateConduitsResponseData + { + /// + /// Conduit ID. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Number of shards created for this conduit. + /// + [global::Newtonsoft.Json.JsonProperty("shard_count", Required = global::Newtonsoft.Json.Required.Always)] + public int ShardCount { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsBody.g.verified.cs new file mode 100644 index 0000000000..0df4b495a2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsBody.g.verified.cs @@ -0,0 +1,96 @@ +//HintName: G.Models.CreateCustomRewardsBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateCustomRewardsBody + { + /// + /// The custom reward’s title. The title may contain a maximum of 45 characters and it must be unique amongst all of the broadcaster’s custom rewards. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The cost of the reward, in Channel Points. The minimum is 1 point. + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public long Cost { get; set; } = default!; + + /// + /// The prompt shown to the viewer when they redeem the reward. Specify a prompt if `is_user_input_required` is **true**. The prompt is limited to a maximum of 200 characters. + /// + [global::Newtonsoft.Json.JsonProperty("prompt")] + public string? Prompt { get; set; } + + /// + /// A Boolean value that determines whether the reward is enabled. Viewers see only enabled rewards. The default is **true**. + /// + [global::Newtonsoft.Json.JsonProperty("is_enabled")] + public bool IsEnabled { get; set; } + + /// + /// The background color to use for the reward. Specify the color using Hex format (for example, #9147FF). + /// + [global::Newtonsoft.Json.JsonProperty("background_color")] + public string? BackgroundColor { get; set; } + + /// + /// A Boolean value that determines whether the user needs to enter information when redeeming the reward. See the `prompt` field. The default is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_user_input_required")] + public bool IsUserInputRequired { get; set; } + + /// + /// A Boolean value that determines whether to limit the maximum number of redemptions allowed per live stream (see the `max_per_stream` field). The default is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_max_per_stream_enabled")] + public bool IsMaxPerStreamEnabled { get; set; } + + /// + /// The maximum number of redemptions allowed per live stream. Applied only if `is_max_per_stream_enabled` is **true**. The minimum value is 1. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_stream")] + public int MaxPerStream { get; set; } + + /// + /// A Boolean value that determines whether to limit the maximum number of redemptions allowed per user per stream (see the `max_per_user_per_stream` field). The default is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_max_per_user_per_stream_enabled")] + public bool IsMaxPerUserPerStreamEnabled { get; set; } + + /// + /// The maximum number of redemptions allowed per user per stream. Applied only if `is_max_per_user_per_stream_enabled` is **true**. The minimum value is 1. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_user_per_stream")] + public int MaxPerUserPerStream { get; set; } + + /// + /// A Boolean value that determines whether to apply a cooldown period between redemptions (see the `global_cooldown_seconds` field for the duration of the cooldown period). The default is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_global_cooldown_enabled")] + public bool IsGlobalCooldownEnabled { get; set; } + + /// + /// The cooldown period, in seconds. Applied only if the `is_global_cooldown_enabled` field is **true**. The minimum value is 1; however, the minimum value is 60 for it to be shown in the Twitch UX. + /// + [global::Newtonsoft.Json.JsonProperty("global_cooldown_seconds")] + public int GlobalCooldownSeconds { get; set; } + + /// + /// A Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If **false**, status is set to UNFULFILLED and follows the normal request queue process. The default is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("should_redemptions_skip_request_queue")] + public bool ShouldRedemptionsSkipRequestQueue { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsResponse.g.verified.cs new file mode 100644 index 0000000000..1c4eefe43f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateCustomRewardsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateCustomRewardsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateCustomRewardsResponse + { + /// + /// A list that contains the single custom reward you created. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBody.g.verified.cs new file mode 100644 index 0000000000..e73aa1126e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBody.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.CreateEventSubSubscriptionBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateEventSubSubscriptionBody + { + /// + /// The type of subscription to create. For a list of subscriptions that you can create, see [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types). Set this field to the value in the **Name** column of the Subscription Types table. + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public CreateEventSubSubscriptionBodyType Type { get; set; } = default!; + + /// + /// The version number that identifies the definition of the subscription type that you want the response to use. + /// + [global::Newtonsoft.Json.JsonProperty("version", Required = global::Newtonsoft.Json.Required.Always)] + public string Version { get; set; } = default!; + + /// + /// A JSON object that contains the parameter values that are specific to the specified subscription type. For the object’s required and optional fields, see the subscription type’s documentation. + /// + [global::Newtonsoft.Json.JsonProperty("condition", Required = global::Newtonsoft.Json.Required.Always)] + public object Condition { get; set; } = default!; + + /// + /// The transport details that you want Twitch to use when sending you notifications. + /// + [global::Newtonsoft.Json.JsonProperty("transport", Required = global::Newtonsoft.Json.Required.Always)] + public CreateEventSubSubscriptionBodyTransport Transport { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransport.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransport.g.verified.cs new file mode 100644 index 0000000000..6d75da4f53 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransport.g.verified.cs @@ -0,0 +1,53 @@ +//HintName: G.Models.CreateEventSubSubscriptionBodyTransport.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport details that you want Twitch to use when sending you notifications. + /// + public sealed partial class CreateEventSubSubscriptionBodyTransport + { + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// * conduit + /// + [global::Newtonsoft.Json.JsonProperty("method", Required = global::Newtonsoft.Json.Required.Always)] + public CreateEventSubSubscriptionBodyTransportMethod Method { get; set; } = default!; + + /// + /// The callback URL where the notifications are sent. The URL must use the HTTPS protocol and port 443\. See [Processing an event](https://dev.twitch.tv/docs/eventsub/handling-webhook-events#processing-an-event). Specify this field only if `method` is set to **webhook**. + /// **NOTE**: Redirects are not followed. + /// + [global::Newtonsoft.Json.JsonProperty("callback")] + public string? Callback { get; set; } + + /// + /// The secret used to verify the signature. The secret must be an ASCII string that’s a minimum of 10 characters long and a maximum of 100 characters long. For information about how the secret is used, see [Verifying the event message](https://dev.twitch.tv/docs/eventsub/handling-webhook-events#verifying-the-event-message). Specify this field only if `method` is set to **webhook**. + /// + [global::Newtonsoft.Json.JsonProperty("secret")] + public string? Secret { get; set; } + + /// + /// An ID that identifies the WebSocket to send notifications to. When you connect to EventSub using WebSockets, the server returns the ID in the Welcome message. Specify this field only if `method` is set to **websocket**. + /// + [global::Newtonsoft.Json.JsonProperty("session_id")] + public string? SessionId { get; set; } + + /// + /// An ID that identifies the conduit to send notifications to. When you create a conduit, the server returns the conduit ID. Specify this field only if `method` is set to **conduit**. + /// + [global::Newtonsoft.Json.JsonProperty("conduit_id")] + public string? ConduitId { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.verified.cs new file mode 100644 index 0000000000..27532fdab5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.CreateEventSubSubscriptionBodyTransportMethod.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// * conduit + /// + [global::System.Runtime.Serialization.DataContract] + public enum CreateEventSubSubscriptionBodyTransportMethod + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook")] + Webhook, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket")] + Websocket, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="conduit")] + Conduit, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyType.g.verified.cs new file mode 100644 index 0000000000..19929bfadb --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionBodyType.g.verified.cs @@ -0,0 +1,364 @@ +//HintName: G.Models.CreateEventSubSubscriptionBodyType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of subscription to create. For a list of subscriptions that you can create, see [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types). Set this field to the value in the **Name** column of the Subscription Types table. + /// + [global::System.Runtime.Serialization.DataContract] + public enum CreateEventSubSubscriptionBodyType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.hold")] + Automodmessagehold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.update")] + Automodmessageupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.settings.update")] + Automodsettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.terms.update")] + Automodtermsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.update")] + Channelupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.follow")] + Channelfollow, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ad_break.begin")] + ChanneladBreakbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear")] + Channelchatclear, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear_user_messages")] + ChannelchatclearUserMessages, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message")] + Channelchatmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message_delete")] + ChannelchatmessageDelete, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.notification")] + Channelchatnotification, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat_settings.update")] + ChannelchatSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_hold")] + ChannelchatuserMessageHold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_update")] + ChannelchatuserMessageUpdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscribe")] + Channelsubscribe, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.end")] + Channelsubscriptionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.gift")] + Channelsubscriptiongift, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.message")] + Channelsubscriptionmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.cheer")] + Channelcheer, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.raid")] + Channelraid, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ban")] + Channelban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban")] + Channelunban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.create")] + ChannelunbanRequestcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.resolve")] + ChannelunbanRequestresolve, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderate")] + Channelmoderate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.add")] + Channelmoderatoradd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.remove")] + Channelmoderatorremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.begin")] + ChannelguestStarSessionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.end")] + ChannelguestStarSessionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_guest.update")] + ChannelguestStarGuestupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_settings.update")] + ChannelguestStarSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_automatic_reward.add")] + ChannelchannelPointsAutomaticRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.add")] + ChannelchannelPointsCustomRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.update")] + ChannelchannelPointsCustomRewardupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.remove")] + ChannelchannelPointsCustomRewardremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.add")] + ChannelchannelPointsCustomRewardRedemptionadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.update")] + ChannelchannelPointsCustomRewardRedemptionupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.begin")] + Channelpollbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.progress")] + Channelpollprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.end")] + Channelpollend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.begin")] + Channelpredictionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.progress")] + Channelpredictionprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.lock")] + Channelpredictionlock, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.end")] + Channelpredictionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.add")] + Channelvipadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.remove")] + Channelvipremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.donate")] + ChannelcharityCampaigndonate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.start")] + ChannelcharityCampaignstart, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.progress")] + ChannelcharityCampaignprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.stop")] + ChannelcharityCampaignstop, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="conduit.shard.disabled")] + Conduitsharddisabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="drop.entitlement.grant")] + Dropentitlementgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="extension.bits_transaction.create")] + ExtensionbitsTransactioncreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.begin")] + Channelgoalbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.progress")] + Channelgoalprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.end")] + Channelgoalend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.begin")] + ChannelhypeTrainbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.progress")] + ChannelhypeTrainprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.end")] + ChannelhypeTrainend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.begin")] + ChannelshieldModebegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.end")] + ChannelshieldModeend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.create")] + Channelshoutoutcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.receive")] + Channelshoutoutreceive, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.online")] + Streamonline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.offline")] + Streamoffline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.grant")] + Userauthorizationgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.revoke")] + Userauthorizationrevoke, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.update")] + Userupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.whisper.message")] + Userwhispermessage, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionResponse.g.verified.cs new file mode 100644 index 0000000000..0452cdb610 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateEventSubSubscriptionResponse.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.CreateEventSubSubscriptionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateEventSubSubscriptionResponse + { + /// + /// A list that contains the single subscription that you created. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The total number of subscriptions you’ve created. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// The sum of all of your subscription costs. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits) + /// + [global::Newtonsoft.Json.JsonProperty("total_cost", Required = global::Newtonsoft.Json.Required.Always)] + public int TotalCost { get; set; } = default!; + + /// + /// The maximum total cost that you’re allowed to incur for all subscriptions you create. + /// + [global::Newtonsoft.Json.JsonProperty("max_total_cost", Required = global::Newtonsoft.Json.Required.Always)] + public int MaxTotalCost { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateExtensionSecretResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateExtensionSecretResponse.g.verified.cs new file mode 100644 index 0000000000..08b3836c7a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateExtensionSecretResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateExtensionSecretResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateExtensionSecretResponse + { + /// + /// A list that contains the newly added secrets. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateGuestStarSessionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateGuestStarSessionResponse.g.verified.cs new file mode 100644 index 0000000000..54f5024e3f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateGuestStarSessionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateGuestStarSessionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateGuestStarSessionResponse + { + /// + /// Summary of the session details. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBody.g.verified.cs new file mode 100644 index 0000000000..6a18d495e3 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBody.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.CreatePollBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePollBody + { + /// + /// The ID of the broadcaster that’s running the poll. This ID must match the user ID in the user access token. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The question that viewers will vote on. For example, _What game should I play next?_ The question may contain a maximum of 60 characters. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// A list of choices that viewers may choose from. The list must contain a minimum of 2 choices and up to a maximum of 5 choices. + /// + [global::Newtonsoft.Json.JsonProperty("choices", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Choices { get; set; } = default!; + + /// + /// The length of time (in seconds) that the poll will run for. The minimum is 15 seconds and the maximum is 1800 seconds (30 minutes). + /// + [global::Newtonsoft.Json.JsonProperty("duration", Required = global::Newtonsoft.Json.Required.Always)] + public int Duration { get; set; } = default!; + + /// + /// A Boolean value that indicates whether viewers may cast additional votes using Channel Points. If **true**, the viewer may cast more than one vote but each additional vote costs the number of Channel Points specified in `channel_points_per_vote`. The default is **false** (viewers may cast only one vote). For information about Channel Points, see [Channel Points Guide](https://help.twitch.tv/s/article/channel-points-guide). + /// + [global::Newtonsoft.Json.JsonProperty("channel_points_voting_enabled")] + public bool ChannelPointsVotingEnabled { get; set; } + + /// + /// The number of points that the viewer must spend to cast one additional vote. The minimum is 1 and the maximum is 1000000\. Set only if `ChannelPointsVotingEnabled` is **true**. + /// + [global::Newtonsoft.Json.JsonProperty("channel_points_per_vote")] + public int ChannelPointsPerVote { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBodyChoices.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBodyChoices.g.verified.cs new file mode 100644 index 0000000000..576a786626 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollBodyChoices.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreatePollBodyChoices.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePollBodyChoices + { + /// + /// One of the choices the viewer may select. The choice may contain a maximum of 25 characters. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollResponse.g.verified.cs new file mode 100644 index 0000000000..3918704cd4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePollResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreatePollResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePollResponse + { + /// + /// A list that contains the single poll that you created. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBody.g.verified.cs new file mode 100644 index 0000000000..9fe132b138 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBody.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.CreatePredictionBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePredictionBody + { + /// + /// The ID of the broadcaster that’s running the prediction. This ID must match the user ID in the user access token. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The question that the broadcaster is asking. For example, _Will I finish this entire pizza?_ The title is limited to a maximum of 45 characters. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The list of possible outcomes that the viewers may choose from. The list must contain a minimum of 2 choices and up to a maximum of 10 choices. + /// + [global::Newtonsoft.Json.JsonProperty("outcomes", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Outcomes { get; set; } = default!; + + /// + /// The length of time (in seconds) that the prediction will run for. The minimum is 30 seconds and the maximum is 1800 seconds (30 minutes). + /// + [global::Newtonsoft.Json.JsonProperty("prediction_window", Required = global::Newtonsoft.Json.Required.Always)] + public int PredictionWindow { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBodyOutcomes.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBodyOutcomes.g.verified.cs new file mode 100644 index 0000000000..0a5a632bd9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionBodyOutcomes.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreatePredictionBodyOutcomes.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePredictionBodyOutcomes + { + /// + /// The text of one of the outcomes that the viewer may select. The title is limited to a maximum of 25 characters. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionResponse.g.verified.cs new file mode 100644 index 0000000000..73135ba252 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatePredictionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreatePredictionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatePredictionResponse + { + /// + /// A list that contains the single prediction that you created. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerBody.g.verified.cs new file mode 100644 index 0000000000..e7a6bda553 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerBody.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CreateStreamMarkerBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateStreamMarkerBody + { + /// + /// The ID of the broadcaster that’s streaming content. This ID must match the user ID in the access token or the user in the access token must be one of the broadcaster’s editors. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// A short description of the marker to help the user remember why they marked the location. The maximum length of the description is 140 characters. + /// + [global::Newtonsoft.Json.JsonProperty("description")] + public string? Description { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerResponse.g.verified.cs new file mode 100644 index 0000000000..cb957529d7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreateStreamMarkerResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.CreateStreamMarkerResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreateStreamMarkerResponse + { + /// + /// A list that contains the single marker that you added. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoal.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoal.g.verified.cs new file mode 100644 index 0000000000..92646bbc5b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoal.g.verified.cs @@ -0,0 +1,86 @@ +//HintName: G.Models.CreatorGoal.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CreatorGoal + { + /// + /// An ID that identifies this goal. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// An ID that identifies the broadcaster that created the goal. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The type of goal. Possible values are: + /// + /// * follower — The goal is to increase followers. + /// * subscription — The goal is to increase subscriptions. This type shows the net increase or decrease in tier points associated with the subscriptions. + /// * subscription\_count — The goal is to increase subscriptions. This type shows the net increase or decrease in the number of subscriptions. + /// * new\_subscription — The goal is to increase subscriptions. This type shows only the net increase in tier points associated with the subscriptions (it does not account for users that unsubscribed since the goal started). + /// * new\_subscription\_count — The goal is to increase subscriptions. This type shows only the net increase in the number of subscriptions (it does not account for users that unsubscribed since the goal started). + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public CreatorGoalType Type { get; set; } = default!; + + /// + /// A description of the goal. Is an empty string if not specified. + /// + [global::Newtonsoft.Json.JsonProperty("description", Required = global::Newtonsoft.Json.Required.Always)] + public string Description { get; set; } = default!; + + /// + /// The goal’s current value. + /// + /// The goal’s `type` determines how this value is increased or decreased. + /// + /// * If `type` is follower, this field is set to the broadcaster's current number of followers. This number increases with new followers and decreases when users unfollow the broadcaster. + /// * If `type` is subscription, this field is increased and decreased by the points value associated with the subscription tier. For example, if a tier-two subscription is worth 2 points, this field is increased or decreased by 2, not 1. + /// * If `type` is subscription\_count, this field is increased by 1 for each new subscription and decreased by 1 for each user that unsubscribes. + /// * If `type` is new\_subscription, this field is increased by the points value associated with the subscription tier. For example, if a tier-two subscription is worth 2 points, this field is increased by 2, not 1. + /// * If `type` is new\_subscription\_count, this field is increased by 1 for each new subscription. + /// + [global::Newtonsoft.Json.JsonProperty("current_amount", Required = global::Newtonsoft.Json.Required.Always)] + public int CurrentAmount { get; set; } = default!; + + /// + /// The goal’s target value. For example, if the broadcaster has 200 followers before creating the goal, and their goal is to double that number, this field is set to 400. + /// + [global::Newtonsoft.Json.JsonProperty("target_amount", Required = global::Newtonsoft.Json.Required.Always)] + public int TargetAmount { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that the broadcaster created the goal. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoalType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoalType.g.verified.cs new file mode 100644 index 0000000000..23ee70446b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CreatorGoalType.g.verified.cs @@ -0,0 +1,45 @@ +//HintName: G.Models.CreatorGoalType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of goal. Possible values are: + /// + /// * follower — The goal is to increase followers. + /// * subscription — The goal is to increase subscriptions. This type shows the net increase or decrease in tier points associated with the subscriptions. + /// * subscription\_count — The goal is to increase subscriptions. This type shows the net increase or decrease in the number of subscriptions. + /// * new\_subscription — The goal is to increase subscriptions. This type shows only the net increase in tier points associated with the subscriptions (it does not account for users that unsubscribed since the goal started). + /// * new\_subscription\_count — The goal is to increase subscriptions. This type shows only the net increase in the number of subscriptions (it does not account for users that unsubscribed since the goal started). + /// + [global::System.Runtime.Serialization.DataContract] + public enum CreatorGoalType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="follower")] + Follower, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="subscription")] + Subscription, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="subscription_count")] + SubscriptionCount, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="new_subscription")] + NewSubscription, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="new_subscription_count")] + NewSubscriptionCount, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomReward.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomReward.g.verified.cs new file mode 100644 index 0000000000..76e46f0a17 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomReward.g.verified.cs @@ -0,0 +1,138 @@ +//HintName: G.Models.CustomReward.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CustomReward + { + /// + /// The ID that uniquely identifies the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The ID that uniquely identifies this custom reward. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The title of the reward. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The prompt shown to the viewer when they redeem the reward if user input is required. See the `is_user_input_required` field. + /// + [global::Newtonsoft.Json.JsonProperty("prompt", Required = global::Newtonsoft.Json.Required.Always)] + public string Prompt { get; set; } = default!; + + /// + /// The cost of the reward in Channel Points. + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public long Cost { get; set; } = default!; + + /// + /// A set of custom images for the reward. This field is **null** if the broadcaster didn’t upload images. + /// + [global::Newtonsoft.Json.JsonProperty("image", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardImage Image { get; set; } = default!; + + /// + /// A set of default images for the reward. + /// + [global::Newtonsoft.Json.JsonProperty("default_image", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardDefaultImage DefaultImage { get; set; } = default!; + + /// + /// The background color to use for the reward. The color is in Hex format (for example, #00E5CB). + /// + [global::Newtonsoft.Json.JsonProperty("background_color", Required = global::Newtonsoft.Json.Required.Always)] + public string BackgroundColor { get; set; } = default!; + + /// + /// A Boolean value that determines whether the reward is enabled. Is **true** if enabled; otherwise, **false**. Disabled rewards aren’t shown to the user. + /// + [global::Newtonsoft.Json.JsonProperty("is_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsEnabled { get; set; } = default!; + + /// + /// A Boolean value that determines whether the user must enter information when they redeem the reward. Is **true** if the user is prompted. + /// + [global::Newtonsoft.Json.JsonProperty("is_user_input_required", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsUserInputRequired { get; set; } = default!; + + /// + /// The settings used to determine whether to apply a maximum to the number of redemptions allowed per live stream. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_stream_setting", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardMaxPerStreamSetting MaxPerStreamSetting { get; set; } = default!; + + /// + /// The settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_user_per_stream_setting", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardMaxPerUserPerStreamSetting MaxPerUserPerStreamSetting { get; set; } = default!; + + /// + /// The settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown. + /// + [global::Newtonsoft.Json.JsonProperty("global_cooldown_setting", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardGlobalCooldownSetting GlobalCooldownSetting { get; set; } = default!; + + /// + /// A Boolean value that determines whether the reward is currently paused. Is **true** if the reward is paused. Viewers can’t redeem paused rewards. + /// + [global::Newtonsoft.Json.JsonProperty("is_paused", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsPaused { get; set; } = default!; + + /// + /// A Boolean value that determines whether the reward is currently in stock. Is **true** if the reward is in stock. Viewers can’t redeem out of stock rewards. + /// + [global::Newtonsoft.Json.JsonProperty("is_in_stock", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsInStock { get; set; } = default!; + + /// + /// A Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If **false**, status is set to UNFULFILLED and follows the normal request queue process. + /// + [global::Newtonsoft.Json.JsonProperty("should_redemptions_skip_request_queue", Required = global::Newtonsoft.Json.Required.Always)] + public bool ShouldRedemptionsSkipRequestQueue { get; set; } = default!; + + /// + /// The number of redemptions redeemed during the current live stream. The number counts against the `max_per_stream_setting` limit. This field is **null** if the broadcaster’s stream isn’t live or _max\_per\_stream\_setting_ isn’t enabled. + /// + [global::Newtonsoft.Json.JsonProperty("redemptions_redeemed_current_stream", Required = global::Newtonsoft.Json.Required.Always)] + public int? RedemptionsRedeemedCurrentStream { get; set; } = default!; + + /// + /// The timestamp of when the cooldown period expires. Is **null** if the reward isn’t in a cooldown state. See the `global_cooldown_setting` field. + /// + [global::Newtonsoft.Json.JsonProperty("cooldown_expires_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime? CooldownExpiresAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardDefaultImage.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardDefaultImage.g.verified.cs new file mode 100644 index 0000000000..545d5e1239 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardDefaultImage.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.CustomRewardDefaultImage.g.cs + +#nullable enable + +namespace G +{ + /// + /// A set of default images for the reward. + /// + public sealed partial class CustomRewardDefaultImage + { + /// + /// The URL to a small version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_1x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url1x { get; set; } = default!; + + /// + /// The URL to a medium version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_2x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url2x { get; set; } = default!; + + /// + /// The URL to a large version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_4x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url4x { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardGlobalCooldownSetting.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardGlobalCooldownSetting.g.verified.cs new file mode 100644 index 0000000000..925bd38840 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardGlobalCooldownSetting.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CustomRewardGlobalCooldownSetting.g.cs + +#nullable enable + +namespace G +{ + /// + /// The settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown. + /// + public sealed partial class CustomRewardGlobalCooldownSetting + { + /// + /// A Boolean value that determines whether to apply a cooldown period. Is **true** if a cooldown period is enabled. + /// + [global::Newtonsoft.Json.JsonProperty("is_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsEnabled { get; set; } = default!; + + /// + /// The cooldown period, in seconds. + /// + [global::Newtonsoft.Json.JsonProperty("global_cooldown_seconds", Required = global::Newtonsoft.Json.Required.Always)] + public long GlobalCooldownSeconds { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardImage.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardImage.g.verified.cs new file mode 100644 index 0000000000..42a33423a2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardImage.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.CustomRewardImage.g.cs + +#nullable enable + +namespace G +{ + /// + /// A set of custom images for the reward. This field is **null** if the broadcaster didn’t upload images. + /// + public sealed partial class CustomRewardImage + { + /// + /// The URL to a small version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_1x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url1x { get; set; } = default!; + + /// + /// The URL to a medium version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_2x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url2x { get; set; } = default!; + + /// + /// The URL to a large version of the image. + /// + [global::Newtonsoft.Json.JsonProperty("url_4x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url4x { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerStreamSetting.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerStreamSetting.g.verified.cs new file mode 100644 index 0000000000..2cbb2519e6 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerStreamSetting.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CustomRewardMaxPerStreamSetting.g.cs + +#nullable enable + +namespace G +{ + /// + /// The settings used to determine whether to apply a maximum to the number of redemptions allowed per live stream. + /// + public sealed partial class CustomRewardMaxPerStreamSetting + { + /// + /// A Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per live stream. Is **true** if the reward applies a limit. + /// + [global::Newtonsoft.Json.JsonProperty("is_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsEnabled { get; set; } = default!; + + /// + /// The maximum number of redemptions allowed per live stream. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_stream", Required = global::Newtonsoft.Json.Required.Always)] + public long MaxPerStream { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerUserPerStreamSetting.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerUserPerStreamSetting.g.verified.cs new file mode 100644 index 0000000000..c0cad2a350 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardMaxPerUserPerStreamSetting.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.CustomRewardMaxPerUserPerStreamSetting.g.cs + +#nullable enable + +namespace G +{ + /// + /// The settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream. + /// + public sealed partial class CustomRewardMaxPerUserPerStreamSetting + { + /// + /// A Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per user per live stream. Is **true** if the reward applies a limit. + /// + [global::Newtonsoft.Json.JsonProperty("is_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsEnabled { get; set; } = default!; + + /// + /// The maximum number of redemptions allowed per user per live stream. + /// + [global::Newtonsoft.Json.JsonProperty("max_per_user_per_stream", Required = global::Newtonsoft.Json.Required.Always)] + public long MaxPerUserPerStream { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemption.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemption.g.verified.cs new file mode 100644 index 0000000000..15fe51751c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemption.g.verified.cs @@ -0,0 +1,88 @@ +//HintName: G.Models.CustomRewardRedemption.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class CustomRewardRedemption + { + /// + /// The ID that uniquely identifies the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The ID that uniquely identifies this redemption.. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The ID of the user that redeemed the reward. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// An object that describes the reward that the user redeemed. + /// + [global::Newtonsoft.Json.JsonProperty("reward", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardRedemptionReward Reward { get; set; } = default!; + + /// + /// The text that the user entered at the prompt when they redeemed the reward; otherwise, an empty string if user input was not required. + /// + [global::Newtonsoft.Json.JsonProperty("user_input", Required = global::Newtonsoft.Json.Required.Always)] + public string UserInput { get; set; } = default!; + + /// + /// The state of the redemption. Possible values are: + /// + /// * CANCELED + /// * FULFILLED + /// * UNFULFILLED + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public CustomRewardRedemptionStatus Status { get; set; } = default!; + + /// + /// The date and time of when the reward was redeemed, in RFC3339 format. + /// + [global::Newtonsoft.Json.JsonProperty("redeemed_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime RedeemedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionReward.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionReward.g.verified.cs new file mode 100644 index 0000000000..74114c096f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionReward.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.CustomRewardRedemptionReward.g.cs + +#nullable enable + +namespace G +{ + /// + /// An object that describes the reward that the user redeemed. + /// + public sealed partial class CustomRewardRedemptionReward + { + /// + /// The ID that uniquely identifies the reward. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The reward’s title. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// The prompt displayed to the viewer if user input is required. + /// + [global::Newtonsoft.Json.JsonProperty("prompt", Required = global::Newtonsoft.Json.Required.Always)] + public string Prompt { get; set; } = default!; + + /// + /// The reward’s cost, in Channel Points. + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public long Cost { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionStatus.g.verified.cs new file mode 100644 index 0000000000..64f0631ea9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.CustomRewardRedemptionStatus.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.CustomRewardRedemptionStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The state of the redemption. Possible values are: + /// + /// * CANCELED + /// * FULFILLED + /// * UNFULFILLED + /// + [global::System.Runtime.Serialization.DataContract] + public enum CustomRewardRedemptionStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="CANCELED")] + CANCELED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="FULFILLED")] + FULFILLED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="UNFULFILLED")] + UNFULFILLED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DeleteVideosResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DeleteVideosResponse.g.verified.cs new file mode 100644 index 0000000000..521214c9a9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DeleteVideosResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.DeleteVideosResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class DeleteVideosResponse + { + /// + /// The list of IDs of the videos that were deleted. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlement.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlement.g.verified.cs new file mode 100644 index 0000000000..123b1b1529 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlement.g.verified.cs @@ -0,0 +1,63 @@ +//HintName: G.Models.DropsEntitlement.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class DropsEntitlement + { + /// + /// An ID that identifies the entitlement. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// An ID that identifies the benefit (reward). + /// + [global::Newtonsoft.Json.JsonProperty("benefit_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BenefitId { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the entitlement was granted. + /// + [global::Newtonsoft.Json.JsonProperty("timestamp", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime Timestamp { get; set; } = default!; + + /// + /// An ID that identifies the user who was granted the entitlement. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// An ID that identifies the game the user was playing when the reward was entitled. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The entitlement’s fulfillment status. Possible values are: + /// + /// * CLAIMED + /// * FULFILLED + /// + [global::Newtonsoft.Json.JsonProperty("fulfillment_status", Required = global::Newtonsoft.Json.Required.Always)] + public DropsEntitlementFulfillmentStatus FulfillmentStatus { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the entitlement was last updated. + /// + [global::Newtonsoft.Json.JsonProperty("last_updated", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime LastUpdated { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementFulfillmentStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementFulfillmentStatus.g.verified.cs new file mode 100644 index 0000000000..5c99c003be --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementFulfillmentStatus.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.DropsEntitlementFulfillmentStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The entitlement’s fulfillment status. Possible values are: + /// + /// * CLAIMED + /// * FULFILLED + /// + [global::System.Runtime.Serialization.DataContract] + public enum DropsEntitlementFulfillmentStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="CLAIMED")] + CLAIMED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="FULFILLED")] + FULFILLED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdated.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdated.g.verified.cs new file mode 100644 index 0000000000..dddd46662f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdated.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.DropsEntitlementUpdated.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class DropsEntitlementUpdated + { + /// + /// A string that indicates whether the status of the entitlements in the `ids` field were successfully updated. Possible values are: + /// + /// * INVALID\_ID — The entitlement IDs in the `ids` field are not valid. + /// * NOT\_FOUND — The entitlement IDs in the `ids` field were not found. + /// * SUCCESS — The status of the entitlements in the `ids` field were successfully updated. + /// * UNAUTHORIZED — The user or organization identified by the user access token is not authorized to update the entitlements. + /// * UPDATE\_FAILED — The update failed. These are considered transient errors and the request should be retried later. + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public DropsEntitlementUpdatedStatus Status { get; set; } = default!; + + /// + /// The list of entitlements that the status in the `status` field applies to. + /// + [global::Newtonsoft.Json.JsonProperty("ids", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Ids { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdatedStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdatedStatus.g.verified.cs new file mode 100644 index 0000000000..a2258027f6 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.DropsEntitlementUpdatedStatus.g.verified.cs @@ -0,0 +1,45 @@ +//HintName: G.Models.DropsEntitlementUpdatedStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// A string that indicates whether the status of the entitlements in the `ids` field were successfully updated. Possible values are: + /// + /// * INVALID\_ID — The entitlement IDs in the `ids` field are not valid. + /// * NOT\_FOUND — The entitlement IDs in the `ids` field were not found. + /// * SUCCESS — The status of the entitlements in the `ids` field were successfully updated. + /// * UNAUTHORIZED — The user or organization identified by the user access token is not authorized to update the entitlements. + /// * UPDATE\_FAILED — The update failed. These are considered transient errors and the request should be retried later. + /// + [global::System.Runtime.Serialization.DataContract] + public enum DropsEntitlementUpdatedStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="INVALID_ID")] + INVALIDID, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="NOT_FOUND")] + NOTFOUND, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="SUCCESS")] + SUCCESS, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="UNAUTHORIZED")] + UNAUTHORIZED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="UPDATE_FAILED")] + UPDATEFAILED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Emote.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Emote.g.verified.cs new file mode 100644 index 0000000000..60ff20c0d5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Emote.g.verified.cs @@ -0,0 +1,88 @@ +//HintName: G.Models.Emote.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Emote + { + /// + /// An ID that uniquely identifies this emote. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The name of the emote. This is the name that viewers type in the chat window to get the emote to appear. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. + /// + /// **NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs. + /// + [global::Newtonsoft.Json.JsonProperty("images", Required = global::Newtonsoft.Json.Required.Always)] + public EmoteImages Images { get; set; } = default!; + + /// + /// The type of emote. The possible values are: + /// + /// * bitstier — A Bits tier emote. + /// * follower — A follower emote. + /// * subscriptions — A subscriber emote. + /// + [global::Newtonsoft.Json.JsonProperty("emote_type", Required = global::Newtonsoft.Json.Required.Always)] + public EmoteEmoteType EmoteType { get; set; } = default!; + + /// + /// An ID that identifies the emote set that the emote belongs to. + /// + [global::Newtonsoft.Json.JsonProperty("emote_set_id", Required = global::Newtonsoft.Json.Required.Always)] + public string EmoteSetId { get; set; } = default!; + + /// + /// The ID of the broadcaster who owns the emote. + /// + [global::Newtonsoft.Json.JsonProperty("owner_id", Required = global::Newtonsoft.Json.Required.Always)] + public string OwnerId { get; set; } = default!; + + /// + /// The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only `static`. But if the emote is available as a static PNG and an animated GIF, the array contains `static` and `animated`. The possible formats are: + /// + /// * animated — An animated GIF is available for this emote. + /// * static — A static PNG file is available for this emote. + /// + [global::Newtonsoft.Json.JsonProperty("format", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Format { get; set; } = default!; + + /// + /// The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\. Possible sizes are: + /// + /// * 1.0 — A small version (28px x 28px) is available. + /// * 2.0 — A medium version (56px x 56px) is available. + /// * 3.0 — A large version (112px x 112px) is available. + /// + [global::Newtonsoft.Json.JsonProperty("scale", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Scale { get; set; } = default!; + + /// + /// The background themes that the emote is available in. Possible themes are: + /// + /// * dark + /// * light + /// + [global::Newtonsoft.Json.JsonProperty("theme_mode", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList ThemeMode { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteEmoteType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteEmoteType.g.verified.cs new file mode 100644 index 0000000000..ede5a5fb44 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteEmoteType.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.EmoteEmoteType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of emote. The possible values are: + /// + /// * bitstier — A Bits tier emote. + /// * follower — A follower emote. + /// * subscriptions — A subscriber emote. + /// + [global::System.Runtime.Serialization.DataContract] + public enum EmoteEmoteType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="bitstier")] + Bitstier, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="follower")] + Follower, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="subscriptions")] + Subscriptions, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteFormat.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteFormat.g.verified.cs new file mode 100644 index 0000000000..82364ddb10 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteFormat.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.EmoteFormat.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum EmoteFormat + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="animated")] + Animated, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="static")] + Static, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteImages.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteImages.g.verified.cs new file mode 100644 index 0000000000..1878474fec --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteImages.g.verified.cs @@ -0,0 +1,38 @@ +//HintName: G.Models.EmoteImages.g.cs + +#nullable enable + +namespace G +{ + /// + /// The image URLs for the emote. These image URLs always provide a static, non-animated emote image with a light background. + /// + /// **NOTE:** You should use the templated URL in the `template` field to fetch the image instead of using these URLs. + /// + public sealed partial class EmoteImages + { + /// + /// A URL to the small version (28px x 28px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_1x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url1x { get; set; } = default!; + + /// + /// A URL to the medium version (56px x 56px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_2x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url2x { get; set; } = default!; + + /// + /// A URL to the large version (112px x 112px) of the emote. + /// + [global::Newtonsoft.Json.JsonProperty("url_4x", Required = global::Newtonsoft.Json.Required.Always)] + public string Url4x { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteScale.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteScale.g.verified.cs new file mode 100644 index 0000000000..d3adad6284 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteScale.g.verified.cs @@ -0,0 +1,29 @@ +//HintName: G.Models.EmoteScale.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum EmoteScale + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="1.0")] + _10, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="2.0")] + _20, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="3.0")] + _30, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteThemeMode.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteThemeMode.g.verified.cs new file mode 100644 index 0000000000..35a7e3e987 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EmoteThemeMode.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.EmoteThemeMode.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum EmoteThemeMode + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="dark")] + Dark, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="light")] + Light, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndGuestStarSessionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndGuestStarSessionResponse.g.verified.cs new file mode 100644 index 0000000000..620efed6be --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndGuestStarSessionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.EndGuestStarSessionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EndGuestStarSessionResponse + { + /// + /// Summary of the session details when the session was ended. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBody.g.verified.cs new file mode 100644 index 0000000000..d44e44d683 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBody.g.verified.cs @@ -0,0 +1,39 @@ +//HintName: G.Models.EndPollBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EndPollBody + { + /// + /// The ID of the broadcaster that’s running the poll. This ID must match the user ID in the user access token. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The ID of the poll to update. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The status to set the poll to. Possible case-sensitive values are: + /// + /// * TERMINATED — Ends the poll before the poll is scheduled to end. The poll remains publicly visible. + /// * ARCHIVED — Ends the poll before the poll is scheduled to end, and then archives it so it's no longer publicly visible. + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public EndPollBodyStatus Status { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBodyStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBodyStatus.g.verified.cs new file mode 100644 index 0000000000..53884eaec7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollBodyStatus.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.EndPollBodyStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The status to set the poll to. Possible case-sensitive values are: + /// + /// * TERMINATED — Ends the poll before the poll is scheduled to end. The poll remains publicly visible. + /// * ARCHIVED — Ends the poll before the poll is scheduled to end, and then archives it so it's no longer publicly visible. + /// + [global::System.Runtime.Serialization.DataContract] + public enum EndPollBodyStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="TERMINATED")] + TERMINATED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="ARCHIVED")] + ARCHIVED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollResponse.g.verified.cs new file mode 100644 index 0000000000..705ef7f229 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPollResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.EndPollResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EndPollResponse + { + /// + /// A list that contains the poll that you ended. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBody.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBody.g.verified.cs new file mode 100644 index 0000000000..c76e5c4068 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBody.g.verified.cs @@ -0,0 +1,50 @@ +//HintName: G.Models.EndPredictionBody.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EndPredictionBody + { + /// + /// The ID of the broadcaster that’s running the prediction. This ID must match the user ID in the user access token. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The ID of the prediction to update. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The status to set the prediction to. Possible case-sensitive values are: + /// + /// * RESOLVED — The winning outcome is determined and the Channel Points are distributed to the viewers who predicted the correct outcome. + /// * CANCELED — The broadcaster is canceling the prediction and sending refunds to the participants. + /// * LOCKED — The broadcaster is locking the prediction, which means viewers may no longer make predictions. + /// + /// The broadcaster can update an active prediction to LOCKED, RESOLVED, or CANCELED; and update a locked prediction to RESOLVED or CANCELED. + /// + /// The broadcaster has up to 24 hours after the prediction window closes to resolve the prediction. If not, Twitch sets the status to CANCELED and returns the points. + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public EndPredictionBodyStatus Status { get; set; } = default!; + + /// + /// The ID of the winning outcome. You must set this parameter if you set `status` to RESOLVED. + /// + [global::Newtonsoft.Json.JsonProperty("winning_outcome_id")] + public string? WinningOutcomeId { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBodyStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBodyStatus.g.verified.cs new file mode 100644 index 0000000000..5e923785be --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionBodyStatus.g.verified.cs @@ -0,0 +1,37 @@ +//HintName: G.Models.EndPredictionBodyStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The status to set the prediction to. Possible case-sensitive values are: + /// + /// * RESOLVED — The winning outcome is determined and the Channel Points are distributed to the viewers who predicted the correct outcome. + /// * CANCELED — The broadcaster is canceling the prediction and sending refunds to the participants. + /// * LOCKED — The broadcaster is locking the prediction, which means viewers may no longer make predictions. + /// + /// The broadcaster can update an active prediction to LOCKED, RESOLVED, or CANCELED; and update a locked prediction to RESOLVED or CANCELED. + /// + /// The broadcaster has up to 24 hours after the prediction window closes to resolve the prediction. If not, Twitch sets the status to CANCELED and returns the points. + /// + [global::System.Runtime.Serialization.DataContract] + public enum EndPredictionBodyStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="RESOLVED")] + RESOLVED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="CANCELED")] + CANCELED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="LOCKED")] + LOCKED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionResponse.g.verified.cs new file mode 100644 index 0000000000..bc4c476f24 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EndPredictionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.EndPredictionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EndPredictionResponse + { + /// + /// A list that contains the single prediction that you updated. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscription.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscription.g.verified.cs new file mode 100644 index 0000000000..e18f2872be --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscription.g.verified.cs @@ -0,0 +1,83 @@ +//HintName: G.Models.EventSubSubscription.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class EventSubSubscription + { + /// + /// An ID that identifies the subscription. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The subscription's status. The subscriber receives events only for **enabled** subscriptions. Possible values are: + /// + /// * enabled — The subscription is enabled. + /// * webhook\_callback\_verification\_pending — The subscription is pending verification of the specified callback URL. + /// * webhook\_callback\_verification\_failed — The specified callback URL failed verification. + /// * notification\_failures\_exceeded — The notification delivery failure rate was too high. + /// * authorization\_revoked — The authorization was revoked for one or more users specified in the **Condition** object. + /// * moderator\_removed — The moderator that authorized the subscription is no longer one of the broadcaster's moderators. + /// * user\_removed — One of the users specified in the **Condition** object was removed. + /// * version\_removed — The subscription to subscription type and version is no longer supported. + /// * beta\_maintenance — The subscription to the beta subscription type was removed due to maintenance. + /// * websocket\_disconnected — The client closed the connection. + /// * websocket\_failed\_ping\_pong — The client failed to respond to a ping message. + /// * websocket\_received\_inbound\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message). + /// * websocket\_connection\_unused — The client failed to subscribe to events within the required time. + /// * websocket\_internal\_error — The Twitch WebSocket server experienced an unexpected error. + /// * websocket\_network\_timeout — The Twitch WebSocket server timed out writing the message to the client. + /// * websocket\_network\_error — The Twitch WebSocket server experienced a network error writing the message to the client. + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public EventSubSubscriptionStatus Status { get; set; } = default!; + + /// + /// The subscription's type. See [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types). + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public EventSubSubscriptionType Type { get; set; } = default!; + + /// + /// The version number that identifies this definition of the subscription's data. + /// + [global::Newtonsoft.Json.JsonProperty("version", Required = global::Newtonsoft.Json.Required.Always)] + public string Version { get; set; } = default!; + + /// + /// The subscription's parameter values. This is a string-encoded JSON object whose contents are determined by the subscription type. + /// + [global::Newtonsoft.Json.JsonProperty("condition", Required = global::Newtonsoft.Json.Required.Always)] + public object Condition { get; set; } = default!; + + /// + /// The date and time (in RFC3339 format) of when the subscription was created. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// The transport details used to send the notifications. + /// + [global::Newtonsoft.Json.JsonProperty("transport", Required = global::Newtonsoft.Json.Required.Always)] + public EventSubSubscriptionTransport Transport { get; set; } = default!; + + /// + /// The amount that the subscription counts against your limit. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits) + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public int Cost { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionStatus.g.verified.cs new file mode 100644 index 0000000000..46894d3bf7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionStatus.g.verified.cs @@ -0,0 +1,111 @@ +//HintName: G.Models.EventSubSubscriptionStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The subscription's status. The subscriber receives events only for **enabled** subscriptions. Possible values are: + /// + /// * enabled — The subscription is enabled. + /// * webhook\_callback\_verification\_pending — The subscription is pending verification of the specified callback URL. + /// * webhook\_callback\_verification\_failed — The specified callback URL failed verification. + /// * notification\_failures\_exceeded — The notification delivery failure rate was too high. + /// * authorization\_revoked — The authorization was revoked for one or more users specified in the **Condition** object. + /// * moderator\_removed — The moderator that authorized the subscription is no longer one of the broadcaster's moderators. + /// * user\_removed — One of the users specified in the **Condition** object was removed. + /// * version\_removed — The subscription to subscription type and version is no longer supported. + /// * beta\_maintenance — The subscription to the beta subscription type was removed due to maintenance. + /// * websocket\_disconnected — The client closed the connection. + /// * websocket\_failed\_ping\_pong — The client failed to respond to a ping message. + /// * websocket\_received\_inbound\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message). + /// * websocket\_connection\_unused — The client failed to subscribe to events within the required time. + /// * websocket\_internal\_error — The Twitch WebSocket server experienced an unexpected error. + /// * websocket\_network\_timeout — The Twitch WebSocket server timed out writing the message to the client. + /// * websocket\_network\_error — The Twitch WebSocket server experienced a network error writing the message to the client. + /// + [global::System.Runtime.Serialization.DataContract] + public enum EventSubSubscriptionStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="enabled")] + Enabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_pending")] + WebhookCallbackVerificationPending, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_failed")] + WebhookCallbackVerificationFailed, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="notification_failures_exceeded")] + NotificationFailuresExceeded, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="authorization_revoked")] + AuthorizationRevoked, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="moderator_removed")] + ModeratorRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user_removed")] + UserRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="version_removed")] + VersionRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="beta_maintenance")] + BetaMaintenance, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_disconnected")] + WebsocketDisconnected, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_failed_ping_pong")] + WebsocketFailedPingPong, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_received_inbound_traffic")] + WebsocketReceivedInboundTraffic, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_connection_unused")] + WebsocketConnectionUnused, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_internal_error")] + WebsocketInternalError, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_timeout")] + WebsocketNetworkTimeout, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_error")] + WebsocketNetworkError, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransport.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransport.g.verified.cs new file mode 100644 index 0000000000..ae43680306 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransport.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.Models.EventSubSubscriptionTransport.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport details used to send the notifications. + /// + public sealed partial class EventSubSubscriptionTransport + { + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// + [global::Newtonsoft.Json.JsonProperty("method", Required = global::Newtonsoft.Json.Required.Always)] + public EventSubSubscriptionTransportMethod Method { get; set; } = default!; + + /// + /// The callback URL where the notifications are sent. Included only if `method` is set to **webhook**. + /// + [global::Newtonsoft.Json.JsonProperty("callback")] + public string? Callback { get; set; } + + /// + /// An ID that identifies the WebSocket that notifications are sent to. Included only if `method` is set to **websocket**. + /// + [global::Newtonsoft.Json.JsonProperty("session_id")] + public string? SessionId { get; set; } + + /// + /// The UTC date and time that the WebSocket connection was established. Included only if `method` is set to **websocket**. + /// + [global::Newtonsoft.Json.JsonProperty("connected_at")] + public global::System.DateTime ConnectedAt { get; set; } + + /// + /// The UTC date and time that the WebSocket connection was lost. Included only if `method` is set to **websocket**. + /// + [global::Newtonsoft.Json.JsonProperty("disconnected_at")] + public global::System.DateTime DisconnectedAt { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransportMethod.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransportMethod.g.verified.cs new file mode 100644 index 0000000000..5998887e8d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionTransportMethod.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.EventSubSubscriptionTransportMethod.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// + [global::System.Runtime.Serialization.DataContract] + public enum EventSubSubscriptionTransportMethod + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook")] + Webhook, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket")] + Websocket, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionType.g.verified.cs new file mode 100644 index 0000000000..1a9e0ae407 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.EventSubSubscriptionType.g.verified.cs @@ -0,0 +1,364 @@ +//HintName: G.Models.EventSubSubscriptionType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The subscription's type. See [Subscription Types](https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types#subscription-types). + /// + [global::System.Runtime.Serialization.DataContract] + public enum EventSubSubscriptionType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.hold")] + Automodmessagehold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.update")] + Automodmessageupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.settings.update")] + Automodsettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.terms.update")] + Automodtermsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.update")] + Channelupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.follow")] + Channelfollow, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ad_break.begin")] + ChanneladBreakbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear")] + Channelchatclear, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear_user_messages")] + ChannelchatclearUserMessages, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message")] + Channelchatmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message_delete")] + ChannelchatmessageDelete, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.notification")] + Channelchatnotification, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat_settings.update")] + ChannelchatSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_hold")] + ChannelchatuserMessageHold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_update")] + ChannelchatuserMessageUpdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscribe")] + Channelsubscribe, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.end")] + Channelsubscriptionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.gift")] + Channelsubscriptiongift, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.message")] + Channelsubscriptionmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.cheer")] + Channelcheer, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.raid")] + Channelraid, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ban")] + Channelban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban")] + Channelunban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.create")] + ChannelunbanRequestcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.resolve")] + ChannelunbanRequestresolve, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderate")] + Channelmoderate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.add")] + Channelmoderatoradd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.remove")] + Channelmoderatorremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.begin")] + ChannelguestStarSessionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.end")] + ChannelguestStarSessionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_guest.update")] + ChannelguestStarGuestupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_settings.update")] + ChannelguestStarSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_automatic_reward.add")] + ChannelchannelPointsAutomaticRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.add")] + ChannelchannelPointsCustomRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.update")] + ChannelchannelPointsCustomRewardupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.remove")] + ChannelchannelPointsCustomRewardremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.add")] + ChannelchannelPointsCustomRewardRedemptionadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.update")] + ChannelchannelPointsCustomRewardRedemptionupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.begin")] + Channelpollbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.progress")] + Channelpollprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.end")] + Channelpollend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.begin")] + Channelpredictionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.progress")] + Channelpredictionprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.lock")] + Channelpredictionlock, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.end")] + Channelpredictionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.add")] + Channelvipadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.remove")] + Channelvipremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.donate")] + ChannelcharityCampaigndonate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.start")] + ChannelcharityCampaignstart, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.progress")] + ChannelcharityCampaignprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.stop")] + ChannelcharityCampaignstop, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="conduit.shard.disabled")] + Conduitsharddisabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="drop.entitlement.grant")] + Dropentitlementgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="extension.bits_transaction.create")] + ExtensionbitsTransactioncreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.begin")] + Channelgoalbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.progress")] + Channelgoalprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.end")] + Channelgoalend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.begin")] + ChannelhypeTrainbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.progress")] + ChannelhypeTrainprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.end")] + ChannelhypeTrainend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.begin")] + ChannelshieldModebegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.end")] + ChannelshieldModeend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.create")] + Channelshoutoutcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.receive")] + Channelshoutoutreceive, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.online")] + Streamonline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.offline")] + Streamoffline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.grant")] + Userauthorizationgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.revoke")] + Userauthorizationrevoke, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.update")] + Userupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.whisper.message")] + Userwhispermessage, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Extension.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Extension.g.verified.cs new file mode 100644 index 0000000000..d4e28de77b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Extension.g.verified.cs @@ -0,0 +1,175 @@ +//HintName: G.Models.Extension.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Extension + { + /// + /// The name of the user or organization that owns the extension. + /// + [global::Newtonsoft.Json.JsonProperty("author_name", Required = global::Newtonsoft.Json.Required.Always)] + public string AuthorName { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension has features that use Bits. Is **true** if the extension has features that use Bits. + /// + [global::Newtonsoft.Json.JsonProperty("bits_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool BitsEnabled { get; set; } = default!; + + /// + /// A Boolean value that determines whether a user can install the extension on their channel. Is **true** if a user can install the extension. + /// + /// Typically, this is set to **false** if the extension is currently in testing mode and requires users to be allowlisted (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \-> **Extension** \-> **Version** \-> **Access**). + /// + [global::Newtonsoft.Json.JsonProperty("can_install", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanInstall { get; set; } = default!; + + /// + /// The location of where the extension’s configuration is stored. Possible values are: + /// + /// * hosted — The Extensions Configuration Service hosts the configuration. + /// * custom — The Extension Backend Service (EBS) hosts the configuration. + /// * none — The extension doesn't require configuration. + /// + [global::Newtonsoft.Json.JsonProperty("configuration_location", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionConfigurationLocation ConfigurationLocation { get; set; } = default!; + + /// + /// A longer description of the extension. It appears on the details page. + /// + [global::Newtonsoft.Json.JsonProperty("description", Required = global::Newtonsoft.Json.Required.Always)] + public string Description { get; set; } = default!; + + /// + /// A URL to the extension’s Terms of Service. + /// + [global::Newtonsoft.Json.JsonProperty("eula_tos_url", Required = global::Newtonsoft.Json.Required.Always)] + public string EulaTosUrl { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension can communicate with the installed channel’s chat. Is **true** if the extension can communicate with the channel’s chat room. + /// + [global::Newtonsoft.Json.JsonProperty("has_chat_support", Required = global::Newtonsoft.Json.Required.Always)] + public bool HasChatSupport { get; set; } = default!; + + /// + /// A URL to the default icon that’s displayed in the Extensions directory. + /// + [global::Newtonsoft.Json.JsonProperty("icon_url", Required = global::Newtonsoft.Json.Required.Always)] + public string IconUrl { get; set; } = default!; + + /// + /// A dictionary that contains URLs to different sizes of the default icon. The dictionary’s key identifies the icon’s size (for example, 24x24), and the dictionary’s value contains the URL to the icon. + /// + [global::Newtonsoft.Json.JsonProperty("icon_urls", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionIconUrls IconUrls { get; set; } = default!; + + /// + /// The extension’s ID. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The extension’s name. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// A URL to the extension’s privacy policy. + /// + [global::Newtonsoft.Json.JsonProperty("privacy_policy_url", Required = global::Newtonsoft.Json.Required.Always)] + public string PrivacyPolicyUrl { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension wants to explicitly ask viewers to link their Twitch identity. + /// + [global::Newtonsoft.Json.JsonProperty("request_identity_link", Required = global::Newtonsoft.Json.Required.Always)] + public bool RequestIdentityLink { get; set; } = default!; + + /// + /// A list of URLs to screenshots that are shown in the Extensions marketplace. + /// + [global::Newtonsoft.Json.JsonProperty("screenshot_urls", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList ScreenshotUrls { get; set; } = default!; + + /// + /// The extension’s state. Possible values are: + /// + /// * Approved + /// * AssetsUploaded + /// * Deleted + /// * Deprecated + /// * InReview + /// * InTest + /// * PendingAction + /// * Rejected + /// * Released + /// + [global::Newtonsoft.Json.JsonProperty("state", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionState State { get; set; } = default!; + + /// + /// Indicates whether the extension can view the user’s subscription level on the channel that the extension is installed on. Possible values are: + /// + /// * none — The extension can't view the user’s subscription level. + /// * optional — The extension can view the user’s subscription level. + /// + [global::Newtonsoft.Json.JsonProperty("subscriptions_support_level", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionSubscriptionsSupportLevel SubscriptionsSupportLevel { get; set; } = default!; + + /// + /// A short description of the extension that streamers see when hovering over the discovery splash screen in the Extensions manager. + /// + [global::Newtonsoft.Json.JsonProperty("summary", Required = global::Newtonsoft.Json.Required.Always)] + public string Summary { get; set; } = default!; + + /// + /// The email address that users use to get support for the extension. + /// + [global::Newtonsoft.Json.JsonProperty("support_email", Required = global::Newtonsoft.Json.Required.Always)] + public string SupportEmail { get; set; } = default!; + + /// + /// The extension’s version number. + /// + [global::Newtonsoft.Json.JsonProperty("version", Required = global::Newtonsoft.Json.Required.Always)] + public string Version { get; set; } = default!; + + /// + /// A brief description displayed on the channel to explain how the extension works. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_summary", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerSummary { get; set; } = default!; + + /// + /// Describes all views-related information such as how the extension is displayed on mobile devices. + /// + [global::Newtonsoft.Json.JsonProperty("views", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViews Views { get; set; } = default!; + + /// + /// Allowlisted configuration URLs for displaying the extension (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \-> **Extension** \-> **Version** \-> **Capabilities**). + /// + [global::Newtonsoft.Json.JsonProperty("allowlisted_config_urls", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList AllowlistedConfigUrls { get; set; } = default!; + + /// + /// Allowlisted panel URLs for displaying the extension (the allowlist is configured on Twitch’s [developer site](https://dev.twitch.tv/console/extensions) under the **Extensions** \-> **Extension** \-> **Version** \-> **Capabilities**). + /// + [global::Newtonsoft.Json.JsonProperty("allowlisted_panel_urls", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList AllowlistedPanelUrls { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalytics.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalytics.g.verified.cs new file mode 100644 index 0000000000..c441d6f016 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalytics.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.ExtensionAnalytics.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionAnalytics + { + /// + /// An ID that identifies the extension that the report was generated for. + /// + [global::Newtonsoft.Json.JsonProperty("extension_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ExtensionId { get; set; } = default!; + + /// + /// The URL that you use to download the report. The URL is valid for 5 minutes. + /// + [global::Newtonsoft.Json.JsonProperty("URL", Required = global::Newtonsoft.Json.Required.Always)] + public string URL { get; set; } = default!; + + /// + /// The type of report. + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public string Type { get; set; } = default!; + + /// + /// The reporting window’s start and end dates, in RFC3339 format. + /// + [global::Newtonsoft.Json.JsonProperty("date_range", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionAnalyticsDateRange DateRange { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalyticsDateRange.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalyticsDateRange.g.verified.cs new file mode 100644 index 0000000000..ee51449a7b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionAnalyticsDateRange.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ExtensionAnalyticsDateRange.g.cs + +#nullable enable + +namespace G +{ + /// + /// The reporting window’s start and end dates, in RFC3339 format. + /// + public sealed partial class ExtensionAnalyticsDateRange + { + /// + /// The reporting window’s start date. + /// + [global::Newtonsoft.Json.JsonProperty("started_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartedAt { get; set; } = default!; + + /// + /// The reporting window’s end date. + /// + [global::Newtonsoft.Json.JsonProperty("ended_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProduct.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProduct.g.verified.cs new file mode 100644 index 0000000000..2c8c5b4b1f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProduct.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.ExtensionBitsProduct.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionBitsProduct + { + /// + /// The product's SKU. The SKU is unique across an extension's products. + /// + [global::Newtonsoft.Json.JsonProperty("sku", Required = global::Newtonsoft.Json.Required.Always)] + public string Sku { get; set; } = default!; + + /// + /// An object that contains the product's cost information. + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionBitsProductCost Cost { get; set; } = default!; + + /// + /// A Boolean value that indicates whether the product is in development. If **true**, the product is not available for public use. + /// + [global::Newtonsoft.Json.JsonProperty("in_development", Required = global::Newtonsoft.Json.Required.Always)] + public bool InDevelopment { get; set; } = default!; + + /// + /// The product's name as displayed in the extension. + /// + [global::Newtonsoft.Json.JsonProperty("display_name", Required = global::Newtonsoft.Json.Required.Always)] + public string DisplayName { get; set; } = default!; + + /// + /// The date and time, in RFC3339 format, when the product expires. + /// + [global::Newtonsoft.Json.JsonProperty("expiration", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime Expiration { get; set; } = default!; + + /// + /// A Boolean value that determines whether Bits product purchase events are broadcast to all instances of an extension on a channel. The events are broadcast via the `onTransactionComplete` helper callback. Is **true** if the event is broadcast to all instances. + /// + [global::Newtonsoft.Json.JsonProperty("is_broadcast", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsBroadcast { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCost.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCost.g.verified.cs new file mode 100644 index 0000000000..784c4e8601 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCost.g.verified.cs @@ -0,0 +1,32 @@ +//HintName: G.Models.ExtensionBitsProductCost.g.cs + +#nullable enable + +namespace G +{ + /// + /// An object that contains the product's cost information. + /// + public sealed partial class ExtensionBitsProductCost + { + /// + /// The product's price. + /// + [global::Newtonsoft.Json.JsonProperty("amount", Required = global::Newtonsoft.Json.Required.Always)] + public int Amount { get; set; } = default!; + + /// + /// The type of currency. Possible values are: + /// + /// * bits + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionBitsProductCostType Type { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCostType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCostType.g.verified.cs new file mode 100644 index 0000000000..ff4d7981f8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionBitsProductCostType.g.verified.cs @@ -0,0 +1,21 @@ +//HintName: G.Models.ExtensionBitsProductCostType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of currency. Possible values are: + /// + /// * bits + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionBitsProductCostType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="bits")] + Bits, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationLocation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationLocation.g.verified.cs new file mode 100644 index 0000000000..bdb47a3243 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationLocation.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.ExtensionConfigurationLocation.g.cs + +#nullable enable + +namespace G +{ + /// + /// The location of where the extension’s configuration is stored. Possible values are: + /// + /// * hosted — The Extensions Configuration Service hosts the configuration. + /// * custom — The Extension Backend Service (EBS) hosts the configuration. + /// * none — The extension doesn't require configuration. + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionConfigurationLocation + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="hosted")] + Hosted, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="custom")] + Custom, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="none")] + None, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegment.g.verified.cs new file mode 100644 index 0000000000..a2ec20e7a2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegment.g.verified.cs @@ -0,0 +1,46 @@ +//HintName: G.Models.ExtensionConfigurationSegment.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionConfigurationSegment + { + /// + /// The type of segment. Possible values are: + /// + /// * broadcaster + /// * developer + /// * global + /// + [global::Newtonsoft.Json.JsonProperty("segment", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionConfigurationSegmentSegment Segment { get; set; } = default!; + + /// + /// The ID of the broadcaster that installed the extension. The object includes this field only if the `segment` query parameter is set to developer or broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id")] + public string? BroadcasterId { get; set; } + + /// + /// The contents of the segment. This string may be a plain-text string or a string-encoded JSON object. + /// + [global::Newtonsoft.Json.JsonProperty("content", Required = global::Newtonsoft.Json.Required.Always)] + public string Content { get; set; } = default!; + + /// + /// The version number that identifies this definition of the segment’s data. + /// + [global::Newtonsoft.Json.JsonProperty("version", Required = global::Newtonsoft.Json.Required.Always)] + public string Version { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegmentSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegmentSegment.g.verified.cs new file mode 100644 index 0000000000..9099c449f0 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionConfigurationSegmentSegment.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.ExtensionConfigurationSegmentSegment.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of segment. Possible values are: + /// + /// * broadcaster + /// * developer + /// * global + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionConfigurationSegmentSegment + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="broadcaster")] + Broadcaster, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="developer")] + Developer, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="global")] + Global, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionIconUrls.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionIconUrls.g.verified.cs new file mode 100644 index 0000000000..d427f60a19 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionIconUrls.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.ExtensionIconUrls.g.cs + +#nullable enable + +namespace G +{ + /// + /// A dictionary that contains URLs to different sizes of the default icon. The dictionary’s key identifies the icon’s size (for example, 24x24), and the dictionary’s value contains the URL to the icon. + /// + public sealed partial class ExtensionIconUrls + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("100x100")] + public string? _100x100 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("24x24")] + public string? _24x24 { get; set; } + + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("300x200")] + public string? _300x200 { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionLiveChannel.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionLiveChannel.g.verified.cs new file mode 100644 index 0000000000..c1bd7f2819 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionLiveChannel.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.ExtensionLiveChannel.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionLiveChannel + { + /// + /// The ID of the broadcaster that is streaming live and has installed or activated the extension. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The name of the category or game being streamed. + /// + [global::Newtonsoft.Json.JsonProperty("game_name", Required = global::Newtonsoft.Json.Required.Always)] + public string GameName { get; set; } = default!; + + /// + /// The ID of the category or game being streamed. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The title of the broadcaster’s stream. May be an empty string if not specified. + /// + [global::Newtonsoft.Json.JsonProperty("title", Required = global::Newtonsoft.Json.Required.Always)] + public string Title { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecret.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecret.g.verified.cs new file mode 100644 index 0000000000..dc33518123 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecret.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ExtensionSecret.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionSecret + { + /// + /// The version number that identifies this definition of the secret’s data. + /// + [global::Newtonsoft.Json.JsonProperty("format_version", Required = global::Newtonsoft.Json.Required.Always)] + public int FormatVersion { get; set; } = default!; + + /// + /// The list of secrets. + /// + [global::Newtonsoft.Json.JsonProperty("secrets", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Secrets { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecretSecrets.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecretSecrets.g.verified.cs new file mode 100644 index 0000000000..8c33a032bf --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSecretSecrets.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.ExtensionSecretSecrets.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionSecretSecrets + { + /// + /// The raw secret that you use with JWT encoding. + /// + [global::Newtonsoft.Json.JsonProperty("content", Required = global::Newtonsoft.Json.Required.Always)] + public string Content { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that you may begin using this secret to sign a JWT. + /// + [global::Newtonsoft.Json.JsonProperty("active_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime ActiveAt { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) that you must stop using this secret to decode a JWT. + /// + [global::Newtonsoft.Json.JsonProperty("expires_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime ExpiresAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionState.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionState.g.verified.cs new file mode 100644 index 0000000000..d59dca877e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionState.g.verified.cs @@ -0,0 +1,69 @@ +//HintName: G.Models.ExtensionState.g.cs + +#nullable enable + +namespace G +{ + /// + /// The extension’s state. Possible values are: + /// + /// * Approved + /// * AssetsUploaded + /// * Deleted + /// * Deprecated + /// * InReview + /// * InTest + /// * PendingAction + /// * Rejected + /// * Released + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionState + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="Approved")] + Approved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="AssetsUploaded")] + AssetsUploaded, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="Deleted")] + Deleted, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="Deprecated")] + Deprecated, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="InReview")] + InReview, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="InTest")] + InTest, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="PendingAction")] + PendingAction, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="Rejected")] + Rejected, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="Released")] + Released, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSubscriptionsSupportLevel.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSubscriptionsSupportLevel.g.verified.cs new file mode 100644 index 0000000000..9230f4d887 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionSubscriptionsSupportLevel.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.ExtensionSubscriptionsSupportLevel.g.cs + +#nullable enable + +namespace G +{ + /// + /// Indicates whether the extension can view the user’s subscription level on the channel that the extension is installed on. Possible values are: + /// + /// * none — The extension can't view the user’s subscription level. + /// * optional — The extension can view the user’s subscription level. + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionSubscriptionsSupportLevel + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="none")] + None, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="optional")] + Optional, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransaction.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransaction.g.verified.cs new file mode 100644 index 0000000000..7ee13b9a4d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransaction.g.verified.cs @@ -0,0 +1,80 @@ +//HintName: G.Models.ExtensionTransaction.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class ExtensionTransaction + { + /// + /// An ID that identifies the transaction. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of the transaction. + /// + [global::Newtonsoft.Json.JsonProperty("timestamp", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime Timestamp { get; set; } = default!; + + /// + /// The ID of the broadcaster that owns the channel where the transaction occurred. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The ID of the user that purchased the digital product. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// The type of transaction. Possible values are: + /// + /// * BITS\_IN\_EXTENSION + /// + [global::Newtonsoft.Json.JsonProperty("product_type", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionTransactionProductType ProductType { get; set; } = default!; + + /// + /// Contains details about the digital product. + /// + [global::Newtonsoft.Json.JsonProperty("product_data", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionTransactionProductData ProductData { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductData.g.verified.cs new file mode 100644 index 0000000000..d0014dbfde --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductData.g.verified.cs @@ -0,0 +1,60 @@ +//HintName: G.Models.ExtensionTransactionProductData.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains details about the digital product. + /// + public sealed partial class ExtensionTransactionProductData + { + /// + /// An ID that identifies the digital product. + /// + [global::Newtonsoft.Json.JsonProperty("sku", Required = global::Newtonsoft.Json.Required.Always)] + public string Sku { get; set; } = default!; + + /// + /// Set to `twitch.ext.` \+ `<the extension's ID>`. + /// + [global::Newtonsoft.Json.JsonProperty("domain", Required = global::Newtonsoft.Json.Required.Always)] + public string Domain { get; set; } = default!; + + /// + /// Contains details about the digital product’s cost. + /// + [global::Newtonsoft.Json.JsonProperty("cost", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionTransactionProductDataCost Cost { get; set; } = default!; + + /// + /// A Boolean value that determines whether the product is in development. Is **true** if the digital product is in development and cannot be exchanged. + /// + [global::Newtonsoft.Json.JsonProperty("inDevelopment", Required = global::Newtonsoft.Json.Required.Always)] + public bool InDevelopment { get; set; } = default!; + + /// + /// The name of the digital product. + /// + [global::Newtonsoft.Json.JsonProperty("displayName", Required = global::Newtonsoft.Json.Required.Always)] + public string DisplayName { get; set; } = default!; + + /// + /// This field is always empty since you may purchase only unexpired products. + /// + [global::Newtonsoft.Json.JsonProperty("expiration", Required = global::Newtonsoft.Json.Required.Always)] + public string Expiration { get; set; } = default!; + + /// + /// A Boolean value that determines whether the data was broadcast to all instances of the extension. Is **true** if the data was broadcast to all instances. + /// + [global::Newtonsoft.Json.JsonProperty("broadcast", Required = global::Newtonsoft.Json.Required.Always)] + public bool Broadcast { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCost.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCost.g.verified.cs new file mode 100644 index 0000000000..3993fc4b81 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCost.g.verified.cs @@ -0,0 +1,32 @@ +//HintName: G.Models.ExtensionTransactionProductDataCost.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains details about the digital product’s cost. + /// + public sealed partial class ExtensionTransactionProductDataCost + { + /// + /// The amount exchanged for the digital product. + /// + [global::Newtonsoft.Json.JsonProperty("amount", Required = global::Newtonsoft.Json.Required.Always)] + public int Amount { get; set; } = default!; + + /// + /// The type of currency exchanged. Possible values are: + /// + /// * bits + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionTransactionProductDataCostType Type { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCostType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCostType.g.verified.cs new file mode 100644 index 0000000000..b8c716a6a0 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductDataCostType.g.verified.cs @@ -0,0 +1,21 @@ +//HintName: G.Models.ExtensionTransactionProductDataCostType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of currency exchanged. Possible values are: + /// + /// * bits + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionTransactionProductDataCostType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="bits")] + Bits, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductType.g.verified.cs new file mode 100644 index 0000000000..eaf68c6c6d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionTransactionProductType.g.verified.cs @@ -0,0 +1,21 @@ +//HintName: G.Models.ExtensionTransactionProductType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of transaction. Possible values are: + /// + /// * BITS\_IN\_EXTENSION + /// + [global::System.Runtime.Serialization.DataContract] + public enum ExtensionTransactionProductType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="BITS_IN_EXTENSION")] + BITSINEXTENSION, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViews.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViews.g.verified.cs new file mode 100644 index 0000000000..d8599756e9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViews.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.ExtensionViews.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes all views-related information such as how the extension is displayed on mobile devices. + /// + public sealed partial class ExtensionViews + { + /// + /// Describes how the extension is displayed on mobile devices. + /// + [global::Newtonsoft.Json.JsonProperty("mobile", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViewsMobile Mobile { get; set; } = default!; + + /// + /// Describes how the extension is rendered if the extension may be activated as a panel extension. + /// + [global::Newtonsoft.Json.JsonProperty("panel", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViewsPanel Panel { get; set; } = default!; + + /// + /// Describes how the extension is rendered if the extension may be activated as a video-overlay extension. + /// + [global::Newtonsoft.Json.JsonProperty("video_overlay", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViewsVideoOverlay VideoOverlay { get; set; } = default!; + + /// + /// Describes how the extension is rendered if the extension may be activated as a video-component extension. + /// + [global::Newtonsoft.Json.JsonProperty("component", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViewsComponent Component { get; set; } = default!; + + /// + /// Describes the view that is shown to broadcasters while they are configuring your extension within the Extension Manager. + /// + [global::Newtonsoft.Json.JsonProperty("config", Required = global::Newtonsoft.Json.Required.Always)] + public ExtensionViewsConfig Config { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsComponent.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsComponent.g.verified.cs new file mode 100644 index 0000000000..714438b99c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsComponent.g.verified.cs @@ -0,0 +1,60 @@ +//HintName: G.Models.ExtensionViewsComponent.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes how the extension is rendered if the extension may be activated as a video-component extension. + /// + public sealed partial class ExtensionViewsComponent + { + /// + /// The HTML file that is shown to viewers on the channel page when the extension is activated in a Video - Component slot. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerUrl { get; set; } = default!; + + /// + /// The width value of the ratio (width : height) which determines the extension’s width, and how the extension’s iframe will resize in different video player environments. + /// + [global::Newtonsoft.Json.JsonProperty("aspect_ratio_x", Required = global::Newtonsoft.Json.Required.Always)] + public int AspectRatioX { get; set; } = default!; + + /// + /// The height value of the ratio (width : height) which determines the extension’s height, and how the extension’s iframe will resize in different video player environments. + /// + [global::Newtonsoft.Json.JsonProperty("aspect_ratio_y", Required = global::Newtonsoft.Json.Required.Always)] + public int AspectRatioY { get; set; } = default!; + + /// + /// A Boolean value that determines whether to apply CSS zoom. If **true**, a CSS zoom is applied such that the size of the extension is variable but the inner dimensions are fixed based on Scale Pixels. This allows your extension to render as if it is of fixed width and height. If **false**, the inner dimensions of the extension iframe are variable, meaning your extension must implement responsiveness. + /// + [global::Newtonsoft.Json.JsonProperty("autoscale", Required = global::Newtonsoft.Json.Required.Always)] + public bool Autoscale { get; set; } = default!; + + /// + /// The base width, in pixels, of the extension to use when scaling (see `autoscale`). This value is ignored if `autoscale` is **false**. + /// + [global::Newtonsoft.Json.JsonProperty("scale_pixels", Required = global::Newtonsoft.Json.Required.Always)] + public int ScalePixels { get; set; } = default!; + + /// + /// The height as a percent of the maximum height of a video component extension. Values are between 1% - 100%. + /// + [global::Newtonsoft.Json.JsonProperty("target_height", Required = global::Newtonsoft.Json.Required.Always)] + public int TargetHeight { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension can link to non-Twitch domains. + /// + [global::Newtonsoft.Json.JsonProperty("can_link_external_content", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanLinkExternalContent { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsConfig.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsConfig.g.verified.cs new file mode 100644 index 0000000000..4aa21bb4ef --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsConfig.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ExtensionViewsConfig.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes the view that is shown to broadcasters while they are configuring your extension within the Extension Manager. + /// + public sealed partial class ExtensionViewsConfig + { + /// + /// The HTML file shown to broadcasters while they are configuring your extension within the Extension Manager. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerUrl { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension can link to non-Twitch domains. + /// + [global::Newtonsoft.Json.JsonProperty("can_link_external_content", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanLinkExternalContent { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsMobile.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsMobile.g.verified.cs new file mode 100644 index 0000000000..443e09b34a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsMobile.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.ExtensionViewsMobile.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes how the extension is displayed on mobile devices. + /// + public sealed partial class ExtensionViewsMobile + { + /// + /// The HTML file that is shown to viewers on mobile devices. This page is presented to viewers as a panel behind the chat area of the mobile app. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerUrl { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsPanel.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsPanel.g.verified.cs new file mode 100644 index 0000000000..802fd9062e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsPanel.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.ExtensionViewsPanel.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes how the extension is rendered if the extension may be activated as a panel extension. + /// + public sealed partial class ExtensionViewsPanel + { + /// + /// The HTML file that is shown to viewers on the channel page when the extension is activated in a Panel slot. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerUrl { get; set; } = default!; + + /// + /// The height, in pixels, of the panel component that the extension is rendered in. + /// + [global::Newtonsoft.Json.JsonProperty("height", Required = global::Newtonsoft.Json.Required.Always)] + public int Height { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension can link to non-Twitch domains. + /// + [global::Newtonsoft.Json.JsonProperty("can_link_external_content", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanLinkExternalContent { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsVideoOverlay.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsVideoOverlay.g.verified.cs new file mode 100644 index 0000000000..5a39eec842 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.ExtensionViewsVideoOverlay.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.ExtensionViewsVideoOverlay.g.cs + +#nullable enable + +namespace G +{ + /// + /// Describes how the extension is rendered if the extension may be activated as a video-overlay extension. + /// + public sealed partial class ExtensionViewsVideoOverlay + { + /// + /// The HTML file that is shown to viewers on the channel page when the extension is activated on the Video - Overlay slot. + /// + [global::Newtonsoft.Json.JsonProperty("viewer_url", Required = global::Newtonsoft.Json.Required.Always)] + public string ViewerUrl { get; set; } = default!; + + /// + /// A Boolean value that determines whether the extension can link to non-Twitch domains. + /// + [global::Newtonsoft.Json.JsonProperty("can_link_external_content", Required = global::Newtonsoft.Json.Required.Always)] + public bool CanLinkExternalContent { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Game.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Game.g.verified.cs new file mode 100644 index 0000000000..623ab7939b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.Game.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.Game.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class Game + { + /// + /// An ID that identifies the category or game. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The category’s or game’s name. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// A URL to the category’s or game’s box art. You must replace the `{width}x{height}` placeholder with the size of image you want. + /// + [global::Newtonsoft.Json.JsonProperty("box_art_url", Required = global::Newtonsoft.Json.Required.Always)] + public string BoxArtUrl { get; set; } = default!; + + /// + /// The ID that [IGDB](https://www.igdb.com/) uses to identify this game. If the IGDB ID is not available to Twitch, this field is set to an empty string. + /// + [global::Newtonsoft.Json.JsonProperty("igdb_id", Required = global::Newtonsoft.Json.Required.Always)] + public string IgdbId { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalytics.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalytics.g.verified.cs new file mode 100644 index 0000000000..d1f77d3e40 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalytics.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.GameAnalytics.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GameAnalytics + { + /// + /// An ID that identifies the game that the report was generated for. + /// + [global::Newtonsoft.Json.JsonProperty("game_id", Required = global::Newtonsoft.Json.Required.Always)] + public string GameId { get; set; } = default!; + + /// + /// The URL that you use to download the report. The URL is valid for 5 minutes. + /// + [global::Newtonsoft.Json.JsonProperty("URL", Required = global::Newtonsoft.Json.Required.Always)] + public string URL { get; set; } = default!; + + /// + /// The type of report. + /// + [global::Newtonsoft.Json.JsonProperty("type", Required = global::Newtonsoft.Json.Required.Always)] + public string Type { get; set; } = default!; + + /// + /// The reporting window’s start and end dates, in RFC3339 format. + /// + [global::Newtonsoft.Json.JsonProperty("date_range", Required = global::Newtonsoft.Json.Required.Always)] + public GameAnalyticsDateRange DateRange { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalyticsDateRange.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalyticsDateRange.g.verified.cs new file mode 100644 index 0000000000..c5aaa2cd07 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GameAnalyticsDateRange.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GameAnalyticsDateRange.g.cs + +#nullable enable + +namespace G +{ + /// + /// The reporting window’s start and end dates, in RFC3339 format. + /// + public sealed partial class GameAnalyticsDateRange + { + /// + /// The reporting window’s start date. + /// + [global::Newtonsoft.Json.JsonProperty("started_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartedAt { get; set; } = default!; + + /// + /// The reporting window’s end date. + /// + [global::Newtonsoft.Json.JsonProperty("ended_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponse.g.verified.cs new file mode 100644 index 0000000000..478b79a16c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetAdScheduleResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetAdScheduleResponse + { + /// + /// A list that contains information related to the channel’s ad schedule. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponseData.g.verified.cs new file mode 100644 index 0000000000..7ba390cf23 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAdScheduleResponseData.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.GetAdScheduleResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetAdScheduleResponseData + { + /// + /// The number of snoozes available for the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("snooze_count", Required = global::Newtonsoft.Json.Required.Always)] + public int SnoozeCount { get; set; } = default!; + + /// + /// The UTC timestamp when the broadcaster will gain an additional snooze, in RFC3339 format. + /// + [global::Newtonsoft.Json.JsonProperty("snooze_refresh_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime SnoozeRefreshAt { get; set; } = default!; + + /// + /// The UTC timestamp of the broadcaster’s next scheduled ad, in RFC3339 format. Empty if the channel has no ad scheduled or is not live. + /// + [global::Newtonsoft.Json.JsonProperty("next_ad_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime NextAdAt { get; set; } = default!; + + /// + /// The length in seconds of the scheduled upcoming ad break. + /// + [global::Newtonsoft.Json.JsonProperty("duration", Required = global::Newtonsoft.Json.Required.Always)] + public int Duration { get; set; } = default!; + + /// + /// The UTC timestamp of the broadcaster’s last ad-break, in RFC3339 format. Empty if the channel has not run an ad or is not live. + /// + [global::Newtonsoft.Json.JsonProperty("last_ad_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime LastAdAt { get; set; } = default!; + + /// + /// The amount of pre-roll free time remaining for the channel in seconds. Returns 0 if they are currently not pre-roll free. + /// + [global::Newtonsoft.Json.JsonProperty("preroll_free_time", Required = global::Newtonsoft.Json.Required.Always)] + public int PrerollFreeTime { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponse.g.verified.cs new file mode 100644 index 0000000000..0708051470 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponse.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.GetAllStreamTagsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Obsolete("This model marked as deprecated.")] + public sealed partial class GetAllStreamTagsResponse + { + /// + /// The list of stream tags that the broadcaster can apply to their channel. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + [global::System.Obsolete("This property marked as deprecated.")] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + [global::System.Obsolete("This property marked as deprecated.")] + public GetAllStreamTagsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..3fd588df9d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAllStreamTagsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetAllStreamTagsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetAllStreamTagsResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value to page forwards through the results. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAutoModSettingsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAutoModSettingsResponse.g.verified.cs new file mode 100644 index 0000000000..75268c13d7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetAutoModSettingsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetAutoModSettingsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetAutoModSettingsResponse + { + /// + /// The list of AutoMod settings. The list contains a single object that contains all the AutoMod settings. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponse.g.verified.cs new file mode 100644 index 0000000000..3e3e46a210 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetBannedUsersResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetBannedUsersResponse + { + /// + /// The list of users that were banned or put in a timeout. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetBannedUsersResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponsePagination.g.verified.cs new file mode 100644 index 0000000000..0dd8afed98 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBannedUsersResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetBannedUsersResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetBannedUsersResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardPeriod.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardPeriod.g.verified.cs new file mode 100644 index 0000000000..6d7aa2fbcd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardPeriod.g.verified.cs @@ -0,0 +1,39 @@ +//HintName: G.Models.GetBitsLeaderboardPeriod.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetBitsLeaderboardPeriod + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="day")] + Day, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="week")] + Week, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="month")] + Month, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="year")] + Year, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="all")] + All, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponse.g.verified.cs new file mode 100644 index 0000000000..108874122b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponse.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetBitsLeaderboardResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetBitsLeaderboardResponse + { + /// + /// A list of leaderboard leaders. The leaders are returned in rank order by how much they’ve cheered. The array is empty if nobody has cheered bits. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The reporting window’s start and end dates, in RFC3339 format. The dates are calculated by using the _started\_at_ and _period_ query parameters. If you don’t specify the _started\_at_ query parameter, the fields contain empty strings. + /// + [global::Newtonsoft.Json.JsonProperty("date_range", Required = global::Newtonsoft.Json.Required.Always)] + public GetBitsLeaderboardResponseDateRange DateRange { get; set; } = default!; + + /// + /// The number of ranked users in `data`. This is the value in the _count_ query parameter or the total number of entries on the leaderboard, whichever is less. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponseDateRange.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponseDateRange.g.verified.cs new file mode 100644 index 0000000000..e5c10f4373 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBitsLeaderboardResponseDateRange.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetBitsLeaderboardResponseDateRange.g.cs + +#nullable enable + +namespace G +{ + /// + /// The reporting window’s start and end dates, in RFC3339 format. The dates are calculated by using the _started\_at_ and _period_ query parameters. If you don’t specify the _started\_at_ query parameter, the fields contain empty strings. + /// + public sealed partial class GetBitsLeaderboardResponseDateRange + { + /// + /// The reporting window’s start date. + /// + [global::Newtonsoft.Json.JsonProperty("started_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartedAt { get; set; } = default!; + + /// + /// The reporting window’s end date. + /// + [global::Newtonsoft.Json.JsonProperty("ended_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponse.g.verified.cs new file mode 100644 index 0000000000..521190d37b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetBlockedTermsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetBlockedTermsResponse + { + /// + /// The list of blocked terms. The list is in descending order of when they were created (see the `created_at` timestamp). + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetBlockedTermsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..160e804a25 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBlockedTermsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetBlockedTermsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetBlockedTermsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponse.g.verified.cs new file mode 100644 index 0000000000..9b3843e87e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponse.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.GetBroadcasterSubscriptionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetBroadcasterSubscriptionsResponse + { + /// + /// The list of users that subscribe to the broadcaster. The list is empty if the broadcaster has no subscribers. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetBroadcasterSubscriptionsResponsePagination? Pagination { get; set; } + + /// + /// The current number of subscriber points earned by this broadcaster. Points are based on the subscription tier of each user that subscribes to this broadcaster. For example, a Tier 1 subscription is worth 1 point, Tier 2 is worth 2 points, and Tier 3 is worth 6 points. The number of points determines the number of emote slots that are unlocked for the broadcaster (see [Subscriber Emote Slots](https://help.twitch.tv/s/article/subscriber-emote-guide#emoteslots)). + /// + [global::Newtonsoft.Json.JsonProperty("points", Required = global::Newtonsoft.Json.Required.Always)] + public int Points { get; set; } = default!; + + /// + /// The total number of users that subscribe to this broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..69964af14a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetBroadcasterSubscriptionsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetBroadcasterSubscriptionsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetBroadcasterSubscriptionsResponsePagination + { + /// + /// The cursor used to get the next or previous page of results. Use the cursor to set the request’s _after_ or _before_ query parameter depending on whether you’re paging forwards or backwards. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelChatBadgesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelChatBadgesResponse.g.verified.cs new file mode 100644 index 0000000000..d329f2ddd3 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelChatBadgesResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelChatBadgesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelChatBadgesResponse + { + /// + /// The list of chat badges. The list is sorted in ascending order by `set_id`, and within a set, the list is sorted in ascending order by `id`. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEditorsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEditorsResponse.g.verified.cs new file mode 100644 index 0000000000..9ab12c27d5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEditorsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelEditorsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelEditorsResponse + { + /// + /// A list of users that are editors for the specified broadcaster. The list is empty if the broadcaster doesn’t have editors. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEmotesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEmotesResponse.g.verified.cs new file mode 100644 index 0000000000..7f873c036a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelEmotesResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetChannelEmotesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelEmotesResponse + { + /// + /// The list of emotes that the specified broadcaster created. If the broadcaster hasn't created custom emotes, the list is empty. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object. + /// + [global::Newtonsoft.Json.JsonProperty("template", Required = global::Newtonsoft.Json.Required.Always)] + public string Template { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponse.g.verified.cs new file mode 100644 index 0000000000..59bcead98a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponse.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetChannelFollowersResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelFollowersResponse + { + /// + /// The list of users that follow the specified broadcaster. The list is in descending order by `followed_at` (with the most recent follower first). The list is empty if nobody follows the broadcaster, the specified `user_id` isn’t in the follower list, the user access token is missing the **moderator:read:followers** scope, or the user isn’t the broadcaster or moderator for the channel. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetChannelFollowersResponsePagination? Pagination { get; set; } + + /// + /// The total number of users that follow this broadcaster. As someone pages through the list, the number of users may change as users follow or unfollow the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponseData.g.verified.cs new file mode 100644 index 0000000000..6796c9063e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponseData.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.GetChannelFollowersResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelFollowersResponseData + { + /// + /// The UTC timestamp when the user started following the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("followed_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime FollowedAt { get; set; } = default!; + + /// + /// An ID that uniquely identifies the user that’s following the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponsePagination.g.verified.cs new file mode 100644 index 0000000000..6147c92881 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelFollowersResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelFollowersResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + public sealed partial class GetChannelFollowersResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponse.g.verified.cs new file mode 100644 index 0000000000..fcb3957b4a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponse.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.Models.GetChannelGuestStarSettingsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelGuestStarSettingsResponse + { + /// + /// Flag determining if Guest Star moderators have access to control whether a guest is live once assigned to a slot. + /// + [global::Newtonsoft.Json.JsonProperty("is_moderator_send_live_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsModeratorSendLiveEnabled { get; set; } = default!; + + /// + /// Number of slots the Guest Star call interface will allow the host to add to a call. Required to be between 1 and 6. + /// + [global::Newtonsoft.Json.JsonProperty("slot_count", Required = global::Newtonsoft.Json.Required.Always)] + public int SlotCount { get; set; } = default!; + + /// + /// Flag determining if Browser Sources subscribed to sessions on this channel should output audio + /// + [global::Newtonsoft.Json.JsonProperty("is_browser_source_audio_enabled", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsBrowserSourceAudioEnabled { get; set; } = default!; + + /// + /// This setting determines how the guests within a session should be laid out within the browser source. Can be one of the following values: + /// + /// * `TILED_LAYOUT`: All live guests are tiled within the browser source with the same size. + /// * `SCREENSHARE_LAYOUT`: All live guests are tiled within the browser source with the same size. If there is an active screen share, it is sized larger than the other guests. + /// + [global::Newtonsoft.Json.JsonProperty("group_layout", Required = global::Newtonsoft.Json.Required.Always)] + public GetChannelGuestStarSettingsResponseGroupLayout GroupLayout { get; set; } = default!; + + /// + /// View only token to generate browser source URLs + /// + [global::Newtonsoft.Json.JsonProperty("browser_source_token", Required = global::Newtonsoft.Json.Required.Always)] + public string BrowserSourceToken { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.verified.cs new file mode 100644 index 0000000000..b435f5e6d8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.GetChannelGuestStarSettingsResponseGroupLayout.g.cs + +#nullable enable + +namespace G +{ + /// + /// This setting determines how the guests within a session should be laid out within the browser source. Can be one of the following values: + /// + /// * `TILED_LAYOUT`: All live guests are tiled within the browser source with the same size. + /// * `SCREENSHARE_LAYOUT`: All live guests are tiled within the browser source with the same size. If there is an active screen share, it is sized larger than the other guests. + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetChannelGuestStarSettingsResponseGroupLayout + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="TILED_LAYOUT")] + TILEDLAYOUT, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="SCREENSHARE_LAYOUT")] + SCREENSHARELAYOUT, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelInformationResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelInformationResponse.g.verified.cs new file mode 100644 index 0000000000..4310f082ec --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelInformationResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelInformationResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelInformationResponse + { + /// + /// A list that contains information about the specified channels. The list is empty if the specified channels weren’t found. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponse.g.verified.cs new file mode 100644 index 0000000000..72b944c01e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelStreamScheduleResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelStreamScheduleResponse + { + /// + /// The broadcaster’s streaming schedule. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public GetChannelStreamScheduleResponseData Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseData.g.verified.cs new file mode 100644 index 0000000000..84fd4c1b3c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseData.g.verified.cs @@ -0,0 +1,54 @@ +//HintName: G.Models.GetChannelStreamScheduleResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// The broadcaster’s streaming schedule. + /// + public sealed partial class GetChannelStreamScheduleResponseData + { + /// + /// The list of broadcasts in the broadcaster’s streaming schedule. + /// + [global::Newtonsoft.Json.JsonProperty("segments", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Segments { get; set; } = default!; + + /// + /// The ID of the broadcaster that owns the broadcast schedule. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled. + /// + [global::Newtonsoft.Json.JsonProperty("vacation", Required = global::Newtonsoft.Json.Required.Always)] + public GetChannelStreamScheduleResponseDataVacation Vacation { get; set; } = default!; + + /// + /// The information used to page through a list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetChannelStreamScheduleResponseDataPagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataPagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataPagination.g.verified.cs new file mode 100644 index 0000000000..cc076420b7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataPagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelStreamScheduleResponseDataPagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through a list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + public sealed partial class GetChannelStreamScheduleResponseDataPagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataVacation.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataVacation.g.verified.cs new file mode 100644 index 0000000000..9a8508852f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelStreamScheduleResponseDataVacation.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetChannelStreamScheduleResponseDataVacation.g.cs + +#nullable enable + +namespace G +{ + /// + /// The dates when the broadcaster is on vacation and not streaming. Is set to **null** if vacation mode is not enabled. + /// + public sealed partial class GetChannelStreamScheduleResponseDataVacation + { + /// + /// The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation starts. + /// + [global::Newtonsoft.Json.JsonProperty("start_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime StartTime { get; set; } = default!; + + /// + /// The UTC date and time (in RFC3339 format) of when the broadcaster’s vacation ends. + /// + [global::Newtonsoft.Json.JsonProperty("end_time", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime EndTime { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelTeamsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelTeamsResponse.g.verified.cs new file mode 100644 index 0000000000..4022c122b7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChannelTeamsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChannelTeamsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChannelTeamsResponse + { + /// + /// The list of teams that the broadcaster is a member of. Returns an empty array if the broadcaster is not a member of a team. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponse.g.verified.cs new file mode 100644 index 0000000000..d770e99e79 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetCharityCampaignDonationsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCharityCampaignDonationsResponse + { + /// + /// A list that contains the donations that users have made to the broadcaster’s charity campaign. The list is empty if the broadcaster is not currently running a charity campaign; the donation information is not available after the campaign ends. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// An object that contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetCharityCampaignDonationsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..78f91a9e2e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignDonationsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCharityCampaignDonationsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// An object that contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetCharityCampaignDonationsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignResponse.g.verified.cs new file mode 100644 index 0000000000..3a95730b5e --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCharityCampaignResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCharityCampaignResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCharityCampaignResponse + { + /// + /// A list that contains the charity campaign that the broadcaster is currently running. The list is empty if the broadcaster is not running a charity campaign; the campaign information is not available after the campaign ends. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChatSettingsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChatSettingsResponse.g.verified.cs new file mode 100644 index 0000000000..0dff3201ba --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChatSettingsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChatSettingsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChatSettingsResponse + { + /// + /// The list of chat settings. The list contains a single object with all the settings. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponse.g.verified.cs new file mode 100644 index 0000000000..9b282c9133 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponse.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetChattersResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetChattersResponse + { + /// + /// The list of users that are connected to the broadcaster’s chat room. The list is empty if no users are connected to the chat room. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetChattersResponsePagination? Pagination { get; set; } + + /// + /// The total number of users that are connected to the broadcaster’s chat room. As you page through the list, the number of users may change as users join and leave the chat room. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponsePagination.g.verified.cs new file mode 100644 index 0000000000..54d00e51ed --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetChattersResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetChattersResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetChattersResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCheermotesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCheermotesResponse.g.verified.cs new file mode 100644 index 0000000000..d547abc4ee --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCheermotesResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCheermotesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCheermotesResponse + { + /// + /// The list of Cheermotes. The list is in ascending order by the `order` field’s value. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponse.g.verified.cs new file mode 100644 index 0000000000..ccc416ef84 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetClipsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetClipsResponse + { + /// + /// The list of video clips. For clips returned by _game\_id_ or _broadcaster\_id_, the list is in descending order by view count. For lists returned by _id_, the list is in the same order as the input IDs. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetClipsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..2cf9ff80ad --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetClipsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetClipsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetClipsResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponse.g.verified.cs new file mode 100644 index 0000000000..3d511d6784 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetConduitShardsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetConduitShardsResponse + { + /// + /// List of information about a conduit's shards. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains information used to page through a list of results. The object is empty if there are no more pages left to page through. + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetConduitShardsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseData.g.verified.cs new file mode 100644 index 0000000000..45cbda22ee --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseData.g.verified.cs @@ -0,0 +1,47 @@ +//HintName: G.Models.GetConduitShardsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetConduitShardsResponseData + { + /// + /// Shard ID. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The shard status. The subscriber receives events only for enabled shards. Possible values are: + /// + /// * enabled — The shard is enabled. + /// * webhook\_callback\_verification\_pending — The shard is pending verification of the specified callback URL. + /// * webhook\_callback\_verification\_failed — The specified callback URL failed verification. + /// * notification\_failures\_exceeded — The notification delivery failure rate was too high. + /// * websocket\_disconnected — The client closed the connection. + /// * websocket\_failed\_ping\_pong — The client failed to respond to a ping message. + /// * websocket\_received\_inbound\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message). + /// * websocket\_internal\_error — The Twitch WebSocket server experienced an unexpected error. + /// * websocket\_network\_timeout — The Twitch WebSocket server timed out writing the message to the client. + /// * websocket\_network\_error — The Twitch WebSocket server experienced a network error writing the message to the client. + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public GetConduitShardsResponseDataStatus Status { get; set; } = default!; + + /// + /// The transport details used to send the notifications. + /// + [global::Newtonsoft.Json.JsonProperty("transport", Required = global::Newtonsoft.Json.Required.Always)] + public GetConduitShardsResponseDataTransport Transport { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataStatus.g.verified.cs new file mode 100644 index 0000000000..9f3a905826 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataStatus.g.verified.cs @@ -0,0 +1,75 @@ +//HintName: G.Models.GetConduitShardsResponseDataStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// The shard status. The subscriber receives events only for enabled shards. Possible values are: + /// + /// * enabled — The shard is enabled. + /// * webhook\_callback\_verification\_pending — The shard is pending verification of the specified callback URL. + /// * webhook\_callback\_verification\_failed — The specified callback URL failed verification. + /// * notification\_failures\_exceeded — The notification delivery failure rate was too high. + /// * websocket\_disconnected — The client closed the connection. + /// * websocket\_failed\_ping\_pong — The client failed to respond to a ping message. + /// * websocket\_received\_inbound\_traffic — The client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message). + /// * websocket\_internal\_error — The Twitch WebSocket server experienced an unexpected error. + /// * websocket\_network\_timeout — The Twitch WebSocket server timed out writing the message to the client. + /// * websocket\_network\_error — The Twitch WebSocket server experienced a network error writing the message to the client. + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetConduitShardsResponseDataStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="enabled")] + Enabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_pending")] + WebhookCallbackVerificationPending, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_failed")] + WebhookCallbackVerificationFailed, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="notification_failures_exceeded")] + NotificationFailuresExceeded, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_disconnected")] + WebsocketDisconnected, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_failed_ping_pong")] + WebsocketFailedPingPong, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_received_inbound_traffic")] + WebsocketReceivedInboundTraffic, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_internal_error")] + WebsocketInternalError, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_timeout")] + WebsocketNetworkTimeout, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_error")] + WebsocketNetworkError, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransport.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransport.g.verified.cs new file mode 100644 index 0000000000..29ccda6f92 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransport.g.verified.cs @@ -0,0 +1,51 @@ +//HintName: G.Models.GetConduitShardsResponseDataTransport.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport details used to send the notifications. + /// + public sealed partial class GetConduitShardsResponseDataTransport + { + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// + [global::Newtonsoft.Json.JsonProperty("method", Required = global::Newtonsoft.Json.Required.Always)] + public GetConduitShardsResponseDataTransportMethod Method { get; set; } = default!; + + /// + /// The callback URL where the notifications are sent. Included only if method is set to webhook. + /// + [global::Newtonsoft.Json.JsonProperty("callback")] + public string? Callback { get; set; } + + /// + /// An ID that identifies the WebSocket that notifications are sent to. Included only if method is set to websocket. + /// + [global::Newtonsoft.Json.JsonProperty("session_id")] + public string? SessionId { get; set; } + + /// + /// The UTC date and time that the WebSocket connection was established. Included only if method is set to websocket. + /// + [global::Newtonsoft.Json.JsonProperty("connected_at")] + public global::System.DateTime ConnectedAt { get; set; } + + /// + /// The UTC date and time that the WebSocket connection was lost. Included only if method is set to websocket. + /// + [global::Newtonsoft.Json.JsonProperty("disconnected_at")] + public global::System.DateTime DisconnectedAt { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransportMethod.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransportMethod.g.verified.cs new file mode 100644 index 0000000000..aacd3f2d97 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponseDataTransportMethod.g.verified.cs @@ -0,0 +1,27 @@ +//HintName: G.Models.GetConduitShardsResponseDataTransportMethod.g.cs + +#nullable enable + +namespace G +{ + /// + /// The transport method. Possible values are: + /// + /// * webhook + /// * websocket + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetConduitShardsResponseDataTransportMethod + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook")] + Webhook, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket")] + Websocket, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..5fa4a652f8 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitShardsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetConduitShardsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains information used to page through a list of results. The object is empty if there are no more pages left to page through. + /// + public sealed partial class GetConduitShardsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponse.g.verified.cs new file mode 100644 index 0000000000..8c4b68e0db --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetConduitsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetConduitsResponse + { + /// + /// List of information about the client’s conduits. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponseData.g.verified.cs new file mode 100644 index 0000000000..0ce986e3f9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetConduitsResponseData.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetConduitsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetConduitsResponseData + { + /// + /// Conduit ID. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// Number of shards associated with this conduit. + /// + [global::Newtonsoft.Json.JsonProperty("shard_count", Required = global::Newtonsoft.Json.Required.Always)] + public int ShardCount { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetContentClassificationLabelsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetContentClassificationLabelsResponse.g.verified.cs new file mode 100644 index 0000000000..89e6dbb7c4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetContentClassificationLabelsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetContentClassificationLabelsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetContentClassificationLabelsResponse + { + /// + /// A list that contains information about the available content classification labels. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCreatorGoalsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCreatorGoalsResponse.g.verified.cs new file mode 100644 index 0000000000..23b3963439 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCreatorGoalsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCreatorGoalsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCreatorGoalsResponse + { + /// + /// The list of goals. The list is empty if the broadcaster hasn’t created goals. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionResponse.g.verified.cs new file mode 100644 index 0000000000..e6b9585819 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCustomRewardRedemptionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCustomRewardRedemptionResponse + { + /// + /// The list of redemptions for the specified reward. The list is empty if there are no redemptions that match the redemption criteria. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionSort.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionSort.g.verified.cs new file mode 100644 index 0000000000..27fc423aa0 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionSort.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCustomRewardRedemptionSort.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetCustomRewardRedemptionSort + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="OLDEST")] + OLDEST, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="NEWEST")] + NEWEST, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionStatus.g.verified.cs new file mode 100644 index 0000000000..3465bf39df --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardRedemptionStatus.g.verified.cs @@ -0,0 +1,29 @@ +//HintName: G.Models.GetCustomRewardRedemptionStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetCustomRewardRedemptionStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="CANCELED")] + CANCELED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="FULFILLED")] + FULFILLED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="UNFULFILLED")] + UNFULFILLED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardResponse.g.verified.cs new file mode 100644 index 0000000000..9cb75d5bfc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetCustomRewardResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetCustomRewardResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetCustomRewardResponse + { + /// + /// A list of custom rewards. The list is in ascending order by `id`. If the broadcaster hasn’t created custom rewards, the list is empty. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsFulfillmentStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsFulfillmentStatus.g.verified.cs new file mode 100644 index 0000000000..9210337a3b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsFulfillmentStatus.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetDropsEntitlementsFulfillmentStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetDropsEntitlementsFulfillmentStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="CLAIMED")] + CLAIMED, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="FULFILLED")] + FULFILLED, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponse.g.verified.cs new file mode 100644 index 0000000000..0b1a6c8a1f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetDropsEntitlementsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetDropsEntitlementsResponse + { + /// + /// The list of entitlements. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetDropsEntitlementsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..bc5bedf8bf --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetDropsEntitlementsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetDropsEntitlementsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetDropsEntitlementsResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value to page forward through the results. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEmoteSetsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEmoteSetsResponse.g.verified.cs new file mode 100644 index 0000000000..b41e4a28ce --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEmoteSetsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetEmoteSetsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetEmoteSetsResponse + { + /// + /// The list of emotes found in the specified emote sets. The list is empty if none of the IDs were found. The list is in the same order as the set IDs specified in the request. Each set contains one or more emoticons. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object. + /// + [global::Newtonsoft.Json.JsonProperty("template", Required = global::Newtonsoft.Json.Required.Always)] + public string Template { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponse.g.verified.cs new file mode 100644 index 0000000000..9966412b2f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponse.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.GetEventSubSubscriptionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetEventSubSubscriptionsResponse + { + /// + /// The list of subscriptions. The list is ordered by the oldest subscription first. The list is empty if the client hasn't created subscriptions or there are no subscriptions that match the specified filter criteria. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The total number of subscriptions that you've created. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// The sum of all of your subscription costs. [Learn More](https://dev.twitch.tv/docs/eventsub/manage-subscriptions/#subscription-limits) + /// + [global::Newtonsoft.Json.JsonProperty("total_cost", Required = global::Newtonsoft.Json.Required.Always)] + public int TotalCost { get; set; } = default!; + + /// + /// The maximum total cost that you're allowed to incur for all subscriptions that you create. + /// + [global::Newtonsoft.Json.JsonProperty("max_total_cost", Required = global::Newtonsoft.Json.Required.Always)] + public int MaxTotalCost { get; set; } = default!; + + /// + /// An object that contains the cursor used to get the next page of subscriptions. The object is empty if there are no more pages to get. The number of subscriptions returned per page is undertermined. + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetEventSubSubscriptionsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..4b4f997aa5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventSubSubscriptionsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetEventSubSubscriptionsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// An object that contains the cursor used to get the next page of subscriptions. The object is empty if there are no more pages to get. The number of subscriptions returned per page is undertermined. + /// + public sealed partial class GetEventSubSubscriptionsResponsePagination + { + /// + /// The cursor value that you set the _after_ query parameter to. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsStatus.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsStatus.g.verified.cs new file mode 100644 index 0000000000..e1cbf98a48 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsStatus.g.verified.cs @@ -0,0 +1,94 @@ +//HintName: G.Models.GetEventsubSubscriptionsStatus.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetEventsubSubscriptionsStatus + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="enabled")] + Enabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_pending")] + WebhookCallbackVerificationPending, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="webhook_callback_verification_failed")] + WebhookCallbackVerificationFailed, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="notification_failures_exceeded")] + NotificationFailuresExceeded, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="authorization_revoked")] + AuthorizationRevoked, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="moderator_removed")] + ModeratorRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user_removed")] + UserRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="version_removed")] + VersionRemoved, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="beta_maintenance")] + BetaMaintenance, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_disconnected")] + WebsocketDisconnected, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_failed_ping_pong")] + WebsocketFailedPingPong, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_received_inbound_traffic")] + WebsocketReceivedInboundTraffic, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_connection_unused")] + WebsocketConnectionUnused, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_internal_error")] + WebsocketInternalError, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_timeout")] + WebsocketNetworkTimeout, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="websocket_network_error")] + WebsocketNetworkError, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsType.g.verified.cs new file mode 100644 index 0000000000..1e8ecdf840 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetEventsubSubscriptionsType.g.verified.cs @@ -0,0 +1,364 @@ +//HintName: G.Models.GetEventsubSubscriptionsType.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetEventsubSubscriptionsType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.hold")] + Automodmessagehold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.message.update")] + Automodmessageupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.settings.update")] + Automodsettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="automod.terms.update")] + Automodtermsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.update")] + Channelupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.follow")] + Channelfollow, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ad_break.begin")] + ChanneladBreakbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear")] + Channelchatclear, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.clear_user_messages")] + ChannelchatclearUserMessages, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message")] + Channelchatmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.message_delete")] + ChannelchatmessageDelete, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.notification")] + Channelchatnotification, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat_settings.update")] + ChannelchatSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_hold")] + ChannelchatuserMessageHold, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.chat.user_message_update")] + ChannelchatuserMessageUpdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscribe")] + Channelsubscribe, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.end")] + Channelsubscriptionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.gift")] + Channelsubscriptiongift, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.subscription.message")] + Channelsubscriptionmessage, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.cheer")] + Channelcheer, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.raid")] + Channelraid, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.ban")] + Channelban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban")] + Channelunban, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.create")] + ChannelunbanRequestcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.unban_request.resolve")] + ChannelunbanRequestresolve, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderate")] + Channelmoderate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.add")] + Channelmoderatoradd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.moderator.remove")] + Channelmoderatorremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.begin")] + ChannelguestStarSessionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_session.end")] + ChannelguestStarSessionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_guest.update")] + ChannelguestStarGuestupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.guest_star_settings.update")] + ChannelguestStarSettingsupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_automatic_reward.add")] + ChannelchannelPointsAutomaticRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.add")] + ChannelchannelPointsCustomRewardadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.update")] + ChannelchannelPointsCustomRewardupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward.remove")] + ChannelchannelPointsCustomRewardremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.add")] + ChannelchannelPointsCustomRewardRedemptionadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.channel_points_custom_reward_redemption.update")] + ChannelchannelPointsCustomRewardRedemptionupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.begin")] + Channelpollbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.progress")] + Channelpollprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.poll.end")] + Channelpollend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.begin")] + Channelpredictionbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.progress")] + Channelpredictionprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.lock")] + Channelpredictionlock, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.prediction.end")] + Channelpredictionend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.add")] + Channelvipadd, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.vip.remove")] + Channelvipremove, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.donate")] + ChannelcharityCampaigndonate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.start")] + ChannelcharityCampaignstart, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.progress")] + ChannelcharityCampaignprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.charity_campaign.stop")] + ChannelcharityCampaignstop, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="conduit.shard.disabled")] + Conduitsharddisabled, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="drop.entitlement.grant")] + Dropentitlementgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="extension.bits_transaction.create")] + ExtensionbitsTransactioncreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.begin")] + Channelgoalbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.progress")] + Channelgoalprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.goal.end")] + Channelgoalend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.begin")] + ChannelhypeTrainbegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.progress")] + ChannelhypeTrainprogress, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.hype_train.end")] + ChannelhypeTrainend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.begin")] + ChannelshieldModebegin, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shield_mode.end")] + ChannelshieldModeend, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.create")] + Channelshoutoutcreate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="channel.shoutout.receive")] + Channelshoutoutreceive, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.online")] + Streamonline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="stream.offline")] + Streamoffline, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.grant")] + Userauthorizationgrant, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.authorization.revoke")] + Userauthorizationrevoke, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.update")] + Userupdate, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="user.whisper.message")] + Userwhispermessage, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponse.g.verified.cs new file mode 100644 index 0000000000..313878f0ec --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetExtensionAnalyticsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionAnalyticsResponse + { + /// + /// A list of reports. The reports are returned in no particular order; however, the data within each report is in ascending order by date (newest first). The report contains one row of data per day of the reporting window; the report contains rows for only those days that the extension was used. The array is empty if there are no reports. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetExtensionAnalyticsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..d9b763e1b2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionAnalyticsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetExtensionAnalyticsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsType.g.verified.cs new file mode 100644 index 0000000000..1486b5545a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionAnalyticsType.g.verified.cs @@ -0,0 +1,19 @@ +//HintName: G.Models.GetExtensionAnalyticsType.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetExtensionAnalyticsType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="overview_v2")] + OverviewV2, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionBitsProductsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionBitsProductsResponse.g.verified.cs new file mode 100644 index 0000000000..776ae52590 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionBitsProductsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionBitsProductsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionBitsProductsResponse + { + /// + /// A list of Bits products that the extension created. The list is in ascending SKU order. The list is empty if the extension hasn’t created any products or they’re all expired or disabled. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentResponse.g.verified.cs new file mode 100644 index 0000000000..4ee1984bff --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionConfigurationSegmentResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionConfigurationSegmentResponse + { + /// + /// The list of requested configuration segments. The list is returned in the same order that you specified the list of segments in the request. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentSegment.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentSegment.g.verified.cs new file mode 100644 index 0000000000..ebdc2d1596 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionConfigurationSegmentSegment.g.verified.cs @@ -0,0 +1,29 @@ +//HintName: G.Models.GetExtensionConfigurationSegmentSegment.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetExtensionConfigurationSegmentSegment + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="broadcaster")] + Broadcaster, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="developer")] + Developer, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="global")] + Global, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionLiveChannelsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionLiveChannelsResponse.g.verified.cs new file mode 100644 index 0000000000..7dc80c9304 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionLiveChannelsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetExtensionLiveChannelsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionLiveChannelsResponse + { + /// + /// The list of broadcasters that are streaming live and that have installed or activated the extension. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// This field contains the cursor used to page through the results. The field is empty if there are no more pages left to page through. Note that this field is a string compared to other endpoints that use a **Pagination** object. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public string? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionSecretsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionSecretsResponse.g.verified.cs new file mode 100644 index 0000000000..8c36513242 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionSecretsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionSecretsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionSecretsResponse + { + /// + /// The list of shared secrets that the extension created. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponse.g.verified.cs new file mode 100644 index 0000000000..8518b7428f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetExtensionTransactionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionTransactionsResponse + { + /// + /// The list of transactions. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetExtensionTransactionsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..9bb33ad32d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionTransactionsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionTransactionsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetExtensionTransactionsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionsResponse.g.verified.cs new file mode 100644 index 0000000000..797d9b60cf --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetExtensionsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetExtensionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetExtensionsResponse + { + /// + /// A list that contains the specified extension. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponse.g.verified.cs new file mode 100644 index 0000000000..755dfc8bef --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponse.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetFollowedChannelsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetFollowedChannelsResponse + { + /// + /// The list of broadcasters that the user follows. The list is in descending order by `followed_at` (with the most recently followed broadcaster first). The list is empty if the user doesn’t follow anyone. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetFollowedChannelsResponsePagination? Pagination { get; set; } + + /// + /// The total number of broadcasters that the user follows. As someone pages through the list, the number may change as the user follows or unfollows broadcasters. + /// + [global::Newtonsoft.Json.JsonProperty("total", Required = global::Newtonsoft.Json.Required.Always)] + public int Total { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponseData.g.verified.cs new file mode 100644 index 0000000000..86b7f0f8c3 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponseData.g.verified.cs @@ -0,0 +1,42 @@ +//HintName: G.Models.GetFollowedChannelsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetFollowedChannelsResponseData + { + /// + /// An ID that uniquely identifies the broadcaster that this user is following. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The broadcaster’s display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The UTC timestamp when the user started following the broadcaster. + /// + [global::Newtonsoft.Json.JsonProperty("followed_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime FollowedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..e85e70316d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedChannelsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetFollowedChannelsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read more](https://dev.twitch.tv/docs/api/guide#pagination). + /// + public sealed partial class GetFollowedChannelsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponse.g.verified.cs new file mode 100644 index 0000000000..a0684a26d5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetFollowedStreamsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetFollowedStreamsResponse + { + /// + /// The list of live streams of broadcasters that the specified user follows. The list is in descending order by the number of viewers watching the stream. Because viewers come and go during a stream, it’s possible to find duplicate or missing streams in the list as you page through the results. The list is empty if none of the followed broadcasters are streaming live. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetFollowedStreamsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..16434263cb --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetFollowedStreamsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetFollowedStreamsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetFollowedStreamsResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ query parameter to this value. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponse.g.verified.cs new file mode 100644 index 0000000000..3feaccd1d3 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetGameAnalyticsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGameAnalyticsResponse + { + /// + /// A list of reports. The reports are returned in no particular order; however, the data within each report is in ascending order by date (newest first). The report contains one row of data per day of the reporting window; the report contains rows for only those days that the game was used. A report is available only if the game was broadcast for at least 5 hours over the reporting period. The array is empty if there are no reports. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetGameAnalyticsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..0d7026d7a5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetGameAnalyticsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetGameAnalyticsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsType.g.verified.cs new file mode 100644 index 0000000000..b9c0a67590 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGameAnalyticsType.g.verified.cs @@ -0,0 +1,19 @@ +//HintName: G.Models.GetGameAnalyticsType.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetGameAnalyticsType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="overview_v2")] + OverviewV2, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGamesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGamesResponse.g.verified.cs new file mode 100644 index 0000000000..64e4b8d933 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGamesResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetGamesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGamesResponse + { + /// + /// The list of categories and games. The list is empty if the specified categories and games weren’t found. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalChatBadgesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalChatBadgesResponse.g.verified.cs new file mode 100644 index 0000000000..d57061dc5c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalChatBadgesResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetGlobalChatBadgesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGlobalChatBadgesResponse + { + /// + /// The list of chat badges. The list is sorted in ascending order by `set_id`, and within a set, the list is sorted in ascending order by `id`. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalEmotesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalEmotesResponse.g.verified.cs new file mode 100644 index 0000000000..3064e50c8f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGlobalEmotesResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetGlobalEmotesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGlobalEmotesResponse + { + /// + /// The list of global emotes. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// A templated URL. Use the values from the `id`, `format`, `scale`, and `theme_mode` fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL format](https://dev.twitch.tv/docs/irc/emotes#cdn-template). You should use this template instead of using the URLs in the `images` object. + /// + [global::Newtonsoft.Json.JsonProperty("template", Required = global::Newtonsoft.Json.Required.Always)] + public string Template { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarInvitesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarInvitesResponse.g.verified.cs new file mode 100644 index 0000000000..77f0cf5638 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarInvitesResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetGuestStarInvitesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGuestStarInvitesResponse + { + /// + /// A list of invite objects describing the invited user as well as their ready status. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarSessionResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarSessionResponse.g.verified.cs new file mode 100644 index 0000000000..1c62c65c80 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetGuestStarSessionResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetGuestStarSessionResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetGuestStarSessionResponse + { + /// + /// Summary of the session details + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponse.g.verified.cs new file mode 100644 index 0000000000..7fa0c9c7e2 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetHypeTrainEventsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetHypeTrainEventsResponse + { + /// + /// The list of Hype Train events. The list is empty if the broadcaster hasn’t run a Hype Train within the last 5 days. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetHypeTrainEventsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..d9df7fc3a5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetHypeTrainEventsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetHypeTrainEventsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetHypeTrainEventsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponse.g.verified.cs new file mode 100644 index 0000000000..c6cb87006a --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetModeratedChannelsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetModeratedChannelsResponse + { + /// + /// The list of channels that the user has moderator privileges in. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetModeratedChannelsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponseData.g.verified.cs new file mode 100644 index 0000000000..d3e16d638f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponseData.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetModeratedChannelsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetModeratedChannelsResponseData + { + /// + /// An ID that uniquely identifies the channel this user can moderate. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The channel’s login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// The channels’ display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..cd35035edb --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratedChannelsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetModeratedChannelsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. + /// + public sealed partial class GetModeratedChannelsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponse.g.verified.cs new file mode 100644 index 0000000000..d4ac91bc8b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetModeratorsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetModeratorsResponse + { + /// + /// The list of moderators. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetModeratorsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..7a0303b9d5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetModeratorsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetModeratorsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetModeratorsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponse.g.verified.cs new file mode 100644 index 0000000000..3da575ea03 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetPollsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetPollsResponse + { + /// + /// A list of polls. The polls are returned in descending order of start time unless you specify IDs in the request, in which case they're returned in the same order as you passed them in the request. The list is empty if the broadcaster hasn't created polls. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetPollsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..c5d528f0d4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPollsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetPollsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetPollsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request's _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponse.g.verified.cs new file mode 100644 index 0000000000..03b3bddbcb --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetPredictionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetPredictionsResponse + { + /// + /// The broadcaster’s list of Channel Points Predictions. The list is sorted in descending ordered by when the prediction began (the most recent prediction is first). The list is empty if the broadcaster hasn’t created predictions. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetPredictionsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..1bc77911a4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetPredictionsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetPredictionsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetPredictionsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetReleasedExtensionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetReleasedExtensionsResponse.g.verified.cs new file mode 100644 index 0000000000..4d9bfb9e52 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetReleasedExtensionsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetReleasedExtensionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetReleasedExtensionsResponse + { + /// + /// A list that contains the specified extension. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponse.g.verified.cs new file mode 100644 index 0000000000..016df01a7c --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetShieldModeStatusResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetShieldModeStatusResponse + { + /// + /// A list that contains a single object with the broadcaster’s Shield Mode status. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponseData.g.verified.cs new file mode 100644 index 0000000000..eb138236df --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetShieldModeStatusResponseData.g.verified.cs @@ -0,0 +1,48 @@ +//HintName: G.Models.GetShieldModeStatusResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetShieldModeStatusResponseData + { + /// + /// A Boolean value that determines whether Shield Mode is active. Is **true** if the broadcaster activated Shield Mode; otherwise, **false**. + /// + [global::Newtonsoft.Json.JsonProperty("is_active", Required = global::Newtonsoft.Json.Required.Always)] + public bool IsActive { get; set; } = default!; + + /// + /// An ID that identifies the moderator that last activated Shield Mode. Is an empty string if Shield Mode hasn’t been previously activated. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// The moderator’s login name. Is an empty string if Shield Mode hasn’t been previously activated. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_login", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorLogin { get; set; } = default!; + + /// + /// The moderator’s display name. Is an empty string if Shield Mode hasn’t been previously activated. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_name", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorName { get; set; } = default!; + + /// + /// The UTC timestamp (in RFC3339 format) of when Shield Mode was last activated. Is an empty string if Shield Mode hasn’t been previously activated. + /// + [global::Newtonsoft.Json.JsonProperty("last_activated_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime LastActivatedAt { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponse.g.verified.cs new file mode 100644 index 0000000000..e84295aa1d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetStreamKeyResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetStreamKeyResponse + { + /// + /// A list that contains the channel’s stream key. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponseData.g.verified.cs new file mode 100644 index 0000000000..20d31d5a40 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamKeyResponseData.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetStreamKeyResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetStreamKeyResponseData + { + /// + /// The channel’s stream key. + /// + [global::Newtonsoft.Json.JsonProperty("stream_key", Required = global::Newtonsoft.Json.Required.Always)] + public string StreamKey { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponse.g.verified.cs new file mode 100644 index 0000000000..3b304a7558 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetStreamMarkersResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetStreamMarkersResponse + { + /// + /// The list of markers grouped by the user that created the marks. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetStreamMarkersResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponsePagination.g.verified.cs new file mode 100644 index 0000000000..f4368009e5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamMarkersResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetStreamMarkersResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetStreamMarkersResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamTagsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamTagsResponse.g.verified.cs new file mode 100644 index 0000000000..597ea61fc9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamTagsResponse.g.verified.cs @@ -0,0 +1,26 @@ +//HintName: G.Models.GetStreamTagsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Obsolete("This model marked as deprecated.")] + public sealed partial class GetStreamTagsResponse + { + /// + /// The list of stream tags. The list is empty if the broadcaster or Twitch hasn’t added tags to the broadcaster’s channel. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + [global::System.Obsolete("This property marked as deprecated.")] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponse.g.verified.cs new file mode 100644 index 0000000000..acc93bd7fd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetStreamsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetStreamsResponse + { + /// + /// The list of streams. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetStreamsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..ceae0afd3b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetStreamsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// The information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetStreamsResponsePagination + { + /// + /// The cursor used to get the next page of results. Set the request’s _after_ or _before_ query parameter to this value depending on whether you’re paging forwards or backwards. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsType.g.verified.cs new file mode 100644 index 0000000000..e447281a78 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetStreamsType.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetStreamsType.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetStreamsType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="all")] + All, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="live")] + Live, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTeamsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTeamsResponse.g.verified.cs new file mode 100644 index 0000000000..35d8e35b34 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTeamsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetTeamsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetTeamsResponse + { + /// + /// A list that contains the single team that you requested. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponse.g.verified.cs new file mode 100644 index 0000000000..b32f109ab4 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetTopGamesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetTopGamesResponse + { + /// + /// The list of broadcasts. The broadcasts are sorted by the number of viewers, with the most popular first. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetTopGamesResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponsePagination.g.verified.cs new file mode 100644 index 0000000000..714967ca62 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetTopGamesResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetTopGamesResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetTopGamesResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ or _before_ query parameter to get the next or previous page of results. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponse.g.verified.cs new file mode 100644 index 0000000000..6d3f737181 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetUnbanRequestsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUnbanRequestsResponse + { + /// + /// A list that contains information about the channel's unban requests. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains information used to page through a list of results. The object is empty if there are no more pages left to page through. + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetUnbanRequestsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponseData.g.verified.cs new file mode 100644 index 0000000000..83e820a819 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponseData.g.verified.cs @@ -0,0 +1,114 @@ +//HintName: G.Models.GetUnbanRequestsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUnbanRequestsResponseData + { + /// + /// Unban request ID. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// User ID of broadcaster whose channel is receiving the unban request. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_id", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterId { get; set; } = default!; + + /// + /// The broadcaster's display name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_name", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterName { get; set; } = default!; + + /// + /// The broadcaster's login name. + /// + [global::Newtonsoft.Json.JsonProperty("broadcaster_login", Required = global::Newtonsoft.Json.Required.Always)] + public string BroadcasterLogin { get; set; } = default!; + + /// + /// User ID of moderator who approved/denied the request. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_id", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorId { get; set; } = default!; + + /// + /// The moderator's login name. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_login", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorLogin { get; set; } = default!; + + /// + /// The moderator's display name. + /// + [global::Newtonsoft.Json.JsonProperty("moderator_name", Required = global::Newtonsoft.Json.Required.Always)] + public string ModeratorName { get; set; } = default!; + + /// + /// User ID of the requestor who is asking for an unban. + /// + [global::Newtonsoft.Json.JsonProperty("user_id", Required = global::Newtonsoft.Json.Required.Always)] + public string UserId { get; set; } = default!; + + /// + /// The user's login name. + /// + [global::Newtonsoft.Json.JsonProperty("user_login", Required = global::Newtonsoft.Json.Required.Always)] + public string UserLogin { get; set; } = default!; + + /// + /// The user's display name. + /// + [global::Newtonsoft.Json.JsonProperty("user_name", Required = global::Newtonsoft.Json.Required.Always)] + public string UserName { get; set; } = default!; + + /// + /// Text of the request from the requesting user. + /// + [global::Newtonsoft.Json.JsonProperty("text", Required = global::Newtonsoft.Json.Required.Always)] + public string Text { get; set; } = default!; + + /// + /// Status of the request. One of: + /// + /// * pending + /// * approved + /// * denied + /// * acknowledged + /// * canceled + /// + [global::Newtonsoft.Json.JsonProperty("status", Required = global::Newtonsoft.Json.Required.Always)] + public string Status { get; set; } = default!; + + /// + /// Timestamp of when the unban request was created. + /// + [global::Newtonsoft.Json.JsonProperty("created_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime CreatedAt { get; set; } = default!; + + /// + /// Timestamp of when moderator/broadcaster approved or denied the request. + /// + [global::Newtonsoft.Json.JsonProperty("resolved_at", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.DateTime ResolvedAt { get; set; } = default!; + + /// + /// Text input by the resolver (moderator) of the unban. request + /// + [global::Newtonsoft.Json.JsonProperty("resolution_text", Required = global::Newtonsoft.Json.Required.Always)] + public string ResolutionText { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..a0ea51a1ad --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUnbanRequestsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUnbanRequestsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains information used to page through a list of results. The object is empty if there are no more pages left to page through. + /// + public sealed partial class GetUnbanRequestsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponse.g.verified.cs new file mode 100644 index 0000000000..25cd34cecd --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUserActiveExtensionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserActiveExtensionsResponse + { + /// + /// The active extensions that the broadcaster has installed. + /// + [global::Newtonsoft.Json.JsonProperty("data")] + public GetUserActiveExtensionsResponseData? Data { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponseData.g.verified.cs new file mode 100644 index 0000000000..d057e7c09d --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserActiveExtensionsResponseData.g.verified.cs @@ -0,0 +1,36 @@ +//HintName: G.Models.GetUserActiveExtensionsResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// The active extensions that the broadcaster has installed. + /// + public sealed partial class GetUserActiveExtensionsResponseData + { + /// + /// A dictionary that contains the data for a panel extension. The dictionary’s key is a sequential number beginning with 1\. The following fields contain the panel’s data for each key. + /// + [global::Newtonsoft.Json.JsonProperty("panel")] + public object? Panel { get; set; } + + /// + /// A dictionary that contains the data for a video-overlay extension. The dictionary’s key is a sequential number beginning with 1\. The following fields contain the overlay’s data for each key. + /// + [global::Newtonsoft.Json.JsonProperty("overlay")] + public object? Overlay { get; set; } + + /// + /// A dictionary that contains the data for a video-component extension. The dictionary’s key is a sequential number beginning with 1\. The following fields contain the component’s data for each key. + /// + [global::Newtonsoft.Json.JsonProperty("component")] + public object? Component { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserBlockListResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserBlockListResponse.g.verified.cs new file mode 100644 index 0000000000..c0048e1068 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserBlockListResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUserBlockListResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserBlockListResponse + { + /// + /// The list of blocked users. The list is in descending order by when the user was blocked. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserChatColorResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserChatColorResponse.g.verified.cs new file mode 100644 index 0000000000..a8b5bbdb57 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserChatColorResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUserChatColorResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserChatColorResponse + { + /// + /// The list of users and the color code they use for their name. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponse.g.verified.cs new file mode 100644 index 0000000000..73f723fdb5 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponse.g.verified.cs @@ -0,0 +1,40 @@ +//HintName: G.Models.GetUserEmotesResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserEmotesResponse + { + /// + /// + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// A templated URL. Uses the values from the _id_, _format_, _scale_, and _theme\_mode_ fields to replace the like-named placeholder strings in the templated URL to create a CDN (content delivery network) URL that you use to fetch the emote. + /// + /// For information about what the template looks like and how to use it to fetch emotes, see [Emote CDN URL](https://dev.twitch.tv/docs/irc/emotes#cdn-template) format. + /// + [global::Newtonsoft.Json.JsonProperty("template", Required = global::Newtonsoft.Json.Required.Always)] + public string Template { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. + /// + /// For more information about pagination support, see [Twitch API Guide - Pagination](https://dev.twitch.tv/docs/api/guide#pagination). + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetUserEmotesResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseData.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseData.g.verified.cs new file mode 100644 index 0000000000..cc8cba020f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseData.g.verified.cs @@ -0,0 +1,80 @@ +//HintName: G.Models.GetUserEmotesResponseData.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserEmotesResponseData + { + /// + /// An ID that uniquely identifies this emote. + /// + [global::Newtonsoft.Json.JsonProperty("id", Required = global::Newtonsoft.Json.Required.Always)] + public string Id { get; set; } = default!; + + /// + /// The User ID of broadcaster whose channel is receiving the unban request. + /// + [global::Newtonsoft.Json.JsonProperty("name", Required = global::Newtonsoft.Json.Required.Always)] + public string Name { get; set; } = default!; + + /// + /// The type of emote. The possible values are: + /// + /// * **bitstier** — A Bits tier emote. + /// * **follower** — A follower emote. + /// * **subscriptions** — A subscriber emote. + /// + [global::Newtonsoft.Json.JsonProperty("emote_type", Required = global::Newtonsoft.Json.Required.Always)] + public GetUserEmotesResponseDataEmoteType EmoteType { get; set; } = default!; + + /// + /// An ID that identifies the emote set that the emote belongs to. + /// + [global::Newtonsoft.Json.JsonProperty("emote_set_id", Required = global::Newtonsoft.Json.Required.Always)] + public string EmoteSetId { get; set; } = default!; + + /// + /// The ID of the broadcaster who owns the emote. + /// + [global::Newtonsoft.Json.JsonProperty("owner_id", Required = global::Newtonsoft.Json.Required.Always)] + public string OwnerId { get; set; } = default!; + + /// + /// The formats that the emote is available in. For example, if the emote is available only as a static PNG, the array contains only static. But if the emote is available as a static PNG and an animated GIF, the array contains static and animated. + /// + /// * **animated** — An animated GIF is available for this emote. + /// * **static** — A static PNG file is available for this emote. + /// + [global::Newtonsoft.Json.JsonProperty("format", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Format { get; set; } = default!; + + /// + /// The sizes that the emote is available in. For example, if the emote is available in small and medium sizes, the array contains 1.0 and 2.0\. + /// + /// * **1.0** — A small version (28px x 28px) is available. + /// * **2.0** — A medium version (56px x 56px) is available. + /// * **3.0** — A large version (112px x 112px) is available. + /// + [global::Newtonsoft.Json.JsonProperty("scale", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Scale { get; set; } = default!; + + /// + /// The background themes that the emote is available in. + /// + /// * **dark** + /// * **light** + /// + [global::Newtonsoft.Json.JsonProperty("theme_mode", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList ThemeMode { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseDataEmoteType.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseDataEmoteType.g.verified.cs new file mode 100644 index 0000000000..324156edcc --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponseDataEmoteType.g.verified.cs @@ -0,0 +1,33 @@ +//HintName: G.Models.GetUserEmotesResponseDataEmoteType.g.cs + +#nullable enable + +namespace G +{ + /// + /// The type of emote. The possible values are: + /// + /// * **bitstier** — A Bits tier emote. + /// * **follower** — A follower emote. + /// * **subscriptions** — A subscriber emote. + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetUserEmotesResponseDataEmoteType + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="bitstier")] + Bitstier, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="follower")] + Follower, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="subscriptions")] + Subscriptions, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponsePagination.g.verified.cs new file mode 100644 index 0000000000..8d4786ee03 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserEmotesResponsePagination.g.verified.cs @@ -0,0 +1,26 @@ +//HintName: G.Models.GetUserEmotesResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. + /// + /// For more information about pagination support, see [Twitch API Guide - Pagination](https://dev.twitch.tv/docs/api/guide#pagination). + /// + public sealed partial class GetUserEmotesResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s after query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserExtensionsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserExtensionsResponse.g.verified.cs new file mode 100644 index 0000000000..5f136a650f --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUserExtensionsResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUserExtensionsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUserExtensionsResponse + { + /// + /// The list of extensions that the user has installed. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUsersResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUsersResponse.g.verified.cs new file mode 100644 index 0000000000..e57aac9134 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetUsersResponse.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetUsersResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetUsersResponse + { + /// + /// The list of users. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponse.g.verified.cs new file mode 100644 index 0000000000..b79a0dc9f9 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetVIPsResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetVIPsResponse + { + /// + /// The list of VIPs. The list is empty if the broadcaster doesn’t have VIP users. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList Data { get; set; } = default!; + + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + [global::Newtonsoft.Json.JsonProperty("pagination")] + public GetVIPsResponsePagination? Pagination { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponsePagination.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponsePagination.g.verified.cs new file mode 100644 index 0000000000..277ade59b7 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVIPsResponsePagination.g.verified.cs @@ -0,0 +1,24 @@ +//HintName: G.Models.GetVIPsResponsePagination.g.cs + +#nullable enable + +namespace G +{ + /// + /// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through. [Read More](https://dev.twitch.tv/docs/api/guide#pagination) + /// + public sealed partial class GetVIPsResponsePagination + { + /// + /// The cursor used to get the next page of results. Use the cursor to set the request’s _after_ query parameter. + /// + [global::Newtonsoft.Json.JsonProperty("cursor")] + public string? Cursor { get; set; } + + /// + /// Additional properties that are not explicitly defined in the schema + /// + [global::Newtonsoft.Json.JsonExtensionData] + public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary(); + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosPeriod.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosPeriod.g.verified.cs new file mode 100644 index 0000000000..947f712220 --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosPeriod.g.verified.cs @@ -0,0 +1,34 @@ +//HintName: G.Models.GetVideosPeriod.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + [global::System.Runtime.Serialization.DataContract] + public enum GetVideosPeriod + { + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="all")] + All, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="day")] + Day, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="month")] + Month, + /// + /// + /// + [global::System.Runtime.Serialization.EnumMember(Value="week")] + Week, + } +} \ No newline at end of file diff --git a/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosResponse.g.verified.cs b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosResponse.g.verified.cs new file mode 100644 index 0000000000..ba8ba7f54b --- /dev/null +++ b/src/tests/OpenApiGenerator.SnapshotTests/Snapshots/Twitch/NewtonsoftJson/_#G.Models.GetVideosResponse.g.verified.cs @@ -0,0 +1,30 @@ +//HintName: G.Models.GetVideosResponse.g.cs + +#nullable enable + +namespace G +{ + /// + /// + /// + public sealed partial class GetVideosResponse + { + /// + /// The list of published videos that match the filter criteria. + /// + [global::Newtonsoft.Json.JsonProperty("data", Required = global::Newtonsoft.Json.Required.Always)] + public global::System.Collections.Generic.IList