---
title: "PATCH /v1/magic/jobs/{jobId}/plan"
method: PATCH
path: "/v1/magic/jobs/{jobId}/plan"
tags: ["magic"]
---

# PATCH /v1/magic/jobs/{jobId}/plan

`PATCH /v1/magic/jobs/{jobId}/plan`

## Request

- Base URL: `https://api.lizzflix.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.lizzflix.xyz/v1/magic/jobs/{jobId}/plan`
- Auth: none declared

## Path parameters

- `jobId` string, required

## Request body

- MagicPlanPatchBody
  - `attachmentOverrides` object[]
    - `attachmentId` string, required
    - `type` 'character' | 'location' | 'style_ref' | 'dialogue_script' | 'user_video_restyle' | 'user_video_extend' | 'user_video_lipsync' | 'ignore' | 'unknown'
    - `name` string
  - `blueprintEdits` MagicBlueprintEdits
    - `episode` object
      - `title` string
      - `synopsis` string
      - `scenes` object[]
        - `index` integer, required
        - `beat` string
        - `modelRecommendation` object
          - `provider` string, required
          - `model` string, required
          - `reason` string, required
        - `dropped` boolean
    - `assetPlan` object
      - `charactersToCreate` object[]
        - `name` string, required
        - `dropped` boolean
      - `locationsToCreate` object[]
        - `name` string, required
        - `dropped` boolean

## Response `200`

Re-planned

- MagicJobSnapshot
  - `id` string, required
  - `seriesId` string, required
  - `episodeId` string, required
  - `status` 'classifying' | 'planning' | 'sketching' | 'sketch_ready' | 'executing' | 'complete' | 'cancelled' | 'failed', required
  - `inputs` object, required
    - `prompt` string, required
    - `lengthPreset` '15s' | '30s' | '60s', required
  - `blueprint` MagicBlueprint, nullable, required
    - `version` 1, required
    - `classification` object, required
      - `characters` object[], required
        - `attachmentId` string
        - `name` string, required
        - `description` string, required
        - `variants` object[]
          - `description` string, required
      - `locations` object[], required
        - `attachmentId` string
        - `name` string, required
        - `description` string, required
        - `variants` object[]
          - `description` string, required
      - `styleRefs` object[], required
        - `attachmentId` string, required
        - `note` string, required
      - `dialogue` object[], required
        - `attachmentId` string
        - `text` string, required
        - `assignedSceneIndex` integer
      - `userVideos` object[], required
        - `attachmentId` string, required
        - `intendedUse` 'restyle' | 'extend' | 'lipsync', required
    - `episode` object, required
      - `title` string, required
      - `synopsis` string, required
      - `targetDurationSec` integer, required
      - `sceneCount` integer, required
      - `scenes` object[], required
        - `index` integer, required
        - `pipeline` 'scratch' | 'ref' | 'dialogue' | 'restyle' | 'extend' | 'lipsync', required
        - `beat` string, required
        - `charactersRef` string[], required
        - `locationRef` string, nullable, required
        - `dialogue` string
        - `videoInputRef` string
        - `modelRecommendation` object, required
          - `provider` string, required
          - `model` string, required
          - `reason` string, required
        - `estimatedCostCredits` integer, required
    - `assetPlan` object, required
      - `charactersToCreate` object[], required
        - `name` string, required
        - `description` string, required
        - `variants` object[]
          - `description` string, required
      - `locationsToCreate` object[], required
        - `name` string, required
        - `description` string, required
        - `variants` object[]
          - `description` string, required
  - `attachments` MagicAttachmentSnapshot[], required
    - `id` string, required
    - `r2Key` string, required
    - `mime` string, required
    - `sizeBytes` integer, required
    - `classifiedType` 'character' | 'location' | 'style_ref' | 'dialogue_script' | 'user_video_restyle' | 'user_video_extend' | 'user_video_lipsync' | 'ignore' | 'unknown', required
    - `classifiedName` string, required
    - `userOverrideType` 'character' | 'location' | 'style_ref' | 'dialogue_script' | 'user_video_restyle' | 'user_video_extend' | 'user_video_lipsync' | 'ignore' | 'unknown' | 'null', nullable, required
    - `userOverrideName` string, nullable, required
    - `classifierDescription` string, nullable, required
    - `contentUrl` string, nullable, required
    - `createdAt` string, required
  - `costEstimateCr` integer, required
  - `costActualCr` integer, required
  - `sketchCostCr` number, required
  - `videoCostCr` number, required
  - `staticsReady` number, required
  - `staticsTotal` number, required
  - `plannerModel` string, nullable, required
  - `errorCode` string, nullable, required
  - `errorMessage` string, nullable, required
  - `createdAt` string, required
  - `updatedAt` string, required

## Other responses

- `401`: Unauthorized
- `404`: Not found
- `409`: Wrong state

---

[API](https://skmtc.dev/lizzflix/apis/lizzflix-api.md) · [All operations](https://skmtc.dev/lizzflix/apis/lizzflix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lizzflix/apis/lizzflix-api/revisions/4536ce9d80ff?raw)
