# CampaignPostsPatchInput

Input object

Changes to the posts a CONTENT_CAPTURE campaign holds; refused on any other type. At most 200 entries per call, add and remove together. Entries are independent: a refused one is reported at its own path (e.g. ["input","posts","add","3"]) and the rest still apply. Removes apply before adds. The same id in both lists is refused in both. Read the posts the campaign holds with items(filter: { campaignsIds: [<campaign id>] }); that list is search-indexed and catches up shortly after a patch, so diff against it on a later run, not right after patching.

## Fields

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `add` | `[ID!]` | No | `[]` | Item ids to add, as items and itemIdsByUrl return them. Synchronous: each post is in the campaign when the call returns, and its creator joins the campaign's roster. An id already in the campaign is a no-op. An id that is not an item of this workspace, or that would exceed the campaign's post or creator limit, is refused at its index. |
| `remove` | `[ID!]` | No | `[]` | Item ids to take out of the campaign, now. The creator stays on the campaign's roster, and a removed post can be added back later. An id not in the campaign is a no-op. |
