article_comments_apply
# article_comments_apply
Changes comments in the Article app (pApp B00001, or an instance code of the same family). Another app code is refused before any request. Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once.
## Inputs
| Field | Required here | Contract |
| --- | --- | --- |
| `postId` | Yes | When alternative 1: integer; greater than 0 |
| `action` | Yes | When alternative 1: one of: `reply`, `delete`, `pin` (by `kind`) |
| `action.content` | Yes | When alternative 1 and `action.kind` is `reply`: string; min length 1; max length 15000; For inquiry answers: original HTML, conservatively capped at 15,000 serialized units. Other comments: at most 3,000 units. Comments need at least one non-space character; inquiry answers need at least 2 units. |
| `action.source` | No | When alternative 1 and `action.kind` is `reply`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`) |
| `action.source.filename` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `local-file`: string; min length 1; max length 240; pattern `^[^/\\:\x00-\x1f\x7f]+$`; The name of the file on this computer, with its extension. |
| `action.source.byteLength` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `local-file`: integer; greater than 0; The exact file size in bytes (for example from `wc -c < FILE` or `stat`). |
| `action.source.sha256` | No | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `local-file`: string; pattern `^[0-9a-f]{64}$`; The SHA-256 of the file in lowercase hex (shasum -a 256 FILE). Required when the upload answers UPLOAD_CHECKSUM_REQUIRED. |
| `action.source.uploadId` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.source.fromPart` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `action.source.uploadId` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.source.parts` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: array; min items 1; max items 10000 |
| `action.source.parts[].partNumber` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `action.source.parts[].etag` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: string; min length 1; max length 200 |
| `action.source.measured` | No | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: object |
| `action.source.measured.durationSeconds` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `action.source.measured.frameRate` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97). |
| `action.source.measured.width` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `action.source.measured.height` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `action.source.measured.frameRateMode` | No | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `action.source.measured.minFrameRate` | No | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: number; maximum 1000; greater than 0 |
| `action.source.measured.maxFrameRate` | No | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `complete`: number; maximum 1000; greater than 0 |
| `action.source.uploadId` | Yes | When alternative 1 and `action.kind` is `reply` and `action.source.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.commentId` | Yes | When alternative 1 and `action.kind` is `delete`: integer; greater than 0 |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `delete`: `DELETE_COMMENT` |
| `action.commentId` | Yes | When alternative 1 and `action.kind` is `pin`: integer; greater than 0 |
| `action.pinned` | Yes | When alternative 1 and `action.kind` is `pin`: boolean |
| `instanceCode` | No | When alternative 1: string; pattern `^B(?:000\|9[0-9]{2})01$`; Optional: which installed Article app to use (its code, such as B00001 or B90101). Omit it when only one is installed; when several are, pick one from the installed list. |
| `confirmToken` | No | When alternative 1: string; pattern `^ct[a-f\d]{32}$`; The confirmToken from this tool's preview result. Omit it to preview; repeat the same input with it to execute. |
| `action` | Yes | When alternative 2: object |
| `action.kind` | Yes | When alternative 2: `article_manager_subscription` |
| `action.postId` | Yes | When alternative 2: integer; greater than 0 |
| `action.subscribed` | Yes | When alternative 2: boolean |
| `action.confirmation` | Yes | When alternative 2: `CHANGE_MY_ARTICLE_MANAGER_SUBSCRIPTION` |
| `instanceCode` | No | When alternative 2: string; pattern `^B(?:000\|9[0-9]{2})01$`; Optional: which installed Article app to use (its code, such as B00001 or B90101). Omit it when only one is installed; when several are, pick one from the installed list. |
| `confirmToken` | No | When alternative 2: string; pattern `^ct[a-f\d]{32}$`; The confirmToken from this tool's preview result. Omit it to preview; repeat the same input with it to execute. |
| `action` | Yes | When alternative 3: one of: `article_manager_comment`, `article_manager_comment`, `article_manager_comment` (by `kind`) |
| `action.operation` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: `create` |
| `action.postId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: integer; greater than 0 |
| `action.comment` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: string; Comment text, 1–3000 characters. |
| `action.image` | No | When alternative 3 and `action.kind` is `article_manager_comment`: one of: `local-file`, `more-parts`, `complete`, `cancel` (by `kind`) |
| `action.image.filename` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `local-file`: string; min length 1; max length 240; pattern `^[^/\\:\x00-\x1f\x7f]+$`; The name of the file on this computer, with its extension. |
| `action.image.byteLength` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `local-file`: integer; greater than 0; The exact file size in bytes (for example from `wc -c < FILE` or `stat`). |
| `action.image.sha256` | No | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `local-file`: string; pattern `^[0-9a-f]{64}$`; The SHA-256 of the file in lowercase hex (shasum -a 256 FILE). Required when the upload answers UPLOAD_CHECKSUM_REQUIRED. |
| `action.image.uploadId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `more-parts`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.image.fromPart` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `more-parts`: integer; minimum 1; maximum 10000 |
| `action.image.uploadId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.image.parts` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: array; min items 1; max items 10000 |
| `action.image.parts[].partNumber` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: integer; minimum 1; maximum 10000 |
| `action.image.parts[].etag` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: string; min length 1; max length 200 |
| `action.image.measured` | No | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: object |
| `action.image.measured.durationSeconds` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration). |
| `action.image.measured.frameRate` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97). |
| `action.image.measured.width` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `action.image.measured.height` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: integer; maximum 100000; greater than 0 |
| `action.image.measured.frameRateMode` | No | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: `CFR`, `VFR`; Constant or variable frame rate, when the tool reports it. |
| `action.image.measured.minFrameRate` | No | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: number; maximum 1000; greater than 0 |
| `action.image.measured.maxFrameRate` | No | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `complete`: number; maximum 1000; greater than 0 |
| `action.image.uploadId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment` and `action.image.kind` is `cancel`: string; pattern `^upl_[A-Za-z0-9_-]{22}$` |
| `action.operation` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: `delete` |
| `action.postId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: integer; greater than 0 |
| `action.commentId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: integer; greater than 0 or string; min length 1; max length 1024; pattern `^[A-Za-z0-9_.:-]+$`; The comment id or path from the manager-comment read. |
| `action.confirmation` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: `DELETE_ARTICLE_MANAGER_COMMENT` |
| `action.operation` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: `like`, `unlike`; like adds your like, unlike removes it; an unchanged state sends nothing. |
| `action.postId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: integer; greater than 0 |
| `action.commentId` | Yes | When alternative 3 and `action.kind` is `article_manager_comment`: integer; greater than 0 or string; min length 1; max length 1024; pattern `^[A-Za-z0-9_.:-]+$`; The comment id or path from the manager-comment read. |
| `instanceCode` | No | When alternative 3: string; pattern `^B(?:000\|9[0-9]{2})01$`; Optional: which installed Article app to use (its code, such as B00001 or B90101). Omit it when only one is installed; when several are, pick one from the installed list. |
| `confirmToken` | No | When alternative 3: string; pattern `^ct[a-f\d]{32}$`; The confirmToken from this tool's preview result. Omit it to preview; repeat the same input with it to execute. |