Activity Feeds v3 is in beta — try it out!

Moderation

Stream Feeds has support for moderation, allowing you to manage user interactions, content moderation, and platform safety. It’s accessible through the client.moderation property.

Overview

use GetStream\ClientBuilder;

$moderationClient = (new ClientBuilder())
    ->apiKey($apiKey)
    ->apiSecret($apiSecret)
    ->buildModerationClient();

User Moderation

Ban Users

Ban a user from the platform with various options including timeout, shadow bans, and IP bans.

$banRequest = new GeneratedModels\BanRequest(
    targetUserID: "user123",
    reason: "Violation of community guidelines",
    timeout: 60, // 1 hour in minutes
    shadow: false,
    ipBan: false,
    bannedByID: "eric"
);

$response = $moderationClient->ban($banRequest);

Parameters:

  • targetUserId: The ID of the user to ban
  • reason: Optional reason for the ban
  • timeout: Optional timeout in seconds (null for permanent ban)
  • shadow: Whether to perform a shadow ban (user doesn’t know they’re banned)
  • ipBan: Whether to ban the user’s IP address
  • bannedBy: Optional user who performed the ban
  • deleteMessages: Whether to delete user’s messages

Mute Users

Mute one or more users to prevent them from interacting with your content.

$muteRequest = new GeneratedModels\MuteRequest(
    targetIds: ["user123", "user456"],
    // 24 hours in minutes
    timeout: 1440,
    userID: "moderator"
);

$response = $moderationClient->mute($muteRequest);

Parameters:

  • targetIds: Array of user IDs to mute
  • timeout: Optional timeout in seconds (null for permanent mute)

Block Users

Block a user to prevent them from following you or seeing your content.

$blockRequest = new GeneratedModels\BlockUsersRequest(
    blockedUserID: "user123",
    userID: "moderator"
);

$response = $moderationClient->blockUsers($blockRequest);

Unblock Users

Unblock a previously blocked user.

$request = new GeneratedModels\UnblockUsersRequest(
    blockedUserID: "user123",
    userID: "moderator"
);

$response = $moderationClient->unblockUsers($request);

Get Blocked Users

Retrieve a list of users you have blocked.

$response = $client->getBlockedUsers('moderator');

Content Moderation

Flag Content

Flag inappropriate content for moderation review.

$flagRequest = new GeneratedModels\FlagRequest(
    entityID: "activity-123",
    entityType: "activity",
    reason: "Inappropriate content",
    entityCreatorID: "user-456",
    userID: "moderator"
);

$response = $moderationClient->flag($flagRequest);

Parameters:

  • entityId: The ID of the content to flag
  • entityType: The type of content (e.g., “activity”, “comment”)
  • reason: Optional reason for flagging
  • entityCreatorId: Optional ID of the content creator
  • custom: Optional custom data for the flag

Submit Moderation Actions

Submit moderation actions for flagged content.

$actionRequest = new GeneratedModels\SubmitActionRequest(
    // Action details for moderation
    userID: "moderator"
);

$response = $moderationClient->submitAction($actionRequest);

Review Queue

Query Review Queue

Retrieve items in the moderation review queue.

$queryRequest = new GeneratedModels\QueryReviewQueueRequest(
    limit: 10,
    lockItems: false,
    userID: "moderator"
);

$response = $moderationClient->queryReviewQueue($queryRequest);

Configuration Management

Upsert Moderation Configuration

Create or update moderation configuration settings.

$configRequest = new GeneratedModels\UpsertConfigRequest(
    key: "feeds",
    blockListConfig: new GeneratedModels\BlockListConfig(
        enabled: true,
        rules: [
            new GeneratedModels\BlockListRule(
                name: "blocklist",
                action: "remove",
            )
        ]
    ),
    userID: "moderator"
);

$response = $moderationClient->upsertConfig($configRequest);

Get Moderation Configuration

Retrieve a specific moderation configuration.

$response = $moderationClient->getConfig("feeds", "");

Parameters:

  • key: The configuration key to retrieve
  • team: Optional team identifier

Delete Moderation Configuration

Remove a moderation configuration.

$response = $moderationClient->deleteConfig("feeds", "");

Query Moderation Configurations

Search and filter moderation configurations.

$queryRequest = new GeneratedModels\QueryModerationConfigsRequest(
    limit: 10,
    filter: (object)[
        "key" => (object)['$in' => ["feeds", "automod"]]
    ]
);

$response = $moderationClient->queryModerationConfigs($queryRequest);

Moderation Config Queryable Built-In Fields

nametypedescriptionsupported operationsexample
keystring or list of stringsThe configuration key identifier$eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $exists, $autocomplete{ key: { $autocomplete: 'spam' } }
teamstring or list of stringsThe team identifier for multi-tenant applications$eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $exists{ team: { $eq: 'team_123' } }
created_atstring, must be formatted as an RFC3339 timestampThe time the configuration was created$eq, $gt, $gte, $lt, $lte{ created_at: { $gte: '2023-12-04T09:30:20.45Z' } }
updated_atstring, must be formatted as an RFC3339 timestampThe time the configuration was last updated$eq, $gt, $gte, $lt, $lte{ updated_at: { $gte: '2023-12-04T09:30:20.45Z' } }

Error Handling

All moderation methods can throw errors. Handle them appropriately:

try {
    $banRequest = new GeneratedModels\BanRequest(
        targetUserID: "user-123",
        reason: "Violation of community guidelines",
        timeout: 60, // 1 hour in minutes
        shadow: false,
        ipBan: false,
        bannedByID: "moderator"
    );

    $response = $moderationClient->ban($banRequest);
    echo "User banned successfully\n";
} catch (Exception $e) {
    echo "Failed to ban user: " . $e->getResponseBody() . "\n";
}
© Getstream.io, Inc. All Rights Reserved.