use GetStream\ClientBuilder;
$moderationClient = (new ClientBuilder())
->apiKey($apiKey)
->apiSecret($apiSecret)
->buildModerationClient();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
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 banreason: Optional reason for the bantimeout: 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 addressbannedBy: Optional user who performed the bandeleteMessages: Whether to delete user's messages
To reverse a ban, see Unban User in the Moderation docs. The user object returned by queryUsers only exposes the ban state (banned, ban_expires) — it does not include banned_by or the ban reason. To retrieve that metadata, use Query Banned Users.
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 mutetimeout: 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: "stream:feeds:v3:activity",
reason: "Inappropriate content",
entityCreatorID: "user-456",
userID: "moderator"
);
$response = $moderationClient->flag($flagRequest);Parameters:
entityId: The ID of the content to flagentityType: The type of content (e.g., "stream:feeds:v3:activity", "stream:feeds:v3:comment")reason: Optional reason for flaggingentityCreatorId: Optional ID of the content creatorcustom: 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 retrieveteam: 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
| name | type | description | supported operations | example |
|---|---|---|---|---|
key | string or list of strings | The configuration key identifier | $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $exists, $autocomplete | { key: { $autocomplete: 'spam' } } |
team | string or list of strings | The team identifier for multi-tenant applications | $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $exists | { team: { $eq: 'team_123' } } |
created_at | string, must be formatted as an RFC3339 timestamp | The time the configuration was created | $eq, $gt, $gte, $lt, $lte | { created_at: { $gte: '2023-12-04T09:30:20.45Z' } } |
updated_at | string, must be formatted as an RFC3339 timestamp | The 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";
}