Worldwide launch puts this product in scope for regimes that expect notice-and-action and transparency reporting (including the EU DSA). This page describes the machinery that exists. It does not publish counts, because we do not generate a public transparency report yet.
What we moderate
Text only. There is no video pipeline in Phase 0.
Automated rules: contact exchange, off-allowlist links, minor indicators, solicitation, hate, spam. A Flag under the minor rule sets users.restricted_at (not a bans row) and invalidates current tokens; WebSocket authenticate then fails closed. Human review is an admin report queue (dismiss, warn, ban, escalate). Every admin action writes an enforcement_events row.
User reports
One tap, enum reason, no free text. Evidence stores message ids, not bodies. Report spam is rate-limited and can reduce trust.
What we do not publish yet
We do not publish monthly volumes of reports, bans, or false-positive rates. Metrics exist internally for connections, queue depth, messages relayed, and verdicts by action. Those are operational, not a DSA-style statement of reasons archive.
Geo-blocking as a kill switch
BLOCKED_COUNTRIES can withdraw the API from listed ISO country codes in minutes, using CF-IPCountry, fail closed when the header is absent. The list is empty unless operators set it. GET /api/v1/public/geo returns {blockedCountries} from that config. When the list is non-empty, the middleware wraps the API, including that listing.
Recommendations for a later report
A human should decide the first reporting period, the metrics, and whether statements of reasons are issued per DSA. Engineering should not invent those numbers here.