Skip to content

tools.ozone.moderation.defs

Lexicon Version: 1

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
idinteger
eventUnion of:
  #modEventTakedown
  #modEventReverseTakedown
  #modEventComment
  #modEventReport
  #modEventLabel
  #modEventAcknowledge
  #modEventEscalate
  #modEventMute
  #modEventUnmute
  #modEventMuteReporter
  #modEventUnmuteReporter
  #modEventEmail
  #modEventResolveAppeal
  #modEventDivert
  #modEventTag
  #accountEvent
  #identityEvent
  #recordEvent
  #modEventPriorityScore
  #ageAssuranceEvent
  #ageAssuranceOverrideEvent
  #revokeAccountCredentialsEvent
  #scheduleTakedownEvent
  #cancelScheduledTakedownEvent
subjectUnion of:
  com.atproto.admin.defs#repoRef
  com.atproto.repo.strongRef
  chat.bsky.convo.defs#messageRef
subjectBlobCidsArray of string
createdBystringFormat: did
createdAtstringFormat: datetime
creatorHandlestring
subjectHandlestring
modTool#modTool

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
idinteger
eventUnion of:
  #modEventTakedown
  #modEventReverseTakedown
  #modEventComment
  #modEventReport
  #modEventLabel
  #modEventAcknowledge
  #modEventEscalate
  #modEventMute
  #modEventUnmute
  #modEventMuteReporter
  #modEventUnmuteReporter
  #modEventEmail
  #modEventResolveAppeal
  #modEventDivert
  #modEventTag
  #accountEvent
  #identityEvent
  #recordEvent
  #modEventPriorityScore
  #ageAssuranceEvent
  #ageAssuranceOverrideEvent
  #revokeAccountCredentialsEvent
  #scheduleTakedownEvent
  #cancelScheduledTakedownEvent
subjectUnion of:
  #repoView
  #repoViewNotFound
  #recordView
  #recordViewNotFound
subjectBlobsArray of #blobView
createdBystringFormat: did
createdAtstringFormat: datetime
modTool#modTool

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
idinteger
subjectUnion of:
  com.atproto.admin.defs#repoRef
  com.atproto.repo.strongRef
  chat.bsky.convo.defs#messageRef
hostingUnion of:
  #accountHosting
  #recordHosting
subjectBlobCidsArray of string
subjectRepoHandlestring
updatedAtstringTimestamp referencing when the last update was made to the moderation status of the subjectFormat: datetime
createdAtstringTimestamp referencing the first moderation status impacting event was emitted on the subjectFormat: datetime
reviewState#subjectReviewState
commentstringSticky comment on the subject.
priorityScoreintegerNumeric value representing the level of priority. Higher score means higher priority.Min: 0
Max: 100
muteUntilstringFormat: datetime
muteReportingUntilstringFormat: datetime
lastReviewedBystringFormat: did
lastReviewedAtstringFormat: datetime
lastReportedAtstringFormat: datetime
lastAppealedAtstringTimestamp referencing when the author of the subject appealed a moderation actionFormat: datetime
takendownboolean
appealedbooleanTrue indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators.
suspendUntilstringFormat: datetime
tagsArray of string
accountStats#accountStatsStatistics related to the account subject
recordsStats#recordsStatsStatistics related to the record subjects authored by the subject’s account
ageAssuranceStatestringCurrent age assurance state of the subject.Known Values: pending, assured, unknown, reset, blocked
ageAssuranceUpdatedBystringWhether or not the last successful update to age assurance was made by the user or admin.Known Values: admin, user

Type: object

Detailed view of a subject. For record subjects, the author’s repo and profile will be returned.

Properties:

NameTypeReq’dDescriptionConstraints
typecom.atproto.moderation.defs#subjectType
subjectstring
status#subjectStatusView
repo#repoViewDetail
profileUnion of:
  
record#recordViewDetail

Type: object

Statistics about a particular account subject

Properties:

NameTypeReq’dDescriptionConstraints
reportCountintegerTotal number of reports on the account
appealCountintegerTotal number of appeals against a moderation action on the account
suspendCountintegerNumber of times the account was suspended
escalateCountintegerNumber of times the account was escalated
takedownCountintegerNumber of times the account was taken down

Type: object

Statistics about a set of record subject items

Properties:

NameTypeReq’dDescriptionConstraints
totalReportsintegerCumulative sum of the number of reports on the items in the set
reportedCountintegerNumber of items that were reported at least once
escalatedCountintegerNumber of items that were escalated at least once
appealedCountintegerNumber of items that were appealed at least once
subjectCountintegerTotal number of item in the set
pendingCountintegerNumber of item currently in “reviewOpen” or “reviewEscalated” state
processedCountintegerNumber of item currently in “reviewNone” or “reviewClosed” state
takendownCountintegerNumber of item currently taken down

Type: string

Constraints:
Known Values: #reviewOpen, #reviewEscalated, #reviewClosed, #reviewNone


Type: token

Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator


Type: token

Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator


Type: token

Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator


Type: token

Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it


Type: object

Take down a subject permanently or temporarily

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
durationInHoursintegerIndicates how long the takedown should be in effect before automatically expiring.
acknowledgeAccountSubjectsbooleanIf true, all other reports on content authored by this account will be resolved (acknowledged).
policiesArray of stringNames/Keywords of the policies that drove the decision.Max Items: 5

Type: object

Revert take down action on a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstringDescribe reasoning behind the reversal.

Type: object

Resolve appeal on a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstringDescribe resolution.

Type: object

Add a comment to a subject. An empty comment will clear any previously set sticky comment.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
stickybooleanMake the comment persistent on the subject

Type: object

Report a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
isReporterMutedbooleanSet to true if the reporter was muted from reporting at the time of the event. These reports won’t impact the reviewState of the subject.
reportTypecom.atproto.moderation.defs#reasonType

Type: object

Apply/Negate labels on a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
createLabelValsArray of string
negateLabelValsArray of string
durationInHoursintegerIndicates how long the label will remain on the subject. Only applies on labels that are being added.

Type: object

Set priority score of the subject. Higher score means higher priority.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
scoreintegerMin: 0
Max: 100

Type: object

Age assurance info coming directly from users. Only works on DID subjects.

Properties:

NameTypeReq’dDescriptionConstraints
createdAtstringThe date and time of this write operation.Format: datetime
statusstringThe status of the age assurance process.Known Values: unknown, pending, assured
attemptIdstringThe unique identifier for this instance of the age assurance flow, in UUID format.
initIpstringThe IP address used when initiating the AA flow.
initUastringThe user agent used when initiating the AA flow.
completeIpstringThe IP address used when completing the AA flow.
completeUastringThe user agent used when completing the AA flow.

Type: object

Age assurance status override by moderators. Only works on DID subjects.

Properties:

NameTypeReq’dDescriptionConstraints
statusstringThe status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.Known Values: assured, reset, blocked
commentstringComment describing the reason for the override.

Type: object

Account credentials revocation by moderators. Only works on DID subjects.

Properties:

NameTypeReq’dDescriptionConstraints
commentstringComment describing the reason for the revocation.

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
acknowledgeAccountSubjectsbooleanIf true, all other reports on content authored by this account will be resolved (acknowledged).

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
commentstring

Type: object

Mute incoming reports on a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
durationInHoursintegerIndicates how long the subject should remain muted.

Type: object

Unmute action on a subject

Properties:

NameTypeReq’dDescriptionConstraints
commentstringDescribe reasoning behind the reversal.

Type: object

Mute incoming reports from an account

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
durationInHoursintegerIndicates how long the account should remain muted. Falsy value here means a permanent mute.

Type: object

Unmute incoming reports from an account

Properties:

NameTypeReq’dDescriptionConstraints
commentstringDescribe reasoning behind the reversal.

Type: object

Keep a log of outgoing email to a user

Properties:

NameTypeReq’dDescriptionConstraints
subjectLinestringThe subject line of the email sent to the user.
contentstringThe content of the email sent to the user.
commentstringAdditional comment about the outgoing comm.

Type: object

Divert a record’s blobs to a 3rd party service for further scanning/tagging

Properties:

NameTypeReq’dDescriptionConstraints
commentstring

Type: object

Add/Remove a tag on a subject

Properties:

NameTypeReq’dDescriptionConstraints
addArray of stringTags to be added to the subject. If already exists, won’t be duplicated.
removeArray of stringTags to be removed to the subject. Ignores a tag If it doesn’t exist, won’t be duplicated.
commentstringAdditional comment about added/removed tags.

Type: object

Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
activebooleanIndicates that the account has a repository which can be fetched from the host that emitted this event.
statusstringKnown Values: unknown, deactivated, deleted, takendown, suspended, tombstoned
timestampstringFormat: datetime

Type: object

Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
handlestringFormat: handle
pdsHoststringFormat: uri
tombstoneboolean
timestampstringFormat: datetime

Type: object

Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
opstringKnown Values: create, update, delete
cidstringFormat: cid
timestampstringFormat: datetime

Type: object

Logs a scheduled takedown action for an account.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring
executeAtstringFormat: datetime
executeAfterstringFormat: datetime
executeUntilstringFormat: datetime

Type: object

Logs cancellation of a scheduled takedown action for an account.

Properties:

NameTypeReq’dDescriptionConstraints
commentstring

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
didstringFormat: did
handlestringFormat: handle
emailstring
relatedRecordsArray of unknown
indexedAtstringFormat: datetime
moderation#moderation
invitedBycom.atproto.server.defs#inviteCode
invitesDisabledboolean
inviteNotestring
deactivatedAtstringFormat: datetime
threatSignaturesArray of com.atproto.admin.defs#threatSignature

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
didstringFormat: did
handlestringFormat: handle
emailstring
relatedRecordsArray of unknown
indexedAtstringFormat: datetime
moderation#moderationDetail
labelsArray of com.atproto.label.defs#label
invitedBycom.atproto.server.defs#inviteCode
invitesArray of com.atproto.server.defs#inviteCode
invitesDisabledboolean
inviteNotestring
emailConfirmedAtstringFormat: datetime
deactivatedAtstringFormat: datetime
threatSignaturesArray of com.atproto.admin.defs#threatSignature

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
didstringFormat: did

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
uristringFormat: at-uri
cidstringFormat: cid
valueunknown
blobCidsArray of string
indexedAtstringFormat: datetime
moderation#moderation
repo#repoView

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
uristringFormat: at-uri
cidstringFormat: cid
valueunknown
blobsArray of #blobView
labelsArray of com.atproto.label.defs#label
indexedAtstringFormat: datetime
moderation#moderationDetail
repo#repoView

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
uristringFormat: at-uri

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
subjectStatus#subjectStatusView

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
subjectStatus#subjectStatusView

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
cidstringFormat: cid
mimeTypestring
sizeinteger
createdAtstringFormat: datetime
detailsUnion of:
  #imageDetails
  #videoDetails
moderation#moderation

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
widthinteger
heightinteger

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
widthinteger
heightinteger
lengthinteger

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
statusstringKnown Values: takendown, suspended, deleted, deactivated, unknown
updatedAtstringFormat: datetime
createdAtstringFormat: datetime
deletedAtstringFormat: datetime
deactivatedAtstringFormat: datetime
reactivatedAtstringFormat: datetime

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
statusstringKnown Values: deleted, unknown
updatedAtstringFormat: datetime
createdAtstringFormat: datetime
deletedAtstringFormat: datetime

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
didstringFormat: did
accountReportCountintegerThe total number of reports made by the user on accounts.
recordReportCountintegerThe total number of reports made by the user on records.
reportedAccountCountintegerThe total number of accounts reported by the user.
reportedRecordCountintegerThe total number of records reported by the user.
takendownAccountCountintegerThe total number of accounts taken down as a result of the user’s reports.
takendownRecordCountintegerThe total number of records taken down as a result of the user’s reports.
labeledAccountCountintegerThe total number of accounts labeled as a result of the user’s reports.
labeledRecordCountintegerThe total number of records labeled as a result of the user’s reports.

Type: object

Moderation tool information for tracing the source of the action

Properties:

NameTypeReq’dDescriptionConstraints
namestringName/identifier of the source (e.g., ‘automod’, ‘ozone/workspace’)
metaunknownAdditional arbitrary metadata about the source

Type: token

Moderation event timeline event for a PLC create operation


Type: token

Moderation event timeline event for generic PLC operation


Type: token

Moderation event timeline event for a PLC tombstone operation


Type: object

View of a scheduled moderation action

Properties:

NameTypeReq’dDescriptionConstraints
idintegerAuto-incrementing row ID
actionstringType of action to be executedKnown Values: takedown
eventDataunknownSerialized event object that will be propagated to the event when performed
didstringSubject DID for the actionFormat: did
executeAtstringExact time to execute the actionFormat: datetime
executeAfterstringEarliest time to execute the action (for randomized scheduling)Format: datetime
executeUntilstringLatest time to execute the action (for randomized scheduling)Format: datetime
randomizeExecutionbooleanWhether execution time should be randomized within the specified range
createdBystringDID of the user who created this scheduled actionFormat: did
createdAtstringWhen the scheduled action was createdFormat: datetime
updatedAtstringWhen the scheduled action was last updatedFormat: datetime
statusstringCurrent status of the scheduled actionKnown Values: pending, executed, cancelled, failed
lastExecutedAtstringWhen the action was last attempted to be executedFormat: datetime
lastFailureReasonstringReason for the last execution failure
executionEventIdintegerID of the moderation event created when action was successfully executed

{
"lexicon": 1,
"id": "tools.ozone.moderation.defs",
"defs": {
"modEventView": {
"type": "object",
"required": [
"id",
"event",
"subject",
"subjectBlobCids",
"createdBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer"
},
"event": {
"type": "union",
"refs": [
"#modEventTakedown",
"#modEventReverseTakedown",
"#modEventComment",
"#modEventReport",
"#modEventLabel",
"#modEventAcknowledge",
"#modEventEscalate",
"#modEventMute",
"#modEventUnmute",
"#modEventMuteReporter",
"#modEventUnmuteReporter",
"#modEventEmail",
"#modEventResolveAppeal",
"#modEventDivert",
"#modEventTag",
"#accountEvent",
"#identityEvent",
"#recordEvent",
"#modEventPriorityScore",
"#ageAssuranceEvent",
"#ageAssuranceOverrideEvent",
"#revokeAccountCredentialsEvent",
"#scheduleTakedownEvent",
"#cancelScheduledTakedownEvent"
]
},
"subject": {
"type": "union",
"refs": [
"com.atproto.admin.defs#repoRef",
"com.atproto.repo.strongRef",
"chat.bsky.convo.defs#messageRef"
]
},
"subjectBlobCids": {
"type": "array",
"items": {
"type": "string"
}
},
"createdBy": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"creatorHandle": {
"type": "string"
},
"subjectHandle": {
"type": "string"
},
"modTool": {
"type": "ref",
"ref": "#modTool"
}
}
},
"modEventViewDetail": {
"type": "object",
"required": [
"id",
"event",
"subject",
"subjectBlobs",
"createdBy",
"createdAt"
],
"properties": {
"id": {
"type": "integer"
},
"event": {
"type": "union",
"refs": [
"#modEventTakedown",
"#modEventReverseTakedown",
"#modEventComment",
"#modEventReport",
"#modEventLabel",
"#modEventAcknowledge",
"#modEventEscalate",
"#modEventMute",
"#modEventUnmute",
"#modEventMuteReporter",
"#modEventUnmuteReporter",
"#modEventEmail",
"#modEventResolveAppeal",
"#modEventDivert",
"#modEventTag",
"#accountEvent",
"#identityEvent",
"#recordEvent",
"#modEventPriorityScore",
"#ageAssuranceEvent",
"#ageAssuranceOverrideEvent",
"#revokeAccountCredentialsEvent",
"#scheduleTakedownEvent",
"#cancelScheduledTakedownEvent"
]
},
"subject": {
"type": "union",
"refs": [
"#repoView",
"#repoViewNotFound",
"#recordView",
"#recordViewNotFound"
]
},
"subjectBlobs": {
"type": "array",
"items": {
"type": "ref",
"ref": "#blobView"
}
},
"createdBy": {
"type": "string",
"format": "did"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"modTool": {
"type": "ref",
"ref": "#modTool"
}
}
},
"subjectStatusView": {
"type": "object",
"required": [
"id",
"subject",
"createdAt",
"updatedAt",
"reviewState"
],
"properties": {
"id": {
"type": "integer"
},
"subject": {
"type": "union",
"refs": [
"com.atproto.admin.defs#repoRef",
"com.atproto.repo.strongRef",
"chat.bsky.convo.defs#messageRef"
]
},
"hosting": {
"type": "union",
"refs": [
"#accountHosting",
"#recordHosting"
]
},
"subjectBlobCids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
},
"subjectRepoHandle": {
"type": "string"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp referencing when the last update was made to the moderation status of the subject"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp referencing the first moderation status impacting event was emitted on the subject"
},
"reviewState": {
"type": "ref",
"ref": "#subjectReviewState"
},
"comment": {
"type": "string",
"description": "Sticky comment on the subject."
},
"priorityScore": {
"type": "integer",
"description": "Numeric value representing the level of priority. Higher score means higher priority.",
"minimum": 0,
"maximum": 100
},
"muteUntil": {
"type": "string",
"format": "datetime"
},
"muteReportingUntil": {
"type": "string",
"format": "datetime"
},
"lastReviewedBy": {
"type": "string",
"format": "did"
},
"lastReviewedAt": {
"type": "string",
"format": "datetime"
},
"lastReportedAt": {
"type": "string",
"format": "datetime"
},
"lastAppealedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp referencing when the author of the subject appealed a moderation action"
},
"takendown": {
"type": "boolean"
},
"appealed": {
"type": "boolean",
"description": "True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators."
},
"suspendUntil": {
"type": "string",
"format": "datetime"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"accountStats": {
"description": "Statistics related to the account subject",
"type": "ref",
"ref": "#accountStats"
},
"recordsStats": {
"description": "Statistics related to the record subjects authored by the subject's account",
"type": "ref",
"ref": "#recordsStats"
},
"ageAssuranceState": {
"type": "string",
"description": "Current age assurance state of the subject.",
"knownValues": [
"pending",
"assured",
"unknown",
"reset",
"blocked"
]
},
"ageAssuranceUpdatedBy": {
"type": "string",
"description": "Whether or not the last successful update to age assurance was made by the user or admin.",
"knownValues": [
"admin",
"user"
]
}
}
},
"subjectView": {
"description": "Detailed view of a subject. For record subjects, the author's repo and profile will be returned.",
"type": "object",
"required": [
"type",
"subject"
],
"properties": {
"type": {
"type": "ref",
"ref": "com.atproto.moderation.defs#subjectType"
},
"subject": {
"type": "string"
},
"status": {
"type": "ref",
"ref": "#subjectStatusView"
},
"repo": {
"type": "ref",
"ref": "#repoViewDetail"
},
"profile": {
"type": "union",
"refs": []
},
"record": {
"type": "ref",
"ref": "#recordViewDetail"
}
}
},
"accountStats": {
"description": "Statistics about a particular account subject",
"type": "object",
"properties": {
"reportCount": {
"description": "Total number of reports on the account",
"type": "integer"
},
"appealCount": {
"description": "Total number of appeals against a moderation action on the account",
"type": "integer"
},
"suspendCount": {
"description": "Number of times the account was suspended",
"type": "integer"
},
"escalateCount": {
"description": "Number of times the account was escalated",
"type": "integer"
},
"takedownCount": {
"description": "Number of times the account was taken down",
"type": "integer"
}
}
},
"recordsStats": {
"description": "Statistics about a set of record subject items",
"type": "object",
"properties": {
"totalReports": {
"description": "Cumulative sum of the number of reports on the items in the set",
"type": "integer"
},
"reportedCount": {
"description": "Number of items that were reported at least once",
"type": "integer"
},
"escalatedCount": {
"description": "Number of items that were escalated at least once",
"type": "integer"
},
"appealedCount": {
"description": "Number of items that were appealed at least once",
"type": "integer"
},
"subjectCount": {
"description": "Total number of item in the set",
"type": "integer"
},
"pendingCount": {
"description": "Number of item currently in \"reviewOpen\" or \"reviewEscalated\" state",
"type": "integer"
},
"processedCount": {
"description": "Number of item currently in \"reviewNone\" or \"reviewClosed\" state",
"type": "integer"
},
"takendownCount": {
"description": "Number of item currently taken down",
"type": "integer"
}
}
},
"subjectReviewState": {
"type": "string",
"knownValues": [
"#reviewOpen",
"#reviewEscalated",
"#reviewClosed",
"#reviewNone"
]
},
"reviewOpen": {
"type": "token",
"description": "Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator"
},
"reviewEscalated": {
"type": "token",
"description": "Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator"
},
"reviewClosed": {
"type": "token",
"description": "Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator"
},
"reviewNone": {
"type": "token",
"description": "Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it"
},
"modEventTakedown": {
"type": "object",
"description": "Take down a subject permanently or temporarily",
"properties": {
"comment": {
"type": "string"
},
"durationInHours": {
"type": "integer",
"description": "Indicates how long the takedown should be in effect before automatically expiring."
},
"acknowledgeAccountSubjects": {
"type": "boolean",
"description": "If true, all other reports on content authored by this account will be resolved (acknowledged)."
},
"policies": {
"type": "array",
"maxLength": 5,
"items": {
"type": "string"
},
"description": "Names/Keywords of the policies that drove the decision."
}
}
},
"modEventReverseTakedown": {
"type": "object",
"description": "Revert take down action on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe reasoning behind the reversal."
}
}
},
"modEventResolveAppeal": {
"type": "object",
"description": "Resolve appeal on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe resolution."
}
}
},
"modEventComment": {
"type": "object",
"description": "Add a comment to a subject. An empty comment will clear any previously set sticky comment.",
"properties": {
"comment": {
"type": "string"
},
"sticky": {
"type": "boolean",
"description": "Make the comment persistent on the subject"
}
}
},
"modEventReport": {
"type": "object",
"description": "Report a subject",
"required": [
"reportType"
],
"properties": {
"comment": {
"type": "string"
},
"isReporterMuted": {
"type": "boolean",
"description": "Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject."
},
"reportType": {
"type": "ref",
"ref": "com.atproto.moderation.defs#reasonType"
}
}
},
"modEventLabel": {
"type": "object",
"description": "Apply/Negate labels on a subject",
"required": [
"createLabelVals",
"negateLabelVals"
],
"properties": {
"comment": {
"type": "string"
},
"createLabelVals": {
"type": "array",
"items": {
"type": "string"
}
},
"negateLabelVals": {
"type": "array",
"items": {
"type": "string"
}
},
"durationInHours": {
"type": "integer",
"description": "Indicates how long the label will remain on the subject. Only applies on labels that are being added."
}
}
},
"modEventPriorityScore": {
"type": "object",
"description": "Set priority score of the subject. Higher score means higher priority.",
"required": [
"score"
],
"properties": {
"comment": {
"type": "string"
},
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
},
"ageAssuranceEvent": {
"type": "object",
"description": "Age assurance info coming directly from users. Only works on DID subjects.",
"required": [
"createdAt",
"status",
"attemptId"
],
"properties": {
"createdAt": {
"type": "string",
"format": "datetime",
"description": "The date and time of this write operation."
},
"status": {
"type": "string",
"description": "The status of the age assurance process.",
"knownValues": [
"unknown",
"pending",
"assured"
]
},
"attemptId": {
"type": "string",
"description": "The unique identifier for this instance of the age assurance flow, in UUID format."
},
"initIp": {
"type": "string",
"description": "The IP address used when initiating the AA flow."
},
"initUa": {
"type": "string",
"description": "The user agent used when initiating the AA flow."
},
"completeIp": {
"type": "string",
"description": "The IP address used when completing the AA flow."
},
"completeUa": {
"type": "string",
"description": "The user agent used when completing the AA flow."
}
}
},
"ageAssuranceOverrideEvent": {
"type": "object",
"description": "Age assurance status override by moderators. Only works on DID subjects.",
"required": [
"comment",
"status"
],
"properties": {
"status": {
"type": "string",
"description": "The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.",
"knownValues": [
"assured",
"reset",
"blocked"
]
},
"comment": {
"type": "string",
"description": "Comment describing the reason for the override."
}
}
},
"revokeAccountCredentialsEvent": {
"type": "object",
"description": "Account credentials revocation by moderators. Only works on DID subjects.",
"required": [
"comment"
],
"properties": {
"comment": {
"type": "string",
"description": "Comment describing the reason for the revocation."
}
}
},
"modEventAcknowledge": {
"type": "object",
"properties": {
"comment": {
"type": "string"
},
"acknowledgeAccountSubjects": {
"type": "boolean",
"description": "If true, all other reports on content authored by this account will be resolved (acknowledged)."
}
}
},
"modEventEscalate": {
"type": "object",
"properties": {
"comment": {
"type": "string"
}
}
},
"modEventMute": {
"type": "object",
"description": "Mute incoming reports on a subject",
"required": [
"durationInHours"
],
"properties": {
"comment": {
"type": "string"
},
"durationInHours": {
"type": "integer",
"description": "Indicates how long the subject should remain muted."
}
}
},
"modEventUnmute": {
"type": "object",
"description": "Unmute action on a subject",
"properties": {
"comment": {
"type": "string",
"description": "Describe reasoning behind the reversal."
}
}
},
"modEventMuteReporter": {
"type": "object",
"description": "Mute incoming reports from an account",
"properties": {
"comment": {
"type": "string"
},
"durationInHours": {
"type": "integer",
"description": "Indicates how long the account should remain muted. Falsy value here means a permanent mute."
}
}
},
"modEventUnmuteReporter": {
"type": "object",
"description": "Unmute incoming reports from an account",
"properties": {
"comment": {
"type": "string",
"description": "Describe reasoning behind the reversal."
}
}
},
"modEventEmail": {
"type": "object",
"description": "Keep a log of outgoing email to a user",
"required": [
"subjectLine"
],
"properties": {
"subjectLine": {
"type": "string",
"description": "The subject line of the email sent to the user."
},
"content": {
"type": "string",
"description": "The content of the email sent to the user."
},
"comment": {
"type": "string",
"description": "Additional comment about the outgoing comm."
}
}
},
"modEventDivert": {
"type": "object",
"description": "Divert a record's blobs to a 3rd party service for further scanning/tagging",
"properties": {
"comment": {
"type": "string"
}
}
},
"modEventTag": {
"type": "object",
"description": "Add/Remove a tag on a subject",
"required": [
"add",
"remove"
],
"properties": {
"add": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags to be added to the subject. If already exists, won't be duplicated."
},
"remove": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated."
},
"comment": {
"type": "string",
"description": "Additional comment about added/removed tags."
}
}
},
"accountEvent": {
"type": "object",
"description": "Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
"required": [
"timestamp",
"active"
],
"properties": {
"comment": {
"type": "string"
},
"active": {
"type": "boolean",
"description": "Indicates that the account has a repository which can be fetched from the host that emitted this event."
},
"status": {
"type": "string",
"knownValues": [
"unknown",
"deactivated",
"deleted",
"takendown",
"suspended",
"tombstoned"
]
},
"timestamp": {
"type": "string",
"format": "datetime"
}
}
},
"identityEvent": {
"type": "object",
"description": "Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
"required": [
"timestamp"
],
"properties": {
"comment": {
"type": "string"
},
"handle": {
"type": "string",
"format": "handle"
},
"pdsHost": {
"type": "string",
"format": "uri"
},
"tombstone": {
"type": "boolean"
},
"timestamp": {
"type": "string",
"format": "datetime"
}
}
},
"recordEvent": {
"type": "object",
"description": "Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.",
"required": [
"timestamp",
"op"
],
"properties": {
"comment": {
"type": "string"
},
"op": {
"type": "string",
"knownValues": [
"create",
"update",
"delete"
]
},
"cid": {
"type": "string",
"format": "cid"
},
"timestamp": {
"type": "string",
"format": "datetime"
}
}
},
"scheduleTakedownEvent": {
"type": "object",
"description": "Logs a scheduled takedown action for an account.",
"properties": {
"comment": {
"type": "string"
},
"executeAt": {
"type": "string",
"format": "datetime"
},
"executeAfter": {
"type": "string",
"format": "datetime"
},
"executeUntil": {
"type": "string",
"format": "datetime"
}
}
},
"cancelScheduledTakedownEvent": {
"type": "object",
"description": "Logs cancellation of a scheduled takedown action for an account.",
"properties": {
"comment": {
"type": "string"
}
}
},
"repoView": {
"type": "object",
"required": [
"did",
"handle",
"relatedRecords",
"indexedAt",
"moderation"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"email": {
"type": "string"
},
"relatedRecords": {
"type": "array",
"items": {
"type": "unknown"
}
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"moderation": {
"type": "ref",
"ref": "#moderation"
},
"invitedBy": {
"type": "ref",
"ref": "com.atproto.server.defs#inviteCode"
},
"invitesDisabled": {
"type": "boolean"
},
"inviteNote": {
"type": "string"
},
"deactivatedAt": {
"type": "string",
"format": "datetime"
},
"threatSignatures": {
"type": "array",
"items": {
"type": "ref",
"ref": "com.atproto.admin.defs#threatSignature"
}
}
}
},
"repoViewDetail": {
"type": "object",
"required": [
"did",
"handle",
"relatedRecords",
"indexedAt",
"moderation"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"handle": {
"type": "string",
"format": "handle"
},
"email": {
"type": "string"
},
"relatedRecords": {
"type": "array",
"items": {
"type": "unknown"
}
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"moderation": {
"type": "ref",
"ref": "#moderationDetail"
},
"labels": {
"type": "array",
"items": {
"type": "ref",
"ref": "com.atproto.label.defs#label"
}
},
"invitedBy": {
"type": "ref",
"ref": "com.atproto.server.defs#inviteCode"
},
"invites": {
"type": "array",
"items": {
"type": "ref",
"ref": "com.atproto.server.defs#inviteCode"
}
},
"invitesDisabled": {
"type": "boolean"
},
"inviteNote": {
"type": "string"
},
"emailConfirmedAt": {
"type": "string",
"format": "datetime"
},
"deactivatedAt": {
"type": "string",
"format": "datetime"
},
"threatSignatures": {
"type": "array",
"items": {
"type": "ref",
"ref": "com.atproto.admin.defs#threatSignature"
}
}
}
},
"repoViewNotFound": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"recordView": {
"type": "object",
"required": [
"uri",
"cid",
"value",
"blobCids",
"indexedAt",
"moderation",
"repo"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {
"type": "unknown"
},
"blobCids": {
"type": "array",
"items": {
"type": "string",
"format": "cid"
}
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"moderation": {
"type": "ref",
"ref": "#moderation"
},
"repo": {
"type": "ref",
"ref": "#repoView"
}
}
},
"recordViewDetail": {
"type": "object",
"required": [
"uri",
"cid",
"value",
"blobs",
"indexedAt",
"moderation",
"repo"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"value": {
"type": "unknown"
},
"blobs": {
"type": "array",
"items": {
"type": "ref",
"ref": "#blobView"
}
},
"labels": {
"type": "array",
"items": {
"type": "ref",
"ref": "com.atproto.label.defs#label"
}
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"moderation": {
"type": "ref",
"ref": "#moderationDetail"
},
"repo": {
"type": "ref",
"ref": "#repoView"
}
}
},
"recordViewNotFound": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
}
}
},
"moderation": {
"type": "object",
"properties": {
"subjectStatus": {
"type": "ref",
"ref": "#subjectStatusView"
}
}
},
"moderationDetail": {
"type": "object",
"properties": {
"subjectStatus": {
"type": "ref",
"ref": "#subjectStatusView"
}
}
},
"blobView": {
"type": "object",
"required": [
"cid",
"mimeType",
"size",
"createdAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"mimeType": {
"type": "string"
},
"size": {
"type": "integer"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"details": {
"type": "union",
"refs": [
"#imageDetails",
"#videoDetails"
]
},
"moderation": {
"type": "ref",
"ref": "#moderation"
}
}
},
"imageDetails": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
},
"videoDetails": {
"type": "object",
"required": [
"width",
"height",
"length"
],
"properties": {
"width": {
"type": "integer"
},
"height": {
"type": "integer"
},
"length": {
"type": "integer"
}
}
},
"accountHosting": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"knownValues": [
"takendown",
"suspended",
"deleted",
"deactivated",
"unknown"
]
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"deletedAt": {
"type": "string",
"format": "datetime"
},
"deactivatedAt": {
"type": "string",
"format": "datetime"
},
"reactivatedAt": {
"type": "string",
"format": "datetime"
}
}
},
"recordHosting": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string",
"knownValues": [
"deleted",
"unknown"
]
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"deletedAt": {
"type": "string",
"format": "datetime"
}
}
},
"reporterStats": {
"type": "object",
"required": [
"did",
"accountReportCount",
"recordReportCount",
"reportedAccountCount",
"reportedRecordCount",
"takendownAccountCount",
"takendownRecordCount",
"labeledAccountCount",
"labeledRecordCount"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"accountReportCount": {
"type": "integer",
"description": "The total number of reports made by the user on accounts."
},
"recordReportCount": {
"type": "integer",
"description": "The total number of reports made by the user on records."
},
"reportedAccountCount": {
"type": "integer",
"description": "The total number of accounts reported by the user."
},
"reportedRecordCount": {
"type": "integer",
"description": "The total number of records reported by the user."
},
"takendownAccountCount": {
"type": "integer",
"description": "The total number of accounts taken down as a result of the user's reports."
},
"takendownRecordCount": {
"type": "integer",
"description": "The total number of records taken down as a result of the user's reports."
},
"labeledAccountCount": {
"type": "integer",
"description": "The total number of accounts labeled as a result of the user's reports."
},
"labeledRecordCount": {
"type": "integer",
"description": "The total number of records labeled as a result of the user's reports."
}
}
},
"modTool": {
"type": "object",
"description": "Moderation tool information for tracing the source of the action",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Name/identifier of the source (e.g., 'automod', 'ozone/workspace')"
},
"meta": {
"type": "unknown",
"description": "Additional arbitrary metadata about the source"
}
}
},
"timelineEventPlcCreate": {
"type": "token",
"description": "Moderation event timeline event for a PLC create operation"
},
"timelineEventPlcOperation": {
"type": "token",
"description": "Moderation event timeline event for generic PLC operation"
},
"timelineEventPlcTombstone": {
"type": "token",
"description": "Moderation event timeline event for a PLC tombstone operation"
},
"scheduledActionView": {
"type": "object",
"description": "View of a scheduled moderation action",
"required": [
"id",
"action",
"did",
"createdBy",
"createdAt",
"status"
],
"properties": {
"id": {
"type": "integer",
"description": "Auto-incrementing row ID"
},
"action": {
"type": "string",
"knownValues": [
"takedown"
],
"description": "Type of action to be executed"
},
"eventData": {
"type": "unknown",
"description": "Serialized event object that will be propagated to the event when performed"
},
"did": {
"type": "string",
"format": "did",
"description": "Subject DID for the action"
},
"executeAt": {
"type": "string",
"format": "datetime",
"description": "Exact time to execute the action"
},
"executeAfter": {
"type": "string",
"format": "datetime",
"description": "Earliest time to execute the action (for randomized scheduling)"
},
"executeUntil": {
"type": "string",
"format": "datetime",
"description": "Latest time to execute the action (for randomized scheduling)"
},
"randomizeExecution": {
"type": "boolean",
"description": "Whether execution time should be randomized within the specified range"
},
"createdBy": {
"type": "string",
"format": "did",
"description": "DID of the user who created this scheduled action"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the scheduled action was created"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When the scheduled action was last updated"
},
"status": {
"type": "string",
"knownValues": [
"pending",
"executed",
"cancelled",
"failed"
],
"description": "Current status of the scheduled action"
},
"lastExecutedAt": {
"type": "string",
"format": "datetime",
"description": "When the action was last attempted to be executed"
},
"lastFailureReason": {
"type": "string",
"description": "Reason for the last execution failure"
},
"executionEventId": {
"type": "integer",
"description": "ID of the moderation event created when action was successfully executed"
}
}
}
}
}