---
title: "Set comment moderation status"
method: POST
path: "/v1/messaging/inbox/comments/{postId}/{commentId}/moderation"
tags: ["Inbox comments"]
---

# Set comment moderation status

`POST /v1/messaging/inbox/comments/{postId}/{commentId}/moderation`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/messaging/inbox/comments/{postId}/{commentId}/moderation`
- Auth: HTTP bearer

Set a comment's moderation status. Supported on YouTube only.

Use this to work a moderation queue: approve a held comment (`published`), reject it
(`rejected`), or send it back for review (`heldForReview`).

The request must be authorized by the owner of the channel or video the comment
belongs to. You cannot moderate comments on videos you do not own.

This is distinct from `POST /v1/inbox/comments/{postId}/{commentId}/hide`, which
covers Facebook, Instagram, Threads, and X and does not apply to YouTube.


**Billing:** Request; paid actions are priced in credits (see GET /v1/messaging/prices) · **Rate limit:** 60/min

## Path parameters

- `postId` string, required
- `commentId` string, required

## Headers

- `Idempotency-Key` string
- `X-Tag` string

## Request body

- object
  - `platform` 'youtube', required: Only YouTube supports comment moderation
  - `accountId` string, required: The account ID
  - `banAuthor` boolean: Also ban the comment's author, auto-rejecting their future comments. Only valid when moderationStatus is "rejected"; any other pairing is a 400.
  - `moderationStatus` 'published' | 'rejected' | 'heldForReview', required: published approves the comment, rejected removes it, heldForReview returns it to the queue.

## Response `200`

Completed

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
    - `success` boolean
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
