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.
Input
application/jsonreason
string
Required
No description available.
maxLength: 1000 bytessubject
union
Required
No description available.
Output
application/jsonauditEntryId
integer
Required
No description available.
Errors
Forbidden
Caller is not an active moderator. SubjectNotFound
NotTakenDown
The subject is not currently under a moderation hold; nothing to restore. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"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"
}