# article_catalogs_apply
Changes catalogs in the Article app (pApp B00001, or an instance code of the same family). Another app code is refused before any request. Catalogs carry the memberships and prices that make posts subscriber-only or paid: link memberships, link posts, set the price, edit details, create or delete a catalog, or change their state. Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once.
## Inputs
| Field | Required here | Contract |
| --- | --- | --- |
| `action` | Yes | When alternative 1: one of: `catalog_memberships`, `catalog_contents`, `catalog_pricing`, `catalog_details`, `catalog_delete` (by `kind`) |
| `action.catalogId` | Yes | When alternative 1 and `action.kind` is `catalog_memberships`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `catalog_memberships`: `CHANGE_CATALOG_MEMBERSHIPS` |
| `action.change` | Yes | When alternative 1 and `action.kind` is `catalog_memberships`: one of: `link`, `unlink` (by `kind`) |
| `action.change.membershipIds` | Yes | When alternative 1 and `action.kind` is `catalog_memberships` and `action.change.kind` is `link`: array; items: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id.; min items 1; max items 100 |
| `action.change.membershipId` | Yes | When alternative 1 and `action.kind` is `catalog_memberships` and `action.change.kind` is `unlink`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.catalogId` | Yes | When alternative 1 and `action.kind` is `catalog_contents`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `catalog_contents`: `CHANGE_CATALOG_CONTENTS` |
| `action.change` | Yes | When alternative 1 and `action.kind` is `catalog_contents`: one of: `link`, `unlink`, `link`, `unlink` (by `kind`) |
| `action.change.postIds` | Yes | When alternative 1 and `action.kind` is `catalog_contents` and `action.change.kind` is `link` or `unlink`: array; items: integer; greater than 0; min items 1; max items 200 |
| `action.change.seriesIds` | Yes | When alternative 1 and `action.kind` is `catalog_contents` and `action.change.kind` is `link` or `unlink`: array; items: integer; greater than 0; min items 1; max items 200 |
| `action.catalogId` | Yes | When alternative 1 and `action.kind` is `catalog_pricing`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `catalog_pricing`: `CHANGE_CATALOG_PRICING` |
| `action.change` | Yes | When alternative 1 and `action.kind` is `catalog_pricing`: one of: `save`, `discard` (by `kind`) |
| `action.change.fields` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: object |
| `action.change.fields.representationalName` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: string; min length 2; max length 40 |
| `action.change.fields.currency` | No | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: `KRW`, `USD`; Optional consistency check. When omitted, use the freshly verified selected channel currency; do not ask the user to supply a value already available from preparation. |
| `action.change.fields.sellingPrice` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.00)?$`; An amount in the selected channel currency. KRW uses hundreds; USD uses whole dollars. Do not supply internal CP units. |
| `action.change.fields.originalPrice` | No | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.00)?$`; An amount in the selected channel currency. KRW uses hundreds; USD uses whole dollars. Do not supply internal CP units. or null; Omitted or null means the same price as sellingPrice, matching an empty original-price field in the source full form. |
| `action.change.fields.unlockActionExpiryPeriodInDays` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: `1` or `3` or `7` or `15` or `30` or `60` or `90` or `180` or `365` or null |
| `action.change.fields.isPurchaseAvailable` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: boolean |
| `action.change.fields.availablePurchaseMethodsType` | Yes | When alternative 1 and `action.kind` is `catalog_pricing` and `action.change.kind` is `save`: `CASH_ONLY`, `CASH_AND_CP` |
| `action.catalogId` | Yes | When alternative 1 and `action.kind` is `catalog_details`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `catalog_details`: `CHANGE_CATALOG_DETAILS` |
| `action.change` | Yes | When alternative 1 and `action.kind` is `catalog_details`: one of: `rename`, `set_active` (by `kind`) |
| `action.change.title` | Yes | When alternative 1 and `action.kind` is `catalog_details` and `action.change.kind` is `rename`: string; min length 2; max length 40 |
| `action.change.isActive` | Yes | When alternative 1 and `action.kind` is `catalog_details` and `action.change.kind` is `set_active`: boolean |
| `action.catalogId` | Yes | When alternative 1 and `action.kind` is `catalog_delete`: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id. |
| `action.confirmation` | Yes | When alternative 1 and `action.kind` is `catalog_delete`: `DELETE_ARTICLE_CATALOG` |
| `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: `catalog_create` |
| `action.confirmation` | Yes | When alternative 2: `CREATE_ARTICLE_CATALOG` |
| `action.title` | Yes | When alternative 2: string; min length 2; max length 40 |
| `action.membershipIds` | No | When alternative 2: array; items: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id.; max items 100; default `[]` |
| `action.pricing` | No | When alternative 2: object |
| `action.pricing.representationalName` | Yes | When alternative 2: string; min length 2; max length 40 |
| `action.pricing.currency` | No | When alternative 2: `KRW`, `USD`; Optional consistency check. When omitted, use the freshly verified selected channel currency; do not ask the user to supply a value already available from preparation. |
| `action.pricing.sellingPrice` | Yes | When alternative 2: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.00)?$`; An amount in the selected channel currency. KRW uses hundreds; USD uses whole dollars. Do not supply internal CP units. |
| `action.pricing.originalPrice` | No | When alternative 2: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.00)?$`; An amount in the selected channel currency. KRW uses hundreds; USD uses whole dollars. Do not supply internal CP units. or null; Omitted or null means the same price as sellingPrice, matching an empty original-price field in the source full form. |
| `action.pricing.unlockActionExpiryPeriodInDays` | Yes | When alternative 2: `1` or `3` or `7` or `15` or `30` or `60` or `90` or `180` or `365` or null |
| `action.pricing.isPurchaseAvailable` | Yes | When alternative 2: boolean |
| `action.pricing.availablePurchaseMethodsType` | Yes | When alternative 2: `CASH_ONLY`, `CASH_AND_CP` |
| `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: object |
| `action.kind` | Yes | When alternative 3: `catalog_bulk_state` |
| `action.catalogIds` | Yes | When alternative 3: array; items: string; min length 1; max length 128; pattern `^[A-Za-z0-9_-]+$`; The catalog ccid (for example CCID…) from the catalogs view, not its numeric id.; min items 1; max items 100 |
| `action.isActive` | Yes | When alternative 3: boolean |
| `action.confirmation` | Yes | When alternative 3: `CHANGE_CATALOGS_ACTIVE_STATE` |
| `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. |