Media and storage
GraphQL schema reference · API guide · SDKs
Clips, DVR recordings, VOD uploads and assets, storage artifacts, retention, and media placement.
Types used by more than one domain are on Shared types.
Queries
Section titled “Queries”Query.clip
Section titled “Query.clip”Fetch a single clip by its global ID.
clip( id: ID!): ClipReturns: Clip (Clip)
Arguments
id:ID!— The global ID of the clip.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetClip | GetClipDocument | GetClip | get_clip |
Query.clusterMediaConsent
Section titled “Query.clusterMediaConsent”clusterMediaConsent( clusterId: ID!): MediaCapacityConsentResult!Returns: MediaCapacityConsentResult! (MediaCapacityConsentResult)
Arguments
clusterId:ID!
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetClusterMediaConsent | GetClusterMediaConsentDocument | GetClusterMediaConsent | get_cluster_media_consent |
Query.clusterMediaConsentChange
Section titled “Query.clusterMediaConsentChange”clusterMediaConsentChange( clusterId: ID! idempotencyKey: String!): MediaCapacityConsentChangeResult!Returns: MediaCapacityConsentChangeResult! (MediaCapacityConsentChangeResult)
Arguments
clusterId:ID!idempotencyKey:String!
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetClusterMediaConsentChange | GetClusterMediaConsentChangeDocument | GetClusterMediaConsentChange | get_cluster_media_consent_change |
Query.dvrChapter
Section titled “Query.dvrChapter”Retrieve a single DVR chapter, including its finalized playbackId. Chapters are the saved parts of a recording, produced by the finalization queue as canonical .mkv VOD artifacts. The chapter mode is configured at the Stream level (Stream.dvrChapterMode) and snapshotted when the recording starts. Modes: - WINDOW_SIZED (default): sequential parts as long as the recording’s own live rewind window, from the recording’s start. - FIXED_INTERVAL: UTC-only buckets of intervalSeconds, anchored at unix epoch 0. A NONE recording keeps live rewind only and has no chapters.
dvrChapter( dvrId: ID! mode: DVRChapterMode intervalSeconds: Int startMs: Float! endMs: Float!): DVRChapterReturns: DVRChapter (DVRChapter)
Arguments
dvrId:ID!— DVR recording identifier — accepts either DVRRequest.id (UUID) or DVRRequest.dvrHash.mode:DVRChapterMode(DVRChapterMode) — Historical chapter mode; null defaults to the recording’s policy snapshot.intervalSeconds:Int— Required for FIXED_INTERVAL mode.startMs:Float!— UTC epoch milliseconds (start of range).endMs:Float!— UTC epoch milliseconds (end of range, exclusive).
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetDVRChapter | GetDVRChapterDocument | GetDVRChapter | get_dvr_chapter |
Query.dvrChapters
Section titled “Query.dvrChapters”List chapters for a DVR recording. Paginated for unbounded artifact lifetime — default 200 per page, max 1000.
dvrChapters( dvrId: ID! mode: DVRChapterMode intervalSeconds: Int rangeStartMs: Float rangeEndMs: Float pageSize: Int pageToken: String): DVRChaptersPageReturns: DVRChaptersPage (DVRChaptersPage)
Arguments
dvrId:ID!— DVR recording identifier — accepts either DVRRequest.id (UUID) or DVRRequest.dvrHash.mode:DVRChapterMode(DVRChapterMode) — Restrict to chapters of this mode; null = all.intervalSeconds:Int— Required when filtering by FIXED_INTERVAL.rangeStartMs:Float— UTC epoch ms lower bound; 0 = no lower bound.rangeEndMs:Float— UTC epoch ms upper bound; 0 = no upper bound.pageSize:Int— Default 200. Max 1000.pageToken:String— Keyset cursor from a previous page’s nextPageToken.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ListDVRChapters | ListDVRChaptersDocument | ListDVRChapters | list_dvr_chapters |
Query.mediaPlacementChange
Section titled “Query.mediaPlacementChange”mediaPlacementChange( scope: MediaPlacementScopeInput! idempotencyKey: String!): MediaPlacementChangeResult!Returns: MediaPlacementChangeResult! (MediaPlacementChangeResult)
Arguments
scope:MediaPlacementScopeInput!(MediaPlacementScopeInput)idempotencyKey:String!
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetMediaPlacementChange | GetMediaPlacementChangeDocument | GetMediaPlacementChange | get_media_placement_change |
Query.mediaPlacementOptions
Section titled “Query.mediaPlacementOptions”mediaPlacementOptions( scope: MediaPlacementScopeInput! filter: MediaPlacementOptionsFilter after: String first: Int = 50): MediaPlacementOptionsResult!Returns: MediaPlacementOptionsResult! (MediaPlacementOptionsResult)
Arguments
scope:MediaPlacementScopeInput!(MediaPlacementScopeInput)filter:MediaPlacementOptionsFilter(MediaPlacementOptionsFilter)after:Stringfirst:Int(default50)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetMediaPlacementOptions | GetMediaPlacementOptionsDocument | GetMediaPlacementOptions | get_media_placement_options |
Query.mediaPlacementPolicy
Section titled “Query.mediaPlacementPolicy”Tenant-bound placement intent and actual enforcement progress.
mediaPlacementPolicy( scope: MediaPlacementScopeInput!): MediaPlacementPolicyResult!Returns: MediaPlacementPolicyResult! (MediaPlacementPolicyResult)
Arguments
scope:MediaPlacementScopeInput!(MediaPlacementScopeInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetMediaPlacementPolicy | GetMediaPlacementPolicyDocument | GetMediaPlacementPolicy | get_media_placement_policy |
Query.mediaRetentionPolicy
Section titled “Query.mediaRetentionPolicy”Tenant-default retention policy + entitlement bounds + the value the cascade (per-asset override → tenant default → tier entitlement) would resolve to today. Used by the webapp’s “Storage retention defaults” panel to size sliders and explain the allowed range.
mediaRetentionPolicy: MediaRetentionPolicy!Returns: MediaRetentionPolicy! (MediaRetentionPolicy)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetMediaRetentionPolicy | GetMediaRetentionPolicyDocument | GetMediaRetentionPolicy | get_media_retention_policy |
Query.previewMediaPlacement
Section titled “Query.previewMediaPlacement”Read-only evaluation. Never claims ingest, reserves capacity, or starts a source pull.
previewMediaPlacement( input: PreviewMediaPlacementInput!): MediaPlacementPreviewResult!Returns: MediaPlacementPreviewResult! (MediaPlacementPreviewResult)
Arguments
input:PreviewMediaPlacementInput!(PreviewMediaPlacementInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetPreviewMediaPlacement | GetPreviewMediaPlacementDocument | GetPreviewMediaPlacement | get_preview_media_placement |
Query.reviewClusterMediaConsentChange
Section titled “Query.reviewClusterMediaConsentChange”reviewClusterMediaConsentChange( input: ReviewMediaCapacityConsentInput!): MediaPlacementReviewResult!Returns: MediaPlacementReviewResult! (MediaPlacementReviewResult)
Arguments
input:ReviewMediaCapacityConsentInput!(ReviewMediaCapacityConsentInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetReviewClusterMediaConsentChange | GetReviewClusterMediaConsentChangeDocument | GetReviewClusterMediaConsentChange | get_review_cluster_media_consent_change |
Query.reviewMediaPlacementChange
Section titled “Query.reviewMediaPlacementChange”reviewMediaPlacementChange( input: ReviewMediaPlacementChangeInput!): MediaPlacementReviewResult!Returns: MediaPlacementReviewResult! (MediaPlacementReviewResult)
Arguments
input:ReviewMediaPlacementChangeInput!(ReviewMediaPlacementChangeInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetReviewMediaPlacementChange | GetReviewMediaPlacementChangeDocument | GetReviewMediaPlacementChange | get_review_media_placement_change |
Query.storageArtifactsConnection
Section titled “Query.storageArtifactsConnection”Unified storage artifact browser for the account Storage page. Search, kind filters, stream scoping, sorting, and pagination are resolved server-side against the tenant artifact registry.
storageArtifactsConnection( input: StorageArtifactsInput): StorageArtifactsConnection!Returns: StorageArtifactsConnection! (StorageArtifactsConnection)
Arguments
input:StorageArtifactsInput(StorageArtifactsInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ListArtifacts | ListArtifactsDocument | ListArtifacts | list_artifacts |
Query.vodAsset
Section titled “Query.vodAsset”Fetch a single VOD asset by ID.
vodAsset( id: ID!): VodAssetReturns: VodAsset (VodAsset)
Arguments
id:ID!— The VOD asset ID.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetVodAsset | GetVodAssetDocument | GetVodAsset | get_vod_asset |
Query.vodUploadStatus
Section titled “Query.vodUploadStatus”Read server-authoritative state of an in-flight VOD upload session. Polling complement to the upload events of tenantEvents; intended for reload-recovery and agent workflows that need a request/response shape.
vodUploadStatus( uploadId: ID!): VodUploadStatusResult!Returns: VodUploadStatusResult! (VodUploadStatusResult)
Arguments
uploadId:ID!— Upload session ID returned by createVodUpload.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetVodUploadStatus | GetVodUploadStatusDocument | GetVodUploadStatus | get_vod_upload_status |
Mutations
Section titled “Mutations”Mutation.abortVodUpload
Section titled “Mutation.abortVodUpload”Abort an in-progress VOD upload.
abortVodUpload( uploadId: ID!): AbortVodUploadResult!Returns: AbortVodUploadResult! (AbortVodUploadResult)
Arguments
uploadId:ID!— The upload ID to abort.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| AbortVodUpload | AbortVodUploadDocument | AbortVodUpload | abort_vod_upload |
Mutation.applyClusterMediaConsentChange
Section titled “Mutation.applyClusterMediaConsentChange”applyClusterMediaConsentChange( input: ApplyMediaCapacityConsentInput!): MediaCapacityConsentChangeResult!Returns: MediaCapacityConsentChangeResult! (MediaCapacityConsentChangeResult)
Arguments
input:ApplyMediaCapacityConsentInput!(ApplyMediaCapacityConsentInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ApplyClusterMediaConsentChange | ApplyClusterMediaConsentChangeDocument | ApplyClusterMediaConsentChange | apply_cluster_media_consent_change |
Mutation.applyMediaPlacementChange
Section titled “Mutation.applyMediaPlacementChange”Atomically saves the requested verbs. Saved does not mean effective on every cell.
applyMediaPlacementChange( input: ApplyMediaPlacementChangeInput!): MediaPlacementChangeResult!Returns: MediaPlacementChangeResult! (MediaPlacementChangeResult)
Arguments
input:ApplyMediaPlacementChangeInput!(ApplyMediaPlacementChangeInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ApplyMediaPlacementChange | ApplyMediaPlacementChangeDocument | ApplyMediaPlacementChange | apply_media_placement_change |
Mutation.completeVodUpload
Section titled “Mutation.completeVodUpload”Complete a VOD upload after all parts are uploaded. Triggers processing and thumbnail generation.
completeVodUpload( input: CompleteVodUploadInput!): CompleteVodUploadResult!Returns: CompleteVodUploadResult! (CompleteVodUploadResult)
Arguments
input:CompleteVodUploadInput!(CompleteVodUploadInput) — Upload completion data.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| CompleteVodUpload | CompleteVodUploadDocument | CompleteVodUpload | complete_vod_upload |
Mutation.createClip
Section titled “Mutation.createClip”Create a clip from a live or recorded stream. Clips are short video segments extracted from a stream.
createClip( input: CreateClipInput!): CreateClipResult!Returns: CreateClipResult! (CreateClipResult)
Arguments
input:CreateClipInput!(CreateClipInput) — Clip configuration including time range.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| CreateClip | CreateClipDocument | CreateClip | create_clip |
Mutation.createVodUpload
Section titled “Mutation.createVodUpload”Create a new VOD upload session. Returns presigned URLs for multipart upload.
createVodUpload( input: CreateVodUploadInput!): CreateVodUploadResult!Returns: CreateVodUploadResult! (CreateVodUploadResult)
Arguments
input:CreateVodUploadInput!(CreateVodUploadInput) — Upload configuration.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| CreateVodUpload | CreateVodUploadDocument | CreateVodUpload | create_vod_upload |
Mutation.deleteClip
Section titled “Mutation.deleteClip”Delete a clip.
deleteClip( id: ID!): DeleteClipResult!Returns: DeleteClipResult! (DeleteClipResult)
Arguments
id:ID!— The clip ID to delete.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| DeleteClip | DeleteClipDocument | DeleteClip | delete_clip |
Mutation.deleteDVR
Section titled “Mutation.deleteDVR”Delete a DVR recording.
deleteDVR( dvrHash: ID!): DeleteDVRResult!Returns: DeleteDVRResult! (DeleteDVRResult)
Arguments
dvrHash:ID!— The DVR hash to delete.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| DeleteDVR | DeleteDVRDocument | DeleteDVR | delete_dvr |
Mutation.deleteVodAsset
Section titled “Mutation.deleteVodAsset”Delete a VOD asset.
deleteVodAsset( id: ID!): DeleteVodAssetResult!Returns: DeleteVodAssetResult! (DeleteVodAssetResult)
Arguments
id:ID!— The VOD asset ID to delete.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| DeleteVodAsset | DeleteVodAssetDocument | DeleteVodAsset | delete_vod_asset |
Mutation.importVodAsset
Section titled “Mutation.importVodAsset”Import a video from a public https or http URL as a VOD asset. The processing node reads the file from the URL and processes it like an upload; the asset reports PROCESSING until it is ready. Progress arrives as upload.created, upload.completed, and upload.ready or upload.failed events.
importVodAsset( input: ImportVodAssetInput!): ImportVodAssetResult!Returns: ImportVodAssetResult! (ImportVodAssetResult)
Arguments
input:ImportVodAssetInput!(ImportVodAssetInput) — Import source and asset details.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ImportVodAsset | ImportVodAssetDocument | ImportVodAsset | import_vod_asset |
Mutation.resetMediaRetentionOverride
Section titled “Mutation.resetMediaRetentionOverride”Clear a per-asset retention override and recompute the horizon from the tenant default (or tier entitlement when no tenant default is set).
resetMediaRetentionOverride( input: ResetMediaRetentionOverrideInput!): UpdateMediaRetentionResult!Returns: UpdateMediaRetentionResult! (UpdateMediaRetentionResult)
Arguments
input:ResetMediaRetentionOverrideInput!(ResetMediaRetentionOverrideInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| ResetMediaRetentionOverride | ResetMediaRetentionOverrideDocument | ResetMediaRetentionOverride | reset_media_retention_override |
Mutation.setMediaRetentionPolicy
Section titled “Mutation.setMediaRetentionPolicy”Set the tenant per-class retention default. targetType picks the asset class (VOD, DVR, or CLIP). days is in [0, tier cap] where 0 means “keep forever” — only honored on uncapped (paid) tiers; Free clamps to its cap at write time. clear: true NULLs the column so the tenant inherits the per-class system default (VOD: keep forever; DVR/clip: 30d). The tier cap is exposed via mediaRetentionPolicy.bounds.maxRecordingRetentionDays.
setMediaRetentionPolicy( input: SetMediaRetentionPolicyInput!): SetMediaRetentionPolicyResult!Returns: SetMediaRetentionPolicyResult! (SetMediaRetentionPolicyResult)
Arguments
input:SetMediaRetentionPolicyInput!(SetMediaRetentionPolicyInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| SetMediaRetentionPolicy | SetMediaRetentionPolicyDocument | SetMediaRetentionPolicy | set_media_retention_policy |
Mutation.setStreamRetentionOverrides
Section titled “Mutation.setStreamRetentionOverrides”Write per-stream retention overrides for DVR and clip artifacts created on this stream. Unspecified input fields are left alone; passing -1 on a field clears the override (falls back to the tenant default). Values exceeding the tier cap are clamped at write time.
setStreamRetentionOverrides( input: SetStreamRetentionOverridesInput!): SetStreamRetentionOverridesResult!Returns: SetStreamRetentionOverridesResult! (SetStreamRetentionOverridesResult)
Arguments
input:SetStreamRetentionOverridesInput!(SetStreamRetentionOverridesInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| SetStreamRetentionOverrides | SetStreamRetentionOverridesDocument | SetStreamRetentionOverrides | set_stream_retention_overrides |
Mutation.startDVR
Section titled “Mutation.startDVR”Start DVR recording for a live stream. DVR creates one continuous archive session. Live seekback is bounded by the resolved DVR policy; archive playback uses virtual chapters.
startDVR( streamId: ID!): StartDVRResult!Returns: StartDVRResult! (StartDVRResult)
Arguments
streamId:ID!— The stream ID to start DVR for (Stream.id, Relay global ID).
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| StartDVR | StartDVRDocument | StartDVR | start_dvr |
Mutation.stopDVR
Section titled “Mutation.stopDVR”Stop DVR recording for a stream.
stopDVR( dvrHash: ID!): StopDVRResult!Returns: StopDVRResult! (StopDVRResult)
Arguments
dvrHash:ID!— The DVR hash to stop.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| StopDVR | StopDVRDocument | StopDVR | stop_dvr |
Mutation.updateMediaRetention
Section titled “Mutation.updateMediaRetention”Apply a per-asset retention override on a finalized DVR recording, clip, or VOD asset (set targetType accordingly). Override beats tenant default beats tier entitlement. Active assets are rejected — retention applies post-finalize.
updateMediaRetention( input: UpdateMediaRetentionInput!): UpdateMediaRetentionResult!Returns: UpdateMediaRetentionResult! (UpdateMediaRetentionResult)
Arguments
input:UpdateMediaRetentionInput!(UpdateMediaRetentionInput)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| UpdateMediaRetention | UpdateMediaRetentionDocument | UpdateMediaRetention | update_media_retention |
- Media and storage types: AbortVodUploadResult, ApplyMediaCapacityConsentInput, ApplyMediaPlacementChangeInput, ArtifactTrack, ClipCreationMode, CompleteVodUploadInput, CompleteVodUploadResult, CreateClipInput, CreateClipResult, CreateVodUploadInput, CreateVodUploadResult, DVRChapter, DVRChapterRef, DVRChapterState, DVRChaptersPage, DVRRequest, DeleteClipResult, DeleteDVRResult, DeleteVodAssetResult, ImportVodAssetInput, ImportVodAssetResult, MediaCapacityConsent, MediaCapacityConsentChange, MediaCapacityConsentChangeResult, MediaCapacityConsentResult, MediaPlacementActions, MediaPlacementAllow, MediaPlacementAllowInput, MediaPlacementCandidateExplanation, MediaPlacementChange, MediaPlacementChangeResult, MediaPlacementCharging, MediaPlacementClass, MediaPlacementConstraints, MediaPlacementConstraintsInput, MediaPlacementCoordinatesInput, MediaPlacementDifference, MediaPlacementEffectivePolicy, MediaPlacementError, MediaPlacementErrorCode, MediaPlacementFeatures, MediaPlacementFieldError, MediaPlacementGroup, MediaPlacementGroupInput, MediaPlacementImpact, MediaPlacementOption, MediaPlacementOptionKind, MediaPlacementOptionsConnection, MediaPlacementOptionsFilter, MediaPlacementOptionsResult, MediaPlacementOrder, MediaPlacementPolicyResult, MediaPlacementPolicyState, MediaPlacementPreferences, MediaPlacementPreferencesInput, MediaPlacementPreview, MediaPlacementPreviewResult, MediaPlacementPrice, MediaPlacementRecipient, MediaPlacementReview, MediaPlacementReviewResult, MediaPlacementRollout, MediaPlacementRolloutStatus, MediaPlacementRules, MediaPlacementRulesInput, MediaPlacementScope, MediaPlacementScopeInput, MediaPlacementScopeKind, MediaPlacementSelector, MediaPlacementSelectorInput, MediaPlacementSpillover, MediaPlacementTransition, MediaPlacementUpdateKind, MediaPlacementVerb, MediaPlacementVerbPolicy, MediaPlacementVerbUpdateInput, MediaPlacementWarning, MediaPlacementWarningSeverity, MediaRetentionBounds, MediaRetentionPolicy, MediaRetentionTarget, PreviewMediaPlacementInput, ResetMediaRetentionOverrideInput, ReviewMediaCapacityConsentInput, ReviewMediaPlacementChangeInput, SetMediaRetentionPolicyInput, SetMediaRetentionPolicyResult, SetStreamRetentionOverridesInput, SetStreamRetentionOverridesResult, SortDirection, StartDVRResult, StopDVRResult, StorageArtifact, StorageArtifactKindCounts, StorageArtifactSortField, StorageArtifactsConnection, StorageArtifactsInput, UpdateMediaRetentionInput, UpdateMediaRetentionResult, VodUploadCompletedPart, VodUploadPart, VodUploadSession, VodUploadStatus, VodUploadStatusResult, VodUploadedPart