messenger_room_product_apply
# messenger_room_product_apply
Create or update a paid group room's individual product in the Messenger app (pApp D00003). Requires confirmation SAVE_ROOM_INDIVIDUAL_PRODUCT, name, selling/original price in the channel currency, period, availability and CASH_ONLY or CASH_AND_CP. Write: saves the product, then links it to the room; the product can become purchasable before the link completes. A lost receipt stays pending and is never resent; task_resume only observes, and prepared work needs the identical apply. Called without confirmToken it previews and returns a confirmToken; repeating the same input with it executes once.
## Inputs
| Field | Required here | Contract |
| --- | --- | --- |
| `target` | Yes | object |
| `target.roomUuid` | Yes | string; pattern `^[A-Za-z0-9_-]{1,200}$` |
| `change` | Yes | object |
| `change.action` | Yes | `create`, `update` |
| `change.confirmation` | Yes | `SAVE_ROOM_INDIVIDUAL_PRODUCT` |
| `change.product` | Yes | object |
| `change.product.name` | Yes | string; min length 2; max length 40 |
| `change.product.price` | Yes | object |
| `change.product.price.currency` | No | `KRW`, `USD`; Omit to use the verified channel base currency already read by the host. An explicit currency only asserts that it matches; it never changes the currency or supplies an unknown default. |
| `change.product.price.amount` | Yes | string; max length 16; pattern `^(?:0\|[1-9]\d*)(?:\.\d{1,2})?$` |
| `change.product.originalPrice` | Yes | object or null |
| `change.product.originalPrice.currency` | No | `KRW`, `USD`; Omit to use the verified channel base currency already read by the host. An explicit currency only asserts that it matches; it never changes the currency or supplies an unknown default. |
| `change.product.originalPrice.amount` | Yes | string; max length 16; pattern `^(?:0\|[1-9]\d*)(?:\.\d{1,2})?$` |
| `change.product.availableDays` | Yes | `1` or `3` or `7` or `15` or `30` or `60` or `90` or `180` or `365` or null |
| `change.product.purchaseAvailable` | Yes | boolean |
| `change.product.purchaseMethods` | Yes | `CASH_ONLY`, `CASH_AND_CP` |
| `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. |