Platform

Content Filters

Create and manage content filtering rules for your proxy. Filters automatically moderate requests and responses flowing through Metriqual.

Note
Filters are evaluated in priority order. The first matching filter with a block action stops the request. Filters with a flag action log a warning but let the request through.

List Filters

GET/v1/filters

List all content filters for the authenticated user (or organization).

cURL
curl https://api.metriqual.com/v1/filters \
  -H "Authorization: Bearer YOUR_JWT"
TypeScript SDK
const filters = await mql.filters.list();
filters.forEach(f => console.log(f.name, f.type, f.is_active));
Python SDK
filters = mql.filters.list()
for f in filters:
    print(f["name"], f["type"], f["is_active"])
CLI
mql filters list
mql filters ls --json

Create Filter

POST/v1/filters

Body Parameters

namestringrequired

Filter name

typestringrequired

Filter type

Options: keyword, regex, category

configobjectrequired

Type-specific configuration (e.g. keywords list, regex pattern, or categories)

actionstringrequired

Action to take on match

Options: block, flag

is_activeboolean

Whether filter is active

Default: true

cURL
curl -X POST https://api.metriqual.com/v1/filters \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Block PII",
    "type": "regex",
    "config": { "pattern": "\\b\\d{3}-\\d{2}-\\d{4}\\b" },
    "action": "block"
  }'
TypeScript SDK
const filter = await mql.filters.create({
  name: 'Block PII',
  type: 'regex',
  config: { pattern: '\\b\\d{3}-\\d{2}-\\d{4}\\b' },
  action: 'block',
});
console.log(filter.id);
Python SDK
filter = mql.filters.create(
    name="Block PII",
    filter_type="regex",
    config={"pattern": r"\b\d{3}-\d{2}-\d{4}\b"},
    action="block",
)
print(filter["id"])
CLI
mql filters create -n "Block PII" -t regex \
  --config '{"pattern": "\\b\\d{3}-\\d{2}-\\d{4}\\b"}' \
  -a block

Update Filter

PUT/v1/filters/:filter_id

Update an existing filter's name, config, or action.

TypeScript SDK
await mql.filters.update('filter_id', {
  name: 'Block PII v2',
  config: { pattern: '\\b\\d{3}-\\d{2}-\\d{4}\\b|\\b\\d{16}\\b' },
});
Python SDK
mql.filters.update("filter_id",
    name="Block PII v2",
    config={"pattern": r"\b\d{3}-\d{2}-\d{4}\b|\b\d{16}\b"},
)
CLI
mql filters update FILTER_ID -n "Block PII v2"

Toggle Filter

PATCH/v1/filters/:filter_id/toggle

Enable or disable a filter without deleting it.

TypeScript SDK
await mql.filters.toggle('filter_id');
Python SDK
mql.filters.toggle("filter_id")
CLI
mql filters toggle FILTER_ID

Delete Filter

DELETE/v1/filters/:filter_id

Permanently delete a content filter.

TypeScript SDK
await mql.filters.delete('filter_id');
Python SDK
mql.filters.delete("filter_id")
CLI
mql filters delete FILTER_ID

Filter Templates

GET/v1/filters/templates
POST/v1/filters/templates/:template_id

List pre-built filter templates and create a filter from a template.

TypeScript SDK
// List templates
const templates = await mql.filters.getTemplates();
templates.forEach(t => console.log(t.name, t.description));

// Create from template
const filter = await mql.filters.createFromTemplate('template_id');
Python SDK
# List templates
templates = mql.filters.get_templates()
for t in templates:
    print(t["name"], t["description"])

# Create from template
filter = mql.filters.create_from_template("template_id")

Test Filter

POST/v1/filters/:filter_id/test

Test a filter against sample content without sending a real request.

TypeScript SDK
const result = await mql.filters.test('filter_id', {
  content: 'My SSN is 123-45-6789'
});
console.log(result.matched, result.action); // true, 'block'
Python SDK
result = mql.filters.test("filter_id", content="My SSN is 123-45-6789")
print(result["matched"], result["action"])  # True, 'block'

Organization Filters

GET/v1/organizations/:org_id/filters
POST/v1/organizations/:org_id/filters

List and create filters scoped to an organization. These apply to all members' traffic.

TypeScript SDK
// List org filters
const orgFilters = await mql.filters.listForOrg('org_id');

// Create org filter
const filter = await mql.filters.createForOrg('org_id', {
  name: 'Block profanity',
  type: 'keyword',
  config: { keywords: ['badword1', 'badword2'] },
  action: 'block',
});
Python SDK
# List org filters
org_filters = mql.filters.list_for_org("org_id")

# Create org filter
filter = mql.filters.create_for_org("org_id",
    name="Block profanity",
    filter_type="keyword",
    config={"keywords": ["badword1", "badword2"]},
    action="block",
)

SDK & CLI Reference

OperationTypeScriptPythonCLI
Listmql.filters.list()mql.filters.list()mql filters list
Createmql.filters.create(req)mql.filters.create(...)mql filters create
Updatemql.filters.update(id, req)mql.filters.update(id, ...)mql filters update
Togglemql.filters.toggle(id)mql.filters.toggle(id)mql filters toggle
Deletemql.filters.delete(id)mql.filters.delete(id)mql filters delete
Templatesmql.filters.getTemplates()mql.filters.get_templates()—
From templatemql.filters.createFromTemplate(id)mql.filters.create_from_template(id)—
Testmql.filters.test(id, req)mql.filters.test(id, ...)—
Org listmql.filters.listForOrg(org)mql.filters.list_for_org(org)—
Org createmql.filters.createForOrg(org, req)mql.filters.create_for_org(org, ...)—