Skip to content

MV Quotes, Results and Recovery

Product overview · Task model

Check Fast delivery health before submitting production batches:

Terminal window
curl 'https://api.omnapi.com/api/v1/mv/fast/availability?managedVersion=oneclick-v1' \
-H "x-api-key: sk_live_..."

Response:

{
"managedVersion": "oneclick-v1",
"status": "available",
"gateEnabled": true,
"checkedAt": "2026-07-09T12:00:00.000Z",
"windowMinutes": 120,
"retryAfterSec": null,
"message": "Fast MV is accepting production requests.",
"guidance": "Use quote for estimates, preflight before paid creates, and webhooks for long-running jobs.",
"metrics": {
"projectCount": 12,
"terminalCount": 10,
"readyCount": 9,
"failedCount": 1,
"processingCount": 2,
"staleProcessingCount": 0,
"readyRate": 90,
"failureRate": 10,
"avgTerminalDurationSec": 214.5
}
}

gateEnabled is retained for response compatibility and is currently fixed to true. An unknown or unavailable status fails paid create before charging with 503 MV_PROVIDER_UNAVAILABLE; use retryAfterSec as a backoff hint. degraded requests remain accepted and include MV_FAST_PROVIDER_DEGRADED in warningCodes. Availability, delivery history, and circuit state are isolated by managed version. Query ?managedVersion=premium-v2 before Premium V2 paid creates.


List the caller’s current Fast and Studio projects before loading a full MVView:

Terminal window
curl -H "x-api-key: sk_live_..." \
"https://api.omnapi.com/api/v1/mv?limit=20&cursor=2026-07-10T12:00:00.000Z"

limit is clamped to 1–50 and defaults to 20. Results are newest first and exclude deleted or archived MVs. Pass nextCursor to the next request while hasMore=true. List items contain summary state only; use the item mvId to read scenes, current media links, capabilities, billing, and failure details.

Read one MV:

Terminal window
curl -H "x-api-key: sk_live_..." \
https://api.omnapi.com/api/v1/mv/{mvId}

Returns MVView. Important fields:

type MVView = {
mvId: string;
mode: "fast" | "studio";
status:
| "PENDING"
| "GENERATING"
| "READY"
| "RENDERING"
| "FINALIZING"
| "COMPLETED"
| "EDITING"
| "ACTION_REQUIRED"
| "FAILED"
| "ARCHIVED"
| "DELETED";
version: number;
source: {
type: "suno" | "audio";
clipId?: string | null;
audioUrl?: string | null;
sourceDurationSec?: number | null;
durationSec: number;
range?: { startSec?: number; endSec?: number } | null;
lyrics?: string | null;
};
prompt: string | null;
title: string | null;
generation: {
aspectRatio: string;
resolution: string;
lipSync: boolean;
subtitles: boolean;
subtitleColor: string;
language: string;
videoProvider?: string | null;
videoModel?: string | null;
managedVersion?: "oneclick-v1" | "premium-v2" | null;
performanceMode?: "sing" | "sing_perform" | "perform" | "dance" | null;
};
characterAnchor: { url: string } | null;
referenceImages: Array<{ url: string; source: "user" | "auto_visual_board" }>;
scenes: MVSceneView[];
finalMv: MVFinalView | null;
finalUrl: string | null;
sourceVersion: number;
finalizedVersion: number | null;
finalizationRequired: boolean;
staleReason:
| "missing_final"
| "final_processing"
| "final_expired"
| "source_rendering"
| "source_failed"
| "source_changed"
| "composition_unknown"
| "url_unavailable"
| null;
warningCodes: string[];
failureReason: { code: string | null; message: string | null } | null;
failureCategory:
| "customer_input"
| "provider_unavailable"
| "provider_failed"
| "provider_timeout"
| "platform_storage_failed"
| "subtitle_failed"
| "finalization_failed"
| "unknown"
| null;
retryable: boolean;
refundable: boolean;
customerAction: "retry" | "fix_input" | "contact_support" | "wait" | null;
billing: {
creditsReserved: number;
creditsCharged: number | null;
refundedCredits: number;
settlementStatus: "PENDING" | "CHARGED" | "REFUNDED";
refundReason: string | null;
} | null;
costSummary: {
authorizedCredits: number;
chargedCredits: number;
refundedCredits: number;
netSpentCredits: number;
operationCount: number;
};
capabilities: {
canEditScenePrompt: boolean;
canEditSceneImage: boolean;
canEditSceneFraming: boolean;
canTriggerRender: boolean;
canRenderScene: boolean;
canRerenderSceneWithPrompt: boolean;
canRerenderSceneWithImages: boolean;
canSelectRendering: boolean;
canRegenerateSceneImage: boolean;
canFinalize: boolean;
canLockCharacter: boolean;
canRefreshFinalUrl: boolean;
canRetryFinalize: boolean;
canRecompose: boolean;
canEditManagedScene: boolean;
requiresFinalize: boolean;
canUseCurrentFinal: boolean;
finalizeAction?: "finalize" | "recompose" | "retry_finalize" | null;
};
};

billing.creditsReserved is a compatibility field name on MVView: it is the initial MV amount authorized and deducted at create time. It does not represent a separate, still-pending reservation. For cross-product accounting, prefer the Task’s creditsRequired and the finalized creditsCharged/refunded fields; use costSummary for MV operation-ledger totals.

Fast scene state separates the playable preview from the latest edit attempt:

type MVSceneView = {
index: number;
videoUrl: string | null; // selected playable scene output
status:
"READY" | "IMAGE_READY" | "RENDERING" | "FAILED" | "PLANNED" | "STALE";
renderingHistory: Array<{
id: string;
videoUrl: string | null;
durationSec: number;
prompt?: string | null;
referenceImages?: string[];
isSelected: boolean;
isSelectable: boolean;
createdAt: string;
}>;
sourceJob?: {
status:
"READY" | "IMAGE_READY" | "RENDERING" | "FAILED" | "PLANNED" | "STALE";
isComposable: boolean;
errorCode: string | null;
errorMessage: string | null;
} | null;
};

For Fast MVs, scene.videoUrl and renderingHistory[].isSelected point to the scene version that will be used by the next final recomposition. Choose only history entries where isSelectable=true; processing or failed entries remain visible with a durability warning; historical successful jobs remain selectable by their returned renderingId, but their preview URL may expire. When no manual selection exists, OmnAPI falls back to the newest successful scene job for backward compatibility. scene.sourceJob describes the newest edit/render attempt for that scene, even if a previous successful version remains selected and playable.

Interactive editors should request GET /api/v1/mv/{mvId}?historyLimit=5 (or another value from 1 to 50) to request a smaller recent window and reduce signed-URL work. The window applies per scene; selected versions and the latest playable Fast fallback are retained even when older. Omitting the parameter preserves the original complete-history response for existing clients.

Scene images, scene videos, character anchors, and current finalMv.videoUrl use short-lived signed URLs returned in MVView (60 minutes by default); storage keys and permanent public bucket URLs are not customer delivery links. Tracked outputs also expose additive assetId, urlExpiresAt, retainedUntil, and assetStatus fields. Use GET /api/v1/mv/{mvId}/final to refresh the final MP4 URL; if the response has ready=false, inspect staleReason, retryable, and actionHint.

source accepts media-source fields only. Put subtitles, subtitle, srtUrl, and generation at the request top level. Known top-level fields nested under source are rejected before task creation and charging instead of being silently ignored.


POST /api/v1/mv/quote is a pricing preview. It does not check whether remote audio or image URLs are reachable. Use preflight when you need resource validation and a reusable create-time estimate. Use maxCredits on create when the caller needs a hard charge cap. Each quote returns a short-lived quoteId, operation, expiresAt, and pricingVersion. Supply quoteId and maxCredits on the corresponding paid write. The server reprices immediately before atomic task creation and direct debit; an expired, used, mismatched, or over-budget quote is rejected without creating another charge.

Treat quote as estimate-only and preflight as validated estimate: quote is right for calculators and budget previews, while preflight is the last safe check before a paid create because it validates source media, reference images, optional characterImage, and optional srtUrl.

Fast quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "fast", "durationSec": 10, "lipSync": false, "resolution": "540p", "visualBoardStrategy": "direct_scene_images", "visualBoardImageProvider": "gpt-image-2", "visualBoardImageCount": 1 }'

Fast high-quality quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "fast", "durationSec": 10, "quality": "high", "resolution": "720p", "lipSync": false, "visualBoardStrategy": "direct_scene_images", "visualBoardImageProvider": "gpt-image-2", "visualBoardImageCount": 1 }'

Fast scene-edit quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "fast", "step": "scene-edit", "mvId": "{mvId}", "sceneIndex": 2 }'

Fast recompose quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "fast", "step": "compose", "mvId": "{mvId}" }'

Fast scene-edit quote reads duration and resolution from saved Fast scene metadata; callers do not pass durationSec or resolution for scene edits. Fast compose quote returns credits: 0 when the current final already matches the latest scene composition.

Studio storyboard quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "studio", "step": "storyboard", "visualBoardStrategy": "direct_scene_images", "visualBoardImageProvider": "gpt-image-2", "visualBoardImageCount": 8 }'

Visual Board add-on fields:

FieldTypeNotes
quality"standard" | "high"Optional Fast quality tier. standard uses regular Fast pricing. high requires 720p or 1080p.
visualBoardStrategy"direct_scene_images"Optional; direct scene-image generation is the only public strategy.
visualBoardImageProvider"gpt-image-2", "p-image", or "viduq2"Optional but recommended when quoting Visual Board add-ons. Pricing follows the selected image option.
visualBoardImageCountnumberDirect-scene pricing unit, max 50.
visualBoardReferenceImageCountnumberReference-image input count for reference-capable Visual Board providers, max 16. Include it when your create/preflight body will use characterImage or caller references with a provider such as gpt-image-2.

When visualBoardStrategy is direct_scene_images, include visualBoardImageProvider for an exact quote. If omitted, the API keeps the request compatible and returns a conservative direct-scene estimate with warningCodes: ["MV_VISUAL_BOARD_PROVIDER_REQUIRED_FOR_DIRECT_QUOTE"]. For Fast create/preflight, this same provider choice lives at generation.visualBoard.imageProvider; quote keeps it flat because it is a lightweight pricing shape rather than a full create request.

For gpt-image-2 Visual Board quotes, visualBoardReferenceImageCount adds the reference-image input cost. Image options without reference-input billing ignore the count for pricing.

P-Image direct scene-image storyboard quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "studio", "step": "storyboard", "visualBoardStrategy": "direct_scene_images", "visualBoardImageProvider": "p-image", "visualBoardImageCount": 3 }'

Direct scene-image storyboard quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "studio", "step": "storyboard", "visualBoardStrategy": "direct_scene_images", "visualBoardImageProvider": "viduq2", "visualBoardImageCount": 3 }'

Studio render-scene quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "studio", "step": "render-scene", "durationSec": 4, "videoProvider": "p-video", "videoModel": "p-video", "resolution": "540p" }'

Studio total quote:

Terminal window
curl -X POST https://api.omnapi.com/api/v1/mv/quote \
-H "x-api-key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "mode": "studio", "step": "total", "estimatedSceneCount": 7, "perSceneDurationSec": 4, "videoProvider": "p-video", "videoModel": "p-video", "resolution": "540p" }'

mode and, except for Fast create pricing, step discriminate the request. Unknown fields and unsupported combinations are rejected.

Quote variantRequired fieldsOptional fields
Fast OneClick V1 createmode:"fast", durationSecstep:"create", managedVersion:"oneclick-v1", resolution, lipSync, quality, subtitleMode, and Visual Board quote fields
Fast Premium V2 createmode:"fast", managedVersion:"premium-v2", performanceMode, durationSecstep:"create", resolution:"720p", subtitleMode, and Visual Board quote fields; omit lipSync and quality
Fast scene editmode:"fast", step:"scene-edit", mvId, sceneIndexnone
Fast composemode:"fast", step:"compose", mvIdnone
Studio storyboardmode:"studio", step:"storyboard"visualBoardStrategy, visualBoardImageProvider, visualBoardImageCount, visualBoardReferenceImageCount
Studio render scenemode:"studio", step:"render-scene", videoProvider, resolution, durationSecvideoModel, fps, draft
Studio render batchmode:"studio", step:"render-batch", mvId, sceneIndexes, videoProvider, resolutionvideoModel, fps, draft
Studio regenerate imagemode:"studio", step:"regenerate-image", mvId, sceneIndexnone
Studio lock charactermode:"studio", step:"lock-character", mvIdnone
Studio finalizemode:"studio", step:"finalize", mvIdnone
Studio totalmode:"studio", step:"total", videoProvider, resolution, perSceneDurationSec, estimatedSceneCountvideoModel, draft, visualBoardStrategy, visualBoardImageProvider, visualBoardImageCount

OneClick V1 Fast create durationSec is 10-600; Premium V2 is 10-300. Studio render and total durations are 1-16 seconds; estimatedSceneCount and quote sceneIndexes allow 1-30 scenes. Quote sceneIndex values are non-negative. Visual Board counts allow 1-50 generated images and 0-16 reference images. The resolution, fps, and Provider enums match the Studio mutation table above.

Pricing summary:

ModeItemCredits
Fastquote0
Fast540pDynamic; call /api/v1/mv/quote
Fast720pDynamic; call /api/v1/mv/quote
Fast1080pDynamic; call /api/v1/mv/quote
Fasthigh qualityDynamic; call /api/v1/mv/quote. Requires 720p or 1080p.
Fastlip-syncDynamic; call /api/v1/mv/quote
Premium V2perform at 720p21 Vidu credits/second; call /api/v1/mv/quote for OmnAPI credits
Premium V2sing, sing_perform, or dance at 720p24 Vidu credits/second; call /api/v1/mv/quote for OmnAPI credits
Fastscene editDynamic; call /api/v1/mv/quote with step:"scene-edit"
Fastrecompose final after scene editDynamic; call /api/v1/mv/quote with step:"compose"
Studiostoryboard + scene stills250 plus optional Visual Board add-on
Studioregenerate scene image15
Studiorender sceneDynamic by selected render option, model, resolution, fps, and duration
Studiofinalize50

Operation ledger, cancellation, and deletion

Section titled “Operation ledger, cancellation, and deletion”

GET /api/v1/mv/{mvId}/operations returns each quote/task linkage plus authorized, charged, refunded, and net credits. Its costSummary covers all recorded MV operation rows even when the returned item list is limited. MVView.costSummary provides the same recorded totals for normal product reads. For projects that predate operation-ledger coverage, earlier work may be absent; use task billing or the authenticated usage export for pre-cutover spend. See the MV migration notes.

Cancel an active operation with POST /api/v1/mv/{mvId}/operations/{taskId}/cancel. Before Provider submission, a successful cancellation atomically stops the inactive OmnAPI job and refunds the eligible credits deducted for that task. After Provider submission, cancellation succeeds only if the generation service explicitly confirms remote cancellation. Current managed MV providers do not expose a dependable confirmation contract, so submitted or outcome-unknown operations return 409, stay active, keep their original charge, and continue status synchronization. Keep polling the original task; OmnAPI no longer reports a local CANCELLED state while remote work may continue.

DELETE /api/v1/mv/{mvId} removes the resource from customer lists/reads and best-effort deletes known source, scene, rendering, character, and final media. Task, operation, pricing, and billing records required for financial reconciliation remain subject to the platform audit-retention policy. After the configured Task retention window, retained MV operation Tasks are compacted to financial audit fields; request, provider, result, step, and webhook payloads are removed. Normal MV output assets are retained for 30 days by default. A successful finalize or recompose resets the final video’s retention window; refreshing a signed URL, opening the app, polling a Task, or playing a video does not extend that window. Scene videos used by a successful finalize or recompose are retained through the corresponding final delivery window. Download assets that must be kept longer.

Final delivery is gated by deterministic media checks for a usable video stream, audio stream, expected duration, purchased resolution tier, and viable frame rate. Creative quality remains subjective and is not an automatic-refund signal.


MVView.statusMeaning
PENDINGGeneration task accepted
GENERATINGMV generation is running
READYFast finalization is resolving or Studio storyboard is ready for scene renders
RENDERINGStudio scene rendering or Fast scene edit is in flight
FINALIZINGFinal stitch is in progress
COMPLETEDfinalMv.videoUrl is populated
EDITINGStudio has edits since last finalize
ACTION_REQUIREDStudio produced usable partial output but one or more scene stills need user retry or review
FAILEDGeneration failed
ARCHIVEDArchived; public reads normally return not found
DELETEDUser-deleted; public reads return not found
MVSceneView.statusMeaning
PLANNEDScene plan exists, image not yet generated
IMAGE_READYScene image generated, no video yet
RENDERINGScene rendering is in flight
READYScene has a video
FAILEDGeneration failed
STALEA newer edit invalidated this scene

CodeHTTPMeaning
MV_MODE_REQUIRED400mode field absent
MV_MODE_INVALID400Unknown mode value
MV_SOURCE_REQUIRED400source field absent
MV_SOURCE_INVALID400Unknown source variant
MV_SUNO_CLIP_NOT_READY409Suno clip exists but is not completed
MV_REFERENCE_IMAGE_REQUIRED400The requested MV path requires at least one usable reference image
MV_AUDIO_DURATION_INVALID400Effective duration is outside the 10-600s Fast or 10-300s Studio range, or range.endSec is not greater than range.startSec
MV_AUDIO_DURATION_UNAVAILABLE400OmnAPI could not determine reliable remote audio duration
MV_AUDIO_CODEC_UNSUPPORTED400Not MP3/WAV/AAC/M4A
MV_AUDIO_DOWNLOAD_FAILED400 / 408 / 502Remote audio could not be fetched, timed out, returned an unsupported response, or lacked bounded size metadata
MV_AUDIO_SOURCE_TOO_LARGE413Remote audio exceeds the validation or download size limit
MV_TOO_MANY_REFERENCES400More than 7 reference images
MV_REFERENCE_IMAGE_INVALID400Asset URL is malformed, non-public, not http(s), unreadable, or lacks size metadata
MV_IMAGE_PAYLOAD_TOO_LARGE413referenceImages[*] or characterImage exceeds 12MB, or srtUrl exceeds 4MB
MV_PROVIDER_RESOURCE_INVALID400A final image or subtitle sent to the managed MV service is invalid, unsupported, or too large
MV_ASPECT_RATIO_INVALID400Unknown aspect ratio
MV_RESOLUTION_INVALID400Unknown resolution
MV_PROMPT_TOO_LONG400prompt.length > 3000
MV_SUBTITLE_TIMING_REQUIRED400Fast custom subtitle rendering needs caller srtUrl, usable Suno lyric timing, or successful auto-generated timing
MV_SUBTITLE_FILE_INVALID400The provided SRT could not be parsed into usable subtitle cues
MV_SUBTITLE_RENDER_UNAVAILABLE503OmnAPI custom subtitle rendering is temporarily unavailable
MV_SUBTITLE_RENDER_FAILED502OmnAPI could not render custom subtitles into the final video
MV_AUTO_SUBTITLE_FAILED400 / 502Auto subtitle extraction was required, but transcription or artifact generation failed and fallback did not allow continuing
SUBTITLE_BUDGET_EXCEEDED400Active subtitle price exceeds subtitle.maxCostUsdPerMin
MV_NOT_SUPPORTED_IN_FAST400Studio-only operation called on a Fast MV
MV_NOT_SUPPORTED_IN_STUDIO400Fast-only operation called on a Studio MV
MV_VERSION_CONFLICT409Fast or Studio write used a stale expectedVersion
MV_PRECONDITION_FAILED409A required MV stage, selected scene, or source asset is not ready
MV_FINAL_VIDEO_INGEST_FAILED502The final generated video could not be fetched or stored
MV_TECHNICAL_QA_FAILED502The final output failed deterministic audio/video, duration, resolution, or frame-rate delivery checks
MV_PROVIDER_OUTPUT_TOO_LARGE413The generated output exceeded the allowed ingest size
MV_STORAGE_WRITE_FAILED502OmnAPI could not persist a generated MV asset
MV_PROVIDER_UNAVAILABLE503Fast health is unknown/unavailable while the operator-controlled paid-create gate is enabled; check /api/v1/mv/fast/availability and retry later
MV_NOT_FOUND404Unknown mvId
INSUFFICIENT_CREDITS402Quote exceeds available balance or the submitted maxCredits cap
RATE_LIMITED429Per-account concurrency cap hit
CodeMeaningSuggested action
MV_AUDIO_SUBTITLE_TIMING_UNVERIFIEDFast audio source used provided-only managed subtitles without srtUrl; OmnAPI could not verify timing.Use subtitle.mode="auto" or provide srtUrl for deterministic timing.
MV_SUBTITLE_DISABLED_NO_TIMELINEStudio audio source used provided-only subtitles without srtUrl, so subtitles were disabled.Use subtitle.mode="auto", provide srtUrl, or use a Suno source with usable timing.
MV_AUTO_SUBTITLE_GENERATEDMissing timed lyrics/SRT was filled by internal Subtitle Sync.No action required; inspect generated captions before publishing user-visible content.
MV_AUTO_SUBTITLE_LOW_CONFIDENCEAuto subtitle result was accepted but confidence is low.Offer a caption review step or ask the user for an SRT file.
MV_AUTO_SUBTITLE_FALLBACK_SKIPPEDAuto subtitle failed and request policy allowed continuing without subtitles.Show the MV as complete without captions and allow retry with SRT or stricter fallback.
MV_SCENE_IMAGES_FROM_AUTO_BOARDStudio empty referenceImages: scene stills will come from Visual Board panels.Add reference images when you need stronger user-supplied visual direction.
MV_REFERENCE_IMAGES_AUTOGENERATEDNo caller references were supplied; OmnAPI generated Visual Board references automatically.No action required unless you need exact identity or style control.
MV_CHARACTER_IMAGE_REFERENCE_IGNOREDFast Visual Board synthesis received characterImage, but the effective image provider did not use reference-image inputs.Use gpt-image-2 for synthesized Visual Board references or keep caller referenceImages in the default direct strategy.
MV_REFERENCE_IMAGES_TRUNCATED_FOR_CHARACTERFast generation.referenceStrategy="synthesize" received characterImage plus more than six non-character referenceImages; only the first six secondary references were used for Visual Board planning.Reduce secondary references to the six most important images or use the default direct strategy.
MV_LIP_REF_AUTO_DERIVE_SKIPPEDFast lipSync=true could not prepare a managed lip-sync reference from characterImage.Provide a clearer frontal characterImage and retry.
MV_FACE_DETAIL_LOW_RESOLUTION_RISKFast resolution=540p includes face/detail cues or characterImage; facial or eye stability may degrade.Prefer 720p or 1080p for face-led or lip-sync MVs.
MV_VISUAL_BOARD_PROVIDER_REQUIRED_FOR_DIRECT_QUOTEA direct-scene Visual Board quote omitted visualBoardImageProvider, so the quote used a compatible fallback estimate.Include visualBoardImageProvider in quote, matching generation.visualBoard.imageProvider in create/preflight.
MV_FAST_PROVIDER_DEGRADEDFast MV provider health is degraded but requests are still accepted.Use webhooks, set idempotency keys, and expect elevated latency or retry risk.
MV_SCENE_ASSET_NOT_DURABLEA successful Fast scene result has not yet been copied into OmnAPI-owned storage. The final video may still be usable, and historical scene selection remains compatible, but the scene preview URL may expire.Refresh the MV later; contact support if the durable preview remains unavailable.

MV uses the same webhook delivery as every other task surface: pass config.webhookUrl on create, render, regenerate, or finalize operations, and OmnAPI delivers task.* events. Studio storyboard tasks may also emit task.stage.* events for documented progress stages.

Fast and Studio finalization tasks may also emit product-level mv.ready or mv.failed events. These events include MV-specific fields such as mvId, finalMvId, viewUrl, and finalUrl when available.

See Webhook Events for payload shape, event vocabulary, delivery, and retry semantics.