net.anisota.graph.scopedMute
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "An index of the accounts whose reposts or quote posts the viewer has muted through Bluesky's native scoped mute (app.bsky.graph.muteActor with onlyReposts / onlyQuoteposts). Bluesky stores the mute itself, but app.bsky.graph.getMutes returns only fully muted accounts, so a scoped mute is otherwise discoverable only by loading each profile. This record lets Anisota list and undo them, and enforce them client-side on unauthenticated reads where no viewer state comes back. It is a cache, not the source of truth: entries are reconciled against viewerState.mutedOnlyReposts / mutedOnlyQuoteposts and dropped when the server disagrees.",
"key": "literal:self",
"record": {
"properties": {
"appView": {
"description": "The AppView these mutes were last verified against (e.g. 'bluesky', 'blacksky', 'custom'). Native mutes are held per-AppView, so an index written while reading one AppView says nothing about another; without this, verifying the index against a different AppView reads 'that AppView does not hold this mute' as 'the reader lifted this mute' and deletes it.",
"type": "string"
},
"createdAt": {
"description": "When this index was first written",
"format": "datetime",
"type": "string"
},
"subjects": {
"description": "The accounts currently carrying a native scoped mute.",
"items": {
"ref": "#scopedMuteEntry",
"type": "ref"
},
"maxLength": 1000,
"type": "array"
},
"updatedAt": {
"description": "When this index was last reconciled or edited",
"format": "datetime",
"type": "string"
}
},
"required": [
"subjects",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"scopedMuteEntry": {
"description": "One account's native scoped mute. At least one scope flag is true — an entry with neither is a full mute or no mute at all, and does not belong here.",
"properties": {
"createdAt": {
"description": "When this scoped mute was set from Anisota",
"format": "datetime",
"type": "string"
},
"onlyQuoteposts": {
"default": false,
"description": "Their quote posts are muted",
"type": "boolean"
},
"onlyReposts": {
"default": false,
"description": "Their reposts are muted",
"type": "boolean"
},
"subject": {
"description": "DID of the scope-muted account",
"format": "did",
"type": "string"
}
},
"required": [
"subject"
],
"type": "object"
}
},
"id": "net.anisota.graph.scopedMute",
"lexicon": 1
}
Metadata
- DID
-
did:plc:lcieujcfkv4jx7gehsvok3pr - CID
-
bafyreicudy6mrhvh7hjyp5h7szjsw4f52joxrqwqzi6ylhp5vtmjhh46cy - Indexed At
- 2026-08-24 19:36 UTC
- AT-URI
-
at://did:plc:lcieujcfkv4jx7gehsvok3pr/com.atproto.lexicon.schema/net.anisota.graph.scopedMute
Version History (2 versions)
- 2026-08-24 19:36 UTC (current)
- 2026-08-10 19:59 UTC diff
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
Klearsky client-specific record that stores a list of DIDs whose reposts should be muted.
-
app.bsky.graph.muteActor procedure
Creates a mute relationship for the specified account. If a mute already exists for the account, it is updated in place: the stored scope is replaced with the scope in this request. Mutes are private in Bluesky. Require…
-
A record for muting content from a specific account with fine-grained control over content types and duration
-
place.pollen.graph.mute record
A mute relationship. The muted account's content is hidden from the muter's feed.
-
Creates a mute relationship for the specified account. If a mute already exists for the account, it is updated in place: the stored scope is replaced with the scope in this request. Mutes are private in Bluesky. Require…