publ betaReference (MCP guide)
Open publ console

publ Reference

Media workflows and availability

It returns the selected console destination without a candidate fetch, file transfer or mutation. This is recorded deployment/discovery evidence, not actual operation execution.

VOD files are now selected and transferred by the human in that console; hosted VOD file ingress is withdrawn. Subtitle files retain their separate trusted asset-access prerequisite. Actual encoding, subtitle rendering and visitor playback remain separately unverified.

Choose the operation

Read Change or handoff Purpose and boundary
media_settings_get media_settings_apply Menu labels/visibility/order, course options, shorts order and live entry timing. Stored settings differ from localized/effective defaults.
media_collections_get media_collection_apply Playlists, OTT/serial series, courses, episode connections and course curriculum/previews. Post, series, episode and curriculum IDs are distinct.
media_posts_get media_post_apply Media-post metadata/publication/deletion; unpublished course text/coaching creation and shorts labels. Coaching needs installed Z00004; creation sends no notifications.
media_course_comments_get media_course_comment_apply C00007 class/session discussion: page or management reads, plain-text create, one delete and session pin/unpin. No images, bulk changes, editing or notices.
media_labels_get media_label_apply OTT, course and shorts categories. Ordering replaces a complete category for OTT/courses only.
media_schedules_get media_schedule_apply Owned post/collection publication schedules. Saving a future task does not prove its execution.
media_live_get media_live_apply Live information/status and supported installed subtitle packs. No broadcast start/end, credentials or extension purchase.
media_uploads_get media_upload_handoff Human console upload and subsequent candidate observation.
media_subtitles_get media_subtitle_apply Trusted SRT/VTT creation and deletion for OTT/serial/course VOD tracks. No replacement/default editor or automatic cleanup.

Supported families are basic VOD C00001, OTT C00002, event-live C00005 and exact installed C9xx05 instances, serial VOD C00006, courses C00007, commerce-live C00014 and shorts C00015. Each operation supports only its stated subset. Video-call apps C00012/C00013 do not gain a call workflow from this registration.

Identity and permissions

Select the authorized channel and exact installed pApp. Each request checks the actor, current grant, credential, channel profile and pApp permission. Existing media-post, publication-schedule and subtitle mutations additionally require the authenticated profile to own the target where specified by their contracts.

API, LIVE and VOD destinations and consumer/channel identity are checked for the requested operation. LIVE needs an explicitly configured HTTPS origin; it has no API/VOD fallback. Temporary resource-storage grants are scoped and credentials stay internal. The common operation lifetime holds in-process work until settlement, including after cancellation/shutdown; it is not a durable worker or process-restart recovery service.

Return the single navigation destination supplied for the observed target. If only a broader parent screen is supported, explain that scope. Do not replace the selected channel/app, invent a deeper URL, or turn a historical checkpoint into a current target link.

Recovery and revisions

Read the matching view before applying a change. Creation of collections or text/coaching posts uses creationRevision from its list; existing targets use detail revision except collection label assignments, which require their dedicated labels-view revision. Settings, labels, live configuration, schedules and staged subtitle assets each have their own matching read revision. The VOD console handoff uses only channelCode and pAppCode, without a revision, requestId or dryRun. Revisions are 64 lowercase hexadecimal characters. requestId is 8–80 letters, digits, underscores or hyphens. All change methods default dryRun to false; dryRun true validates the available plan without dispatching its write and can still require authenticated reads/staging.

Media task types are media-settings, media-collection, media-post, media-label, media-schedule, media-live, media-upload and media-subtitle. Use the original requestId as taskId with the corresponding taskType; account scope is not a substitute for the original channel context.

For every Media task, task_status and task_resume are observation-only, including prepared work. For operations that still support apply, repeat identical apply only to continue a prepared action or an acknowledged checkpoint's next unsent stage after revalidation. Retired media-upload journals cannot continue any transfer, even from an acknowledged checkpoint. A sent operation with unknown outcome is never replayed. Preserve the requestId; a new ID does not resolve uncertainty. Unknown creation identities need reconciliation rather than title/name guessing.

Current matching state is distinct from proof of causality. There is no upstream atomic compare-and-swap, so preflight/readback cannot exclude concurrent console edits. A saved task may describe historical work. Deletion offers no general undelete, deleted-ID restoration or automatic rollback. See common results for pending/unconfirmed outcomes.

Human console VOD upload

The new media_upload_handoff domain contract accepts a strict object containing only channelCode and the exact installed pAppCode. It returns an authorized console destination, action_required / MEDIA_UPLOAD_CONSOLE_REQUIRED, uploadMode human-console, uploadStarted false and writesPerformed false. Present the returned link and explain that the human selects and submits the file in the original console. A course destination is explicitly the video-session parent and its upload control, not a fabricated direct upload screen.

The central server explicitly dispatches media_upload_handoff to the domain handoff method. It requires no preceding candidate read, revision or requestId. The selected channel/app is authorized and its single destination passes the common navigation guard, including the course parent relationship. Use the returned link rather than constructing a route or invoking a low-level endpoint.

media_uploads_get now accepts candidates only. The old asset view and public media_upload_apply entry are removed; no asset ID, bytes, path, URL, storage grant or caller-supplied metadata is accepted. The human's console upload is not an MCP write. Afterwards, read candidate pages and identify the resulting post separately. WAITING, POSTED, FAIL and UNKNOWN are source reports, not verified post identity, publication, playback or subtitle rendering.

Preserve existing media-upload journals and uncertain task IDs. Status/resume observe only and cannot continue a prepared or acknowledged transfer. The retired apply compatibility guard performs no upload or save. A post-sent task can still compare its original issued object and metadata with ten-day candidate history bounded to 5000 entries. Missing or ambiguous history cannot authorize another upload. There is no automatic multipart abort, orphan cleanup, rollback or re-encoding. Inspect uncertain prior work before the human starts a new transfer.

This VOD-specific direction stops the new hosted VOD picker/ingress and arbitrary-URL/server-reupload approach. It does not extend to subtitle, membership-artwork or content-attachment workflows, which retain their own input, permission and verification contracts.

VOD subtitles and target identity

Only C00002, C00006 and C00007 support this workflow. Read the selected post with media_subtitles_get, including assetId for creation and omitting it for deletion. The adapter resolves VOD vid from the selected post. Post IDs, VOD IDs and subtitle IDs are not interchangeable. Results expose source language choices, track identity/state and slots without file URLs, cue text or playback tokens.

Creation accepts a trusted staged UTF-8 SRT/VTT file and one of 63 exact source language keys. The 10 MiB bound and recognizable forward cue intervals are bridge guards, not a full grammar, timing or viewer-rendering test. Bytes are preserved. Registration derives the source name key and uses isDefault false. The selected video must be owned by the authenticated profile, not sample data, below ten tracks and without the chosen language already present.

Track states are PROGRESS, DONE, ERROR or UNKNOWN. Delete requires the observed subtitleId and DELETE_MEDIA_SUBTITLE; only DONE/ERROR tracks are deletable. Creation reconciliation requires a new identity with the exact issued URL hash and matching language/name/default values while preserving projected siblings. A backend URL rewrite may leave the result unconfirmed. Conversion state and updatedAt may advance independently. DONE does not verify timing, translation, fonts or viewer playback.

A fresh verified target returns targetObservation with source fresh-read and currentPostVerified true. Prepared, upload-sent and uploaded recovery instead uses source saved-checkpoint and currentPostVerified false; it returns the saved post identity with no current consoleUrl. The central navigation guard also enforces this boundary. After a sent mutation, a fresh read must confirm the original post/vid; a changed target is rejected instead of adopting another video. Do not reconstruct a URL from historical post information.

Task status/resume only observe. Identical apply may continue an acknowledged uploaded file to its next unsent registration; it never repeats an uncertain sent effect. Deletion does not promise storage cleanup or restoration of the old ID. This VOD file workflow is separate from live translation and paid subtitle packs.

Commerce-live external product cards

Read the complete at-most-20 card inventory and public order, then edit an existing title/link/display price, change visibility, order every public card or explicitly remove one. The later source creation option is described below.

A newly public card has no promised insertion position. Read its current order and reorder separately. Sent writes/removal never replay; there is no atomicity or automatic recreation/rollback. Fresh reads/observations require consistent complete card data, public IDs, revision and status/phase. Plans require a validated products action with no writes; save/recovery links identify the surviving parent list. Uncertain responses without a fresh collection have no link. Fresh mismatches keep pending/currentStateMatches:false even when the current target is resolved. Other apps/paths and historical results are refused.

Required-image commerce-live card creation

Use fewer than 20 current cards, a fresh products revision, title/link/sale display price and the required image; original price defaults empty and visibility defaults private. The source rejects images at or above 10,000,000 bytes and preserves original bytes.

Older hosts without the hooks fail closed even in dry run.

When connected, image issuance/PUT must be acknowledged before the card POST. Preserve the media-live task and original image through prepared, image-sent, image-ready and create-sent. Status/resume never write; identical apply can continue only unsent prepared or acknowledged stages after revalidation. Uncertain image effects and sent creation never repeat. Observation requires a unique new issued-image identity and unchanged prior state; title alone cannot identify a card.

Existing card image replacement

Use the same original PNG/JPEG rules and products revision; replacement also works at 20 cards. Create still requires image and defaults private. The old object is never overwritten or deleted, and orphan cleanup is not automatic.

Image replacement keeps media-live with its own prepared/image-sent/image-ready/update-sent checkpoints. Status/resume only observe, uncertain effects never replay, and only identical apply can continue acknowledged preparation after revalidation. Complete readback must preserve visibility, metadata, siblings and public order. Validated plans and fresh matching or pending observations use the exact products-list parent; missing revision/state, image-only checkpoints and historical results expose no product link. Actual service/console/restoration remain unverified. Restoring an image requires its original bytes and a separate new request; it does not delete the old or orphaned objects.

Use the dedicated revision. Initialization sends an empty source body and preserves observed server defaults; an existing record may need a separate fresh-revision edit before its destination is valid. Edits can set title/description/link type/destination/enabled or clear the thumbnail, without image replacement, presentation-type edits or deletion.

Keep the original media-post task. Creation requires a durably saved exact string distinctId from the POST response plus fresh post-preserving readback; missing receipt identity cannot be recovered from later existence or title. Sent effects never replay. Validated creation plans retain start; fresh mismatches may identify the current screen while staying pending. Prepared, unobserved, historical or foreign results receive no link, and navigation never repairs a missing creation receipt.

Read shorts conversion impressions and clicks

Select page1–10000 and limit15/30/50/100. Date labels remain verbatim; counts and the source two-decimal percentage formula are returned without cross-page aggregation or purchase inference. The read checks the same post/link before and after, creates no task and returns no mutation revision. Start/information screens remain separate.

External live-product statistics

Select an observed existing card and one page. Source count/rate/date strings are preserved; unlike shorts CTR, the supplied rate is not recomputed. There is no edit revision, aggregate, visitor event or purchase claim. historySupported means hook presence only. Explicit analyticsApiOrigin/PUBL_ANALYTICS_API_ORIGIN is required; without it the hook is absent and MEDIA_PRODUCT_HISTORY_HOST_UNAVAILABLE remains expected. There is no guessed origin/fallback.

Read broadcast history without accessing recordings

Retain the actual installed app and choose detail historyId from the list, never from lid. Results preserve raw source status/time and explicit viewer counts while excluding stream keys, recording URLs and unknown metadata. They carry no edit revision and perform no broadcast control, recording-token, playback or download operation.

The installed app must remain stable across the read and each record must echo its exact consumer. The source only types cid as a string, so real compatibility remains unverified. Optional page/limit echoes are reported separately from the requested pagination. Current success, exact selected instance and the read-only/no-recording/no-playback flags are required; errors, historical results, invalid projections or mismatched targets receive no current link.

Assign labels to OTT series and courses

Use labelCatalog IDs and the labels-view revision, not an ordinary detail revision. OTT supports one country, three genres and one age rating; courses support three topics and one age rating. Replace requires an existing single-value category; multi-value categories change one assignment at a time.

Preserve parsed collection/episode/curriculum/preview state; catalog counts/order and visitor filtering are not verified. Sent recovery only observes.

Read course student summaries

Use optional page/limit/general search to request one source-reported page. Its numeric student ID, raw profileDistinctId, masked displayMemberCode and recent course series ID have distinct meanings. Zero counts, empty strings and nullable recent study time are retained rather than converted to completion or attendance.

This view has no write, edit/creation revision or task. Its limit accepts any integer from 1 to 100, unlike the fixed list/posts page sizes; general search does not expose the older typed field filters. The existing explicit analyticsApiOrigin/PUBL_ANALYTICS_API_ORIGIN setting is required; missing configuration keeps the hook absent and produces the existing error. The later student class/session views below supersede the domain-level detail backlog.

Read a student's course and session progress

Select the raw profileDistinctId from the roster, then the course seriesId from the returned class row. Numeric row IDs, postId and masked member codes are different identities. Each view reads one page with page/limit only; neither accepts roster search or performs a full history scan.

Keep raw counts, rates, explicit completion flags and nullable/empty recent-study times. A rate above 100 or completed count above session count is not recalculated. Only a session null consistent with an expected empty page becomes [], with sourceReportedNull:true. Scope is the authenticated request path, not independently echoed student ownership or evidence of actual learning. No revision, task, activity write or media access is issued.

The optional progress hook is separate from the roster hook and needs the explicit ANALYTICS connection. Both routes identify the student's class page; for sessions, select the course in that parent page to open the local panel. Only fresh matching sanitized projections receive the configured-origin destination; historical/error or inconsistent results have no fallback. Missing ANALYTICS configuration still leaves the hook absent. Do not invent a session link.

C00007 course analytics options

Use the exact installed C00007 target. Do not infer a different app's family relationship from its code number or map another requested app to C00007. Existing implementations and their historical evidence retain their recorded scope.

For period statistics, supply both date-only labels or neither. The default resolves once from UTC today minus 31 days through today, without proving backend inclusivity/timezone. The source calendar starts at 2022-01-01, accepts a difference below 93 days and rejects a future end. Page/limit selects one page with fixed inserted_at/DESC order; no caller search, sort or CSV is exposed.

Preserve string IDs/counts/seconds and the source numeric course completeRate. PLAIN session playback is not applicable and remains null, not zero. The response has no consumer/period echo, so scoped-request and request-only do not prove ownership, timeframe or actual learning. No write, edit revision or task is created.

Statistics routes identify the original course/session screen without applying filters. consoleFiltersApplied:false requires selecting the returned period and page manually. At this base the common guard supplies no consoleUrl for injected statistics hooks; no source connection or live success is inferred.

Its fresh validated course/session result links to statistics/series/overall or statistics/posts/overall, with an instruction to select the returned period and page. Missing configuration, upstream/context errors, historical results or inconsistent projections do not supply a fallback link.

Read the C00007 course overview

Use course-overview on the existing media_collections_get with only paired start/end dates or neither. Omission resolves one UTC date pair for all six source sections. The source fixed top-five queries are not paginated inventory reads and cannot accept custom sorting, resource IDs or CSV.

Keep raw count/time strings, the source completion rate and tied ranking order. All six requests must settle; a failure or malformed section cannot become a partial overview or invented zero. The response is neither atomic nor independent proof of the selected consumer/date, attendance or playback.

Select the returned period in the original screen; the link cannot restore its component-state filters. No new tool, task, write or grant is introduced.

Course and session discussion comments

Registration, guarded transport, task routing and exact navigation are connected in source.

Use media_course_comments_get and media_course_comment_apply for one C00007 class(seriesId) or session(postId). The course hierarchy, learning context and management snapshot differ from Content post/inquiry comments; video/text/coaching share this one target option. An authorized DELEGATEE needs exact app access or the wildcard permission; CREATOR does not inherit operator access. Coaching additionally requires installed Z00004.

  1. Discover the selected course/session and read its page for discussion.
  2. Read view:management on the same target for its unfiltered inventory and revision. A normal page is not preparation. More than1,000 comments, duplicate identities or drifting totals fail; the reads are not atomic.
  3. Prepare one create, confirmed delete or session pin/unpin with that revision and dryRun:true.
  4. Submit the same intended values with dryRun:false. Author/profile are authenticated channel context, not caller inputs. Readback checks the selected state, projected parent and unrelated comments.
  5. After uncertainty, retain the original taskId and taskType:media-course-comment. Status/resume observe only, including prepared and legacy sent tasks. Only identical valid apply can dispatch prepared work; a sent task never replays. A lost create receipt cannot be replaced by matching text, and a new requestId is not safe recovery or a cross-task lock.

An empty204 delete response remains pending at dispatch under the unchanged HTTP200/data policy; original-task observation may later establish absence. A matching stored state does not prove causality, notification delivery, learner display or restoration. Deletion has no verified undo. Use the exact returned class/session comment screen and reselect page/filter controls there; the URL applies neither. Private profile IDs, image URLs and raw parents are omitted.

Images, bulk actions, comment editing and notice authoring remain separate. Local connection and these examples do not approve real MCP/console effects, hosted/LLM use, translation completion or D-PLAN-1.