const client = new FeedsClient("<API key>");
client.moderation;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.
await client.moderation.ban({
target_user_id: "user-123",
reason: "Violation of community guidelines",
timeout: 3600, // 1 hour in seconds
shadow: false,
ip_ban: false,
});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.
client.moderation.mute({
target_ids: ["user-123", "user-456"],
timeout: 86400, // 24 hours in seconds
});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.
await client.blockUsers({
blocked_user_id: "user-123",
});Unblock Users
Unblock a previously blocked user.
client.unblockUsers({
blocked_user_id: "user-123",
});Get Blocked Users
Retrieve a list of users you have blocked.
client.getBlockedUsers();Content Moderation
Flag Content
Flag inappropriate content for moderation review.
await client.moderation.flag({
entity_type: "stream:feeds:v3:activity",
entity_id: "activity_123",
reason: "Inappropriate content",
});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.
client.moderation.submitAction({
// Action details for moderation
});Review Queue
Query Review Queue
Retrieve items in the moderation review queue.
client.moderation.queryReviewQueue({
// Query parameters for filtering and pagination
});Configuration Management
Upsert Moderation Configuration
Create or update moderation configuration settings.
client.moderation.upsertConfig({
key: 'feeds',
block_list_config: {
enabled: true,
rules: [
// Names of existing block lists
{ name: blocklistName, action: 'remove' },
{ name: flagBlocklistName, action: 'flag' },
{ name: shadowBlocklistName, action: 'shadow' },
{ name: bounceBlocklistName, action: 'bounce' },
],
},
ai_image_config: {
enabled: true,
rules: [{ label: 'Non-Explicit Nudity', action: 'remove', min_confidence: 0 }],
ocr_rules: [{ label: 'Non-Explicit Nudity', action: 'remove' }],
},
}),Get Moderation Configuration
Retrieve a specific moderation configuration.
client.moderation.getConfig({
key: "feeds",
});Parameters:
key: The configuration key to retrieveteam: Optional team identifier
Delete Moderation Configuration
Remove a moderation configuration.
client.moderation.deleteConfig({
key: "feeds",
});Query Moderation Configurations
Search and filter moderation configurations.
client.moderation.queryModerationConfigs({
filter: {
// Filter params
},
});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 {
const response = await client.moderation.ban({
target_user_id: "user-123",
reason: "Violation of community guidelines",
timeout: 3600, // 1 hour in seconds
shadow: false,
ip_ban: false,
});
console.log(`Banned successfully`);
} catch (e) {
console.error(`Failed to ban user, error: ${e}`);
}