publ betaReference (MCP guide)
Open publ console

publ Reference

Migration map.

channel_settings_apply

The current title rule and task recovery guidance explain emoji and the broader advertised JSON Schema envelope.

See the current correction and older-server guidance before preparing new inputs; keep existing task inputs unchanged during recovery.

Apply requested publication settings as one ordered workflow. Read get, keep the selected channel and its revision, and choose a stable request ID.

Input Contract
requestId Required; 8–80 ASCII letters, digits, underscores or hyphens; reuse with the original input for the same task
channelCode Required, nonempty selected-channel code
expectedRevision Required, 64 lowercase hexadecimal characters from get
siteTitle Optional, trimmed length 4–20
iconFile Optional original PNG/JPEG as {filename,base64}, at most 1,000,000 decoded bytes
accessibility Optional PUBLIC or SUBSCRIBER
contact Optional nonempty object with name, email or phone; omission preserves each field
age Optional {mode:"NONE"}, {mode:"MINIMUM",min:1..99} or {mode:"ADULT_ONLY"}; adult-only requires KRW
blockDeveloperConsole Optional boolean; true disables developer-console use
launch Optional literal true, explicitly requesting launch as the final action
dryRun Optional boolean, default false

Supply at least one requested change or launch:true. Empty contact name/email clears it; phone:null clears both number and country. A supplied phone needs a supported publ countryCode and 1–15 digits. Name/email have additional source-specific rules described in the screen contract. Unknown input properties are rejected. OWNER or selected-channel DELEGATEE with MANAGE_CHANNEL_PUBLIC_SETTING is required.

Plan a change

Replace the illustrative channel and revision with actual get values. This example preserves omitted fields and does not request launch.

{
  "requestId": "site-settings-20261013-01",
  "channelCode": "CHANNEL_CODE_FROM_LIST",
  "expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000",
  "siteTitle": "Example site",
  "blockDeveloperConsole": true,
  "dryRun": true
}

A fresh dry run reads current settings, validates permission, revision, requested changes and any icon configuration, and returns PLAN_READY, actions, stepCount, iconUploadRequired and writesPerformed:false. It creates no task and performs no grant, upload, save or credential refresh. An existing matching task's dry run returns its saved actions and task ID, not a fresh settings comparison; icon tasks still check the saved job, context and operator, but do not require current upload configuration to read history. A task ID in a failure does not itself prove a journal exists.

Replace the site icon

Use a basename ending in lowercase .png, .jpg or .jpeg and canonical base64 without whitespace or a data-URL prefix. The extension must match the bounded file structure. The runtime accepts case-insensitive extensions, but exported JSON patterns omit that flag. Paths, URLs, caller-selected keys, raw icon URLs, clear and reset are unsupported. Exactly 1,000,000 bytes is allowed; this decimal limit differs from the menu-image limit of 1 MiB. The source's 512×512 guidance is a recommendation.

The following 1×1 PNG illustrates an accepted file input for planning; replace it with the user's intended original image before applying.

{
  "requestId": "site-icon-20261013-01",
  "channelCode": "CHANNEL_CODE_FROM_LIST",
  "expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000",
  "iconFile": {
    "filename": "site-icon.png",
    "base64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+aDWQAAAAASUVORK5CYII="
  },
  "dryRun": true
}

The host supplies the resource gateway, bucket and region. The workflow obtains a selected-channel upload grant, uploads original bytes once with matching MIME and checksum, rechecks context and settings, saves only the acknowledged issued object location, refreshes channel credentials and rereads the complete settings projection. It does not decode, resize, transcode or render the file. Temporary upload credentials stay in memory; results contain metadata rather than base64. Private task journals retain the bounded file input for recovery.

Completion and recovery

Actions run in order: changed metadata, icon replacement, required age actions, developer-console change, then explicit launch. Switching age modes can first clear the old condition. Metadata and icon saves each require tracked channel credential refresh. A no-op can complete without a business write. Changes are not atomic, and partial progress has no automatic rollback. FREE_TRIAL or unknown plans cannot newly launch; an already launched channel receives no duplicate launch POST. There is no launch reversal or remote-file deletion.

CHANNEL_SETTINGS_APPLIED returns final settings and revision, task identity/progress and verification.confirmed:true with method channel_read.

After uncertainty, retain taskType:"channel-settings" and the original task/request ID. Status exposes completed steps, refresh state and icon upload progress; it does not perform remaining business writes. Resume continues the original authorized workflow and may perform remaining steps. Recalling apply also requires unchanged original input, including its original expected revision. Completed results are historical; use get for current values.

Result or condition Recovery boundary
SETTINGS_CONFLICT Current settings differ from the saved checkpoint; do not overwrite the concurrent change
CHANNEL_ICON_UPLOAD_OUTCOME_UNKNOWN Grant issuance or object upload was dispatched without acknowledgement; neither is repeated
CHANNEL_ICON_CONTEXT_CHANGED Credential, operator or upload context changed; the uploaded object may remain unused
SETTINGS_OUTCOME_UNKNOWN A dispatched save cannot be verified; no blind resend
CHANNEL_REFRESH_OUTCOME_UNKNOWN A sent refresh is uncertain; trusted connection recovery is required before the same task can continue
journalPersisted:false Latest result was not saved; earlier durable markers can remain, so preserve the original ID

Every dispatched save in an icon-containing task retains its marker, including a definite rejection. Older nonimage tasks keep their separate definite-rejection retry rule. A readback of only the icon URL is insufficient: the workflow checks all projected settings and persists the verified completion before reporting success. Client revisions do not provide an atomic server lock or establish which actor caused the observed values.

The result's single console destination opens publication settings for the selected channel.

Saved plan replay

An existing task's dryRun returns historical saved plan/progress, with historical:true, replayed:true and false current verification. It does not freshly read the business state, repeat effects or change the journal, and it has no current console link. Follow nextStep for a current observation; keep the original task ID for uncertain-outcome status/resume. A new task still follows normal fresh-plan validation. Do not create another ID to bypass uncertainty.

Saved phase, completedSteps and actions remain available. nextStep reads channel_settings_get for the original channel. New icon plans and execution still require current upload configuration; saved history is not upload readiness.

Saved record identity

A missing file differs from a present malformed record. JSON null, false, zero or an empty string is rejected with TASK_CONTEXT_CHANGED; apply/dry-run/status/ resume do not overwrite it or start replacement work. Preserve the file for inspection. Do not delete/edit it or substitute a new request ID to bypass the error. Valid original-task recovery and genuinely missing-record behavior remain.

Inputs

Field Required here Contract
siteTitle No string; min length 2; max length 20; Site title, 4–20 UTF-16 code units after trimming. Emoji can occupy two units. The advertised 2–20 code-point envelope is necessary but not sufficient; execution enforces the screen limit.
accessibility No PUBLIC, SUBSCRIBER
contact No object
contact.name No string; max length 20
contact.email No string
contact.phone No null or object
contact.phone.countryCode Yes string
contact.phone.number Yes string; pattern ^\d{1,15}$
age No one of: NONE, MINIMUM, ADULT_ONLY (by mode)
age.min Yes When age.mode is MINIMUM: integer; minimum 1; maximum 99
blockDeveloperConsole No boolean
launch No true
iconFile No one of: local-file, more-parts, complete, cancel (by kind)
iconFile.filename Yes When iconFile.kind is local-file: string; min length 1; max length 240; pattern ^[^/\\:\x00-\x1f\x7f]+$; The name of the file on this computer, with its extension.
iconFile.byteLength Yes When iconFile.kind is local-file: integer; greater than 0; The exact file size in bytes (for example from wc -c < FILE or stat).
iconFile.sha256 No When iconFile.kind is local-file: string; pattern ^[0-9a-f]{64}$
iconFile.uploadId Yes When iconFile.kind is more-parts: string; pattern ^upl_[A-Za-z0-9_-]{22}$
iconFile.fromPart Yes When iconFile.kind is more-parts: integer; minimum 1; maximum 10000
iconFile.uploadId Yes When iconFile.kind is complete: string; pattern ^upl_[A-Za-z0-9_-]{22}$
iconFile.parts Yes When iconFile.kind is complete: array; min items 1; max items 10000
iconFile.parts[].partNumber Yes When iconFile.kind is complete: integer; minimum 1; maximum 10000
iconFile.parts[].etag Yes When iconFile.kind is complete: string; min length 1; max length 200
iconFile.measured No When iconFile.kind is complete: object; What the video measures on this computer, read with measureCommand.
iconFile.measured.durationSeconds Yes When iconFile.kind is complete: number; maximum 1000000; greater than 0; Video duration in seconds (ffprobe format.duration).
iconFile.measured.frameRate Yes When iconFile.kind is complete: number; maximum 1000; greater than 0; Frames per second (ffprobe avg_frame_rate, for example 30000/1001 = 29.97).
iconFile.measured.width Yes When iconFile.kind is complete: integer; maximum 100000; greater than 0
iconFile.measured.height Yes When iconFile.kind is complete: integer; maximum 100000; greater than 0
iconFile.measured.frameRateMode No When iconFile.kind is complete: CFR, VFR
iconFile.measured.minFrameRate No When iconFile.kind is complete: number; maximum 1000; greater than 0
iconFile.measured.maxFrameRate No When iconFile.kind is complete: number; maximum 1000; greater than 0
iconFile.uploadId Yes When iconFile.kind is cancel: string; pattern ^upl_[A-Za-z0-9_-]{22}$
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.