qna_products_apply
# qna_products_apply
Changes app-unlock products in the Q&A app (pApp A00009). Another app code is refused before any request. After a creation the selling price and access period cannot be changed (the original edit screen has no such fields). Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once. Ask the user again before executing; this cannot be undone. When the preview has requiresReconfirmation, execute only with irreversibleConfirmed: true after the person confirms again.
## Inputs
| Field | Required here | Contract |
| --- | --- | --- |
| `action` | Yes | one of: `article_product_create`, `article_product_edit` (by `kind`) |
| `action.confirmation` | Yes | When `action.kind` is `article_product_create`: `CREATE_ARTICLE_PRODUCT` |
| `action.fields` | Yes | When `action.kind` is `article_product_create`: object |
| `action.fields.presentationalName` | Yes | When `action.kind` is `article_product_create`: string; min length 1; max length 20 |
| `action.fields.isDeactivated` | Yes | When `action.kind` is `article_product_create`: boolean |
| `action.fields.availablePurchaseMethodsType` | Yes | When `action.kind` is `article_product_create`: `CASH_ONLY`, `CASH_AND_CP` |
| `action.fields.currency` | No | When `action.kind` is `article_product_create`: `KRW`, `USD`; Optional assertion against the freshly read channel currency. Omit to use that verified currency; this never changes the channel currency or supplies a default. |
| `action.fields.originalPrice` | No | When `action.kind` is `article_product_create`: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.\d{1,2})?$`; Create: omission uses sellingPrice. Edit: omission preserves the original price; clearing is not supported. |
| `action.fields.name` | Yes | When `action.kind` is `article_product_create`: string; min length 1; max length 20 |
| `action.fields.sellingPrice` | Yes | When `action.kind` is `article_product_create`: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.\d{1,2})?$` |
| `action.fields.expiryPeriodInDays` | Yes | When `action.kind` is `article_product_create`: `1` or `3` or `7` or `15` or `30` or `60` or `90` or `180` or `365` |
| `action.productId` | Yes | When `action.kind` is `article_product_edit`: integer; greater than 0 |
| `action.confirmation` | Yes | When `action.kind` is `article_product_edit`: `CHANGE_ARTICLE_PRODUCT` |
| `action.fields` | Yes | When `action.kind` is `article_product_edit`: object |
| `action.fields.presentationalName` | Yes | When `action.kind` is `article_product_edit`: string; min length 1; max length 20 |
| `action.fields.isDeactivated` | Yes | When `action.kind` is `article_product_edit`: boolean |
| `action.fields.availablePurchaseMethodsType` | Yes | When `action.kind` is `article_product_edit`: `CASH_ONLY`, `CASH_AND_CP` |
| `action.fields.currency` | No | When `action.kind` is `article_product_edit`: `KRW`, `USD`; Optional assertion against the freshly read channel currency. Omit to use that verified currency; this never changes the channel currency or supplies a default. |
| `action.fields.originalPrice` | No | When `action.kind` is `article_product_edit`: string; pattern `^(?:0\|[1-9]\d{0,8})(?:\.\d{1,2})?$`; Create: omission uses sellingPrice. Edit: omission preserves the original price; clearing is not supported. |
| `instanceCode` | No | string; pattern `^A00009$`; Optional: which installed Q&A app to use (its code, such as A00009 or A90109). Omit it when only one is installed; when several are, pick one from the installed list. |
| `confirmToken` | No | 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. |
| `irreversibleConfirmed` | No | `true`; true only after the person confirmed again, when the preview has requiresReconfirmation: the action cannot be undone. |