POST
POST https://api.hivemoderation.com/api/v1/appeals/create
Appeals allow users to contest previous moderation decisions. You can submit an appeal using either judgment_id or appeal_context. If the content has expired, you will need to include this field in this request.
cURL
curl -X POST https://api.hivemoderation.com/api/v1/appeals/create \
-H "Authorization: token <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"appeal_context": {
"type": "post",
"post_id": "post-1",
"user_id": "user-1" },
"appealer_id": "user-1",
"appeal_reason": "This content was flagged incorrectly. It is educational material.",
"appeal_categories": ["false_positive", "educational_content"]
}'
Header Type Required Description Authorizationstring Yes API key from Moderation Dashboard (per-application). Content-Typestring Yes Submit JSON data in the request body.
Parameter Type Required Description appealer_idstring Yes Unique identifier for the user submitting the appeal. judgment_idstring Conditional* ID of the moderation judgment being appealed. appeal_contextobject Conditional* Context object for the content being appealed (see below). appeal_reasonstring No Free-form text explaining the appeal. appeal_categoriesarray No Category strings for the appeal type. report_idstring No Associated report ID. metadataobject No Custom metadata (any valid JSON). Must not be greater than 2048 characters. text_datastring Conditional† Text content for moderator review. Required if original content has expired. urlstring Conditional† Media URL for moderator review. Required if original content has expired.
(*) Provide exactly one: judgment_id OR appeal_context.
(†) When original content has expired, provide exactly one: text_data OR url.
Required when using appeal_context instead of judgment_id.
Field Type Required Description typestring Yes Either "post" or "user". user_idstring Yes User ID associated with the content. post_idstring Conditional Required when type is "post". Mutually exclusive with source_post_id. source_post_idstring No Original post ID for shared/reposted content. Mutually exclusive with post_id.
Field Type Always Returned Description appeal.idstring No Unique identifier for the created appeal. appeal.application_idstring Yes Your application ID. appeal.appeal_categoriesarray No Categories associated with the appeal. appeal.patron_idstring No ID of the user about whom the appeal was made. appeal.post_idstring No ID of the post about which the appeal was made. appeal.timestampstring Yes Timestamp (ISO 8601 format) when the appeal was created. appeal.appeal_reasonstring No The reason provided for the appeal. appeal.metadataobject No Custom metadata attached to the appeal. appeal.text_datastring Conditional* Text content from the appealed post. Returned if the post is of type text. appeal.urlstring Conditional* Media URL from the appealed post. Returned if the post contains media. appeal.judgment_idstring No Associated judgment ID (if provided). appeal.report_idstring No Associated report ID (if provided). appeal.appealer_idstring Yes ID of the user who submitted the appeal. appeal.entity_typestring Yes Either "patron", "post", or "none". appeal.bucketstring Yes appeal.content_expiredboolean Yes Whether the content has expired.
(*) When original content has expired, provide exactly one: text_data OR url.
JSON
{
"appeal": {
"id": "appeal_xyz789",
"application_id": "app_123",
"judgment_id": "jdg_abc123xyz",
"appealer_id": "user_789",
"appeal_reason": "This content was flagged incorrectly. It is educational material.",
"appeal_categories": ["false_positive", "educational_content"],
"status": "pending",
"created_at": "2026-01-21T10:30:00Z",
"metadata": null
}
}
JSON
{
"error": true,
"status": 400,
"error_code": "PARAM_REQUIRED",
"message": "appealer_id is required.",
"show_alert": false,
}
Status Code Error Code Description 400 INVALID_PARAMETERSMissing required parameter or invalid type. 400 INVALID_APPEAL_CONTEXT_TYPEappeal_context.type must be "post" or "user".400 CONFLICTING_PARAMETERSViolated mutual exclusivity rules (e.g., provided both judgment_id and appeal_context). 400 NONEXISTENT_POST_IDThe post ID references expired/deleted content. Include text_data or url to provide content for moderator review. 400 APPEAL_METADATA_TOO_LARGEAppeal Metadata must be under 2048 total characters. 401 UNAUTHORIZEDInvalid or missing API key. 404 JUDGMENT_NOT_FOUNDThe specified judgment_id does not exist. 429 RATE_LIMIT_EXCEEDEDToo many requests. Please retry after the specified time.