analyze_moderation_status
Analyze moderation status of a post or user. Returns content labels, moderation decisions, and personal moderation state (blocks, mutes). Subject can be a DID (for users) or AT-URI (for posts).
Authentication
Required: Yes (Private tool). Personal moderation state (your blocks and mutes of the subject) is only meaningful when authenticated.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
subject | string | Yes | - | The thing to analyze. For a user, pass a handle (alice.bsky.social) or DID (did:plc:...). For a post, pass its AT-URI (at://...). The subject type is inferred from whether the value starts with at://. |
includeLabels | boolean | No | true | Whether to include content labels in the response. |
Response
Tool results are returned as stringified JSON text. The illustrative shape is:
{
success: boolean;
subject: string; // echoes the subject you passed in
subjectType: 'user' | 'post';
moderation: {
labels?: Array<{
src: string;
uri: string;
val: string;
cts: string;
}>;
blocked?: boolean | string; // boolean for user subjects; for post subjects this is the author's block-record AT-URI (string) or undefined
muted?: boolean; // you mute this user
blockedBy?: boolean; // this user blocks you
blocking?: string; // AT-URI of your block record, if any
mutedByList?: boolean; // muted via a list (users only)
blockingByList?: boolean; // blocked via one of your lists (users only)
};
analysis: {
hasContentWarnings: boolean;
isNSFW: boolean;
isSpam: boolean;
requiresWarning: boolean;
safetyLevel: 'safe' | 'warning' | 'restricted' | 'blocked';
};
}For a post subject, only blocked, muted, and blockedBy (reflecting the post author's relationship to you) are populated; the list-based fields apply to user subjects only. Note that for a post subject blocked carries the post author's block-record AT-URI string (or undefined) rather than a boolean, unlike the user path, which coerces it to a boolean via !!.
Examples
Analyze User Moderation Status
{
"subject": "did:plc:abc123",
"includeLabels": true
}Analyze Post Moderation Status
{
"subject": "at://did:plc:abc123/app.bsky.feed.post/xyz1",
"includeLabels": true
}Quick Moderation Check (No Labels)
{
"subject": "alice.bsky.social",
"includeLabels": false
}Error Handling
A missing or unresolvable subject (handle/DID/post not found, or a post that is itself blocked) surfaces as the underlying AT Protocol error. Per-tool rate limiting also applies (see below).
Subject Types
- User - pass a handle (
alice.bsky.social) or DID (did:plc:abc123). Returns profile-level labels and your blocks/mutes of that user. - Post - pass an AT-URI (
at://did:plc:abc123/app.bsky.feed.post/xyz1). Returns post-level labels and the author's moderation state relative to you.
Content Labels
Common label values:
porn: Adult sexual contentsexual: Sexually suggestive contentnudity: Nudity (artistic or otherwise)graphic-media: Graphic violence or disturbing imageryspam: Spam or misleading contentimpersonation: Impersonation of another user
Safety Levels
safe: No content warnings, safe for all audienceswarning: Has content warnings, user discretion advisedrestricted: Restricted content, may be hidden by defaultblocked: Blocked content, should not be displayed
Moderation State
Personal Moderation
blocked: You have blocked this usermuted: You have muted this userblockedBy: This user has blocked youblocking: AT-URI of your block record for this user, if anymutedByList: Muted via a listblockingByList: Blocked via one of your lists
Public Moderation
labels: Content labels applied by moderators or automated systemshasContentWarnings: Whether content has any warningsisNSFW: Whether content is marked as NSFWisSpam: Whether content is marked as spam
Rate Limiting
Calls are rate limited per tool to 100 requests per minute (see the error handling guide).
Related Tools
- block_user - Block a user
- mute_user - Mute a user
- report_content - Report inappropriate content
- report_user - Report a user
- get_user_profile - Get user profile
- get_post_context - Get post context