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
{
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"subject",
"reason"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 1000
},
"subject": {
"refs": [
"app.tempomusic.moderation.defs#postSubject",
"app.tempomusic.moderation.defs#replySubject",
"app.tempomusic.moderation.defs#accountSubject"
],
"type": "union"
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "Forbidden",
"description": "Caller is not an active moderator."
},
{
"name": "SubjectNotFound"
},
{
"name": "NotTakenDown",
"description": "The subject is not currently under a moderation hold; nothing to restore."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"auditEntryId"
],
"properties": {
"auditEntryId": {
"type": "integer",
"minimum": 1
}
}
},
"encoding": "application/json"
},
"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."
}