# media_settings_apply
Change supported settings of one installed media app after [media_settings_get](media_settings_get.md).
## Inputs
Provide `channelCode`, `change:{pAppCode,settings}`, `expectedRevision`, `requestId` and optional `dryRun` (default false). The pAppCode is nested inside change; there is no top-level pAppCode. Settings must contain at least one supported field. Revisions are 64 lowercase hexadecimal characters; requestId is 8–80 letters, digits, underscores or hyphens.
| App | Accepted settings |
| --- | --- |
| `C00001` | `postsTitle`, `seriesTitle`, `postsVisible`, `seriesVisible`; tabOrder containing `POSTS`, `SERIES` |
| `C00002` | `homeTitle`, `searchTitle`, `seriesTitle`, `bookmarksTitle`; matching `homeVisible`, `searchVisible`, `seriesVisible`, `bookmarksVisible`; tabOrder `HOME`, `SEARCH`, `SERIES`, `BOOKMARKLIST` |
| `C00006` | `homeTitle`, `episodesTitle`, `seriesTitle`; matching visibility booleans; tabOrder `HOME`, `RECENT_EPISODES`, `SERIES` |
| `C00007` | Course fields described below; no tabOrder |
| `C00005`, `C9xx05`, `C00014` | `entryTiming` only |
| `C00015` | `commentsVisible`, `bookmarksVisible`, `playOrder:SHUFFLE\|SEQUENTIAL` |
Menu labels use 1–12 characters, or 2–12 for serial labels and course detail labels. Blank labels and the characters `< > ' " / \ & = ( ) ;` are rejected. Labels are not automatically translated. tabOrder must include every app tab exactly once, including hidden tabs. Keep at least one menu visible for basic VOD, OTT and serial VOD.
Course top labels are `homeTitle`, `myClassesTitle`, `bookmarksTitle`, `reviewsTitle`. Detail labels are `introductionTitle`, `curriculumTitle`, `discussionTitle`, `noticesTitle`, `studentNoticesTitle`, `classReviewsTitle`. Course booleans are `discussionVisible`, `noticesVisible`, `studentNoticesVisible`, `reviewsEnabled`, `reviewRatingsEnabled`, `sessionProtectionEnabled`, `commentsVisible`, `showEndDateHome`, `showEndDateMyClasses`, `showEndDateBookmarks`, `showEndDateClassDetail`. `reviewSort` is `SORT_BY_LATEST` or `SORT_BY_RATING`; `reviewProgressRequirement` is `10PERCENT`, `100PERCENT`, or `1PERCENT` only for the four source-allowlisted channels. Changing reviewRatingsEnabled requires reviews to be enabled in the resulting settings, including when setting ratings false.
Live entryTiming is `STAND_BY`, `SCHEDULED`, `3_HOURS_BEFORE_START`, `2_HOURS_BEFORE_START`, `1_HOUR_BEFORE_START`, `30_MIN_BEFORE_START`, `10_MIN_BEFORE_START` or `LIVE_START`. It controls admission timing, not broadcast scheduling or start.
## Result and recovery
A dry run returns `MEDIA_SETTINGS_PLAN` without a write. Apply validates the current context/revision, preserves unrelated configuration and saves the supported override. Readback distinguishes observed matching settings from an unconfirmed save. Unverified responses do not authorize replay. There is no supported generic key removal, so restoring a label that was originally absent is not a verified operation.
Task type: `media-settings`. Use the saved requestId as taskId with the matching taskType. Media `task_status` and `task_resume` are observation-only, including prepared work. Repeat identical apply to continue a prepared action or an acknowledged next unsent stage; never change requestId to bypass an uncertain sent operation. A matching readback does not prove causality, atomic isolation or restoration. See [recovery and revisions](../guides/media-workflows.md#recovery-and-revisions).
Read the [media workflow guide](../guides/media-workflows.md) for authorization, source-versus-runtime availability and common recovery rules.
## Input example
Illustrative input only. Replace the channel, installed app, identifiers and revision with values obtained for the selected target.
```json
{
"channelCode": "selected-channel",
"change": {
"pAppCode": "C00001",
"settings": {
"postsTitle": "Videos"
}
},
"expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000",
"requestId": "example-request-001",
"dryRun": true
}
```