publ betaReference (MCP guide)
Open publ console

content_comments_apply

# content_comments_apply

Send a seller reply or inquiry answer, or moderate one exact comment.

Read the [shared content contract](../guides/content-apps.md) for authorization, app identity, result interpretation and recovery.

## Inputs and actions

Require channelCode, pAppCode, postId, requestId and expectedRevision from [content_comments_get](content_comments_get.md). dryRun defaults to false. Sending a reply is communication and requires the human's instruction to send it; a schema or available tool is not that instruction.

| action.kind | Fields and limits |
| --- | --- |
| reply | content: 2–3000 UTF-16 units for ordinary comments; inquiry answer HTML 2–15000 serialized units. Author name/image come from the authenticated channel profile. |
| delete | Observed commentId and confirmation DELETE_COMMENT. Permanent, without undo. |

The selected comment must be in the complete post snapshot. Outlink/welcome do not support this editor. The generic schema's 15000 maximum does not override the runtime 3000-unit guard for ordinary replies.

## Results and recovery

CONTENT_COMMENT_SAVED returns taskId, the selected comment (null after delete), revision and stored readback/preservation indicators. Other normalized comments and post fields are compared. Delivery to readers, notifications, console rendering and restoration are not verified by that stored comparison.

Use taskType `content-comments`. A sent operation is never replayed; identical apply or task_resume only reads back. An uncertain reply without a trustworthy returned ID cannot be adopted by matching its text or reposted. Preserve the task on COMMENT_OUTCOME_UNVERIFIED / COMMENT_CREATE_ID_UNKNOWN. Completed replay is historical. Pin/delete use the observed comment identity, not its row position or author ID.

## Input example

This is an input illustration, not a recorded call. Replace the channel, app, observed IDs and all-zero revision with values from the matching authorized read. A dry run does not save changes.

```json
{
  "channelCode": "selected-channel",
  "pAppCode": "B00001",
  "requestId": "example-request-001",
  "expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000",
  "dryRun": true,
  "action": {
    "kind": "pin",
    "commentId": 1,
    "pinned": true
  },
  "postId": 1
}
```