GetBannedUsers

Get all banned and timed-out users in a channel.

Requires: moderation:read

resp, err := client.GetBannedUsers(ctx, &helix.GetBannedUsersParams{
    BroadcasterID: "12345",
    UserIDs:       []string{"67890", "11111"}, // Optional, max 100
    PaginationParams: &helix.PaginationParams{
        First: 100,
    },
})

for _, ban := range resp.Data {
    fmt.Printf("User %s banned by %s\n", ban.UserName, ban.ModeratorName)
    fmt.Printf("Reason: %s\n", ban.Reason)
    if ban.ExpiresAt != "" {
        fmt.Printf("Expires: %s\n", ban.ExpiresAt)
    } else {
        fmt.Printf("Permanent ban\n")
    }
}

Sample Response:

{
  "data": [
    {
      "user_id": "67890",
      "user_login": "spammer123",
      "user_name": "Spammer123",
      "expires_at": "2025-12-11T15:30:00Z",
      "created_at": "2025-12-11T15:00:00Z",
      "reason": "Spamming in chat",
      "moderator_id": "11111",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod"
    },
    {
      "user_id": "22222",
      "user_login": "baduser",
      "user_name": "BadUser",
      "created_at": "2025-12-10T10:00:00Z",
      "reason": "Violated community guidelines",
      "moderator_id": "11111",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod"
    }
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19"
  }
}

BanUser

Ban a user from participating in a broadcaster’s chat room, or put them in a timeout.

Requires: moderator:manage:banned_users

// Permanent ban
resp, err := client.BanUser(ctx, &helix.BanUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    Data: &helix.BanUserData{
        UserID:   "11111",
        Duration: 0, // 0 = permanent
        Reason:   "Violated community guidelines",
    },
})

// Timeout for 10 minutes (600 seconds)
resp, err = client.BanUser(ctx, &helix.BanUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    Data: &helix.BanUserData{
        UserID:   "22222",
        Duration: 600, // 1 to 1209600 seconds (14 days max)
        Reason:   "Spamming",
    },
})

if resp.Data != nil && len(resp.Data) > 0 {
    ban := resp.Data[0]
    fmt.Printf("User banned until: %s\n", ban.EndTime)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "user_id": "11111",
      "created_at": "2025-12-11T15:00:00Z",
      "end_time": "2025-12-11T15:10:00Z"
    }
  ]
}

UnbanUser

Unban a user from participating in a broadcaster’s chat room or remove a timeout.

Requires: moderator:manage:banned_users

err := client.UnbanUser(ctx, &helix.UnbanUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    UserID:        "11111",
})

if err != nil {
    fmt.Printf("Failed to unban user: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

GetModerators

Get all users allowed to moderate a broadcaster’s chat room.

Note: This endpoint returns both Moderators and Lead Moderators, as Lead Moderators are also Moderators with additional privileges.

Requires: moderation:read

resp, err := client.GetModerators(ctx, &helix.GetModeratorsParams{
    BroadcasterID: "12345",
    UserIDs:       []string{"67890", "11111"}, // Optional, max 100
    PaginationParams: &helix.PaginationParams{
        First: 100,
    },
})

for _, mod := range resp.Data {
    fmt.Printf("Moderator: %s (%s)\n", mod.UserName, mod.UserLogin)
}

Sample Response:

{
  "data": [
    {
      "user_id": "67890",
      "user_login": "coolmod",
      "user_name": "CoolMod"
    },
    {
      "user_id": "11111",
      "user_login": "awesomemod",
      "user_name": "AwesomeMod"
    }
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6MTB9fQ"
  }
}

AddChannelModerator

Add a moderator to a broadcaster’s chat room.

Requires: channel:manage:moderators

err := client.AddChannelModerator(ctx, &helix.AddChannelModeratorParams{
    BroadcasterID: "12345",
    UserID:        "67890",
})

if err != nil {
    fmt.Printf("Failed to add moderator: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

RemoveChannelModerator

Remove a moderator from a broadcaster’s chat room.

Requires: channel:manage:moderators

err := client.RemoveChannelModerator(ctx, &helix.RemoveChannelModeratorParams{
    BroadcasterID: "12345",
    UserID:        "67890",
})

if err != nil {
    fmt.Printf("Failed to remove moderator: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

DeleteChatMessages

Delete one or all messages in a broadcaster’s chat room.

Requires: moderator:manage:chat_messages

// Delete a specific message
err := client.DeleteChatMessages(ctx, &helix.DeleteChatMessagesParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    MessageID:     "abc-123-def",
})

// Delete all messages in chat
err = client.DeleteChatMessages(ctx, &helix.DeleteChatMessagesParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    // MessageID omitted to delete all messages
})

if err != nil {
    fmt.Printf("Failed to delete messages: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

GetBlockedTerms

Get the broadcaster’s list of blocked terms.

Requires: moderator:read:blocked_terms

resp, err := client.GetBlockedTerms(ctx, &helix.GetBlockedTermsParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    PaginationParams: &helix.PaginationParams{
        First: 100,
    },
})

for _, term := range resp.Data {
    fmt.Printf("Blocked term: %s (ID: %s)\n", term.Text, term.ID)
    fmt.Printf("Created at: %s\n", term.CreatedAt)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "id": "term-123-abc",
      "text": "badword",
      "created_at": "2025-12-10T10:00:00Z",
      "updated_at": "2025-12-10T10:00:00Z"
    },
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "id": "term-456-def",
      "text": "spam",
      "created_at": "2025-12-09T14:30:00Z",
      "updated_at": "2025-12-09T14:30:00Z"
    }
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6Mn19"
  }
}

AddBlockedTerm

Add a term to the broadcaster’s list of blocked terms.

Requires: moderator:manage:blocked_terms

resp, err := client.AddBlockedTerm(ctx, &helix.AddBlockedTermParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    Text:          "badword",
})

if resp.Data != nil && len(resp.Data) > 0 {
    term := resp.Data[0]
    fmt.Printf("Added blocked term: %s (ID: %s)\n", term.Text, term.ID)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "id": "term-789-ghi",
      "text": "badword",
      "created_at": "2025-12-11T15:00:00Z",
      "updated_at": "2025-12-11T15:00:00Z"
    }
  ]
}

RemoveBlockedTerm

Remove a term from the broadcaster’s list of blocked terms.

Requires: moderator:manage:blocked_terms

err := client.RemoveBlockedTerm(ctx, &helix.RemoveBlockedTermParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    TermID:        "term-id-123",
})

if err != nil {
    fmt.Printf("Failed to remove blocked term: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

GetShieldModeStatus

Get the broadcaster’s Shield Mode activation status.

Requires: moderator:read:shield_mode

resp, err := client.GetShieldModeStatus(ctx, &helix.GetShieldModeStatusParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
})

if resp.Data != nil && len(resp.Data) > 0 {
    status := resp.Data[0]
    fmt.Printf("Shield Mode Active: %v\n", status.IsActive)
    fmt.Printf("Last activated: %s\n", status.LastActivatedAt)
}

Sample Response:

{
  "data": [
    {
      "is_active": true,
      "moderator_id": "67890",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod",
      "last_activated_at": "2025-12-11T15:00:00Z"
    }
  ]
}

UpdateShieldModeStatus

Activate or deactivate the broadcaster’s Shield Mode.

Requires: moderator:manage:shield_mode

// Activate Shield Mode
resp, err := client.UpdateShieldModeStatus(ctx, &helix.UpdateShieldModeStatusParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    IsActive:      true,
})

// Deactivate Shield Mode
resp, err = client.UpdateShieldModeStatus(ctx, &helix.UpdateShieldModeStatusParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    IsActive:      false,
})

if resp.Data != nil && len(resp.Data) > 0 {
    status := resp.Data[0]
    fmt.Printf("Shield Mode is now: %v\n", status.IsActive)
}

Sample Response:

{
  "data": [
    {
      "is_active": false,
      "moderator_id": "67890",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod",
      "last_activated_at": "2025-12-11T15:00:00Z"
    }
  ]
}

WarnChatUser

Warn a user in a broadcaster’s chat room.

Requires: moderator:manage:warnings

err := client.WarnChatUser(ctx, &helix.WarnChatUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    Data: &helix.WarnChatUserData{
        UserID: "11111",
        Reason: "Please follow chat rules",
    },
})

if err != nil {
    fmt.Printf("Failed to warn user: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

CheckAutoModStatus

Check whether AutoMod would flag one or more messages for review.

Requires: moderation:read

resp, err := client.CheckAutoModStatus(ctx, &helix.CheckAutoModStatusParams{
    BroadcasterID: "12345",
    Data: []helix.AutoModMessage{
        {
            MsgID:   "msg-1",
            MsgText: "This is a test message",
        },
        {
            MsgID:   "msg-2",
            MsgText: "Another message to check",
        },
    },
})

for _, result := range resp.Data {
    fmt.Printf("Message %s: Approved=%v\n", result.MsgID, result.IsPermitted)
}

Sample Response:

{
  "data": [
    {
      "msg_id": "msg-1",
      "is_permitted": true
    },
    {
      "msg_id": "msg-2",
      "is_permitted": false
    }
  ]
}

ManageHeldAutoModMessages

Allow or deny a message that was held for review by AutoMod.

Requires: moderator:manage:automod

// Allow a held message
err := client.ManageHeldAutoModMessages(ctx, &helix.ManageHeldAutoModMessagesParams{
    UserID:    "67890",
    MsgID:     "abc-123-def",
    Action:    "ALLOW",
})

// Deny a held message
err = client.ManageHeldAutoModMessages(ctx, &helix.ManageHeldAutoModMessagesParams{
    UserID:    "67890",
    MsgID:     "abc-123-def",
    Action:    "DENY",
})

if err != nil {
    fmt.Printf("Failed to manage AutoMod message: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.

GetAutoModSettings

Get the broadcaster’s AutoMod settings.

Requires: moderator:read:automod_settings

resp, err := client.GetAutoModSettings(ctx, &helix.GetAutoModSettingsParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
})

if resp.Data != nil && len(resp.Data) > 0 {
    settings := resp.Data[0]
    fmt.Printf("Overall Level: %d\n", settings.OverallLevel)
    fmt.Printf("Disability: %d\n", settings.Disability)
    fmt.Printf("Aggression: %d\n", settings.Aggression)
    fmt.Printf("Bullying: %d\n", settings.Bullying)
    fmt.Printf("Sexuality: %d\n", settings.SexualitySexOrGender)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "overall_level": null,
      "disability": 2,
      "aggression": 3,
      "sexuality_sex_or_gender": 2,
      "misogyny": 3,
      "bullying": 2,
      "swearing": 1,
      "race_ethnicity_or_religion": 4,
      "sex_based_terms": 2
    }
  ]
}

UpdateAutoModSettings

Update the broadcaster’s AutoMod settings.

Requires: moderator:manage:automod_settings

// Update with overall level
resp, err := client.UpdateAutoModSettings(ctx, &helix.UpdateAutoModSettingsParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    OverallLevel:  2, // 0-4 (0=disabled, 1-4=increasing strictness)
})

// Update with individual category levels
resp, err = client.UpdateAutoModSettings(ctx, &helix.UpdateAutoModSettingsParams{
    BroadcasterID:        "12345",
    ModeratorID:          "67890",
    Disability:           3,
    Aggression:           4,
    Bullying:             3,
    SexualitySexOrGender: 2,
    Misogyny:             3,
    RaceEthnicityReligion: 4,
    SexBasedTerms:        2,
    Swearing:             1,
})

if resp.Data != nil && len(resp.Data) > 0 {
    settings := resp.Data[0]
    fmt.Printf("AutoMod settings updated. Overall Level: %d\n", settings.OverallLevel)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "moderator_id": "67890",
      "overall_level": 2,
      "disability": 2,
      "aggression": 2,
      "sexuality_sex_or_gender": 2,
      "misogyny": 2,
      "bullying": 2,
      "swearing": 2,
      "race_ethnicity_or_religion": 2,
      "sex_based_terms": 2
    }
  ]
}

GetUnbanRequests

Get a list of unban requests for a broadcaster’s channel.

Requires: moderator:read:unban_requests

// Get all pending unban requests
resp, err := client.GetUnbanRequests(ctx, &helix.GetUnbanRequestsParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    Status:        "pending",
    PaginationParams: &helix.PaginationParams{
        First: 100,
    },
})

// Get unban requests for a specific user
resp, err = client.GetUnbanRequests(ctx, &helix.GetUnbanRequestsParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    UserID:        "11111",
    Status:        "approved", // pending, approved, denied, acknowledged, canceled
    PaginationParams: &helix.PaginationParams{
        First: 50,
    },
})

for _, request := range resp.Data {
    fmt.Printf("Request ID: %s\n", request.ID)
    fmt.Printf("User: %s (%s)\n", request.UserName, request.UserLogin)
    fmt.Printf("Status: %s\n", request.Status)
    fmt.Printf("Reason: %s\n", request.Text)
}

Sample Response:

{
  "data": [
    {
      "id": "request-123-abc",
      "broadcaster_id": "12345",
      "broadcaster_login": "streamer",
      "broadcaster_name": "Streamer",
      "user_id": "11111",
      "user_login": "banneduser",
      "user_name": "BannedUser",
      "text": "I apologize for my behavior and promise to follow the rules",
      "status": "pending",
      "created_at": "2025-12-10T10:00:00Z"
    },
    {
      "id": "request-456-def",
      "broadcaster_id": "12345",
      "broadcaster_login": "streamer",
      "broadcaster_name": "Streamer",
      "moderator_id": "67890",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod",
      "user_id": "22222",
      "user_login": "anotherbanned",
      "user_name": "AnotherBanned",
      "text": "Please give me another chance",
      "status": "approved",
      "created_at": "2025-12-09T14:30:00Z",
      "resolved_at": "2025-12-10T09:00:00Z",
      "resolution_text": "User has shown understanding of community rules"
    }
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6Mn19"
  }
}

ResolveUnbanRequest

Resolve an unban request by approving or denying it.

Requires: moderator:manage:unban_requests

// Approve an unban request
resp, err := client.ResolveUnbanRequest(ctx, &helix.ResolveUnbanRequestParams{
    BroadcasterID:   "12345",
    ModeratorID:     "67890",
    UnbanRequestID:  "request-id-123",
    Status:          "approved",
    ResolutionText:  "User has shown understanding of community rules",
})

// Deny an unban request
resp, err = client.ResolveUnbanRequest(ctx, &helix.ResolveUnbanRequestParams{
    BroadcasterID:   "12345",
    ModeratorID:     "67890",
    UnbanRequestID:  "request-id-456",
    Status:          "denied",
    ResolutionText:  "Request denied due to severity of violation",
})

if resp.Data != nil && len(resp.Data) > 0 {
    request := resp.Data[0]
    fmt.Printf("Unban request %s: %s\n", request.ID, request.Status)
    fmt.Printf("Resolution: %s\n", request.ResolutionText)
}

Sample Response:

{
  "data": [
    {
      "id": "request-123-abc",
      "broadcaster_id": "12345",
      "broadcaster_login": "streamer",
      "broadcaster_name": "Streamer",
      "moderator_id": "67890",
      "moderator_login": "coolmod",
      "moderator_name": "CoolMod",
      "user_id": "11111",
      "user_login": "banneduser",
      "user_name": "BannedUser",
      "text": "I apologize for my behavior and promise to follow the rules",
      "status": "approved",
      "created_at": "2025-12-10T10:00:00Z",
      "resolved_at": "2025-12-11T15:00:00Z",
      "resolution_text": "User has shown understanding of community rules"
    }
  ]
}

GetModeratedChannels

Get a list of channels that the specified user has moderator privileges in.

Requires: user:read:moderated_channels

resp, err := client.GetModeratedChannels(ctx, &helix.GetModeratedChannelsParams{
    UserID: "12345",
    PaginationParams: &helix.PaginationParams{
        First: 100,
    },
})

for _, channel := range resp.Data {
    fmt.Printf("Moderating: %s (%s)\n", channel.BroadcasterName, channel.BroadcasterLogin)
    fmt.Printf("Broadcaster ID: %s\n", channel.BroadcasterID)
}

Sample Response:

{
  "data": [
    {
      "broadcaster_id": "12345",
      "broadcaster_login": "streamer1",
      "broadcaster_name": "Streamer1"
    },
    {
      "broadcaster_id": "67890",
      "broadcaster_login": "streamer2",
      "broadcaster_name": "Streamer2"
    }
  ],
  "pagination": {
    "cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6Mn19"
  }
}

AddSuspiciousStatusToChatUser

Add a suspicious status to a chat user. Suspicious users can be marked as “restricted” (cannot chat) or “monitored” (messages are flagged for review).

Requires: moderator:manage:suspicious_users

// Mark a user as restricted (cannot send messages)
err := client.AddSuspiciousStatusToChatUser(ctx, &helix.AddSuspiciousStatusToChatUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    UserID:        "11111",
    Status:        helix.SuspiciousUserStatusRestricted,
})

// Mark a user as monitored (messages flagged for review)
err = client.AddSuspiciousStatusToChatUser(ctx, &helix.AddSuspiciousStatusToChatUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    UserID:        "22222",
    Status:        helix.SuspiciousUserStatusMonitored,
})

if err != nil {
    fmt.Printf("Failed to add suspicious user status: %v\n", err)
}

Status Values:

  • helix.SuspiciousUserStatusRestricted (“restricted”) - User cannot send messages in chat
  • helix.SuspiciousUserStatusMonitored (“monitored”) - User’s messages are flagged for moderator review

Response: This endpoint returns 204 No Content on success.

RemoveSuspiciousStatusFromChatUser

Remove a suspicious status from a chat user, allowing them to chat normally again.

Requires: moderator:manage:suspicious_users

err := client.RemoveSuspiciousStatusFromChatUser(ctx, &helix.RemoveSuspiciousStatusFromChatUserParams{
    BroadcasterID: "12345",
    ModeratorID:   "67890",
    UserID:        "11111",
})

if err != nil {
    fmt.Printf("Failed to remove suspicious user status: %v\n", err)
}

Response: This endpoint returns 204 No Content on success.