// Create a word blocklist
await client.createBlockList({
name: "profanity_custom",
words: ["badword1", "badword2", "offensive"],
type: "word",
});
// Create a domain blocklist
await client.createBlockList({
name: "blocked_domains",
words: ["spam-site.com", "phishing.net"],
type: "domain",
});
// Create a regex filter
await client.createBlockList({
name: "phone_numbers",
words: ["\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b"],
type: "regex",
});
// Create a domain allowlist (only these domains are permitted)
await client.createBlockList({
name: "trusted_domains",
words: ["myapp.com", "getstream.io"],
type: "domain_allowlist",
});
// Create an email allowlist
await client.createBlockList({
name: "approved_emails",
words: ["support@myapp.com", "info@myapp.com"],
type: "email_allowlist",
});Filters
Filters let you block or flag content based on specific words, domains, emails, or regex patterns. To use filters in moderation, you first create a blocklist, then attach it to a moderation policy.
Create a Blocklist
Create a custom blocklist with a name, type, and list of entries.
// Create a word blocklist
$client->createBlockList(new CreateBlockListRequest(
name: 'profanity_custom',
words: ['badword1', 'badword2', 'offensive'],
type: 'word',
));
// Create a domain blocklist
$client->createBlockList(new CreateBlockListRequest(
name: 'blocked_domains',
words: ['spam-site.com', 'phishing.net'],
type: 'domain',
));
// Create a regex filter
$client->createBlockList(new CreateBlockListRequest(
name: 'phone_numbers',
words: ['\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b'],
type: 'regex',
));
// Create a domain allowlist (only these domains are permitted)
$client->createBlockList(new CreateBlockListRequest(
name: 'trusted_domains',
words: ['myapp.com', 'getstream.io'],
type: 'domain_allowlist',
));
// Create an email allowlist
$client->createBlockList(new CreateBlockListRequest(
name: 'approved_emails',
words: ['support@myapp.com', 'info@myapp.com'],
type: 'email_allowlist',
));Request Parameters
| key | required | type | description |
|---|---|---|---|
| name | true | string | Unique name for the blocklist (max 255 characters). |
| words | true | array | List of words, domains, emails, or regex patterns (max 10,000 entries). |
| type | false | string | Filter type: word (default), domain, domain_allowlist, email, email_allowlist, or regex. |
| is_leet_check_enabled | false | boolean | Detect leet speak bypass attempts (e.g., h4ck3r → hacker). Word type only. |
| is_plural_check_enabled | false | boolean | Detect singular/plural forms (e.g., cat matches cats). Word type only. |
| team | false | string | Team ID for multi-tenant blocklists. |
Update a Blocklist
Replace the word list or settings of an existing blocklist.
$client->updateBlockList('profanity_custom', new UpdateBlockListRequest(
words: ['badword1', 'badword2', 'offensive', 'newword'],
isLeetCheckEnabled: true,
isPluralCheckEnabled: true,
));List Blocklists
$response = $client->listBlockLists();Get a Blocklist
$response = $client->getBlockList('profanity_custom');Delete a Blocklist
$client->deleteBlockList('profanity_custom');Attach a Blocklist to a Policy
Once created, attach your blocklist to a moderation policy to activate it. Each rule specifies the blocklist name and the action to take when matched.
$client->moderation()->upsertConfig(new UpsertConfigRequest(
key: 'chat:messaging',
blockListConfig: new BlockListConfig(
rules: [
new BlockListRule(name: 'profanity_custom', action: 'remove'),
new BlockListRule(name: 'blocked_domains', action: 'flag'),
new BlockListRule(name: 'phone_numbers', action: 'flag'),
],
),
));Filter Types
| Type | type value | Description |
|---|---|---|
| Word Blocklist | word | Exact word matching (case-insensitive). Supports leet speak and plural detection. |
| Domain Blocklist | domain | Blocks URLs by domain suffix matching. Ignores scheme and path. |
| Domain Allowlist | domain_allowlist | Only allows URLs from listed domains. Blocks everything else. |
| Email Blocklist | email | Blocks exact email addresses. |
| Email Allowlist | email_allowlist | Only allows listed email addresses. Blocks everything else. |
| Regex | regex | Pattern matching with regular expressions. Max 100 patterns per filter. |
Word Matching
Word blocklists match exact words (case-insensitive). Adjacent punctuation is ignored, but partial word matches are not.
For a blocklist containing dogs, house:
"Dogs, are great"— matches (case-insensitive, ignores comma)"I live in a lighthouse"— does not match (no partial match onhouse)
With leet speak detection enabled: d0g matches dog, w0m@n matches woman.
With plural detection enabled: houses matches house, dog matches dogs.
Domain Matching
Domain filters match the suffix of URLs. gmail.com matches https://gmail.com, http://support.gmail.com, etc. A more specific filter like messenger.facebook.com only matches that subdomain.
Regex Matching
Regex filters support standard regular expression syntax. Tips:
- Use
(?i)for case-insensitive matching - Use
\bfor whole-word boundaries - Escape special characters with
\ - Max 100 patterns per filter, max 60 characters per pattern
Limits
| Limit | Value |
|---|---|
| Max blocklists per app | 20 (100 with multi-tenancy) |
| Max words per blocklist | 10,000 |
| Max regex patterns per blocklist | 100 |
| Max characters per word | 40 |
| Max characters per regex pattern | 60 |