app.tempomusic.staff.restoreSubject
Flip `moderation_status` back to 0 on a previously taken-down subject row. Writes a `subjectRestore` audit row. Trivially symmetric with takedownSubject — both act on the subject row only; lifting an account-wide sanction is unsuspendAccount's job (bans are permanent). Requires the caller to be an active moderator.
Details · procedure
| Kind | procedure |
|---|---|
| Authority | staff.tempomusic.app |
| Indexed |
Checks
Valid Lint pass{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "Flip `moderation_status` back to 0 on a previously taken-down subject row. Writes a `subjectRestore` audit row. Trivially symmetric with takedownSubject — both act on the subject row only; lifting an account-wide sanction is unsuspendAccount's job (bans are permanent). Requires the caller to be an active moderator.",
"errors": [
{
"description": "Caller is not an active moderator.",
"name": "Forbidden"
},
{
"name": "SubjectNotFound"
},
{
"description": "The subject is not currently under a moderation hold; nothing to restore.",
"name": "NotTakenDown"
}
],
"input": {
"encoding": "application/json",
"schema": {
"properties": {
"reason": {
"maxLength": 1000,
"type": "string"
},
"subject": {
"refs": [
"app.tempomusic.moderation.defs#postSubject",
"app.tempomusic.moderation.defs#replySubject",
"app.tempomusic.moderation.defs#accountSubject"
],
"type": "union"
}
},
"required": [
"subject",
"reason"
],
"type": "object"
}
},
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"auditEntryId": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"auditEntryId"
],
"type": "object"
}
},
"type": "procedure"
}
},
"id": "app.tempomusic.staff.restoreSubject",
"lexicon": 1
}