Overview
Sublay provides a two-tier moderation system:- Project-level moderation — Users with project-level admin permissions can moderate any content across the entire project, regardless of which space it belongs to. This is typically used by the platform owner or trust-and-safety team.
-
Space-level moderation — Users with
adminormoderatorroles within a specific space can moderate content in that space only. Their capabilities are scoped to their space — they cannot view or act on reports from other spaces.
Requires the
moderation bundle. Reports, suspensions, and user blocking are only available when the moderation bundle is installed on your project. See Bundles to add it.Blocking
Beyond moderator-driven reporting and suspensions, the moderation bundle also provides end-user blocking — a user-to-user safety primitive. Any user can block any other user (no prior interaction required), and Sublay reliably severs interaction between them across every relevant surface. Blocking is not a moderator action — it is exposed to your app’s end users, alongside follows and connections, through the same SDK surfaces (React/React Native/Expo hooks, the node SDK, and the js SDK). Sublay ships the capability and enforcement; your app builds the block button/menu UI. See theuseBlockManager hook to wire up a block/unblock toggle.
Blocking ships with the moderation bundle because app stores check for reporting, blocking, and moderation together — it is the trust & safety package an app installs to be app-store compliant. A project without the moderation bundle has neither reporting nor blocking.
What a block does
When user A blocks user B, the effects are mutual (both directions) unless noted, and the block is silent — B is never notified and can never tell they’ve been blocked (see Non-disclosure below).
Unblocking lifts the barrier immediately but restores nothing — removed follows and connections stay gone and must be re-established from scratch; a frozen 1:1 conversation simply becomes usable again.
Content-list opt-in
Post and comment list endpoints (and their SDK equivalents) accept ablockedFilter parameter. It defaults to "exclude" (hide block-edged authors). Setting it to "include-outbound-blocked" re-includes content authored only by users the viewer themselves blocked — their own “view anyway” affordance. It can never surface content from users who blocked the viewer, and interaction remains blocked regardless of whether the content is shown. See Fetch Many Entities and Fetch Many Comments.
Non-disclosure
A block is invisible to the blocked user. There is no notification, no “you have been blocked” state, and no distinguishable error — a blocked interaction fails exactly like ordinary unavailability (user/content not found or unavailable), never revealing that a block exists, who set it, or in which direction it runs. The block-status read is outbound-only: a user can only ever learn whether they block someone, never whether someone blocks them. A user’s block list is private to that user.Block SDK surfaces
- React / React Native / Expo hooks:
useBlockManager,useBlockUser,useUnblockUser,useFetchBlockStatus,useFetchBlockedUsers. - Node SDK (act-on-behalf via
actingUserId):createBlock,deleteBlock,fetchBlockStatus,fetchBlockedUserson theusersmodule. - JS SDK (token-derived actor):
createBlock,deleteBlock,fetchBlockStatus,fetchBlockedUserson theusersmodule. - REST: Block User, Unblock User, Get Block Status, Fetch Blocked Users.
Reporting Flow
1
User submits a report
Call
useCreateReport with the target ID and a reason key. If the target has already been reported, the user’s report is appended to the existing report record.2
Report is associated with a space
The server automatically determines which space the reported content belongs to. Reports with no space (content outside a space) are visible only to project-level moderators.
3
Moderator reviews pending reports
A moderator fetches pending reports with
useFetchModeratedReports:- Project-level moderators see all reports across the entire project.
- Space-level moderators see only reports for content within their space.
4
Moderator takes action
Use
useHandleSpaceEntityReport or useHandleSpaceCommentReport to remove content, ban the author, or dismiss the report. Space-level moderators can only act on content within their space.Moderation Tiers
Project-Level Moderation
Project-level moderation is handled through the Sublay Dashboard — no code integration is required. Platform owners and trust-and-safety teams can log into the dashboard to review and act on reports across the entire project.- Managed entirely from the Sublay Dashboard
- Access to all reports, regardless of space
- Can remove any entity or comment in the project
- Can ban any user from any space
- Suitable for platform-wide policy enforcement
Space-Level Moderation
Space-level moderation must be integrated in your application. Users with anadmin or moderator role within a specific space can be given a moderation UI inside your app using the hooks below. Their capabilities are scoped to that space — they cannot view or act on reports from other spaces.
- Built into your app using the provided hooks
- Can only view reports for content within their space
- Can remove entities, comments, and chat messages within their space
- Can ban users from their space only
- Cannot access reports or take action in other spaces
Report Reasons
Reports must use one of these keys — the API rejects anything else withreport/invalid-body. Use other together with the free-text details field
for anything the list doesn’t cover.
Import reason keys from
@sublay/core:
Hooks
The hooks below are used for space-level moderation integrated in your app. Project-level moderation does not require any hooks — it is handled through the Sublay Dashboard.useCreateReport
Submit a report against an entity, comment, or chat message.
useFetchModeratedReports
Fetch pending reports for spaces the current user moderates.
useHandleSpaceEntityReport
Action an entity report as a space moderator.
useHandleSpaceCommentReport
Action a comment report as a space moderator.
useHandleSpaceChatReport
Action a chat message report as a space moderator.
Related
- Blocking — End-user user-to-user blocking (via
useBlockManager) - Suspensions — Platform-wide user timeouts that block participation writes
- Space Moderation — Direct moderation of entities and comments within a space (without the reporting flow)
- Space Rules — Define community rules that appear alongside moderation decisions

