{
  "openapi": "3.1.0",
  "info": {
    "title": "Overlap Clipping API",
    "description": "API for triggering clipping workflows, polling results, updating clips, and rendering finalized exports.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.joinoverlap.com"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/trigger-template": {
      "post": {
        "summary": "Trigger Template",
        "description": "Launches a clipping workflow from a saved template using a long-form video URL.",
        "operationId": "triggerTemplate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerTemplateRequest"
              },
              "examples": {
                "basic": {
                  "summary": "Trigger a clipping workflow",
                  "value": {
                    "companyId": "your-company-id",
                    "workflowId": "your-workflow-id",
                    "url": "https://example.com/source-video.mp4",
                    "broll": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Workflow trigger accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerTemplateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request or invalid node configuration.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/workflow-results/{triggerId}": {
      "get": {
        "summary": "Get Workflow Results",
        "description": "Polls workflow status and returns generated clips when the workflow completes.",
        "operationId": "getWorkflowResults",
        "parameters": [
          {
            "name": "triggerId",
            "in": "path",
            "required": true,
            "description": "Workflow run identifier returned by /trigger-template.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workflow status and any available clips.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkflowResultsResponse"
                }
              }
            }
          },
          "404": {
            "description": "Workflow run was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/workflows": {
      "get": {
        "summary": "List Workflows",
        "description": "Returns workflow summaries for a company. Each item includes only id, name, and description.",
        "operationId": "listWorkflows",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "required": true,
            "description": "Overlap company or organization identifier.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workflow summaries for the company.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListWorkflowsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/workflow": {
      "get": {
        "summary": "Get Workflow",
        "description": "Returns a saved workflow document for a company.",
        "operationId": "getWorkflow",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "required": true,
            "description": "Overlap company or organization identifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workflowId",
            "in": "query",
            "required": true,
            "description": "Saved workflow identifier.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Saved workflow document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkflowResponse"
                }
              }
            }
          },
          "404": {
            "description": "Workflow was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/clip": {
      "get": {
        "summary": "Get Clip",
        "description": "Returns a saved clip document for a company.",
        "operationId": "getClip",
        "parameters": [
          {
            "name": "companyId",
            "in": "query",
            "required": true,
            "description": "Overlap company or organization identifier.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clipId",
            "in": "query",
            "required": true,
            "description": "Saved clip identifier.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Saved clip document.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetClipResponse"
                }
              }
            }
          },
          "404": {
            "description": "Clip was not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/update-clip": {
      "post": {
        "summary": "Update Clip",
        "description": "Updates editable clip fields before rendering. This does not start a render.",
        "operationId": "updateClip",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateClipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Clip fields updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateClipResponse"
                }
              }
            }
          },
          "400": {
            "description": "Unsupported fields or invalid update payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/render": {
      "post": {
        "summary": "Render Clip",
        "description": "Synchronously renders an existing clip and returns a finalized video URL.",
        "operationId": "renderClip",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenderClipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Render status and finalized URL when available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenderClipResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid render request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "TriggerTemplateRequest": {
        "type": "object",
        "required": [
          "companyId",
          "workflowId",
          "url"
        ],
        "properties": {
          "companyId": {
            "type": "string",
            "description": "Overlap company or organization identifier."
          },
          "workflowId": {
            "type": "string",
            "description": "Workflow/template identifier to launch."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Publicly accessible long-form video URL."
          },
          "orientation": {
            "type": "string",
            "description": "Output orientation override, such as horizontal or vertical."
          },
          "minLengthTarget": {
            "type": "number",
            "description": "Minimum target clip length in seconds."
          },
          "maxLengthTarget": {
            "type": "number",
            "description": "Maximum target clip length in seconds."
          },
          "musicUrl": {
            "type": "string",
            "format": "uri"
          },
          "broll": {
            "type": "boolean",
            "description": "Enable or disable automatic b-roll."
          },
          "removeFillerWords": {
            "type": "boolean"
          },
          "removeStutteredWords": {
            "type": "boolean"
          },
          "removeSilences": {
            "type": "boolean"
          },
          "outroImageUrl": {
            "type": "string",
            "format": "uri"
          },
          "outroMusicUrl": {
            "type": "string",
            "format": "uri"
          },
          "subtitles": {
            "type": "boolean"
          },
          "subtitleConfig": {
            "$ref": "#/components/schemas/SubtitleConfig"
          },
          "titleOverlay": {
            "type": "boolean"
          },
          "titleConfig": {
            "$ref": "#/components/schemas/TitleConfig"
          },
          "watermarkUrl": {
            "type": "string",
            "format": "uri"
          },
          "keywords": {
            "type": "array",
            "maxItems": 150,
            "items": {
              "type": "string"
            }
          },
          "promptAdjustment": {
            "type": "string"
          },
          "nodeConfigs": {
            "$ref": "#/components/schemas/NodeConfigs"
          },
          "nodeConfigOverrides": {
            "$ref": "#/components/schemas/NodeConfigs"
          },
          "actionConfigs": {
            "$ref": "#/components/schemas/NodeConfigs"
          }
        },
        "additionalProperties": true
      },
      "TriggerTemplateResponse": {
        "type": "object",
        "properties": {
          "triggerId": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "examples": [
              "pending"
            ]
          },
          "message": {
            "type": "string"
          }
        }
      },
      "WorkflowResultsResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "examples": [
              "Pending",
              "Processing",
              "Learning",
              "Completed",
              "Error"
            ]
          },
          "clips": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Clip"
            }
          },
          "error": {
            "type": "string"
          }
        }
      },
      "ListWorkflowsResponse": {
        "type": "object",
        "properties": {
          "workflows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkflowSummary"
            }
          }
        }
      },
      "GetWorkflowResponse": {
        "type": "object",
        "properties": {
          "workflow": {
            "$ref": "#/components/schemas/Workflow"
          }
        }
      },
      "GetClipResponse": {
        "type": "object",
        "properties": {
          "clip": {
            "$ref": "#/components/schemas/Clip"
          }
        }
      },
      "WorkflowSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Workflow": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "nodes": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": true
      },
      "UpdateClipRequest": {
        "type": "object",
        "required": [
          "companyId",
          "clipId"
        ],
        "properties": {
          "companyId": {
            "type": "string"
          },
          "clipId": {
            "type": "string"
          },
          "updates": {
            "$ref": "#/components/schemas/ClipUpdate"
          },
          "merge": {
            "type": "boolean",
            "default": true,
            "description": "When true or omitted, nested config objects are shallow-merged."
          }
        },
        "additionalProperties": true
      },
      "UpdateClipResponse": {
        "type": "object",
        "properties": {
          "clipId": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "examples": [
              "success"
            ]
          },
          "updatedFields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "updates": {
            "$ref": "#/components/schemas/ClipUpdate"
          }
        }
      },
      "RenderClipRequest": {
        "type": "object",
        "required": [
          "companyId",
          "clipId"
        ],
        "properties": {
          "companyId": {
            "type": "string"
          },
          "clipId": {
            "type": "string",
            "description": "Clip id returned by workflow results."
          }
        }
      },
      "RenderClipResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "finished",
              "failed",
              "rendering"
            ]
          },
          "renderUrl": {
            "type": "string",
            "format": "uri"
          },
          "error": {
            "type": "string"
          },
          "code": {
            "type": "string"
          }
        }
      },
      "Clip": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "bio": {
            "type": "string"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "people": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "duration": {
            "type": "number"
          },
          "startTimestamp": {
            "type": "number"
          },
          "endTimestamp": {
            "type": "number"
          },
          "timestampBoundary": {
            "$ref": "#/components/schemas/TimestampBoundary"
          },
          "aspectRatio": {
            "type": "string"
          },
          "renderedUrl": {
            "type": "string",
            "format": "uri",
            "description": "Public preview video URL when available. This may be omitted if the clip has not been rendered or does not have a preview URL yet."
          },
          "rawUrl": {
            "type": "string",
            "format": "uri"
          },
          "thumbnailURL": {
            "type": "string",
            "format": "uri"
          },
          "thumbnailUrl": {
            "type": "string",
            "format": "uri"
          },
          "transcriptUrl": {
            "type": "string",
            "format": "uri"
          },
          "fps": {
            "type": "number"
          },
          "videoHeight": {
            "type": "number"
          },
          "videoResolution": {
            "type": "string"
          },
          "viralityScore": {
            "type": "number"
          }
        },
        "additionalProperties": true
      },
      "ClipUpdate": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "bio": {
            "type": "string"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "people": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Segment"
            }
          },
          "duration": {
            "type": "number"
          },
          "startTimestamp": {
            "type": "number"
          },
          "endTimestamp": {
            "type": "number"
          },
          "timestampBoundary": {
            "$ref": "#/components/schemas/TimestampBoundary"
          },
          "subtitleConfig": {
            "$ref": "#/components/schemas/SubtitleConfig"
          },
          "titleConfig": {
            "$ref": "#/components/schemas/TitleConfig"
          },
          "watermarkConfig": {
            "$ref": "#/components/schemas/WatermarkConfig"
          },
          "backgroundMusicOption": {
            "$ref": "#/components/schemas/MusicOption"
          },
          "endCardOption": {
            "$ref": "#/components/schemas/EndCardOption"
          },
          "end_card_option": {
            "$ref": "#/components/schemas/EndCardOption"
          }
        },
        "additionalProperties": false
      },
      "Segment": {
        "type": "object",
        "properties": {
          "start": {
            "type": "number"
          },
          "end": {
            "type": "number"
          },
          "playbackRate": {
            "type": "number"
          }
        }
      },
      "TimestampBoundary": {
        "type": "object",
        "properties": {
          "start": {
            "type": "number"
          },
          "end": {
            "type": "number"
          }
        }
      },
      "SubtitleConfig": {
        "type": "object",
        "properties": {
          "amplifiedColor": {
            "type": "string"
          },
          "amplifiedColors": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "amplifiedOpacity": {
            "type": "number"
          },
          "amplifyOpacityTransitionDuration": {
            "type": "number"
          },
          "amplifySpokenWords": {
            "type": "boolean"
          },
          "animationStyle": {
            "type": "string"
          },
          "backgroundColor": {
            "type": "string"
          },
          "backgroundBorderRadius": {
            "type": "number"
          },
          "backgroundFillStyle": {
            "type": "string"
          },
          "backgroundOpacity": {
            "type": "number"
          },
          "backgroundPadding": {
            "type": "number"
          },
          "fontColor": {
            "type": "string"
          },
          "fontUrl": {
            "type": "string"
          },
          "isItalic": {
            "type": "boolean"
          },
          "outlineColor": {
            "type": "string"
          },
          "maxCharsPerLine": {
            "type": "number"
          },
          "subtitleY": {
            "type": "number"
          },
          "speakerStyles": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/SubtitleConfig"
            }
          }
        },
        "additionalProperties": true
      },
      "TitleConfig": {
        "type": "object",
        "properties": {
          "allCaps": {
            "type": "boolean"
          },
          "avoidFaces": {
            "type": "boolean",
            "description": "Move the title away from detected face and subject regions. Defaults to false."
          },
          "backgroundColor": {
            "type": "string"
          },
          "backgroundOpacity": {
            "type": "number"
          },
          "backgroundStyle": {
            "type": "string"
          },
          "borderRadius": {
            "type": "number"
          },
          "boxShadow": {
            "type": "string"
          },
          "characterSpacing": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "fadeDuration": {
            "type": "number"
          },
          "fontColor": {
            "type": "string"
          },
          "fontFamily": {
            "type": "string"
          },
          "fontSize": {
            "type": "number"
          },
          "fontUrl": {
            "type": "string"
          },
          "fontScale": {
            "type": "number"
          },
          "fontWeight": {
            "type": "string"
          },
          "lineHeight": {
            "type": "number"
          },
          "lineMargin": {
            "type": "number"
          },
          "maxWidthPercent": {
            "type": "number"
          },
          "padding": {
            "type": "number"
          },
          "positionDynamically": {
            "type": "boolean",
            "description": "Anchor the title to a detected split-view seam. Defaults to false."
          },
          "prompt": {
            "type": "string"
          },
          "startTime": {
            "type": "number"
          },
          "targetHeightPercent": {
            "type": "number"
          },
          "text": {
            "type": "string"
          },
          "textAlign": {
            "type": "string"
          },
          "textShadow": {
            "type": "string"
          },
          "verticalPadding": {
            "type": "number"
          },
          "xPosition": {
            "type": "number"
          },
          "yPosition": {
            "type": "number"
          },
          "endTime": {
            "type": "number"
          },
          "introTransitionId": {
            "type": "string"
          },
          "outroTransitionId": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "NodeConfigs": {
        "type": "object",
        "properties": {
          "find_clips": {
            "$ref": "#/components/schemas/FindClipsNodeConfig"
          },
          "convert_to_vertical": {
            "$ref": "#/components/schemas/ConvertToVerticalNodeConfig"
          },
          "add_subtitles": {
            "$ref": "#/components/schemas/AddSubtitlesNodeConfig"
          },
          "add_broll": {
            "$ref": "#/components/schemas/AddBrollNodeConfig"
          },
          "add_music": {
            "$ref": "#/components/schemas/AddMusicNodeConfig"
          },
          "add_watermark": {
            "$ref": "#/components/schemas/AddWatermarkNodeConfig"
          },
          "apply_branding": {
            "$ref": "#/components/schemas/ApplyBrandingNodeConfig"
          },
          "filler_words": {
            "$ref": "#/components/schemas/FillerWordsNodeConfig"
          },
          "smart_zoom": {
            "$ref": "#/components/schemas/SmartZoomNodeConfig"
          },
          "add_outro": {
            "$ref": "#/components/schemas/AddOutroNodeConfig"
          },
          "add_audiogram": {
            "$ref": "#/components/schemas/AddAudiogramNodeConfig"
          },
          "remove_watermark": {
            "$ref": "#/components/schemas/RemoveWatermarkNodeConfig"
          },
          "add_brainrot": {
            "$ref": "#/components/schemas/AddBrainrotNodeConfig"
          },
          "add_title_overlay": {
            "$ref": "#/components/schemas/AddTitleOverlayNodeConfig"
          },
          "media_overlay": {
            "$ref": "#/components/schemas/MediaOverlayNodeConfig"
          },
          "remove_curse_words": {
            "$ref": "#/components/schemas/RemoveCurseWordsNodeConfig"
          }
        },
        "additionalProperties": {
          "$ref": "#/components/schemas/FreeformConfig"
        }
      },
      "FindClipsNodeConfig": {
        "type": "object",
        "properties": {
          "min_length": {
            "type": "number",
            "minimum": 0
          },
          "max_length": {
            "type": "number",
            "minimum": 0
          },
          "model_key": {
            "type": "string",
            "enum": [
              "conversational",
              "multimodal"
            ]
          },
          "prompt": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ConvertToVerticalNodeConfig": {
        "type": "object",
        "properties": {
          "aspect_ratio": {
            "type": "string"
          },
          "style": {
            "type": "string",
            "enum": [
              "style_one",
              "style_two",
              "style_three",
              "style_four",
              "style_none",
              "adaptive"
            ]
          },
          "zoom": {
            "type": "number",
            "description": "Zoom multiplier for centered vertical crop mode. Values below 1 are normalized to 1. Only applies when centerVertical is true."
          },
          "y_offset": {
            "type": "number"
          },
          "gaussian_blur": {
            "type": "boolean",
            "description": "Enables blurred background for centered vertical crop mode. Only applies when centerVertical is true."
          },
          "centerVertical": {
            "type": "boolean",
            "description": "Enables centered vertical crop mode. zoom and gaussian_blur only apply when this is true."
          },
          "split_view": {
            "type": "boolean"
          },
          "force_split_view": {
            "type": "boolean"
          },
          "ignore_content_tiles": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "AddBrollNodeConfig": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string"
          },
          "broll_frequency": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "allowed_methods": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "google_images",
                "youtube",
                "getty"
              ]
            }
          },
          "enable_ai_broll": {
            "type": "boolean"
          },
          "use_broll_library": {
            "type": "boolean"
          },
          "library_folder_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "AddSubtitlesNodeConfig": {
        "type": "object",
        "properties": {
          "subtitle_config": {
            "$ref": "#/components/schemas/SubtitleConfig"
          }
        },
        "additionalProperties": false
      },
      "AddMusicNodeConfig": {
        "type": "object",
        "properties": {
          "background_music_option": {
            "$ref": "#/components/schemas/MusicOption"
          },
          "background_music_options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MusicOption"
            }
          }
        },
        "additionalProperties": false
      },
      "MusicOption": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "thumbnailUrl": {
            "type": "string"
          },
          "duration": {
            "type": "number"
          },
          "volume": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "name",
          "url"
        ],
        "additionalProperties": true
      },
      "AddWatermarkNodeConfig": {
        "type": "object",
        "properties": {
          "watermark_config": {
            "$ref": "#/components/schemas/WatermarkConfig"
          }
        },
        "additionalProperties": false
      },
      "WatermarkConfig": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "url": {
            "type": "string"
          },
          "position": {
            "type": "number"
          },
          "size": {
            "type": "number"
          },
          "padding": {
            "type": "number"
          },
          "opacity": {
            "type": "number"
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "startOffset": {
            "type": "number"
          },
          "endOffset": {
            "type": "number"
          },
          "animationDuration": {
            "type": "number"
          },
          "introTransitionId": {
            "type": "string"
          },
          "outroTransitionId": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "EndCardOption": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "duration": {
            "type": "number"
          },
          "secondsBeforeEnd": {
            "type": "number"
          },
          "isVideo": {
            "type": "boolean"
          },
          "opacity": {
            "type": "number"
          },
          "videoDuration": {
            "type": "number"
          },
          "volume": {
            "type": "number"
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": true
      },
      "ApplyBrandingNodeConfig": {
        "type": "object",
        "properties": {
          "style": {
            "type": "string"
          },
          "watermark_config": {
            "$ref": "#/components/schemas/WatermarkConfig"
          },
          "outro_music_url": {
            "type": "string"
          },
          "outro_card_url": {
            "type": "string"
          },
          "overlay_url": {
            "type": "string"
          },
          "title_config": {
            "$ref": "#/components/schemas/TitleConfig"
          }
        },
        "additionalProperties": false
      },
      "AddTitleOverlayNodeConfig": {
        "type": "object",
        "properties": {
          "title_config": {
            "$ref": "#/components/schemas/TitleConfig"
          },
          "titleConfig": {
            "$ref": "#/components/schemas/TitleConfig"
          }
        },
        "additionalProperties": false
      },
      "FillerWordsNodeConfig": {
        "type": "object",
        "properties": {
          "filler_words_config": {
            "$ref": "#/components/schemas/FillerWordsConfig"
          }
        },
        "additionalProperties": false
      },
      "FillerWordsConfig": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "fromVideo": {
            "type": "boolean"
          },
          "minRepetitions": {
            "type": "number"
          },
          "stutteredFromVideo": {
            "type": "boolean"
          },
          "stutteredWordsEnabled": {
            "type": "boolean"
          },
          "silencesEnabled": {
            "type": "boolean"
          },
          "minSilenceDuration": {
            "type": "number"
          },
          "words": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": true
      },
      "SmartZoomNodeConfig": {
        "type": "object",
        "properties": {
          "smart_zoom_config": {
            "type": "object",
            "properties": {
              "frequency": {
                "type": "string"
              },
              "transition_length": {
                "type": "number"
              },
              "additional_instructions": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "AddOutroNodeConfig": {
        "type": "object",
        "properties": {
          "end_card_option": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "duration": {
                "type": "number"
              },
              "secondsBeforeEnd": {
                "type": "number"
              }
            },
            "additionalProperties": true
          },
          "outro_music_option": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "secondStart": {
                "type": "number"
              },
              "duration": {
                "type": "number"
              },
              "secondsBeforeEnd": {
                "type": "number"
              },
              "volume": {
                "type": "number"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "AddAudiogramNodeConfig": {
        "type": "object",
        "properties": {
          "template": {
            "type": "string"
          },
          "audiogram_config": {
            "type": "object",
            "properties": {
              "frontend": {
                "type": "boolean"
              },
              "source": {
                "type": "string"
              },
              "orientation": {
                "type": "string"
              },
              "audiogramY": {
                "type": "number"
              },
              "audiogramColor": {
                "type": "string"
              },
              "backgroundType": {
                "type": "string"
              },
              "backgroundColor": {
                "type": "string"
              },
              "backgroundImageUrl": {
                "type": "string"
              },
              "textColor": {
                "type": "string"
              },
              "centerText": {
                "type": "boolean"
              },
              "blackBarEnabled": {
                "type": "boolean"
              },
              "subtextEnabled": {
                "type": "boolean"
              },
              "fontWeight": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "RemoveWatermarkNodeConfig": {
        "type": "object",
        "properties": {
          "remove_watermark_config": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "AddBrainrotNodeConfig": {
        "type": "object",
        "properties": {
          "brainrot_config": {
            "type": "object",
            "properties": {
              "category": {
                "type": "string"
              },
              "cropPosition": {
                "type": "string"
              },
              "randomVideoUrl": {
                "type": "string"
              },
              "verticalY": {
                "type": "number"
              },
              "videoUrl": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "MediaOverlayNodeConfig": {
        "type": "object",
        "properties": {
          "media_overlay_config": {
            "type": "object",
            "properties": {
              "mediaUrl": {
                "type": "string"
              },
              "opacity": {
                "type": "number"
              },
              "scale": {
                "type": "number"
              },
              "xPosition": {
                "type": "number"
              },
              "yPosition": {
                "type": "number"
              },
              "startOffset": {
                "type": "number"
              },
              "endOffset": {
                "type": "number"
              },
              "animationDuration": {
                "type": "number"
              },
              "introTransitionId": {
                "type": "string"
              },
              "outroTransitionId": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "RemoveCurseWordsNodeConfig": {
        "type": "object",
        "properties": {
          "remove_curse_words_config": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "silence",
                  "beep",
                  "remove"
                ]
              },
              "words": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "FreeformConfig": {
        "type": "object",
        "additionalProperties": true
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "code": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    }
  }
}