{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/kreatorflow-ai/json-schema/kreatorflow-ai-video-edit-request-schema.json",
  "title": "VideoEditRequest",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kreatorflow-ai-openapi.json#/components/schemas/VideoEditRequest",
  "type": "object",
  "properties": {
    "model": {
      "type": "string",
      "description": "string optional, defaults to kreator-video-pro; must be a Seedance 2 video alias"
    },
    "edit_mode": {
      "type": "string",
      "description": "required transform, restyle, or extend; editMode alias accepted"
    },
    "source_video_upload_id": {
      "type": "string",
      "description": "preferred owned same-workspace VIDEO upload_id from POST /v1/uploads with upload_type VIDEO; image/audio upload ids are rejected before billing; MP4/MOV with H.264/AAC under 50 MB recommended; sourceVideoUploadId alias accepted"
    },
    "video": {
      "type": "string",
      "description": "public HTTPS source video URL alias; source_video_url/sourceVideoUrl also accepted and normalized through KreatorFlow video storage"
    },
    "source_video_url": {
      "type": "string",
      "description": "public HTTPS source video URL alias for source-video edit mode"
    },
    "source_model_key": {
      "type": "string",
      "description": "optional compatibility hint for previous Seedance 2 sources; omit for newly uploaded source clips"
    },
    "prompt": {
      "type": "string",
      "description": "string required edit instruction for transform/restyle; optional for extend (a default continuation is used)"
    },
    "face_consent": {
      "type": "boolean",
      "description": "boolean; required (true) when image references are sent with the source video (a face onto a person): your confirmation that you are the person in the image or have their permission. Recorded with the job. Face edits also need a paid account and pass a nudity/minor check on the images before anything is charged"
    },
    "duration": {
      "type": "number",
      "description": "number optional, rounded up and validated against model limits"
    },
    "aspect_ratio": {
      "type": "string",
      "description": "string optional; defaults to adaptive to preserve source-video framing"
    },
    "ratio": {
      "type": "string",
      "description": "alias for aspect_ratio; adaptive preserves source-video framing"
    },
    "resolution": {
      "type": "string",
      "description": "string optional"
    },
    "generate_audio": {
      "type": "boolean",
      "description": "boolean optional"
    },
    "character_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; reusable character ids/slugs from POST /v1/characters mode=register; used as owned/authorized appearance guidance on source-video edits; celebrity, public-figure, deepfake, and impersonation wording is rejected"
    },
    "reference_upload_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; extra image upload_id values for authorized appearance, style, wardrobe, product, or composition guidance"
    },
    "reference_image_upload_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; extra image upload_id values for authorized appearance, style, wardrobe, product, or composition guidance"
    },
    "reference_image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; extra public HTTPS image URLs for authorized appearance, style, wardrobe, product, or composition guidance; reference_images/referenceImages also accepted"
    },
    "reference_video_upload_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; extra clip guidance; source_video_upload_id or video/source_video_url is always strict and required"
    },
    "reference_audios": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "array optional; public HTTPS audio reference URLs; equivalent to reference_audio_urls"
    },
    "safety_identifier": {
      "type": "string",
      "description": "string optional, max 64 chars"
    },
    "webhook_url": {
      "type": "string",
      "format": "uri",
      "description": "https url optional; receives terminal job callbacks"
    },
    "callback_url": {
      "type": "string",
      "description": "alias for webhook_url"
    },
    "idempotency_key": {
      "type": "string",
      "description": "string optional body fallback; prefer Idempotency-Key header"
    }
  },
  "required": [
    "edit_mode"
  ],
  "additionalProperties": true
}