{"openapi":"3.1.0","info":{"title":"Motion Graphics Designer API","version":"1.0.0"},"paths":{"/api/entitlements":{"get":{"summary":"Get Entitlements","description":"Check user's subscription entitlements including plan subscription info.","operationId":"get_entitlements_api_entitlements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"appUserId","in":"query","required":true,"schema":{"type":"string","title":"Appuserid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitlementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout":{"post":{"summary":"Create Checkout Session","description":"Create Stripe checkout session for metered billing subscription\n\nArgs:\n    request: Checkout request data\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    CheckoutResponse with Stripe checkout URL","operationId":"create_checkout_session_api_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/setup":{"post":{"summary":"Setup Billing","description":"Setup billing for a user - creates Stripe customer, RevenueCat user, and checkout session\n\nArgs:\n    request: Billing setup request with redirect URLs\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    BillingSetupResponse with customer ID and checkout URL","operationId":"setup_billing_api_billing_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSetupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSetupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/portal":{"post":{"summary":"Get Billing Portal","description":"Get Stripe billing portal URL for managing payment methods and viewing invoices\n\nArgs:\n    request: Portal request with return URL\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    BillingPortalResponse with portal URL","operationId":"get_billing_portal_api_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPortalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/payment-methods":{"get":{"summary":"Get Payment Methods","description":"List masked payment methods for the current organization billing owner.","operationId":"get_payment_methods_api_billing_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodsResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/payment-methods/setup":{"post":{"summary":"Create Payment Method Setup","description":"Start Stripe Checkout in setup mode. Organization owner only.","operationId":"create_payment_method_setup_api_billing_payment_methods_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentMethodSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/payment-methods/confirm":{"post":{"summary":"Confirm Payment Method Setup","operationId":"confirm_payment_method_setup_api_billing_payment_methods_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPaymentMethodRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/payment-methods/{payment_method_id}/default":{"post":{"summary":"Make Payment Method Default","operationId":"make_payment_method_default_api_billing_payment_methods__payment_method_id__default_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/payment-methods/{payment_method_id}":{"delete":{"summary":"Remove Payment Method","operationId":"remove_payment_method_api_billing_payment_methods__payment_method_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/usage":{"get":{"summary":"Get Billing Usage","description":"Get current billing period usage for the authenticated user.\n\nSource of truth: Stripe. This fetches usage directly from Stripe's\nupcoming invoice API to ensure accurate billing information.\n\nArgs:\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    BillingUsageResponse with usage statistics from Stripe","operationId":"get_billing_usage_api_billing_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingUsageResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/usage/daily":{"get":{"summary":"Get Daily Billing Usage","description":"Get daily usage breakdown for the current billing period.\n\nArgs:\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    DailyUsageResponse with daily usage breakdown","operationId":"get_daily_billing_usage_api_billing_usage_daily_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyUsageResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits":{"get":{"summary":"Get Credit Balance Endpoint","description":"Get the authenticated user's credit balance.","operationId":"get_credit_balance_endpoint_api_billing_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditBalanceResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/redeem-coupon":{"post":{"summary":"Redeem Coupon Endpoint","description":"Redeem a coupon code to add credits to the user's balance.","operationId":"redeem_coupon_endpoint_api_billing_redeem_coupon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCouponRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCouponResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits/purchase":{"post":{"summary":"Purchase Credits","description":"Create a Stripe Checkout session for a one-time credit purchase.","operationId":"purchase_credits_api_billing_credits_purchase_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPurchaseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits/confirm":{"post":{"summary":"Confirm Credit Purchase Endpoint","description":"Confirm a Stripe checkout session and apply purchased credits.\n\nThis is a fallback for environments where webhooks may be delayed or unavailable.\nThe operation is idempotent and safe to call multiple times.","operationId":"confirm_credit_purchase_endpoint_api_billing_credits_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmCreditPurchaseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmCreditPurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits/settings":{"get":{"summary":"Get Credit Settings","description":"Get credit billing mode and auto-reload settings.","operationId":"get_credit_settings_api_billing_credits_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditSettingsResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"put":{"summary":"Update Credit Settings Endpoint","description":"Update auto-reload settings.","operationId":"update_credit_settings_endpoint_api_billing_credits_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCreditSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits/switch":{"post":{"summary":"Switch To Credits Endpoint","description":"Switch from PAYG billing to credit-based billing.","operationId":"switch_to_credits_endpoint_api_billing_credits_switch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchToCreditsResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/credits/history":{"get":{"summary":"Get Credit History Endpoint","description":"Get credit purchase history.","operationId":"get_credit_history_endpoint_api_billing_credits_history_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/revenuecat/sync":{"post":{"summary":"Sync Revenuecat Billing Endpoint","description":"Sync RevenueCat CustomerInfo into backend subscription allowance and credits.","operationId":"sync_revenuecat_billing_endpoint_api_billing_revenuecat_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueCatSyncRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileBillingStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/mobile-status":{"get":{"summary":"Get Mobile Billing Status Endpoint","description":"Return combined subscription allowance and purchased credit balance for mobile.","operationId":"get_mobile_billing_status_endpoint_api_billing_mobile_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileBillingStatusResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/subscribe":{"post":{"summary":"Subscribe","description":"Create a Stripe Checkout session for a Creator or Studio subscription.","operationId":"subscribe_api_billing_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/subscription/confirm":{"post":{"summary":"Confirm Subscription","description":"Confirm and activate a subscription after Stripe checkout completes.\nClient-side fallback for webhooks. Idempotent — safe to call multiple times.","operationId":"confirm_subscription_api_billing_subscription_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/subscription":{"get":{"summary":"Get Subscription","description":"Get the current user's subscription details.","operationId":"get_subscription_api_billing_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/subscription/cancel":{"post":{"summary":"Cancel Subscription Endpoint","description":"Cancel the subscription at end of current billing period.","operationId":"cancel_subscription_endpoint_api_billing_subscription_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/billing/subscription/change-plan":{"post":{"summary":"Change Plan","description":"Upgrade or downgrade subscription tier.","operationId":"change_plan_api_billing_subscription_change_plan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/blank":{"post":{"summary":"Create Blank Project","description":"Create a new blank project without triggering video generation pipeline.\nThis is for the \"Start from Scratch\" flow.\n\nArgs:\n    project_id: Client-generated project ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    CreateProjectResponse with project details","operationId":"create_blank_project_api_projects_blank_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_blank_project_api_projects_blank_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/init":{"post":{"summary":"Init Project","description":"Initialize a new project at the start of the agent flow with 'scoping' status.\n\nThis endpoint creates the project record early in the flow, allowing assets\nto be saved during the planning/augmentation phase.\n\nArgs:\n    project_id: Client-generated project ID\n    prompt: User's initial prompt\n    session_id: Socket.IO session ID for workflow restoration\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    CreateProjectResponse with project details","operationId":"init_project_api_projects_init_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_init_project_api_projects_init_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects":{"get":{"summary":"List Projects","description":"List projects for the current user with pagination\n\nArgs:\n    page: Page number (1-indexed)\n    limit: Number of items per page (default 12)\n    status_filter: Filter by status (completed, processing, failed)\n    search: Search by project name (case-insensitive)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    ListProjectsResponse with paginated projects and metadata","operationId":"list_projects_api_projects_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":12,"title":"Limit"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListProjectsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}":{"get":{"summary":"Get Project","description":"Get project details\n\nSync endpoint on purpose: it does blocking SQLAlchemy I/O, so FastAPI must\nrun it in the threadpool. As `async def` it froze the event loop (and the\n/health endpoint with it) for the whole request.\n\nArgs:\n    project_id: Project ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    GetProjectResponse with full project details","operationId":"get_project_api_projects__project_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Project","description":"Soft-delete a project (sets deleted_at timestamp).\n\nArgs:\n    project_id: Project ID\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    { success: True }","operationId":"delete_project_api_projects__project_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Project","description":"Update project details\n\nArgs:\n    project_id: Project ID\n    request: Update request data\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated project data","operationId":"update_project_api_projects__project_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/preview":{"get":{"summary":"Get Project Preview","description":"Get a lightweight project preview (no auth required).\nReturns basic metadata and stats for display on a preview/fork page.","operationId":"get_project_preview_api_projects__project_id__preview_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/fork":{"post":{"summary":"Fork Project","description":"Deep-copy (fork) a project and all its entities to the current user's account.\nFile URLs are shared by reference -- no storage duplication.","operationId":"fork_project_api_projects__project_id__fork_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/export":{"post":{"summary":"Export Project","description":"Export project as a single merged video file with audio clips.\n\nThis endpoint validates scenes, applies crops, merges videos,\noverlays audio clips at their correct positions, and uploads\nthe result to CDN.\n\nArgs:\n    project_id: Project ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Export result with CDN URL","operationId":"export_project_api_projects__project_id__export_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/exports/{export_id}":{"get":{"summary":"Get Export Status","description":"Get export status (future feature)\n\nArgs:\n    project_id: Project ID\n    export_id: Export job ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Export status and download URL","operationId":"get_export_status_api_projects__project_id__exports__export_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"export_id","in":"path","required":true,"schema":{"type":"string","title":"Export Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/scope":{"post":{"tags":["scope"],"summary":"Start Scope","description":"Start scoping for a project without creating it.\n\nThis endpoint:\n1. Streams an initial agent message\n2. Runs the scope_project function\n3. Streams the scope result\n\nThe frontend should connect to Socket.IO and join the scope session room\nbefore calling this endpoint to receive streaming updates.\n\nArgs:\n    prompt: User's project prompt\n    session_id: Session ID for Socket.IO room (client-generated)\n    files: Optional file attachments\n    user_id: Authenticated user ID\n    \nReturns:\n    ScopeResponse with the scope data","operationId":"start_scope_api_projects_scope_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_start_scope_api_projects_scope_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/plan":{"post":{"tags":["plan"],"summary":"Start Plan","description":"Start planning for a project.\n\nThis endpoint:\n1. If image attachments are provided, augments them with AI-generated names/descriptions\n2. If project_id is provided, saves augmented assets and scope data to the database\n3. Streams plan tokens while generating\n4. Emits completion with the full plan and augmented assets\n\nThe frontend should connect to Socket.IO and join the plan session room\nbefore calling this endpoint to receive streaming updates.\n\nArgs:\n    prompt: User's project prompt\n    session_id: Session ID for Socket.IO room (client-generated)\n    style: Cinematic visual style text for planning context\n    motion_graphics_style: Motion graphics style text for planning context\n    project_id: Optional project ID for saving to database\n    title: Optional project title (from scoping)\n    aspect_ratio: Optional aspect ratio (from scoping)\n    length: Optional length tier (1, 2, 3)\n    voiceover: Optional voiceover flag ('true'/'false')\n    files: Optional file attachments (images will be augmented)\n    current_user: Authenticated user info\n    db: Database session\n    \nReturns:\n    PlanResponse with the plan text and augmented assets","operationId":"start_plan_api_projects_plan_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_start_plan_api_projects_plan_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/plan/edit":{"post":{"tags":["plan"],"summary":"Edit Plan Endpoint","description":"Edit an existing plan based on user feedback.\n\nThis endpoint:\n1. Takes the current plan and user feedback\n2. Optionally accepts previous edit requests for context\n3. Streams the revised plan tokens via Socket.IO\n4. Returns the complete revised plan\n\nArgs:\n    session_id: Session ID for Socket.IO room\n    current_plan: The current plan text to edit\n    feedback: User's feedback/edit request\n    edit_history: Optional JSON array of previous feedback messages\n    current_user: Authenticated user info\n    \nReturns:\n    PlanResponse with the revised plan text","operationId":"edit_plan_endpoint_api_projects_plan_edit_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_edit_plan_endpoint_api_projects_plan_edit_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/generate":{"post":{"tags":["plan"],"summary":"Generate Project","description":"Generate a project after plan confirmation.\n\nThis endpoint:\n1. Creates the project record in the database with status \"generating\"\n2. If voiceover is enabled, generates and streams the script\n3. Returns the project ID for subsequent processing\n\nArgs:\n    session_id: Session ID for Socket.IO room\n    project_id: Client-generated project ID\n    plan: The confirmed plan text\n    scope_data: JSON string with scope parameters (title, style, motionGraphicsStyle, aspectRatio, length, voiceover)\n    prompt: The original user prompt\n    augmented_assets: Optional JSON array of augmented asset data\n    current_user: Authenticated user info\n    db: Database session\n    \nReturns:\n    GenerateResponse with the project ID","operationId":"generate_project_api_projects_generate_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_generate_project_api_projects_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/projects/{project_id}/assets":{"get":{"summary":"Get Project Assets","description":"Get all assets for a project\n\nArgs:\n    project_id: Project ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    List of assets for the project","operationId":"get_project_assets_api_projects__project_id__assets_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/generate":{"post":{"summary":"Generate Asset","description":"Generate an asset for a project using AI image generation.\nAccepts optional reference images and a text prompt.\nThe asset name is generated asynchronously using an LLM if not provided.\n\nArgs:\n    background_tasks: FastAPI background tasks\n    project_id: Project ID to associate the asset with\n    prompt: Text description of the asset to generate\n    name: Optional name for the asset (will be generated from prompt if not provided)\n    files: Optional list of reference images\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Generated asset data with image URL","operationId":"generate_asset_api_projects__project_id__assets_generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_asset_api_projects__project_id__assets_generate_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/upload":{"post":{"summary":"Upload Asset","description":"Upload an image asset for a project.\nThe image is uploaded to CDN and processed with AI to generate name and description.\n\nArgs:\n    project_id: Project ID to associate the asset with\n    file: Image file to upload\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Asset data with AI-generated name and description","operationId":"upload_asset_api_projects__project_id__assets_upload_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_api_projects__project_id__assets_upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/from-video/{video_id}":{"post":{"summary":"Asset From Video","description":"Wrap an existing Video into a video-typed Asset.\n\nFlips the Video's role to 'library' — it is removed from the main timeline\nand lives only as the asset's underlying media.","operationId":"asset_from_video_api_projects__project_id__assets_from_video__video_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_asset_from_video_api_projects__project_id__assets_from_video__video_id__post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/from-audio-clip/{audio_clip_id}":{"post":{"summary":"Asset From Audio Clip","description":"Wrap an existing AudioClip into an audio-typed Asset.\n\nThe clip must already be project-scoped (project_id set) or attached to a video\nthat belongs to this project.","operationId":"asset_from_audio_clip_api_projects__project_id__assets_from_audio_clip__audio_clip_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_asset_from_audio_clip_api_projects__project_id__assets_from_audio_clip__audio_clip_id__post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/input-copy":{"post":{"summary":"Create Project Asset Input Copy","description":"Duplicate an asset's backing media for use as an isolated video input.","operationId":"create_project_asset_input_copy_api_projects__project_id__assets__asset_id__input_copy_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Project Asset Input Copy Api Projects  Project Id  Assets  Asset Id  Input Copy Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}":{"put":{"summary":"Update Asset","description":"Update an existing asset with a new generated image.\nThis is used for asset revisions - instead of creating a new asset,\nthe existing asset's image_url is updated.\n\nArgs:\n    project_id: Project ID containing the asset\n    asset_id: Asset ID to update\n    prompt: New text description of the asset\n    files: Optional list of reference images for generation\n    preview: If True, generates image and returns URL without persisting to DB.\n             User can then accept (call again with preview=False) or discard.\n    commit_url: If provided, skips generation and commits this URL to DB directly.\n                Used when accepting a previewed image.\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated asset data with new image URL","operationId":"update_asset_api_projects__project_id__assets__asset_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_asset_api_projects__project_id__assets__asset_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Asset","description":"Delete an asset from a project.\n\nThis removes the asset row from the database. Association rows in\nasset_scene_association / asset_keyframe_association are deleted via\nON DELETE CASCADE.","operationId":"delete_asset_api_projects__project_id__assets__asset_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/restore-version":{"post":{"summary":"Restore Project Asset Version","description":"Restore a project asset to a previous persisted image version.","operationId":"restore_project_asset_version_api_projects__project_id__assets__asset_id__restore_version_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/camera-angle":{"post":{"summary":"Change Project Asset Camera Angle","description":"Generate or commit a camera-angle edit for a project asset.","operationId":"change_project_asset_camera_angle_api_projects__project_id__assets__asset_id__camera_angle_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_change_project_asset_camera_angle_api_projects__project_id__assets__asset_id__camera_angle_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/magic-select":{"post":{"summary":"Magic Select Project Asset","description":"Perform SAM-3 magic select segmentation on a project asset.","operationId":"magic_select_project_asset_api_projects__project_id__assets__asset_id__magic_select_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_magic_select_project_asset_api_projects__project_id__assets__asset_id__magic_select_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/name":{"post":{"summary":"Update Asset Name","description":"Update an asset's name or other metadata.\nThis is for quick updates without regenerating the asset image.\n\nArgs:\n    project_id: Project ID containing the asset\n    asset_id: Asset ID to update\n    request: Update request data (name, etc.)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated asset data","operationId":"update_asset_name_api_projects__project_id__assets__asset_id__name_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAssetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/{asset_id}/generate-angles":{"post":{"summary":"Generate Asset Angles","description":"Generate multi-angle views (90° and 180°) for an existing asset.\n\nThis enables the asset to be used as a consistent character/object reference\nin Kling O1 reference-to-video generation.\n\nArgs:\n    project_id: Project ID\n    asset_id: Asset ID (UUID)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated asset with secondary_angles populated","operationId":"generate_asset_angles_api_projects__project_id__assets__asset_id__generate_angles_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes":{"post":{"summary":"Create Project Keyframe","description":"Create a new project-level keyframe (no sceneId required).\n\nThis mirrors the scene-scoped keyframe creation endpoint but:\n- persists the keyframe with `project_id` set\n- leaves `scene_id` NULL","operationId":"create_project_keyframe_api_projects__project_id__keyframes_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_project_keyframe_api_projects__project_id__keyframes_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/generate-action-frames":{"post":{"summary":"Generate Action Frames","description":"Generate 4 action frame keyframes using Nano Banana Pro panel generation.\n\nTakes a video prompt (required) and optionally existing keyframe IDs as references.\nReturns 4 new keyframe records that can replace the reference image slots.","operationId":"generate_action_frames_api_projects__project_id__keyframes_generate_action_frames_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_generate_action_frames_api_projects__project_id__keyframes_generate_action_frames_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/duplicate":{"post":{"summary":"Duplicate Project Keyframe","description":"Duplicate an existing project-level keyframe into a NEW keyframe record (new ID).\n\nThis duplicates the database record and points to the same keyframe_url initially.","operationId":"duplicate_project_keyframe_api_projects__project_id__keyframes__keyframe_id__duplicate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/generate":{"post":{"summary":"Generate Scene Keyframes","description":"Generate keyframe images for a scene's existing plan and propagate changes via Supabase Realtime.\n\n- Parses the scene's stored LLM XML plan\n- Generates keyframes sequentially (flat list, no shots)\n- Saves each generated keyframe to DB (Supabase Realtime propagates changes to clients)","operationId":"generate_scene_keyframes_api_projects__project_id__scenes__scene_id__keyframes_generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/batch-generate":{"post":{"summary":"Batch Generate Keyframes","description":"Generate keyframe images for multiple scenes in a single unified batch.\n\nThis generates all keyframes across the specified scenes together for visual\nconsistency, using the first scene's setup as the shared setting context.\nCumulative reference images carry across scene boundaries.\n\nArgs:\n    scene_ids: List of scene UUIDs to regenerate keyframes for\n    \nReturns:\n    Success response with generation started status","operationId":"batch_generate_keyframes_api_projects__project_id__keyframes_batch_generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_batch_generate_keyframes_api_projects__project_id__keyframes_batch_generate_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/plan/motion":{"put":{"summary":"Update Scene Motion","description":"Update the motion/video (prompt/duration) for a specific video in a scene.\nReturns the updated video record.","operationId":"update_scene_motion_api_projects__project_id__scenes__scene_id__plan_motion_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMotionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/regenerate":{"post":{"summary":"Regenerate Keyframe","description":"Regenerate a specific keyframe image for a scene using a prompt and optional reference images.\nChanges are propagated to clients via Supabase Realtime CDC.","operationId":"regenerate_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__regenerate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_regenerate_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__regenerate_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes":{"post":{"summary":"Create Keyframe","description":"Create a new keyframe for a scene.\nSimilar to generating assets, but creates a keyframe for the scene.\nChanges are propagated to clients via Supabase Realtime CDC.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID to add the keyframe to\n    prompt: Text description of the keyframe to generate\n    files: Optional list of reference images\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Created keyframe data with image URL","operationId":"create_keyframe_api_projects__project_id__scenes__scene_id__keyframes_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_keyframe_api_projects__project_id__scenes__scene_id__keyframes_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}":{"delete":{"summary":"Delete Keyframe","description":"Delete a keyframe from a scene and remove it from the element sequence.","operationId":"delete_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Keyframe","description":"Update/edit a specific keyframe image (like asset revision).\nRegenerates the keyframe with new prompt and optional reference images.\nChanges are propagated to clients via Supabase Realtime CDC.\n\nThis is the PUT version (for iterative edits) vs POST /regenerate (single regen).\n\nArgs:\n    preview: If True, generates image and returns URL without persisting to DB.\n             User can then accept (call again with preview=False) or discard.\n    commit_url: If provided, skips generation and commits this URL to DB directly.\n                Used when accepting a previewed image.","operationId":"update_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/magic-select":{"post":{"summary":"Magic Select Keyframe","description":"Perform SAM-3 magic select segmentation on a keyframe using a bounding box from lasso selection.\n\nUses SAM-3's image-to-image endpoint with box_prompts and apply_mask=True to directly get\nthe masked object image with transparent background.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    keyframe_id: Keyframe ID\n    box_x1: Normalized x coordinate (0-1) for top-left corner of selection box\n    box_y1: Normalized y coordinate (0-1) for top-left corner of selection box\n    box_x2: Normalized x coordinate (0-1) for bottom-right corner of selection box\n    box_y2: Normalized y coordinate (0-1) for bottom-right corner of selection box\n    image_url: Optional override image URL to segment (useful for client-side edited previews not saved to DB)\n    image: Optional image file to segment (used when the client has a blob URL that cannot be fetched by the server)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    {\n        success: bool,\n        maskedImageUrl: str - URL of masked object (transparent background),\n        maskOverlayUrl: str - URL of colored mask overlay for preview,\n        bounds: { x, y, width, height } - Bounding box in pixels,\n        imageWidth: int - Original image width,\n        imageHeight: int - Original image height,\n    }","operationId":"magic_select_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_magic_select_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/magic-select/extract":{"post":{"summary":"Extract Magic Select Region","description":"Extract (crop) the masked region for duplicate action.\n\nTakes the already-masked image URL from magic-select and crops it to the\nbounding box for a compact extracted object.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID  \n    keyframe_id: Keyframe ID\n    masked_image_url: URL of masked object from magic-select\n    bounds_x, bounds_y, bounds_width, bounds_height: Bounding box in pixels\n    \nReturns:\n    { success, extractedImageUrl: str - URL of cropped extracted region }","operationId":"extract_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_extract_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_extract_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_extract_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/magic-select/delete":{"post":{"summary":"Delete Magic Select Region","description":"Delete the masked region from a keyframe (creates cutout with transparency).\n\nTakes the masked image URL from magic-select and removes that region from\nthe original keyframe, creating a transparent cutout.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    keyframe_id: Keyframe ID\n    masked_image_url: URL of masked object from magic-select\n    \nReturns:\n    { success, cutoutImageUrl: str - URL of image with cutout }","operationId":"delete_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_delete_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_delete_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_delete_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/magic-select":{"post":{"summary":"Magic Select Keyframe Project Level","description":"Perform SAM-3 magic select segmentation on a project-level keyframe using a bounding box.\n\nThis is the video-centric version that doesn't require scene_id.\nKeyframes are looked up by project_id instead of scene_id.\n\nArgs:\n    project_id: Project ID\n    keyframe_id: Keyframe ID\n    box_x1-box_y2: Normalized coordinates (0-1) for selection box\n    image_url: Optional override image URL to segment\n    image: Optional image file to segment (used when the client has a blob URL that cannot be fetched by the server)\n    \nReturns:\n    {\n        success: bool,\n        maskedImageUrl: str - URL of masked object (transparent background),\n        maskOverlayUrl: str - URL of colored mask overlay for preview,\n        bounds: { x, y, width, height } - Bounding box in pixels,\n        imageWidth: int - Original image width,\n        imageHeight: int - Original image height,\n    }","operationId":"magic_select_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_magic_select_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/magic-select/extract":{"post":{"summary":"Extract Magic Select Region Project Level","description":"Extract (crop) the masked region for duplicate action (project-level, no scene_id).\n\nTakes the already-masked image URL from magic-select and crops it to the\nbounding box for a compact extracted object.","operationId":"extract_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_extract_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_extract_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_extract_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/magic-select/delete":{"post":{"summary":"Delete Magic Select Region Project Level","description":"Delete the masked region from a keyframe (project-level, no scene_id).\n\nTakes the masked image URL from magic-select and removes that region from\nthe original keyframe, creating a transparent cutout.","operationId":"delete_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_delete_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_delete_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_delete_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/layer-edit":{"post":{"summary":"Edit Layer","description":"Edit a layer or masked region on a keyframe.\n\nFor mask edits: Draws a red rectangle on the image at mask_bounds, \nprepends prompt with \"Edit the subject in the red rectangle: \".\n\nFor layer edits: Crops to the layer bounds (if provided), composites on a bright green background,\nand only removes background if the original image had transparency (alpha != 255 anywhere).\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    keyframe_id: Keyframe ID (for access verification)\n    image_url: The image to edit (base keyframe URL or image layer URL)\n    prompt: User's edit prompt\n    edit_type: \"mask\" or \"layer\"\n    mask_bounds_x/y/width/height: For mask edits, the bounding box in pixels\n    crop_x/y/width/height: For layer edits, crop the source image to this region before editing\n    target_width/height: For layer edits, resize the cropped region to this size before editing\n    remove_background: If true, remove background from result (for layer edits), but only if original had transparency\n    \nReturns:\n    { success, editedImageUrl: str - URL of edited image }","operationId":"edit_layer_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__layer_edit_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_layer_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__layer_edit_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/layer-edit":{"post":{"summary":"Edit Layer Project Level","description":"Edit a layer or masked region on a project-level keyframe (no scene_id required).\n\nThis is the video-centric version that doesn't require scene_id.\nFor mask edits: Draws a red rectangle on the image at mask_bounds.\nFor layer edits: Crops to the layer bounds, composites on green background.","operationId":"edit_layer_project_level_api_projects__project_id__keyframes__keyframe_id__layer_edit_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_layer_project_level_api_projects__project_id__keyframes__keyframe_id__layer_edit_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}":{"put":{"summary":"Update Keyframe Project Level","description":"Update/edit a project-level keyframe (video-centric, no scene_id required).\n\nThis is the video-centric version that looks up keyframes by project_id\ninstead of scene_id. Used for keyframes that are not tied to a specific scene.\n\nArgs:\n    preview: If True, generates image and returns URL without persisting to DB.\n    commit_url: If provided, skips generation and commits this URL to DB directly.","operationId":"update_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/restore-version":{"post":{"summary":"Restore Project Keyframe Version","operationId":"restore_project_keyframe_version_api_projects__project_id__keyframes__keyframe_id__restore_version_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/keyframes/{keyframe_id}/camera-angle":{"post":{"summary":"Change Keyframe Camera Angle","description":"Change the camera angle of a keyframe image.\n\nUses the Qwen Image Edit 2511 Multiple Angles model to generate the same scene\nfrom a different camera angle (azimuth/elevation).\n\nArgs:\n    horizontal_angle: 0°=front, 90°=right side, 180°=back, 270°=left side, 360°=front.\n    vertical_angle: -30°=low-angle, 0°=eye-level, 30°=elevated, 60°=high-angle, 90°=bird's-eye.\n    zoom: 0=wide shot, 5=medium shot, 10=close-up.\n    preview: If True, returns preview URL without persisting to DB.\n    commit_url: If provided, commits this URL to DB directly (skip generation).","operationId":"change_keyframe_camera_angle_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__camera_angle_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_change_keyframe_camera_angle_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__camera_angle_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/camera-angle":{"post":{"summary":"Change Keyframe Camera Angle Project Level","description":"Change the camera angle of a project-level keyframe (no scene_id required).\n\nUses the Qwen Image Edit 2511 Multiple Angles model to generate the same scene\nfrom a different camera angle (azimuth/elevation).\n\nThis is the video-centric version that doesn't require scene_id.","operationId":"change_keyframe_camera_angle_project_level_api_projects__project_id__keyframes__keyframe_id__camera_angle_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_change_keyframe_camera_angle_project_level_api_projects__project_id__keyframes__keyframe_id__camera_angle_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/generate-world":{"post":{"summary":"Generate World For Keyframe","description":"Generate (or return cached) 3D world from a keyframe image via World Labs.\nReturns spz_url for client-side rendering with SparkJS.\n\nThe splat cache is cleared when the keyframe image URL changes for any reason\nother than world-capture, so captures from this explorer reuse the same world.","operationId":"generate_world_for_keyframe_api_projects__project_id__keyframes__keyframe_id__generate_world_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/keyframes/{keyframe_id}/world-capture":{"post":{"summary":"Capture World Angle","description":"Accept a screenshot from the 3D world explorer, regenerate it as a clean\nkeyframe image via GPT Image 2.\n\nWhen preview=True (default), returns the generated URL without persisting;\nthe client commits via PUT keyframe with commit_url.\n\nWhen preview=False, persists immediately (legacy / programmatic behavior).","operationId":"capture_world_angle_api_projects__project_id__keyframes__keyframe_id__world_capture_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"keyframe_id","in":"path","required":true,"schema":{"type":"string","title":"Keyframe Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_capture_world_angle_api_projects__project_id__keyframes__keyframe_id__world_capture_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/video/generate":{"post":{"summary":"Generate Scene Video","description":"Generate final video for a scene based on its approved storyboard (element sequence).\n\nThis endpoint:\n1. Validates that the scene has a valid element sequence with keyframes and videos\n2. Sets the scene status to 'generating'\n3. Runs video generation in the background using generate_scene_video_from_sequence\n4. Updates are propagated to clients via Supabase Realtime CDC\n\nArgs:\n    background_tasks: FastAPI background tasks\n    project_id: Project ID\n    scene_id: Scene ID to generate video for\n    current_user: Authenticated user\n    \nReturns:\n    Success response indicating video generation has started","operationId":"generate_scene_video_api_projects__project_id__scenes__scene_id__video_generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/generate":{"post":{"summary":"Generate Single Video","description":"Generate (or regenerate) a single motion Video entity.\n\nThis endpoint generates ONLY the specified video, using `videos.elements` as the\nsource of truth (video-centric storyboard). It does NOT traverse a scene element sequence.\n\nIncludes the same hard billing paywall and usage recording.","operationId":"generate_single_video_api_projects__project_id__videos__video_id__generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/upscale":{"post":{"summary":"Upscale Video","description":"Upscale an existing video using Crystal Upscaler (clarityai) via fal.ai.\n\nArgs:\n    project_id: Project ID\n    video_id: Video ID to upscale\n    background_tasks: FastAPI background tasks\n    request: Optional JSON body with upscale options (scaleFactor)\n    current_user: Authenticated user\n    db: Database session","operationId":"upscale_video_api_projects__project_id__videos__video_id__upscale_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/captions":{"post":{"summary":"Add Or Remove Captions","description":"Add or remove captions from a video.\n\nBody JSON:\n    enabled (bool): True to add captions, False to revert to uncaptioned.\n    style (dict, optional): ZapCap style parameters (only used when enabled=True).","operationId":"add_or_remove_captions_api_projects__project_id__videos__video_id__captions_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/batch-upscale":{"post":{"summary":"Batch Upscale Videos","description":"Batch upscale multiple videos using Crystal Upscaler (clarityai) via fal.ai.\n\nArgs:\n    project_id: Project ID\n    background_tasks: FastAPI background tasks\n    request: JSON body with videoIds and optional scaleFactor\n    current_user: Authenticated user\n    db: Database session","operationId":"batch_upscale_videos_api_projects__project_id__videos_batch_upscale_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/videos":{"post":{"summary":"Create Video","description":"Create a new video/motion for a scene.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID to add the video to\n    request: JSON body with 'prompt' and 'duration' fields\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Created video data","operationId":"create_video_api_projects__project_id__scenes__scene_id__videos_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/videos/{video_id}":{"put":{"summary":"Update Video","description":"Update an existing video/motion in a scene.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    video_id: Video ID to update\n    request: JSON body with optional 'prompt' and 'duration' fields\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated video data","operationId":"update_video_api_projects__project_id__scenes__scene_id__videos__video_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Video","description":"Delete a video/motion from a scene and remove it from the element sequence.","operationId":"delete_video_api_projects__project_id__scenes__scene_id__videos__video_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/videos/{video_id}/playback-speed":{"put":{"summary":"Adjust Video Playback Speed","description":"Adjust the playback speed of a video.\n\nThis endpoint changes the video's playback speed by re-encoding it with FFmpeg.\nThe speed adjustment is cumulative - if a video was already adjusted, this will\ncalculate the correct factor to achieve the target speed from the original.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    video_id: Video ID to adjust\n    request: JSON body with 'playbackSpeed' (float, e.g., 2.0 for 2x faster, 0.5 for half speed)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated video data with new playback speed","operationId":"adjust_video_playback_speed_api_projects__project_id__scenes__scene_id__videos__video_id__playback_speed_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos":{"post":{"summary":"Create Project Video","description":"Create a new video directly on the project (video-centric timeline).\n\nArgs:\n    project_id: Project ID\n    request: JSON body with 'prompt', 'duration', optional 'model', 'name', 'description'\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Created video data","operationId":"create_project_video_api_projects__project_id__videos_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Project Videos","description":"List all videos for a project, ordered by order_index.\n\nThis endpoint returns videos at the project level for the video-centric timeline.\nEach video includes its start/end keyframes and audio clips.\n\nArgs:\n    project_id: Project ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    List of videos with their keyframes and audio clips","operationId":"list_project_videos_api_projects__project_id__videos_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/duplicate":{"post":{"summary":"Duplicate Project Video","description":"Duplicate a project-level video and clone its referenced keyframes.\n\nThe duplicated video is inserted immediately after the source video in order.\nAttached audio clips are not duplicated.","operationId":"duplicate_project_video_api_projects__project_id__videos__video_id__duplicate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Duplicate Project Video Api Projects  Project Id  Videos  Video Id  Duplicate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}":{"put":{"summary":"Update Project Video","description":"Update a video at the project level (video-centric timeline).\n\nArgs:\n    project_id: Project ID\n    video_id: Video ID to update\n    request: JSON body with optional 'prompt', 'duration', 'model', 'name', 'description', 'voiceover', 'volume'\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated video data","operationId":"update_project_video_api_projects__project_id__videos__video_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Project Video","description":"Delete a video from the project (video-centric timeline).\n\nArgs:\n    project_id: Project ID\n    video_id: Video ID to delete\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Success response","operationId":"delete_project_video_api_projects__project_id__videos__video_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/restore-version":{"post":{"summary":"Restore Project Video Version","operationId":"restore_project_video_version_api_projects__project_id__videos__video_id__restore_version_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/playback-speed":{"put":{"summary":"Adjust Project Video Playback Speed","description":"Adjust the playback speed of a project-level video.\n\nThis endpoint re-encodes the video with FFmpeg and replaces the videoUrl\nso the speed change is applied to the actual media, not just the UI.","operationId":"adjust_project_video_playback_speed_api_projects__project_id__videos__video_id__playback_speed_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}/lipsync":{"post":{"summary":"Lipsync Voiceover","description":"Apply lip-sync to overlapping video segments for a voiceover audio clip.","operationId":"lipsync_voiceover_api_projects__project_id__audio_clips__audio_clip_id__lipsync_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LipsyncVoiceoverRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/volume":{"put":{"summary":"Update Video Volume","description":"Update volume for a video.\n\nArgs:\n    project_id: Project ID\n    video_id: Video ID\n    request: JSON body with 'volume' (0-200)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated video data","operationId":"update_video_volume_api_projects__project_id__videos__video_id__volume_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/color-grade":{"put":{"summary":"Update Video Color Grade","description":"Persist non-destructive color adjustments for editor preview and export.","operationId":"update_video_color_grade_api_projects__project_id__videos__video_id__color_grade_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/preview.m3u8":{"get":{"summary":"Get Project Preview M3U8","description":"Return a stitched HLS playlist for the entire project timeline.\n\nThis is used by the editor to play the whole project as one continuous stream.\nWe stitch per-clip playlists with EXT-X-DISCONTINUITY between clips.\n\nThe manifest includes ALL segments (no filtering). Crop handling is done by\nthe frontend which seeks past cropped regions. The first video's cropStartMs\nis provided as an EXT-X-START hint to help players start at the right position.","operationId":"get_project_preview_m3u8_api_projects__project_id__preview_m3u8_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/reorder/bulk":{"put":{"summary":"Reorder Project Videos","description":"Reorder videos within a project.\n\nArgs:\n    project_id: Project ID\n    request: JSON body with 'videoIds' array in new order\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Success response with updated video order","operationId":"reorder_project_videos_api_projects__project_id__videos_reorder_bulk_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/crop":{"put":{"summary":"Update Video Crop","description":"Update crop values for a video (soft trim).\n\nArgs:\n    project_id: Project ID\n    video_id: Video ID\n    request: JSON body with 'cropStartMs' and/or 'cropEndMs'\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated video data","operationId":"update_video_crop_api_projects__project_id__videos__video_id__crop_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/voiceover":{"put":{"summary":"Update Scene Voiceover","description":"Update scene voiceover text, regenerate voiceover audio, and attach to base video.\n\nThis endpoint:\n1. Updates the scene.voiceover field\n2. Regenerates voiceover audio in the background\n3. Attaches the new voiceover to the cached base_video_url (without regenerating motion videos)\n4. Updates scene.video_url with the new final video\n\nArgs:\n    background_tasks: FastAPI background tasks\n    project_id: Project ID\n    scene_id: Scene ID to update voiceover for\n    request: Request body with 'voiceover' field\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Success response indicating voiceover regeneration has started","operationId":"update_scene_voiceover_api_projects__project_id__scenes__scene_id__voiceover_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/crop":{"put":{"summary":"Update Scene Crop","description":"Update scene crop values (soft crop, only applied on export).\n\nThis endpoint updates crop_start_ms and crop_end_ms for a scene.\nThe crop is non-destructive - the original video remains unchanged\nand crop values are only applied during playback preview and export.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID to update crop for\n    request: Request body with 'cropStartMs' and 'cropEndMs' fields\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated scene crop values","operationId":"update_scene_crop_api_projects__project_id__scenes__scene_id__crop_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/volume":{"put":{"summary":"Update Scene Volume","description":"Update scene volume level (0-200 percentage).\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID to update volume for\n    request: Request body with 'volume' field (0-200)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Success response with updated volume","operationId":"update_scene_volume_api_projects__project_id__scenes__scene_id__volume_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/motion-graphic/edit":{"post":{"summary":"Edit Motion Graphic Scene","description":"Edit an existing motion-graphic scene by updating the stored Remotion code via LLM.","operationId":"edit_motion_graphic_scene_api_projects__project_id__scenes__scene_id__motion_graphic_edit_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_edit_motion_graphic_scene_api_projects__project_id__scenes__scene_id__motion_graphic_edit_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/generate":{"post":{"summary":"Generate Scene","description":"Generate a new scene with AI-generated video plan.\n\nThis endpoint:\n1. Creates a new scene at the end of the project\n2. Optionally processes uploaded reference images\n3. Generates a video plan using LLM (keyframes and motion videos)\n4. Saves keyframe and video records to the database\n5. Returns the newly created scene with its plan\n\nArgs:\n    project_id: Project ID to add scene to\n    description: Description of the scene to generate\n    duration: Optional duration in milliseconds. If not provided (None/empty), uses 'auto' mode\n             where duration is determined by ai_video_generation.py based on voiceover length\n    files: Optional reference images for generation\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Scene response with generated plan","operationId":"generate_scene_api_projects__project_id__scenes_generate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_scene_api_projects__project_id__scenes_generate_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Scene Api Projects  Project Id  Scenes Generate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/blank":{"post":{"summary":"Create Blank Scene","description":"Create an empty scene record so users can manually add keyframes and motions before generation.","operationId":"create_blank_scene_api_projects__project_id__scenes_blank_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Payload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Blank Scene Api Projects  Project Id  Scenes Blank Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/reorder":{"put":{"summary":"Reorder Scenes","description":"Reorder scenes within a project.\n\nAccepts an ordered list of scene IDs and updates each scene's order_index\nto match the position in the array.\n\nArgs:\n    project_id: Project ID\n    payload: { \"scene_ids\": [\"id1\", \"id2\", ...] }\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated scenes with new order indices","operationId":"reorder_scenes_api_projects__project_id__scenes_reorder_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reorder Scenes Api Projects  Project Id  Scenes Reorder Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/sequence":{"put":{"summary":"Update Scene Sequence","description":"Update the element sequence for a scene.\n\nThis endpoint allows reordering keyframes and videos within a scene\nby providing a new ordered list of elements.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    request: New element sequence\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Updated scene with new element sequence","operationId":"update_scene_sequence_api_projects__project_id__scenes__scene_id__sequence_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSceneSequenceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Scene Sequence Api Projects  Project Id  Scenes  Scene Id  Sequence Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/snapshots":{"get":{"summary":"Get Scene Snapshots","description":"Get snapshot history for a scene.\n\nReturns a list of historical snapshots that capture the state of the scene\nat different points in time (after each successful video generation).\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    limit: Maximum number of snapshots to return (default: 10)\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    List of snapshots with their element states","operationId":"get_scene_snapshots_api_projects__project_id__scenes__scene_id__snapshots_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/snapshots/{snapshot_id}":{"get":{"summary":"Get Scene Snapshot","description":"Get a specific snapshot by ID.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    snapshot_id: Snapshot ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Detailed snapshot information including all element states","operationId":"get_scene_snapshot_api_projects__project_id__scenes__scene_id__snapshots__snapshot_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/changes":{"get":{"summary":"Preview Scene Changes","description":"Preview what changes will be regenerated when video generation is triggered.\n\nThis endpoint analyzes the current scene state against the last snapshot\nand determines which videos need to be regenerated based on the dependency logic.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID\n    current_user: Authenticated user\n    db: Database session\n    \nReturns:\n    Preview of changes and which videos will be regenerated","operationId":"preview_scene_changes_api_projects__project_id__scenes__scene_id__changes_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}":{"delete":{"summary":"Delete Scene","description":"Delete a scene from a project's timeline (soft delete).\n\nThis removes the scene from the project but doesn't delete it from the database.\nIt just dissociates it from the project timeline.\n\nArgs:\n    project_id: Project ID\n    scene_id: Scene ID (UUID)\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    Success response with deleted scene ID","operationId":"delete_scene_api_projects__project_id__scenes__scene_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/voices/clone":{"post":{"summary":"Clone Voice From Audio","description":"Create a voice profile by cloning an uploaded audio sample via ElevenLabs.\nPersists a Voice record with provider='elevenlabs' and generates a kling_voice_id\nusing the uploaded audio (after converting m4a->mp3 if needed).","operationId":"clone_voice_from_audio_api_projects__project_id__voices_clone_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_clone_voice_from_audio_api_projects__project_id__voices_clone_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clone Voice From Audio Api Projects  Project Id  Voices Clone Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voices/platform":{"get":{"summary":"Get Platform Voices","description":"Get platform-level voices (project_id IS NULL) with optional search, language filter, and pagination.","operationId":"get_platform_voices_api_voices_platform_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"languages","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Languages"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/voices":{"get":{"summary":"Get Project Voices","description":"Get all voices for a project","operationId":"get_project_voices_api_projects__project_id__voices_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Save Voice","description":"Save a custom voice to Hume AI and create the database record.\nThis is called after the user has previewed and decided to save the voice.","operationId":"save_voice_api_projects__project_id__voices_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveVoiceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Voice Api Projects  Project Id  Voices Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/voices/generate-preview":{"post":{"summary":"Generate Voice Preview","description":"Generate a voice preview using Hume AI Voice Design API.\nThis does NOT create any database record - it only generates a preview for the user to listen to.\nReturns the preview audio URL and a temporary generated_voice_id for later saving.","operationId":"generate_voice_preview_api_projects__project_id__voices_generate_preview_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateVoicePreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/voices/{voice_id}":{"put":{"summary":"Update Voice","description":"Update voice name","operationId":"update_voice_api_projects__project_id__voices__voice_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_voice_api_projects__project_id__voices__voice_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Voice","description":"Delete a voice","operationId":"delete_voice_api_projects__project_id__voices__voice_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voices":{"get":{"summary":"List My Voices","description":"List every voice the user has generated: user-level voices plus voices\ncreated inside any of the user's projects. Includes the linked character\n(if any) for each voice.","operationId":"list_my_voices_api_voices_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"attachable_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Attachable Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voices/{voice_id}/tts":{"post":{"summary":"Generate Voice Tts","description":"Generate text-to-speech with a saved voice using Seed Audio 1.0.\nThe voice's preview audio is used as the reference clip.","operationId":"generate_voice_tts_api_voices__voice_id__tts_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceTTSRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voices/seed/preview":{"post":{"summary":"Generate Seed Voice Preview","description":"Generate a brand new voice from scratch with Seed Audio 1.0.\n\nThe voice can be steered by the text prompt alone, by up to 3 reference\naudio or video clips (uploaded files and/or existing URLs, tagged\n@Audio1..@Audio3 in the prompt), or by a single reference image. Audio and\nimage references are mutually exclusive. Video uploads have their first\naudio track extracted before use. No DB record is created — the generated\naudio is uploaded to the CDN and returned as a preview.","operationId":"generate_seed_voice_preview_api_voices_seed_preview_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_seed_voice_preview_api_voices_seed_preview_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/voices/seed/save":{"post":{"summary":"Save Seed Voice","description":"Save a Seed Audio generated preview as a user-level voice.\nThe preview audio becomes the voice's reference/preview audio.","operationId":"save_seed_voice_api_voices_seed_save_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveSeedVoiceRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Save Seed Voice Api Voices Seed Save Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/voices/{voice_id}":{"put":{"summary":"Update User Voice","description":"Rename a voice the user owns (directly or through one of their projects).","operationId":"update_user_voice_api_voices__voice_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_user_voice_api_voices__voice_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete User Voice","description":"Delete a voice the user owns (directly or through one of their projects).","operationId":"delete_user_voice_api_voices__voice_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/audio-clips/generate-voiceover":{"post":{"summary":"Generate Voiceover Audio","description":"Generate a voiceover audio clip using Hume AI text-to-speech.\n\nThis endpoint:\n1. Validates the project, scene, and voice\n2. Calls Hume TTS API to generate audio\n3. Uploads audio to CDN\n4. Creates AudioClip record in database\n5. Returns the created audio clip","operationId":"generate_voiceover_audio_api_projects__project_id__scenes__scene_id__audio_clips_generate_voiceover_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateVoiceoverRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Voiceover Audio Api Projects  Project Id  Scenes  Scene Id  Audio Clips Generate Voiceover Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/audio-clips/generate-sound-effect":{"post":{"summary":"Generate Sound Effect Audio","description":"Generate a sound effect audio clip using ElevenLabs text-to-sound-effects API.\n\nThis endpoint:\n1. Validates the project and scene\n2. Calls ElevenLabs Sound Effects API to generate audio\n3. Uploads audio to CDN\n4. Creates AudioClip record in database\n5. Returns the created audio clip","operationId":"generate_sound_effect_audio_api_projects__project_id__scenes__scene_id__audio_clips_generate_sound_effect_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSoundEffectRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Sound Effect Audio Api Projects  Project Id  Scenes  Scene Id  Audio Clips Generate Sound Effect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/scenes/{scene_id}/audio-clips/generate-music":{"post":{"summary":"Generate Music Audio","description":"Generate a music audio clip using ElevenLabs music API.\n\nThis endpoint:\n1. Validates the project and scene\n2. Calls ElevenLabs Music API to generate music\n3. Uploads audio to CDN\n4. Creates AudioClip record in database\n5. Returns the created audio clip","operationId":"generate_music_audio_api_projects__project_id__scenes__scene_id__audio_clips_generate_music_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateMusicRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Music Audio Api Projects  Project Id  Scenes  Scene Id  Audio Clips Generate Music Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}/position":{"put":{"summary":"Update Audio Clip Position","description":"Update an audio clip's position (scene/video and timestamp).\nUsed when dragging audio clips to new locations in the timeline.\n\nSupports both:\n- Scene mode: uses new_scene_id\n- Video-centric mode: uses new_video_id\n\nThe start_timestamp should be relative to the new scene/video's start.","operationId":"update_audio_clip_position_api_projects__project_id__audio_clips__audio_clip_id__position_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAudioClipPositionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Audio Clip Position Api Projects  Project Id  Audio Clips  Audio Clip Id  Position Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}/timing":{"put":{"summary":"Update Audio Clip Timing","description":"Update an audio clip's timing (start timestamp and duration).\nUsed when trimming audio clips in the timeline.","operationId":"update_audio_clip_timing_api_projects__project_id__audio_clips__audio_clip_id__timing_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAudioClipTimingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Audio Clip Timing Api Projects  Project Id  Audio Clips  Audio Clip Id  Timing Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}/volume":{"put":{"summary":"Update Audio Clip Volume","description":"Update an audio clip's volume (0-200%).","operationId":"update_audio_clip_volume_api_projects__project_id__audio_clips__audio_clip_id__volume_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAudioClipVolumeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Audio Clip Volume Api Projects  Project Id  Audio Clips  Audio Clip Id  Volume Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}":{"delete":{"summary":"Delete Audio Clip","description":"Delete an audio clip from a project.\n\nThis endpoint:\n1. Validates the project and audio clip ownership\n2. Deletes the audio clip record from the database\n3. Returns success response","operationId":"delete_audio_clip_api_projects__project_id__audio_clips__audio_clip_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Audio Clip Api Projects  Project Id  Audio Clips  Audio Clip Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/audio-clips/{audio_clip_id}/duplicate":{"post":{"summary":"Duplicate Audio Clip","description":"Duplicate an audio clip within the same project.\n\nThis endpoint:\n1. Validates the project and audio clip ownership\n2. Creates a new audio clip with the same properties as the original\n3. Offsets the start_timestamp by the original clip's duration so the copy\n   appears right after the original on the timeline\n4. Returns the newly created audio clip","operationId":"duplicate_audio_clip_api_projects__project_id__audio_clips__audio_clip_id__duplicate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Duplicate Audio Clip Api Projects  Project Id  Audio Clips  Audio Clip Id  Duplicate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/audio-clips/upload":{"post":{"summary":"Upload Audio Clip For Video","description":"Upload a user-provided audio file and attach it to a video.\n\nAccepts multipart/form-data:\n- file: audio file\n- start_timestamp: position in ms (relative to video start)","operationId":"upload_audio_clip_for_video_api_projects__project_id__videos__video_id__audio_clips_upload_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_audio_clip_for_video_api_projects__project_id__videos__video_id__audio_clips_upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Audio Clip For Video Api Projects  Project Id  Videos  Video Id  Audio Clips Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/audio-clips/generate-voiceover":{"post":{"summary":"Generate Voiceover Audio For Video","description":"Generate a voiceover audio clip using Hume AI text-to-speech.\nVIDEO-CENTRIC: Attaches audio clip to a Video instead of a Scene.","operationId":"generate_voiceover_audio_for_video_api_projects__project_id__videos__video_id__audio_clips_generate_voiceover_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateVoiceoverRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Voiceover Audio For Video Api Projects  Project Id  Videos  Video Id  Audio Clips Generate Voiceover Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/audio-clips/generate-sound-effect":{"post":{"summary":"Generate Sound Effect Audio For Video","description":"Generate a sound effect audio clip using ElevenLabs text-to-sound-effects API.\nVIDEO-CENTRIC: Attaches audio clip to a Video instead of a Scene.","operationId":"generate_sound_effect_audio_for_video_api_projects__project_id__videos__video_id__audio_clips_generate_sound_effect_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSoundEffectRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Sound Effect Audio For Video Api Projects  Project Id  Videos  Video Id  Audio Clips Generate Sound Effect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/audio-clips/generate-music":{"post":{"summary":"Generate Music Audio For Video","description":"Generate a music audio clip using ElevenLabs music generation API.\nVIDEO-CENTRIC: Attaches audio clip to a Video instead of a Scene.","operationId":"generate_music_audio_for_video_api_projects__project_id__videos__video_id__audio_clips_generate_music_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateMusicRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Music Audio For Video Api Projects  Project Id  Videos  Video Id  Audio Clips Generate Music Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/videos/{video_id}/audio-clips/extract-from-video":{"post":{"summary":"Extract Audio From Video","description":"Extract audio from a video and create an audio clip attached to that video.\n\nThis endpoint:\n1. Validates the project and video\n2. Downloads the video file\n3. Extracts audio using ffmpeg\n4. Uploads audio to CDN\n5. Creates AudioClip record in database at timestamp 0\n6. Returns the created audio clip","operationId":"extract_audio_from_video_api_projects__project_id__videos__video_id__audio_clips_extract_from_video_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Extract Audio From Video Api Projects  Project Id  Videos  Video Id  Audio Clips Extract From Video Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips":{"post":{"summary":"Create Overlay Clip","description":"Create an overlay clip backed by an existing source Video.\n\nContent (video_url, name, prompt, etc.) lives on the referenced Video —\nthe clip only stores position/timing/styling + a pointer via\nelements[\"sourceVideoId\"].","operationId":"create_overlay_clip_api_projects__project_id__overlay_clips_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOverlayClipRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Overlay Clip Api Projects  Project Id  Overlay Clips Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips/from-video/{video_id}":{"post":{"summary":"Create Overlay From Video","description":"Create an overlay clip from an existing project video (copies URL + duration).","operationId":"create_overlay_from_video_api_projects__project_id__overlay_clips_from_video__video_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOverlayClipRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Overlay From Video Api Projects  Project Id  Overlay Clips From Video  Video Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips/{clip_id}":{"patch":{"summary":"Update Overlay Clip","description":"Update overlay clip properties (any combination of fields).","operationId":"update_overlay_clip_api_projects__project_id__overlay_clips__clip_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","title":"Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOverlayClipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Overlay Clip Api Projects  Project Id  Overlay Clips  Clip Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Overlay Clip","description":"Delete an overlay clip.","operationId":"delete_overlay_clip_api_projects__project_id__overlay_clips__clip_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Overlay Clip Api Projects  Project Id  Overlay Clips  Clip Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips/{clip_id}/position":{"patch":{"summary":"Update Overlay Clip Position","description":"Move overlay clip to a new position on the timeline.","operationId":"update_overlay_clip_position_api_projects__project_id__overlay_clips__clip_id__position_patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","title":"Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOverlayClipPositionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Overlay Clip Position Api Projects  Project Id  Overlay Clips  Clip Id  Position Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips/{clip_id}/timing":{"patch":{"summary":"Update Overlay Clip Timing","description":"Update overlay clip timing — translates to the source Video's crop fields.\n\nCrop/trim lives on the source Video (crop_start_ms, crop_end_ms) rather than\non the OverlayClip. trim_start_ms → source_video.crop_start_ms;\nduration_ms → implies crop_end_ms = source.duration - trim_start - duration.","operationId":"update_overlay_clip_timing_api_projects__project_id__overlay_clips__clip_id__timing_patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clip_id","in":"path","required":true,"schema":{"type":"string","title":"Clip Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOverlayClipTimingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Overlay Clip Timing Api Projects  Project Id  Overlay Clips  Clip Id  Timing Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/overlay-clips/upload":{"post":{"summary":"Upload Overlay Clip","description":"Upload a video file as an overlay clip.","operationId":"upload_overlay_clip_api_projects__project_id__overlay_clips_upload_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_overlay_clip_api_projects__project_id__overlay_clips_upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Overlay Clip Api Projects  Project Id  Overlay Clips Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/stripe":{"post":{"summary":"Stripe Webhook","description":"Handle Stripe webhook events for billing\n\nThis endpoint handles:\n- checkout.session.completed: Customer completed checkout, create billing period\n- invoice.paid: Invoice was paid successfully\n- invoice.payment_failed: Payment failed\n- customer.subscription.updated: Subscription status changed\n- customer.subscription.deleted: Subscription was cancelled\n\nArgs:\n    request: FastAPI request object (for raw body access)\n    db: Database session\n    \nReturns:\n    Success acknowledgment","operationId":"stripe_webhook_api_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/webhooks/slack":{"post":{"summary":"Slack Webhook","description":"Handle Slack Events API callbacks for support chat replies.\n\nFlow:\n- url_verification: return the challenge (one-time Slack app setup)\n- message event in a thread:\n    * Find the support session by slack_thread_ts\n    * Persist the admin reply as a SupportChatMessage\n    * If session is open → push via Socket.IO\n    * If session is closed → send email via Resend","operationId":"slack_webhook_api_webhooks_slack_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/status":{"get":{"summary":"Onboarding Status","description":"Return whether the authenticated user has completed onboarding.","operationId":"onboarding_status_api_onboarding_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStatusResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding":{"post":{"summary":"Submit Onboarding","description":"Save post-signup onboarding questionnaire answers.\n\nThis is intentionally lightweight and should never block project generation.","operationId":"submit_onboarding_api_onboarding_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitOnboardingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitOnboardingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/complete":{"post":{"summary":"Complete Onboarding","description":"Mark onboarding complete and grant the one-time free signup credits.\n\nCalled when a brand-new user finishes the intro slide. Granting is idempotent,\nso re-completing onboarding never hands out the free credits twice.","operationId":"complete_onboarding_api_onboarding_complete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteOnboardingResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/scan":{"post":{"summary":"Start Marketing Scan","description":"Kick off a Firecrawl-based website scan for marketing onboarding.","operationId":"start_marketing_scan_api_onboarding_marketing_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartMarketingScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartMarketingScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"patch":{"summary":"Update Marketing Scan","description":"Persist user edits to the marketing scan result.","operationId":"update_marketing_scan_api_onboarding_marketing_scan_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMarketingScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingScanStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/scan/status":{"get":{"summary":"Marketing Scan Status","description":"Return the latest marketing website scan status and extracted product data.","operationId":"marketing_scan_status_api_onboarding_marketing_scan_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingScanStatusResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/character":{"patch":{"summary":"Update Marketing Character Selection","description":"Persist the selected library character for marketing onboarding.","operationId":"update_marketing_character_selection_api_onboarding_marketing_character_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMarketingCharacterSelectionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingScanStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/competitors/search":{"get":{"summary":"Search Marketing Competitors","description":"Search likely competitors to seed Ads Library fetching.","operationId":"search_marketing_competitors_api_onboarding_marketing_competitors_search_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchCompetitorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/marketing/competitors/fetch":{"post":{"summary":"Start Competitor Ads Fetch","description":"Kick off a background fetch of video ads for the selected competitor page.","operationId":"start_competitor_ads_fetch_api_onboarding_marketing_competitors_fetch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartCompetitorAdsFetchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartCompetitorAdsFetchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/competitors/status":{"get":{"summary":"Marketing Competitor Ads Status","description":"Return the current competitor ads fetch state and cached ads.","operationId":"marketing_competitor_ads_status_api_onboarding_marketing_competitors_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorAdsStatusResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/competitors/select":{"patch":{"summary":"Save Selected Competitor Ads","description":"Persist the competitor ads the user selected for later onboarding steps.","operationId":"save_selected_competitor_ads_api_onboarding_marketing_competitors_select_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSelectedCompetitorAdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorAdsStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/onboarding/marketing/images":{"post":{"summary":"Upload Marketing Image","description":"Upload a user-provided product image for marketing onboarding.","operationId":"upload_marketing_image_api_onboarding_marketing_images_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_marketing_image_api_onboarding_marketing_images_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadMarketingImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/guides/storyboard/status":{"get":{"summary":"Storyboard Guide Status","description":"Return whether the user has seen the storyboard guide (keyframe/motion explainer).\n\nReturns hasSeenStoryboardGuide: false if user has never clicked on a storyboard scene.","operationId":"storyboard_guide_status_api_guides_storyboard_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryboardGuideStatusResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/guides/storyboard/seen":{"post":{"summary":"Mark Storyboard Guide Seen","description":"Mark the storyboard guide as seen for the current user.\n\nCalled when user dismisses the keyframe/motion explainer overlay.\nCreates the user onboarding row if it doesn't exist.","operationId":"mark_storyboard_guide_seen_api_guides_storyboard_seen_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkStoryboardGuideSeenResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mobile/videos":{"get":{"summary":"List Mobile Videos Endpoint","operationId":"list_mobile_videos_endpoint_api_mobile_videos_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mobile/videos/{video_id}":{"get":{"summary":"Mobile Video Status Endpoint","operationId":"mobile_video_status_endpoint_api_mobile_videos__video_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mobile/images":{"get":{"summary":"List Mobile Images Endpoint","operationId":"list_mobile_images_endpoint_api_mobile_images_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mobile/images/{image_id}":{"get":{"summary":"Mobile Image Status Endpoint","operationId":"mobile_image_status_endpoint_api_mobile_images__image_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"string","title":"Image Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mobile/images/gpt-image-2":{"post":{"summary":"Mobile Gpt Image2 Endpoint","operationId":"mobile_gpt_image2_endpoint_api_mobile_images_gpt_image_2_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_mobile_gpt_image2_endpoint_api_mobile_images_gpt_image_2_post"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mobile/seedance-2":{"post":{"summary":"Mobile Seedance2 Video Endpoint","operationId":"mobile_seedance2_video_endpoint_api_mobile_seedance_2_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_mobile_seedance2_video_endpoint_api_mobile_seedance_2_post"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/model-specs":{"get":{"summary":"Get Video Model Specs","description":"Return available video models and DB-backed input/parameter specs.\n\n`models.params` is the source of truth. The serializer keeps the existing\nresponse shape for frontend compatibility while avoiding per-model hardcoded\nspec branches in this route.","operationId":"get_video_model_specs_api_videos_model_specs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/model-specs/refresh":{"post":{"summary":"Refresh Video Model Specs","description":"Force-expire the in-memory model registry cache so the next call to\n/model-specs re-reads fresh rows from the DB (e.g. after editing thumbnails\nor params directly in the database).","operationId":"refresh_video_model_specs_api_videos_model_specs_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/upload-reference-image":{"post":{"summary":"Upload Reference Image","description":"Upload an image input for a standalone library generation.","operationId":"upload_reference_image_api_videos_upload_reference_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_reference_image_api_videos_upload_reference_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/upload-reference-video":{"post":{"summary":"Upload Reference Video","description":"Upload a reference video file for motion control video generation.\n\nAccepts video files (3-30 seconds duration, max 100MB) and uploads them to CDN.\nReturns the CDN URL for use in motion control video generation.\n\nArgs:\n    video_file: Video file (mp4, webm, mov)\n\nReturns:\n    { success: True, video_url: str } with the CDN URL of the uploaded video","operationId":"upload_reference_video_api_videos_upload_reference_video_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_reference_video_api_videos_upload_reference_video_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/upload-source-video":{"post":{"summary":"Upload Source Video","description":"Upload a source video file for video-to-video generation.\n\nAccepts video files (max 100MB) and uploads them to CDN.\nReturns the CDN URL for use in video-to-video generation.","operationId":"upload_source_video_api_videos_upload_source_video_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_source_video_api_videos_upload_source_video_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/upload-source-audio":{"post":{"summary":"Upload Source Audio","description":"Upload a source audio file for Seedance 2 reference generation.\n\nAccepts audio files (max 30MB) and uploads them to CDN.\nReturns the CDN URL and, when a project_id is supplied, a project-scoped\nAudioClip for canonical video input persistence.","operationId":"upload_source_audio_api_videos_upload_source_audio_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_source_audio_api_videos_upload_source_audio_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/image-to-video":{"post":{"summary":"Image To Video Endpoint","description":"Generate a video from an image using various AI models.\nCreates a container scene with the generated video.\n\nSupports multiple models:\n- Seedance 1.0 Pro Fast (image-to-video)\n- Seedance 1.5 Pro (image-to-video)\n- Kling 2.5 Turbo Standard (image-to-video)\n- Kling 2.6 Pro (image-to-video, supports native audio)\n- Kling O1 (image-to-video)\n- LTX Video 2.0 Fast (image-to-video, supports native audio)\n- Sora 2 (image-to-video, supports native audio)\n- Veo 3.1 Fast (image-to-video, supports native audio)\n- Wan 2.6 (image-to-video)\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID to add the video to\n        - prompt (str, required): Text prompt describing the video\n        - image_url (str, required): URL of the image to use as first frame\n        - model (str, optional): Model to use. Default: \"seedance\"\n        - duration (str, optional): Duration in seconds (model-specific). Default: \"5\"\n        - aspect_ratio (str, optional): Aspect ratio (model-specific)\n        - resolution (str, optional): Video resolution (model-specific)\n        - fps (str, optional): Frames per second (LTX Video 2.0 only)\n        - generate_audio (bool, optional): Whether to generate audio\n        - add_audio (bool, optional): Whether to add audio. Default: False\n        - camera_fixed (bool, optional): Fix camera position (Seedance only)\n        - seed (int, optional): Random seed for reproducibility\n        - enable_safety_checker (bool, optional): Enable safety checker\n        - negative_prompt (str, optional): Negative prompt (Kling/Wan)\n        - cfg_scale (float, optional): CFG scale 0.0-1.0 (Kling)\n        - enable_prompt_expansion (bool, optional): Enable prompt expansion (Wan)\n        - multi_shots (bool, optional): Enable multi-shot segmentation (Wan)\n        - audio_url (str, optional): Background audio URL (Wan)\n        - max_retries (int, optional): Max retry attempts. Default: 3\n        - initial_delay (float, optional): Initial backoff delay. Default: 1.0\n    \nReturns:\n    Success response with scene and video data","operationId":"image_to_video_endpoint_api_videos_image_to_video_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/transition":{"post":{"summary":"Transition Video Endpoint","description":"Generate a transition video between two images.\nCreates a container scene with the generated video.\n\nSupports multiple models:\n- Seedance (default)\n- Seedance 1.5 Pro\n- Veo 3.1 Fast\n- Kling O1 First Frame Last Frame\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID to add the video to\n        - prompt (str, required): Prompt guiding the transition\n        - first_image_url (str, required): URL of the first frame image\n        - last_image_url (str, required): URL of the last frame image\n        - aspect_ratio (str, optional): Aspect ratio. Default: \"auto\"\n        - resolution (str, optional): Video resolution. Default: \"1080p\"\n        - duration (str, optional): Duration in seconds. Default: \"5\"\n        - seed (int, optional): Seed for reproducibility (Seedance only)\n        - camera_fixed (bool, optional): Fix camera position. Default: False (Seedance only)\n        - add_audio (bool, optional): Whether to add audio. Default: False\n        - model (str, optional): Model to use. Default: \"seedance\"\n        - max_retries (int, optional): Max retry attempts. Default: 3\n        - initial_delay (float, optional): Initial backoff delay. Default: 1.0\n    \nReturns:\n    Success response with scene and video data","operationId":"transition_video_endpoint_api_videos_transition_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/transition/{video_id}/regenerate":{"post":{"summary":"Transition Video Regenerate Endpoint","description":"Re-generate an existing transition video with updated params.","operationId":"transition_video_regenerate_endpoint_api_videos_transition__video_id__regenerate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/reference":{"post":{"summary":"Reference Video Endpoint","description":"Generate a video using Kling O1 Reference Image to Video.\nCreates a container scene with the generated video.\n\nThis endpoint uses reference images and elements to generate videos\nwith consistent characters/objects. Use @Image1, @Image2... and \n@Element1, @Element2... references in the prompt.\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID to add the video to\n        - prompt (str, required): Prompt with @Image1, @Image2... and @Element1, @Element2... references\n        - image_urls (list[str], optional): List of reference image URLs\n        - elements (list[dict], optional): List of element dicts (characters/objects)\n            Each element dict commonly includes:\n            - \"reference_image_urls\": list[str]\n            - \"frontal_image_url\": str\n        - duration (str, optional): Duration. Only \"5\" and \"10\" supported. Default: \"5\"\n        - aspect_ratio (str, optional): Aspect ratio. One of \"16:9\", \"9:16\", \"1:1\". Default: \"16:9\"\n        - max_retries (int, optional): Max retry attempts. Default: 3\n        - initial_delay (float, optional): Initial backoff delay. Default: 1.0\n    \nReturns:\n    Success response with scene and video data","operationId":"reference_video_endpoint_api_videos_reference_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/seedance-2":{"post":{"summary":"Seedance2 Video Endpoint","description":"Generate a standalone video with Seedance, MiniMax H3, or Wan 3.0 Prime.\n\nThis endpoint supports these Seedance models:\n- seedance_2.0_fast\n- seedance_2.0\n- seedance_2.0_mini\n- seedance_2.5\n- seedance25-ref / seedance25-i2v / seedance25-t2v\n- minimax-h3-i2v\n- minimax-h3-reference\n- minimax-h3-max-text\n- minimax-h3-max-i2v\n- wan30-text\n- wan30-i2v\n- wan30-reference\n\nIt supports both function modes:\n- omni_reference (image_files/video_files/audio_files)\n- first_last_frames (file_paths)\n\nBytePlus-backed Seedance 2.0 Mini and Fast accept 480p/720p; Standard also\naccepts 1080p.\nBytePlus-backed Seedance 2.5 accepts 480p/720p, 4-30 seconds, and up to\n30 images, 10 videos, and 10 audio files (50 combined).\nMiniMax H3 accepts 768P, 2K, and 4K; its reference variant accepts up to\n9 images, 3 videos, 3 audio clips, and 12 combined reference files.\nMiniMax H3 Max accepts 5-15 seconds at 480P or 768P. Its text endpoint\naccepts aspect ratio control, while its image endpoint accepts an optional\nopening image and ending image and inherits the opening image's geometry.\nWan 3.0 Prime accepts 2-30 seconds at 480p, 720p, or 1080p with optional\ngenerated audio. Its reference endpoint accepts up to 10 images, 5 videos,\nand 5 audio clips.","operationId":"seedance2_video_endpoint_api_videos_seedance_2_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/text-to-video":{"post":{"summary":"Text To Video Endpoint","description":"Generate a video from text prompt only (no starting image).\nCreates a container scene with the generated video.\n\nSupports multiple models:\n- Seedance 1.0 Pro Fast (text-to-video)\n- Seedance 1.5 Pro (text-to-video)\n- Kling 2.5 Pro (text-to-video)\n- Kling 2.6 Pro (text-to-video, supports native audio)\n- Veo 3.1 Fast (text-to-video, supports native audio)\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID to add the video to\n        - prompt (str, required): Text prompt describing the video\n        - model (str, optional): Model to use. Default: \"seedance\"\n        - duration (str, optional): Duration in seconds. Default: \"5\"\n        - aspect_ratio (str, optional): Aspect ratio. Default: \"16:9\"\n        - generate_audio (bool, optional): Whether to generate audio\n        - negative_prompt (str, optional): Negative prompt\n        - cfg_scale (float, optional): CFG scale 0.0-1.0\n        - seed (int, optional): Random seed for reproducibility\n        - max_retries (int, optional): Max retry attempts. Default: 3\n        - initial_delay (float, optional): Initial backoff delay. Default: 1.0\n    \nReturns:\n    Success response with scene and video data","operationId":"text_to_video_endpoint_api_videos_text_to_video_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/text-to-video/{video_id}/regenerate":{"post":{"summary":"Regenerate Text To Video Endpoint","description":"Re-generate an existing project-level text-to-video using updated parameters.\n\nThis is used by the editor when a user edits prompt/model/duration or any advanced params.","operationId":"regenerate_text_to_video_endpoint_api_videos_text_to_video__video_id__regenerate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/motion-control":{"post":{"summary":"Motion Control Video Endpoint","description":"Generate a motion control video using Kling Motion Control models.\n\nTransfers motion from a reference video to a character image, creating a new video\nwhere the character performs the movements from the reference.\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID to add the video to\n        - prompt (str, required): Text prompt describing the desired output\n        - image_url (str, required): URL of the character image to animate\n        - video_url (str, required): URL of the reference video (3-30 seconds)\n        - model (str, optional): One of \"kling26mc\", \"kling26mcpro\", \"kling3mc\", \"kling3mcpro\"\n        - character_orientation (str, optional): \"image\" or \"video\". Default: \"image\"\n        - keep_original_sound (bool, optional): Keep reference video audio. Defaults to True for Kling 3, False for Kling 2.6\n        - duration (str, optional): Duration in seconds (\"5\" or \"10\"). Default: \"5\"\n        - negative_prompt (str, optional): Text specifying elements to avoid\n        - order_index (int, optional): Position in timeline. Default: append at end\n        - start_keyframe_id (str, optional): ID of the keyframe used as character image\n        - video_id (str, optional): Existing video ID to regenerate in place\n\nReturns:\n    Success response with video data","operationId":"motion_control_video_endpoint_api_videos_motion_control_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/motion-graphics":{"post":{"summary":"Motion Graphics Video Endpoint","description":"Generate a motion graphics video using Remotion (React-based animations).\n\nCreates animated explainer-style videos with text, icons, and visual elements\nbased on a prompt. The animation code is generated by an LLM and rendered\nvia Remotion.\n\nArgs:\n    project_id: Project ID to add the video to\n    prompt: Description of the motion graphic to generate\n    duration: Duration in seconds. Default: auto\n    aspect_ratio: Aspect ratio. Default: project's aspect ratio\n    order_index: Position in timeline. Default: append at end\n    voiceover: Voiceover script to sync animations with\n    is_overlay: If \"true\", convert the video to an OverlayClip after generation\n    attachments: Optional list of image/video files to include in the motion graphic\n\nReturns:\n    Success response with video data","operationId":"motion_graphics_video_endpoint_api_videos_motion_graphics_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_motion_graphics_video_endpoint_api_videos_motion_graphics_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/motion-graphics/{video_id}/regenerate":{"post":{"summary":"Regenerate Motion Graphics Video Endpoint","description":"Re-generate an existing motion-graphics video in place.\n\nUnlike the create endpoint, this updates the same video record (same video_id)\nso storyboard prompt edits regenerate the current entity instead of creating a new one.","operationId":"regenerate_motion_graphics_video_endpoint_api_videos_motion_graphics__video_id__regenerate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_regenerate_motion_graphics_video_endpoint_api_videos_motion_graphics__video_id__regenerate_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/{video_id}/edit-motion-graphics":{"post":{"summary":"Edit Motion Graphics Video Endpoint","description":"Edit an existing motion graphics video by modifying its Remotion code via LLM.\n\nThis endpoint takes an edit prompt (natural language instruction) and:\n1. Fetches the video's current Remotion TSX code\n2. Uses Claude to modify the code based on the edit instruction\n3. Re-renders the video using Remotion CLI\n4. Updates the video record with the new code and video URL\n\nArgs:\n    video_id: UUID of the video to edit\n    project_id: Project ID for authorization\n    prompt: Edit instruction (e.g., \"Make the title bigger\")\n    chat_history: JSON-encoded array of previous chat messages for context\n    attachments: Optional list of image/video files to add to the motion graphic\n\nReturns:\n    Success response with updated video data","operationId":"edit_motion_graphics_video_endpoint_api_videos__video_id__edit_motion_graphics_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_edit_motion_graphics_video_endpoint_api_videos__video_id__edit_motion_graphics_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/multi-shot":{"post":{"summary":"Multi Shot Video Endpoint","description":"Generate multiple AI videos from a single prompt using the AI video generation pipeline.\n\nCreates a temporary scene and generates multiple video shots based on the prompt.\nVideos are created in the database and streamed to the frontend via Supabase Realtime\n(onVideoInsert/onVideoUpdate events).\n\nArgs:\n    project_id: Project ID to add the videos to\n    prompt: Description of the video sequence to generate\n    duration: Total duration in seconds (default: 10)\n    aspect_ratio: Aspect ratio. Default: project's aspect ratio\n    order_index: Position in timeline. Default: append at end\n    \nReturns:\n    Success response with scene ID and video count","operationId":"multi_shot_video_endpoint_api_videos_multi_shot_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_multi_shot_video_endpoint_api_videos_multi_shot_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/avatar":{"post":{"summary":"Avatar Video Endpoint","description":"Generate an avatar (talking-head) video using VEED Fabric 1.0.\n\nTurns a portrait/face image into a lip-synced talking video.  Audio can be\nsupplied directly via ``audio_url`` **or** generated on-the-fly from\n``voiceover_text`` using TTS (Hume / ElevenLabs, depending on the voice's\nprovider).\n\nArgs:\n    request: JSON body containing:\n        - project_id (str, required): Project ID\n        - image_url (str, optional): URL of the avatar/face image\n        - start_keyframe_id (str, optional): Keyframe ID to use as avatar image (resolves image_url)\n        - voiceover_text (str, optional): Script text for TTS generation\n        - audio_url (str, optional): URL of pre-recorded audio for lip-sync\n        - voice_id (str, optional): Voice ID for TTS (project voice record)\n        - model (str, optional): \"standard\" or \"fast\". Default: \"standard\"\n        - resolution (str, optional): \"480p\" or \"720p\". Default: \"720p\"\n        - video_id (str, optional): Existing video ID to regenerate in place\n        - order_index (int, optional): Position in timeline. Default: append at end","operationId":"avatar_video_endpoint_api_videos_avatar_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/videos/library":{"get":{"summary":"List Video Library","description":"List project-backed and standalone generated videos, newest first.\n\nPowers the \"Videos\" gallery. Excludes overlay/library-role videos and raw\nuser uploads — only videos the user generated make the cut.","operationId":"list_video_library_api_videos_library_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"completed_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Completed Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/library/{video_id}":{"get":{"summary":"Get Video Library Item","description":"Fetch a single library video (used to poll remix/creation status).","operationId":"get_video_library_item_api_videos_library__video_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Standalone Library Video","description":"Delete a standalone video owned by the signed-in user.","operationId":"delete_standalone_library_video_api_videos_library__video_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/videos/{video_id}/remix":{"post":{"summary":"Remix Video Endpoint","description":"Remix an existing generated video with a new prompt (video-to-video).\n\nBody:\n    prompt (str, required): Editing instruction for the remix.\n    model (str, optional): Video-to-video model alias.\n        Defaults to Gemini Omni Flash Edit (\"gemini-omni-flash-edit\").\n    image_urls (list[str], optional): Reference images, for models that\n        accept them alongside a source video.\n    duration (str, optional), aspect_ratio (str, optional),\n    resolution (str, optional): forwarded to the model when supported.\n    keep_audio (bool, optional): retain source audio when supported.\n\nCreates a new video record (status=\"generating\") with the same ownership\nscope as the source video and runs generation in the background.","operationId":"remix_video_endpoint_api_videos__video_id__remix_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/images/library":{"get":{"tags":["images"],"summary":"List Image Library","description":"List images belonging to any project owned by the current user.","operationId":"list_image_library_api_images_library_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/me/notification-contact":{"get":{"summary":"Get My Notification Contact","operationId":"get_my_notification_contact_api_users_me_notification_contact_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationContactResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"put":{"summary":"Update My Notification Contact","operationId":"update_my_notification_contact_api_users_me_notification_contact_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNotificationContactRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/orgs/me":{"get":{"summary":"Get My Org","operationId":"get_my_org_api_orgs_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMeResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"put":{"summary":"Update My Org","description":"Update organization settings. Only the owner can update the organization.","operationId":"update_my_org_api_orgs_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/orgs/members":{"get":{"summary":"List Org Members","operationId":"list_org_members_api_orgs_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMembersResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/orgs/invites/validate":{"get":{"summary":"Validate Org Invite","operationId":"validate_org_invite_api_orgs_invites_validate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateOrgInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/invites":{"post":{"summary":"Create Org Invite","operationId":"create_org_invite_api_orgs_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgInviteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/orgs/invites/{invite_id}/resend":{"post":{"summary":"Resend Org Invite","operationId":"resend_org_invite_api_orgs_invites__invite_id__resend_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/invites/{invite_id}":{"delete":{"summary":"Revoke Org Invite","operationId":"revoke_org_invite_api_orgs_invites__invite_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/members/{member_user_id}":{"delete":{"summary":"Delete Org Member","operationId":"delete_org_member_api_orgs_members__member_user_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"member_user_id","in":"path","required":true,"schema":{"type":"string","title":"Member User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/invites/accept":{"post":{"summary":"Accept Org Invite","operationId":"accept_org_invite_api_orgs_invites_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptOrgInviteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptOrgInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/orgs/invites/accept-public":{"post":{"summary":"Accept Org Invite Public","operationId":"accept_org_invite_public_api_orgs_invites_accept_public_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptOrgInvitePublicRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptOrgInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/prompt-enhancement/image":{"post":{"tags":["Prompt Enhancement"],"summary":"Enhance Image Prompt","description":"Enhance a text description into a detailed, cinematic image generation prompt.\n\nUses advanced prompting techniques to avoid the \"AI art\" look:\n- Foreground obstruction for depth\n- Asymmetrical composition\n- Extreme camera angles\n- Realistic lighting\n- Natural character gaze\n\nIf project_id is provided, uses the project's configured style (if available).\nRequires authentication when project_id is provided.","operationId":"enhance_image_prompt_api_prompt_enhancement_image_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePromptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/prompt-enhancement/video":{"post":{"tags":["Prompt Enhancement"],"summary":"Enhance Video Prompt","description":"Enhance a text description into a detailed video generation prompt.\n\nUses advanced prompting techniques for natural-speed, physics-accurate motion:\n- Explicit camera movement terminology\n- Speed modifiers (fighting slow-motion default)\n- Cohesive action descriptions\n- Atmospheric details\n\nIf project_id is provided, uses the project's configured style (if available).\nRequires authentication when project_id is provided.","operationId":"enhance_video_prompt_api_prompt_enhancement_video_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoPromptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/media-models":{"get":{"summary":"Get Composer Media Models","description":"Return the authenticated user's Composer-safe model catalog.","operationId":"get_composer_media_models_api_agent_media_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/attachment-references/preflight":{"post":{"summary":"Preflight Attachment References","operationId":"preflight_attachment_references_api_agent_attachment_references_preflight_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentPreflightRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/compose":{"post":{"summary":"Compose Video","description":"Start an agent video composition run for a project.","operationId":"compose_video_api_agent_compose_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_compose_video_api_agent_compose_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/projects/{project_id}/copy-and-compose":{"post":{"summary":"Copy Project And Compose","description":"Copy a project, then start a fresh Composer session on that copy.\n\nThe copy owns new database and workspace rows. Immutable CDN media is\nshared by URL, but Composer materializes and publishes workspace changes\nagainst only the copied project's internal id.","operationId":"copy_project_and_compose_api_agent_projects__project_id__copy_and_compose_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_copy_project_and_compose_api_agent_projects__project_id__copy_and_compose_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyComposeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/eligibility":{"get":{"summary":"Get Agent Eligibility","description":"Get whether the current user is allowed to start agentic project creation.","operationId":"get_agent_eligibility_api_agent_eligibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentEligibilityResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/run/{run_id}":{"get":{"summary":"Get Agent Run","description":"Get the status of an agent run.","operationId":"get_agent_run_api_agent_run__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/run/project/{project_id}":{"get":{"summary":"Get Agent Run By Project","description":"Get the latest agent run for a project (by public project_id).","operationId":"get_agent_run_by_project_api_agent_run_project__project_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AgentRunResponse"},{"type":"null"}],"title":"Response Get Agent Run By Project Api Agent Run Project  Project Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/runs/project/{project_id}":{"get":{"summary":"List Agent Runs By Project","description":"List previous composer runs for an owned project, newest first.","operationId":"list_agent_runs_by_project_api_agent_runs_project__project_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentRunResponse"},"title":"Response List Agent Runs By Project Api Agent Runs Project  Project Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/events/{run_id}":{"get":{"summary":"Get Agent Events","description":"Get all events for an agent run (for hydration on page refresh).","operationId":"get_agent_events_api_agent_events__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"after_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"After Seq"}},{"name":"sync_safe","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Sync Safe"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentEventResponse"},"title":"Response Get Agent Events Api Agent Events  Run Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/progress/{run_id}":{"get":{"summary":"Get Agent Progress","description":"Return only the safe, video-domain projection of a Composer run.","operationId":"get_agent_progress_api_agent_progress__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicProgressStepResponse"},"title":"Response Get Agent Progress Api Agent Progress  Run Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/media-jobs/project/{project_id}":{"get":{"summary":"Get Composer Media Jobs","description":"Return authoritative media-generation state independently of agent runs.","operationId":"get_composer_media_jobs_api_agent_media_jobs_project__project_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ComposerMediaJobResponse"},"title":"Response Get Composer Media Jobs Api Agent Media Jobs Project  Project Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/session/{session_id}":{"get":{"summary":"Get Agent Session","description":"Hydrate a whole Composer conversation: every turn of the session with the\nevents each turn produced, so the panel can render it as one thread.","operationId":"get_agent_session_api_agent_session__session_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/abort/{run_id}":{"post":{"summary":"Abort Agent Run","description":"Abort a running agent task.","operationId":"abort_agent_run_api_agent_abort__run_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbortResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/auth/login":{"post":{"summary":"Login Debug Decomposition","operationId":"login_debug_decomposition_api_agent_decomposition_debug_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Login Debug Decomposition Api Agent Decomposition Debug Auth Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/agent/decomposition-debug/auth/refresh":{"post":{"summary":"Refresh Debug Decomposition Auth","operationId":"refresh_debug_decomposition_auth_api_agent_decomposition_debug_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugRefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Refresh Debug Decomposition Auth Api Agent Decomposition Debug Auth Refresh Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/agent/decomposition-debug/projects":{"post":{"summary":"Create Debug Decomposition Project","operationId":"create_debug_decomposition_project_api_agent_decomposition_debug_projects_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Debug Decomposition Project Api Agent Decomposition Debug Projects Post"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/decomposition-debug/sessions":{"get":{"summary":"List Debug Decomposition Sessions","operationId":"list_debug_decomposition_sessions_api_agent_decomposition_debug_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Debug Decomposition Sessions Api Agent Decomposition Debug Sessions Get"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"post":{"summary":"Create Debug Decomposition Session","operationId":"create_debug_decomposition_session_api_agent_decomposition_debug_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDebugSessionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Debug Decomposition Session Api Agent Decomposition Debug Sessions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/decomposition-debug/sessions/upload":{"post":{"summary":"Create Uploaded Debug Decomposition Session","operationId":"create_uploaded_debug_decomposition_session_api_agent_decomposition_debug_sessions_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_uploaded_debug_decomposition_session_api_agent_decomposition_debug_sessions_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Uploaded Debug Decomposition Session Api Agent Decomposition Debug Sessions Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/decomposition-debug/sessions/{session_id}":{"get":{"summary":"Get Debug Decomposition Session","operationId":"get_debug_decomposition_session_api_agent_decomposition_debug_sessions__session_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Debug Decomposition Session Api Agent Decomposition Debug Sessions  Session Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Debug Decomposition Session","operationId":"delete_debug_decomposition_session_api_agent_decomposition_debug_sessions__session_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/sessions/{session_id}/stages/{stage}/run":{"post":{"summary":"Run Debug Decomposition Stage","operationId":"run_debug_decomposition_stage_api_agent_decomposition_debug_sessions__session_id__stages__stage__run_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"stage","in":"path","required":true,"schema":{"type":"string","title":"Stage"}},{"name":"rerun","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Rerun"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Debug Decomposition Stage Api Agent Decomposition Debug Sessions  Session Id  Stages  Stage  Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/sessions/{session_id}/stages/{stage}/abort":{"post":{"summary":"Abort Debug Decomposition Stage","operationId":"abort_debug_decomposition_stage_api_agent_decomposition_debug_sessions__session_id__stages__stage__abort_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"stage","in":"path","required":true,"schema":{"type":"string","title":"Stage"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Abort Debug Decomposition Stage Api Agent Decomposition Debug Sessions  Session Id  Stages  Stage  Abort Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/sessions/{session_id}/stages/{stage}":{"put":{"summary":"Edit Debug Decomposition Stage","operationId":"edit_debug_decomposition_stage_api_agent_decomposition_debug_sessions__session_id__stages__stage__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"stage","in":"path","required":true,"schema":{"type":"string","title":"Stage"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditStageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Edit Debug Decomposition Stage Api Agent Decomposition Debug Sessions  Session Id  Stages  Stage  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/sessions/{session_id}/stages/{stage}/review":{"put":{"summary":"Review Debug Decomposition Stage","operationId":"review_debug_decomposition_stage_api_agent_decomposition_debug_sessions__session_id__stages__stage__review_put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"stage","in":"path","required":true,"schema":{"type":"string","title":"Stage"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewStageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Review Debug Decomposition Stage Api Agent Decomposition Debug Sessions  Session Id  Stages  Stage  Review Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/decomposition-debug/sessions/{session_id}/artifacts/{artifact_path}":{"get":{"summary":"Get Debug Decomposition Artifact","operationId":"get_debug_decomposition_artifact_api_agent_decomposition_debug_sessions__session_id__artifacts__artifact_path__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"artifact_path","in":"path","required":true,"schema":{"type":"string","title":"Artifact Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/multi-compose":{"post":{"summary":"Multi Compose","operationId":"multi_compose_api_agent_multi_compose_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_multi_compose_api_agent_multi_compose_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/multi-groups/project/{project_id}":{"get":{"summary":"Get Multi Group","operationId":"get_multi_group_api_agent_multi_groups_project__project_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/multi-groups/{group_id}/members/{project_id}/retry":{"post":{"summary":"Retry Multi Member","operationId":"retry_multi_member_api_agent_multi_groups__group_id__members__project_id__retry_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/media-model-presets":{"get":{"summary":"List Media Model Presets","operationId":"list_media_model_presets_api_agent_media_model_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"post":{"summary":"Create Media Model Preset","operationId":"create_media_model_preset_api_agent_media_model_presets_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent/media-model-presets/{preset_id}":{"put":{"summary":"Update Media Model Preset","operationId":"update_media_model_preset_api_agent_media_model_presets__preset_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Media Model Preset","operationId":"delete_media_model_preset_api_agent_media_model_presets__preset_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/agent-logs/auth":{"post":{"summary":"Auth","operationId":"auth_api_admin_agent_logs_auth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/agent-logs/runs":{"get":{"summary":"List Runs","operationId":"list_runs_api_admin_agent_logs_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/agent-logs/runs/{run_id}":{"get":{"summary":"Get Run Logs","operationId":"get_run_logs_api_admin_agent_logs_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/agent-logs/runs/{run_id}/export.txt":{"get":{"summary":"Export Run Text","operationId":"export_run_text_api_admin_agent_logs_runs__run_id__export_txt_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/agent-logs":{"get":{"summary":"Agent Logs Ui","operationId":"agent_logs_ui_api_admin_agent_logs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/support/chat/start":{"post":{"summary":"Start Support Chat","description":"Open (or resume) a support chat session for the authenticated user.\nIdempotent: if an open session already exists it is returned as-is.\nThe Slack thread is created lazily on the user's first message.","operationId":"start_support_chat_api_support_chat_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/support/chat/{session_id}/message":{"post":{"summary":"Send Support Message","description":"Send a message from the user. Posts to the Slack thread as a reply.","operationId":"send_support_message_api_support_chat__session_id__message_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/support/chat/session":{"get":{"summary":"Get Support Chat Session","description":"Return the user's open support chat session with messages, or null.","operationId":"get_support_chat_session_api_support_chat_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/support/chat/{session_id}/close":{"post":{"summary":"Close Support Chat","description":"Close the session and notify the Slack thread.","operationId":"close_support_chat_api_support_chat__session_id__close_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/slack-agent/install-url":{"post":{"tags":["Slack Agent"],"summary":"Create Install Url","operationId":"create_install_url_api_integrations_slack_agent_install_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/integrations/slack-agent/installations":{"get":{"tags":["Slack Agent"],"summary":"List Installations","operationId":"list_installations_api_integrations_slack_agent_installations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/integrations/slack-agent/installations/{installation_id}":{"delete":{"tags":["Slack Agent"],"summary":"Revoke Installation","operationId":"revoke_installation_api_integrations_slack_agent_installations__installation_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"installation_id","in":"path","required":true,"schema":{"type":"string","title":"Installation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/slack-agent/link/complete":{"post":{"tags":["Slack Agent"],"summary":"Complete Link","operationId":"complete_link_api_integrations_slack_agent_link_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkCompleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/integrations/slack-agent/oauth/callback":{"get":{"tags":["Slack Agent"],"summary":"Oauth Callback","operationId":"oauth_callback_api_integrations_slack_agent_oauth_callback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/slack-agent/commands":{"post":{"tags":["Slack Agent"],"summary":"Receive Command","operationId":"receive_command_api_integrations_slack_agent_commands_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/integrations/slack-agent/events":{"post":{"tags":["Slack Agent"],"summary":"Receive Events","operationId":"receive_events_api_integrations_slack_agent_events_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/winback/cron":{"post":{"tags":["winback"],"summary":"Winback Cron","description":"Trigger winback sequence processing. Protected by a shared secret.","operationId":"winback_cron_api_winback_cron_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"secret","in":"query","required":true,"schema":{"type":"string","title":"Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/winback/unsubscribe":{"get":{"tags":["winback"],"summary":"Winback Unsubscribe","description":"One-click unsubscribe from winback emails.","operationId":"winback_unsubscribe_api_winback_unsubscribe_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"uid","in":"query","required":true,"schema":{"type":"string","title":"Uid"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/winback/status":{"get":{"tags":["winback"],"summary":"Winback Status","description":"Check current user's winback sequence status.","operationId":"winback_status_api_winback_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/referral/code":{"get":{"summary":"Get Referral Code","description":"Get or create the authenticated user's referral code and stats.","operationId":"get_referral_code_api_referral_code_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralCodeResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/referral/apply":{"post":{"summary":"Apply Referral Code","description":"Apply a referral/invite code to the current user.","operationId":"apply_referral_code_api_referral_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyReferralRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyReferralResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/referral/invite":{"post":{"summary":"Send Referral Invite","description":"Send a referral invite email to a friend.","operationId":"send_referral_invite_api_referral_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendReferralInviteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendReferralInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/referral/stats":{"get":{"summary":"Get Referral Stats","description":"Get referral stats and dashboard data for the account page.","operationId":"get_referral_stats_api_referral_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralCodeResponse"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/org-assets/":{"get":{"summary":"List Org Assets","description":"List all top-level org assets for the authenticated user/org.","operationId":"list_org_assets_api_org_assets__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListOrgAssetsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/{asset_id}":{"get":{"summary":"Get Org Asset","description":"Get a single org asset with its sub-assets.","operationId":"get_org_asset_api_org_assets__asset_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Org Asset","description":"AI re-generation of an org asset image. Supports preview mode and commit-URL flow.","operationId":"update_org_asset_api_org_assets__asset_id__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_org_asset_api_org_assets__asset_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Patch Org Asset","description":"Update name and/or prompt of an org asset without changing the image.","operationId":"patch_org_asset_api_org_assets__asset_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgAssetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Org Asset","description":"Delete an org asset (and its sub-assets via CASCADE).","operationId":"delete_org_asset_api_org_assets__asset_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/generate":{"post":{"summary":"Generate Org Asset","description":"Generate an org-level asset using AI image generation.","operationId":"generate_org_asset_api_org_assets_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_org_asset_api_org_assets_generate_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/org-assets/upload":{"post":{"summary":"Upload Org Asset","description":"Upload an image, video, or audio file as an org-level asset.","operationId":"upload_org_asset_api_org_assets_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_org_asset_api_org_assets_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/org-assets/from-video/{video_id}":{"post":{"summary":"Org Asset From Video","description":"Wrap an existing Video into a library (project_id=NULL) org-asset.\n\nThe video is flipped to role='library' and detached from its project so it\nlives only as the library asset's underlying media.","operationId":"org_asset_from_video_api_org_assets_from_video__video_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_org_asset_from_video_api_org_assets_from_video__video_id__post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/from-audio-clip/{audio_clip_id}":{"post":{"summary":"Org Asset From Audio Clip","description":"Wrap an existing AudioClip into a library (project_id=NULL) org-asset.","operationId":"org_asset_from_audio_clip_api_org_assets_from_audio_clip__audio_clip_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"audio_clip_id","in":"path","required":true,"schema":{"type":"string","title":"Audio Clip Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_org_asset_from_audio_clip_api_org_assets_from_audio_clip__audio_clip_id__post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/{asset_id}/restore-version":{"post":{"summary":"Restore Org Asset Version","description":"Restore an org/global asset to an earlier persisted image version.","operationId":"restore_org_asset_version_api_org_assets__asset_id__restore_version_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/{asset_id}/camera-angle":{"post":{"summary":"Change Org Asset Camera Angle","description":"Generate or commit a camera-angle edit for an org/global asset.","operationId":"change_org_asset_camera_angle_api_org_assets__asset_id__camera_angle_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_change_org_asset_camera_angle_api_org_assets__asset_id__camera_angle_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateOrgAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/{asset_id}/generate-angles":{"post":{"summary":"Generate Org Asset Angles","description":"Generate multi-angle views for an org/global asset.\n\nMirrors the project-scoped /projects/{project_id}/assets/{asset_id}/generate-angles\nendpoint so global assets can also produce secondary reference images.","operationId":"generate_org_asset_angles_api_org_assets__asset_id__generate_angles_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org-assets/{asset_id}/magic-select":{"post":{"summary":"Magic Select Org Asset","description":"Perform SAM-3 magic select segmentation on a global/org asset.","operationId":"magic_select_org_asset_api_org_assets__asset_id__magic_select_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_magic_select_org_asset_api_org_assets__asset_id__magic_select_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/assets/import-from-org":{"post":{"summary":"Import Org Asset To Project","description":"Copy an org asset into a project's asset library.","operationId":"import_org_asset_to_project_api_projects__project_id__assets_import_from_org_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportOrgAssetToProjectRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hook-changer/generate-hooks":{"post":{"tags":["Hook Changer"],"summary":"Generate Hook Scripts","operationId":"generate_hook_scripts_api_hook_changer_generate_hooks_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_hook_scripts_api_hook_changer_generate_hooks_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HookChangerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/video-template-variants/generate":{"post":{"tags":["Video Template Variants"],"summary":"Generate Template Variants","operationId":"generate_template_variants_api_video_template_variants_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_template_variants_api_video_template_variants_generate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateVariantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/ideation/run":{"post":{"summary":"Start Ideation","description":"Start an ideation agent run.","operationId":"start_ideation_api_ideation_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeationRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeationRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/ideation/run/{run_id}":{"get":{"summary":"Get Ideation Run","description":"Get status of an ideation run.","operationId":"get_ideation_run_api_ideation_run__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeationRunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ideation/events/{run_id}":{"get":{"summary":"Get Ideation Events","description":"Get all events for an ideation run (for hydration on refresh).","operationId":"get_ideation_events_api_ideation_events__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IdeationEventResponse"},"title":"Response Get Ideation Events Api Ideation Events  Run Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ideation/results/{run_id}":{"get":{"summary":"Get Ideation Results","description":"Get the saved creative ideas for a completed ideation run.","operationId":"get_ideation_results_api_ideation_results__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ideation/abort/{run_id}":{"post":{"summary":"Abort Ideation Run","description":"Abort a running ideation agent task.","operationId":"abort_ideation_run_api_ideation_abort__run_id__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbortResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/automations/{automation_id}":{"patch":{"summary":"Update Automation","description":"Update automation config (generation settings, name, etc.).","operationId":"update_automation_api_automations__automation_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAutomationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Get Automation","description":"Get a single automation with its runs and linked projects.","operationId":"get_automation_api_automations__automation_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Automation","description":"Delete an automation and its runs.","operationId":"delete_automation_api_automations__automation_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/automations":{"get":{"summary":"List Automations","description":"List all automations for the current organization.","operationId":"list_automations_api_automations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AutomationListItem"},"type":"array","title":"Response List Automations Api Automations Get"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"post":{"summary":"Create Automation","description":"Create a new automation (without running it).","operationId":"create_automation_api_automations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAutomationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/automations/{automation_id}/attach-project":{"post":{"summary":"Attach Project To Automation Run","description":"Create an automation_run for an already-started project and link them.","operationId":"attach_project_to_automation_run_api_automations__automation_id__attach_project_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachAutomationProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachAutomationProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/automations/{automation_id}/runs":{"get":{"summary":"List Automation Runs","description":"List all runs for an automation, with linked projects.","operationId":"list_automation_runs_api_automations__automation_id__runs_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AutomationRunItem"},"title":"Response List Automation Runs Api Automations  Automation Id  Runs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/automations/{automation_id}/run":{"post":{"summary":"Run Automation","description":"Run the full automation pipeline: ideate → create projects → compose.","operationId":"run_automation_api_automations__automation_id__run_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/automation-runs/{automation_run_id}":{"get":{"summary":"Get Automation Run","description":"Get a single automation run with its linked projects.","operationId":"get_automation_run_api_automation_runs__automation_run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"automation_run_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutomationRunItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/attribution":{"post":{"summary":"Save Attribution","description":"Upsert ad attribution data (fbclid, fbc, fbp, UTM params) for the current user.\nCalled by the frontend after login to persist tracking cookies for CAPI.","operationId":"save_attribution_api_attribution_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/attribution/event":{"post":{"summary":"Send Capi Event","description":"Forward a non-economic event to the Meta Conversions API.\nOnly allows ViewContent, InitiateCheckout, and CompleteRegistration.\nPurchase/Subscribe events must come from verified Stripe webhooks.","operationId":"send_capi_event_api_attribution_event_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/admin/meta/sync-audiences":{"post":{"summary":"Sync Meta Audiences","description":"Sync high-LTV users to Meta Custom Audiences for Lookalike targeting.\nProtected by shared secret (same pattern as winback cron).","operationId":"sync_meta_audiences_api_admin_meta_sync_audiences_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/brain/analyze":{"post":{"summary":"Analyze Video Brain","description":"Analyze a video and predict brain activation patterns using TRIBE v2.","operationId":"analyze_video_brain_api_brain_analyze_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_analyze_video_brain_api_brain_analyze_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/brain/analyze-text":{"post":{"summary":"Analyze Text Brain","description":"Analyze text input via TTS -> TRIBE v2 brain prediction pipeline.","operationId":"analyze_text_brain_api_brain_analyze_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/brain/mesh":{"get":{"summary":"Get Brain Mesh","description":"Get the brain mesh geometry (for pre-loading).","operationId":"get_brain_mesh_api_brain_mesh_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/characters/":{"get":{"summary":"List Characters","operationId":"list_characters_api_characters__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":50,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCharactersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Character","operationId":"create_character_api_characters__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCharacterRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleCharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/characters/library":{"get":{"summary":"List Library Characters","operationId":"list_library_characters_api_characters_library_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":50,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCharactersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/characters/{character_id}":{"get":{"summary":"Get Character","operationId":"get_character_api_characters__character_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleCharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Character","operationId":"update_character_api_characters__character_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCharacterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleCharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Character","operationId":"delete_character_api_characters__character_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reels/trending":{"get":{"summary":"Reels Trending","description":"Discover trending short videos across platforms, optionally by ``keyword``.\n\n``platform`` is one of ``all`` (default), ``instagram``, ``tiktok`` or\n``youtube``. ``date_posted`` (recency) and ``cursor`` (pagination) only apply\nto keyword searches; ``cursor`` is a platform-native opaque token and is not\nsupported for ``platform=all``. ``region`` is a 2-letter country code honoured\nby TikTok/YouTube only.","operationId":"reels_trending_api_reels_trending_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"query","required":false,"schema":{"type":"string","default":"instagram","title":"Platform"}},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"date_posted","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reels/analyze":{"post":{"summary":"Analyze Reel","description":"Stream a Gemini 'why it works' breakdown of a reel as plain-text chunks.","operationId":"analyze_reel_api_reels_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReelAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/reels/media":{"get":{"summary":"Reels Media Proxy","description":"Same-origin proxy for reel thumbnails/posters.\n\nThird-party social-CDN images are valid but can be blocked client-side\n(tracking protection, ad blockers, CSP, referer rules). Fetching them\nserver-side and serving from our own origin makes them load reliably. Public\n(an ``<img>`` can't send an auth header) but locked to an allowlist of hosts.","operationId":"reels_media_proxy_api_reels_media_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/workspace":{"get":{"summary":"Get Workspace Index","description":"List every file in the project workspace (paths, versions, shas).","operationId":"get_workspace_index_api_projects__project_id__workspace_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Workspace Index Api Projects  Project Id  Workspace Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/workspace/files/{file_path}":{"get":{"summary":"Get Workspace File","description":"Fetch one workspace file. Default returns a JSON envelope (for the editor);\n``?raw=1`` returns the file body with its native content-type (for the player\niframe / asset serving).","operationId":"get_workspace_file_api_projects__project_id__workspace_files__file_path__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"file_path","in":"path","required":true,"schema":{"type":"string","title":"File Path"}},{"name":"raw","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Raw"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Save Workspace File","description":"Save a workspace file (full ``content`` or an ``ops`` batch) with optimistic\nconcurrency. 409 on a stale ``baseVersion`` or while an agent run holds the lock.","operationId":"save_workspace_file_api_projects__project_id__workspace_files__file_path__put","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"file_path","in":"path","required":true,"schema":{"type":"string","title":"File Path"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveFileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Workspace File Api Projects  Project Id  Workspace Files  File Path  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/workspace/init":{"post":{"summary":"Init Workspace","description":"Scaffold a blank composition workspace (index.html) for a new project.","operationId":"init_workspace_api_projects__project_id__workspace_init_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitWorkspaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Init Workspace Api Projects  Project Id  Workspace Init Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/manifest":{"get":{"summary":"Get Manifest","description":"Cached clip manifest for the root composition (``?refresh=1`` recomputes).","operationId":"get_manifest_api_projects__project_id__manifest_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Manifest Api Projects  Project Id  Manifest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/lint":{"post":{"summary":"Lint Composition","description":"Lint the root composition (or a supplied HTML string). Non-blocking findings.","operationId":"lint_composition_api_projects__project_id__lint_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LintRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lint Composition Api Projects  Project Id  Lint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/media":{"get":{"summary":"List Project Media","operationId":"list_project_media_api_projects__project_id__media_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Upload Project Media","operationId":"upload_project_media_api_projects__project_id__media_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_project_media_api_projects__project_id__media_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/media/generate-audio":{"post":{"summary":"Generate Project Audio","description":"Generate Seed Audio and persist it in the HyperFrames project library.","operationId":"generate_project_audio_api_projects__project_id__media_generate_audio_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateProjectAudioRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/projects/{project_id}/media/{media_id}":{"delete":{"summary":"Delete Project Media","operationId":"delete_project_media_api_projects__project_id__media__media_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hf-sandbox/export":{"post":{"summary":"Start Sandbox Export","description":"Accept a sandbox composition + media, start a render job, return its id.","operationId":"start_sandbox_export_api_hf_sandbox_export_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_start_sandbox_export_api_hf_sandbox_export_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/hf-sandbox/exports/{export_id}":{"get":{"summary":"Get Sandbox Export Status","description":"Poll a sandbox render job (same response shape as project exports).","operationId":"get_sandbox_export_status_api_hf_sandbox_exports__export_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"export_id","in":"path","required":true,"schema":{"type":"string","title":"Export Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/social-accounts":{"get":{"tags":["social-accounts"],"summary":"List Social Accounts","description":"List the current user's connected social accounts (local DB only).","operationId":"list_social_accounts_api_social_accounts_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/social-accounts/sync":{"post":{"tags":["social-accounts"],"summary":"Sync Social Accounts","description":"Reconcile our social_accounts table with Post for Me and return it.\n\nCalled by the client after an OAuth connect flow and on manual refresh.","operationId":"sync_social_accounts_api_social_accounts_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/social-accounts/connect":{"post":{"tags":["social-accounts"],"summary":"Create Connect Url","description":"Create an OAuth URL for the user to link a new social account.\n\nCan be called any number of times per platform — each completed OAuth\nflow adds another account for this user.","operationId":"create_connect_url_api_social_accounts_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConnectUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/social-accounts/{account_id}/feed":{"get":{"tags":["social-accounts"],"summary":"Get Social Account Feed","description":"Read the account's published posts from the platform (live proxy).\n\nRequires the account to have been connected with the \"feeds\" permission;\naccounts linked before that permission was requested need a reconnect.","operationId":"get_social_account_feed_api_social_accounts__account_id__feed_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/social-accounts/{account_id}":{"delete":{"tags":["social-accounts"],"summary":"Remove Social Account","description":"Disconnect at the provider and remove the account from our DB.","operationId":"remove_social_account_api_social_accounts__account_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/social-posts":{"post":{"tags":["social-posts"],"summary":"Publish Post","description":"Publish (or schedule / draft) a post to one or more connected accounts.","operationId":"publish_post_api_social_posts_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishPostRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["social-posts"],"summary":"List Posts","description":"List the current user's posts (local DB only).","operationId":"list_posts_api_social_posts_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/social-posts/{post_id}":{"get":{"tags":["social-posts"],"summary":"Get Post","description":"Get one post; ``?refresh=true`` pulls fresh status/results from the provider.\n\nNon-terminal posts are refreshed automatically so pollers see progress\nwithout opting in.","operationId":"get_post_api_social_posts__post_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["social-posts"],"summary":"Delete Post","description":"Delete/cancel a post at the provider and mark it deleted in our DB.\n\nContent already live on the platform is not taken down — this cancels\nscheduled/draft posts and removes the provider record.","operationId":"delete_post_api_social_posts__post_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations":{"get":{"tags":["ad-integrations"],"summary":"List Integrations","operationId":"list_integrations_api_ad_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/ad-integrations/connect/{platform}":{"post":{"tags":["ad-integrations"],"summary":"Begin Connect","operationId":"begin_connect_api_ad_integrations_connect__platform__post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/connect-attempts/{attempt_id}":{"get":{"tags":["ad-integrations"],"summary":"Get Connect Attempt","operationId":"get_connect_attempt_api_ad_integrations_connect_attempts__attempt_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"attempt_id","in":"path","required":true,"schema":{"type":"string","title":"Attempt Id"}},{"name":"stateToken","in":"query","required":true,"schema":{"type":"string","title":"Statetoken"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}/sync":{"post":{"tags":["ad-integrations"],"summary":"Sync Connection","operationId":"sync_connection_api_ad_integrations__connection_id__sync_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}/accounts":{"get":{"tags":["ad-integrations"],"summary":"List Accounts","operationId":"list_accounts_api_ad_integrations__connection_id__accounts_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}/resources":{"get":{"tags":["ad-integrations"],"summary":"List Resources","operationId":"list_resources_api_ad_integrations__connection_id__resources_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"adAccountId","in":"query","required":true,"schema":{"type":"string","title":"Adaccountid"}},{"name":"level","in":"query","required":false,"schema":{"enum":["campaign","ad_set","ad_group","ad"],"type":"string","default":"campaign","title":"Level"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}/targeting-search":{"get":{"tags":["ad-integrations"],"summary":"Search Targeting","operationId":"search_targeting_api_ad_integrations__connection_id__targeting_search_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"adAccountId","in":"query","required":true,"schema":{"type":"string","title":"Adaccountid"}},{"name":"dimension","in":"query","required":true,"schema":{"enum":["geo","location","interest","behavior","income"],"type":"string","title":"Dimension"}},{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"title":"Query"}},{"name":"geoType","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geotype"}},{"name":"countryCode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Countrycode"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}/tiktok-brand-identity":{"patch":{"tags":["ad-integrations"],"summary":"Configure Brand Identity","operationId":"configure_brand_identity_api_ad_integrations__connection_id__tiktok_brand_identity_patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandIdentityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/{connection_id}":{"delete":{"tags":["ad-integrations"],"summary":"Disconnect","operationId":"disconnect_api_ad_integrations__connection_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ad-integrations/policy/me":{"get":{"tags":["ad-integrations"],"summary":"Get Ad Policy","operationId":"get_ad_policy_api_ad_integrations_policy_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"put":{"tags":["ad-integrations"],"summary":"Update Ad Policy","operationId":"update_ad_policy_api_ad_integrations_policy_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdPolicyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/workflows":{"get":{"tags":["workflows"],"summary":"List Workflows Route","operationId":"list_workflows_route_api_workflows_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]},"post":{"tags":["workflows"],"summary":"Create Workflow Route","operationId":"create_workflow_route_api_workflows_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkflowRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/workflows/{workflow_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow Route","operationId":"get_workflow_route_api_workflows__workflow_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/draft":{"patch":{"tags":["workflows"],"summary":"Update Workflow Draft Route","operationId":"update_workflow_draft_route_api_workflows__workflow_id__draft_patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkflowDraftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/validate":{"post":{"tags":["workflows"],"summary":"Validate Workflow Route","operationId":"validate_workflow_route_api_workflows__workflow_id__validate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ValidateWorkflowRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/publish":{"post":{"tags":["workflows"],"summary":"Publish Workflow Route","operationId":"publish_workflow_route_api_workflows__workflow_id__publish_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/runs":{"post":{"tags":["workflows"],"summary":"Start Workflow Run Route","operationId":"start_workflow_run_route_api_workflows__workflow_id__runs_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workflows"],"summary":"List Workflow Runs Route","operationId":"list_workflow_runs_route_api_workflows__workflow_id__runs_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/nodes/{node_id}/test-runs":{"post":{"tags":["workflows"],"summary":"Start Workflow Node Test Route","description":"Execute one draft node through the normal durable worker runtime.","operationId":"start_workflow_node_test_route_api_workflows__workflow_id__nodes__node_id__test_runs_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartWorkflowNodeTestRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/node-test-runs":{"get":{"tags":["workflows"],"summary":"List Workflow Node Test Runs Route","description":"Return the latest isolated editor run per node.\n\nNode tests intentionally live outside normal workflow run history, but the\nadvanced editor needs this feed to restore status and reusable outputs.","operationId":"list_workflow_node_test_runs_route_api_workflows__workflow_id__node_test_runs_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-runs/{run_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow Run Route","operationId":"get_workflow_run_route_api_workflow_runs__run_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-runs/{run_id}/events":{"get":{"tags":["workflows"],"summary":"Get Workflow Run Events Route","operationId":"get_workflow_run_events_route_api_workflow_runs__run_id__events_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-runs/{run_id}/cancel":{"post":{"tags":["workflows"],"summary":"Cancel Workflow Run Route","operationId":"cancel_workflow_run_route_api_workflow_runs__run_id__cancel_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-runs/{run_id}/retry":{"post":{"tags":["workflows"],"summary":"Retry Workflow Run Route","operationId":"retry_workflow_run_route_api_workflow_runs__run_id__retry_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-node-types":{"get":{"tags":["workflows"],"summary":"List Workflow Node Types Route","operationId":"list_workflow_node_types_route_api_workflow_node_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/agent-definitions":{"get":{"tags":["workflows"],"summary":"List Agent Definitions Route","operationId":"list_agent_definitions_route_api_agent_definitions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/integration-connections":{"get":{"tags":["workflows"],"summary":"List Integration Connections Route","operationId":"list_integration_connections_route_api_integration_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/workflows/{workflow_id}/assistant":{"get":{"tags":["workflows"],"summary":"Get Workflow Assistant Route","operationId":"get_workflow_assistant_route_api_workflows__workflow_id__assistant_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"thread_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/assistant/sessions":{"post":{"tags":["workflows"],"summary":"Create Workflow Assistant Session Route","operationId":"create_workflow_assistant_session_route_api_workflows__workflow_id__assistant_sessions_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/assistant/sessions/{thread_id}":{"patch":{"tags":["workflows"],"summary":"Update Workflow Assistant Session Route","operationId":"update_workflow_assistant_session_route_api_workflows__workflow_id__assistant_sessions__thread_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkflowAssistantSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/assistant/messages":{"post":{"tags":["workflows"],"summary":"Create Workflow Assistant Message Route","operationId":"create_workflow_assistant_message_route_api_workflows__workflow_id__assistant_messages_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAssistantMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-assistant-proposals/{proposal_id}/apply":{"post":{"tags":["workflows"],"summary":"Apply Workflow Assistant Proposal Route","operationId":"apply_workflow_assistant_proposal_route_api_workflow_assistant_proposals__proposal_id__apply_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyWorkflowAssistantProposalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}/triggers":{"post":{"tags":["workflows"],"summary":"Create Workflow Trigger Route","operationId":"create_workflow_trigger_route_api_workflows__workflow_id__triggers_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkflowTriggerRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workflows"],"summary":"List Workflow Triggers Route","operationId":"list_workflow_triggers_route_api_workflows__workflow_id__triggers_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-triggers/{trigger_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow Trigger Route","operationId":"get_workflow_trigger_route_api_workflow_triggers__trigger_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workflows"],"summary":"Update Workflow Trigger Route","operationId":"update_workflow_trigger_route_api_workflow_triggers__trigger_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkflowTriggerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Workflow Trigger Route","operationId":"delete_workflow_trigger_route_api_workflow_triggers__trigger_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-triggers/{trigger_id}/validate":{"post":{"tags":["workflows"],"summary":"Validate Workflow Trigger Route","operationId":"validate_workflow_trigger_route_api_workflow_triggers__trigger_id__validate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-triggers/{trigger_id}/pause":{"post":{"tags":["workflows"],"summary":"Pause Workflow Trigger Route","operationId":"pause_workflow_trigger_route_api_workflow_triggers__trigger_id__pause_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-triggers/{trigger_id}/resume":{"post":{"tags":["workflows"],"summary":"Resume Workflow Trigger Route","operationId":"resume_workflow_trigger_route_api_workflow_triggers__trigger_id__resume_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-approvals":{"get":{"tags":["workflows"],"summary":"List Workflow Approvals Route","operationId":"list_workflow_approvals_route_api_workflow_approvals_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-approvals/{approval_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow Approval Route","operationId":"get_workflow_approval_route_api_workflow_approvals__approval_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-approvals/{approval_id}/approve":{"post":{"tags":["workflows"],"summary":"Approve Workflow Route","operationId":"approve_workflow_route_api_workflow_approvals__approval_id__approve_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflow-approvals/{approval_id}/reject":{"post":{"tags":["workflows"],"summary":"Reject Workflow Route","operationId":"reject_workflow_route_api_workflow_approvals__approval_id__reject_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces":{"get":{"tags":["spaces"],"summary":"List Spaces","operationId":"list_spaces_api_spaces_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["spaces"],"summary":"Create Space","operationId":"create_space_api_spaces_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}":{"get":{"tags":["spaces"],"summary":"Get Space","operationId":"get_space_api_spaces__space_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["spaces"],"summary":"Update Space","operationId":"update_space_api_spaces__space_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["spaces"],"summary":"Delete Space","operationId":"delete_space_api_spaces__space_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes":{"get":{"tags":["spaces"],"summary":"Get Space Children","description":"Return one direct-child page; descendants are never embedded.","operationId":"get_space_children_api_spaces__space_id__nodes_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["spaces"],"summary":"Create Space Node","operationId":"create_space_node_api_spaces__space_id__nodes_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceNodeCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["spaces"],"summary":"Delete Space Nodes","operationId":"delete_space_nodes_api_spaces__space_id__nodes_delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceBulkNodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes/{node_id}":{"get":{"tags":["spaces"],"summary":"Get Space Node","operationId":"get_space_node_api_spaces__space_id__nodes__node_id__get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes/{node_id}/ancestors":{"get":{"tags":["spaces"],"summary":"Get Space Node Ancestors","operationId":"get_space_node_ancestors_api_spaces__space_id__nodes__node_id__ancestors_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/search":{"get":{"tags":["spaces"],"summary":"Search Space","operationId":"search_space_api_spaces__space_id__search_get","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"within_node_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Within Node Id"}},{"name":"scope","in":"query","required":false,"schema":{"enum":["folder","space"],"type":"string","default":"folder","title":"Scope"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/items":{"post":{"tags":["spaces"],"summary":"Add Space Items","operationId":"add_space_items_api_spaces__space_id__items_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/folders":{"post":{"tags":["spaces"],"summary":"Create Space Folder","operationId":"create_space_folder_api_spaces__space_id__folders_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceFolderCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/text-files":{"post":{"tags":["spaces"],"summary":"Create Space Text File","operationId":"create_space_text_file_api_spaces__space_id__text_files_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceTextCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/skills":{"post":{"tags":["spaces"],"summary":"Create Space Skill","operationId":"create_space_skill_api_spaces__space_id__skills_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceSkillCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes/move":{"post":{"tags":["spaces"],"summary":"Move Space Nodes","operationId":"move_space_nodes_api_spaces__space_id__nodes_move_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceMoveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes/duplicate":{"post":{"tags":["spaces"],"summary":"Duplicate Space Nodes","operationId":"duplicate_space_nodes_api_spaces__space_id__nodes_duplicate_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceBulkNodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/nodes/delete-preview":{"post":{"tags":["spaces"],"summary":"Preview Space Node Deletion","operationId":"preview_space_node_deletion_api_spaces__space_id__nodes_delete_preview_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceBulkNodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/upload":{"post":{"tags":["spaces"],"summary":"Upload Space Item","operationId":"upload_space_item_api_spaces__space_id__upload_post","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_space_item_api_spaces__space_id__upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/spaces/{space_id}/items/{item_id}":{"delete":{"tags":["spaces"],"summary":"Remove Space Item","operationId":"remove_space_item_api_spaces__space_id__items__item_id__delete","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["spaces"],"summary":"Update Space Item","description":"Update an item's source description so the change follows it across Spaces.","operationId":"update_space_item_api_spaces__space_id__items__item_id__patch","security":[{"HTTPBearer":[]},{"HTTPBearer":[]}],"parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string","title":"Space Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpaceItemUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gemini-video-chat":{"post":{"tags":["gemini-video-chat"],"summary":"Chat With Gemini Video","description":"Chat with Gemini while retaining up to ten uploaded video references.","operationId":"chat_with_gemini_video_api_gemini_video_chat_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_chat_with_gemini_video_api_gemini_video_chat_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiVideoChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/health/live":{"get":{"summary":"Health Check","description":"Process liveness endpoint.","operationId":"health_check_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Process liveness endpoint.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"summary":"Readiness Check","description":"Check the dependencies required before an API traffic cutover.","operationId":"readiness_check_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sentry-debug":{"get":{"summary":"Trigger Sentry Error","description":"Trigger an error to verify Sentry is reporting.","operationId":"trigger_sentry_error_sentry_debug_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AbortResponse":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"AbortResponse"},"AcceptOrgInvitePublicRequest":{"properties":{"inviteToken":{"type":"string","maxLength":128,"minLength":1,"title":"Invitetoken"},"displayName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Displayname"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["inviteToken","password"],"title":"AcceptOrgInvitePublicRequest","description":"Request schema for accepting an organization invite without auth"},"AcceptOrgInviteRequest":{"properties":{"inviteToken":{"type":"string","maxLength":128,"minLength":1,"title":"Invitetoken"},"displayName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Displayname"},"confirmOrganizationSwitch":{"type":"boolean","title":"Confirmorganizationswitch","default":false},"transferPersonalOrganization":{"type":"boolean","title":"Transferpersonalorganization","default":false}},"type":"object","required":["inviteToken"],"title":"AcceptOrgInviteRequest","description":"Request schema for accepting an organization invite"},"AcceptOrgInviteResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"organization":{"$ref":"#/components/schemas/OrgInfo"}},"type":"object","required":["organization"],"title":"AcceptOrgInviteResponse","description":"Response schema for accepting an organization invite"},"AdPolicyRequest":{"properties":{"allow_unattended_activation":{"type":"boolean","title":"Allow Unattended Activation","default":false},"currency_limits":{"additionalProperties":{"anyOf":[{"type":"integer"},{"additionalProperties":{"type":"integer"},"type":"object"}]},"type":"object","title":"Currency Limits"}},"type":"object","title":"AdPolicyRequest"},"AgentEligibilityResponse":{"properties":{"allowed":{"type":"boolean","title":"Allowed"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"billing_mode":{"type":"string","title":"Billing Mode"},"is_first_project":{"type":"boolean","title":"Is First Project"},"auto_reload_enabled":{"type":"boolean","title":"Auto Reload Enabled"},"billed_to_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billed To User Id"}},"type":"object","required":["allowed","billing_mode","is_first_project","auto_reload_enabled"],"title":"AgentEligibilityResponse"},"AgentEventResponse":{"properties":{"id":{"type":"string","title":"Id"},"run_id":{"type":"string","title":"Run Id"},"project_id":{"type":"string","title":"Project Id"},"seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seq"},"event_type":{"type":"string","title":"Event Type"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"result_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Type"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"result_data":{"anyOf":[{},{"type":"null"}],"title":"Result Data"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","run_id","project_id","event_type"],"title":"AgentEventResponse"},"AgentRunResponse":{"properties":{"id":{"type":"string","title":"Id"},"project_id":{"type":"string","title":"Project Id"},"status":{"type":"string","title":"Status"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"model_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Tier"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"attachment_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Attachment Count"},"attachment_previews":{"items":{"$ref":"#/components/schemas/AttachmentPreview"},"type":"array","title":"Attachment Previews"},"attachment_manifest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attachment Manifest"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"total_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Usd"},"turn_count":{"type":"integer","title":"Turn Count","default":0}},"type":"object","required":["id","project_id","status"],"title":"AgentRunResponse"},"AgentSessionResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"runs":{"items":{"$ref":"#/components/schemas/AgentRunResponse"},"type":"array","title":"Runs","default":[]},"events":{"items":{"$ref":"#/components/schemas/AgentEventResponse"},"type":"array","title":"Events","default":[]},"progress_steps":{"items":{"$ref":"#/components/schemas/PublicProgressStepResponse"},"type":"array","title":"Progress Steps","default":[]}},"type":"object","required":["session_id"],"title":"AgentSessionResponse"},"ApplyReferralRequest":{"properties":{"code":{"type":"string","maxLength":20,"minLength":1,"title":"Code"}},"type":"object","required":["code"],"title":"ApplyReferralRequest","description":"Request schema for applying a referral/invite code"},"ApplyReferralResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"applied":{"type":"boolean","title":"Applied"},"alreadyReferred":{"type":"boolean","title":"Alreadyreferred","default":false},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["applied"],"title":"ApplyReferralResponse","description":"Response schema for referral code application"},"ApplyWorkflowAssistantProposalRequest":{"properties":{"expected_revision":{"type":"integer","minimum":1.0,"title":"Expected Revision"}},"type":"object","required":["expected_revision"],"title":"ApplyWorkflowAssistantProposalRequest"},"AssetResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"parentAssetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentassetid"},"sceneId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sceneid"},"keyframeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyframeid"},"name":{"type":"string","title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"mediaType":{"type":"string","enum":["image","video","audio"],"title":"Mediatype","default":"image"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageurl"},"imageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageid"},"videoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videourl"},"audioUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audiourl"},"durationMs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Durationms"},"primaryVideoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryvideoid"},"primaryAudioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryaudioclipid"},"primaryImageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryimageid"},"secondaryImageIds":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Secondaryimageids"},"hasMultipleAngles":{"type":"boolean","title":"Hasmultipleangles","default":false},"secondaryAngles":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Secondaryangles"},"versions":{"items":{"$ref":"#/components/schemas/AssetVersionResponse"},"type":"array","title":"Versions"},"activeVersionNumber":{"type":"integer","title":"Activeversionnumber","default":0},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"subAssets":{"items":{"$ref":"#/components/schemas/AssetResponse"},"type":"array","title":"Subassets"}},"type":"object","required":["id","projectId","name","createdAt","updatedAt"],"title":"AssetResponse","description":"Response schema for asset"},"AssetVersionResponse":{"properties":{"id":{"type":"string","title":"Id"},"versionNumber":{"type":"integer","title":"Versionnumber"},"parentVersionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentversionid"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"isActive":{"type":"boolean","title":"Isactive","default":false},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageurl"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"}},"type":"object","required":["id","versionNumber"],"title":"AssetVersionResponse"},"AttachAutomationProjectRequest":{"properties":{"project_id":{"type":"string","title":"Project Id"},"agent_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Run Id"}},"type":"object","required":["project_id"],"title":"AttachAutomationProjectRequest"},"AttachAutomationProjectResponse":{"properties":{"automation_run_id":{"type":"string","title":"Automation Run Id"},"status":{"type":"string","title":"Status"},"attached_agent_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attached Agent Run Id"}},"type":"object","required":["automation_run_id","status"],"title":"AttachAutomationProjectResponse"},"AttachmentPreflightRequest":{"properties":{"references":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":50,"minItems":1,"title":"References"}},"type":"object","required":["references"],"title":"AttachmentPreflightRequest"},"AttachmentPreview":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"name":{"type":"string","title":"Name"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"reference_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Id"},"reference_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Kind"}},"type":"object","required":["id","kind","name"],"title":"AttachmentPreview"},"AttachmentResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"fileName":{"type":"string","title":"Filename"},"fileSize":{"type":"integer","title":"Filesize"},"fileType":{"type":"string","title":"Filetype"},"storageUrl":{"type":"string","title":"Storageurl"},"storageKey":{"type":"string","title":"Storagekey"},"extractedText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extractedtext"},"uploadedAt":{"type":"string","format":"date-time","title":"Uploadedat"}},"type":"object","required":["id","projectId","fileName","fileSize","fileType","storageUrl","storageKey","uploadedAt"],"title":"AttachmentResponse","description":"Response schema for attachment"},"AudioClipResponse":{"properties":{"id":{"type":"string","title":"Id"},"sceneId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sceneid"},"videoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videoid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"audioUrl":{"type":"string","title":"Audiourl"},"startTimestamp":{"type":"integer","title":"Starttimestamp"},"trimStartMs":{"type":"integer","title":"Trimstartms","description":"Milliseconds trimmed from start of the source audio (in-point offset)","default":0},"volume":{"type":"integer","title":"Volume","description":"Volume level 0-200 (percentage)","default":100},"speed":{"type":"number","title":"Speed","description":"Playback speed multiplier (0.5-2.0)","default":1.0},"sourceDurationMs":{"type":"integer","title":"Sourcedurationms","description":"Original source audio duration in milliseconds (read-only)","default":0},"clipType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cliptype"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceid"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"},"isLoop":{"type":"boolean","title":"Isloop","description":"When true, allows extending duration beyond source by looping","default":false},"fileFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fileformat"},"fileSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Filesize"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","audioUrl","startTimestamp","createdAt","updatedAt"],"title":"AudioClipResponse","description":"Response schema for audio clip"},"AugmentedAsset":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"image_url":{"type":"string","title":"Image Url"}},"type":"object","required":["name","description","image_url"],"title":"AugmentedAsset","description":"Model for an augmented image asset."},"AuthRequest":{"properties":{"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"AuthRequest"},"AutomationDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"num_creatives":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Creatives"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"steps":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Steps"},"step_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Step Config"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id"],"title":"AutomationDetailResponse"},"AutomationListItem":{"properties":{"id":{"type":"string","title":"Id"},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"num_creatives":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Creatives"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"steps":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Steps"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"run_count":{"type":"integer","title":"Run Count","default":0},"latest_run_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Run Status"}},"type":"object","required":["id"],"title":"AutomationListItem"},"AutomationRunAgentRun":{"properties":{"id":{"type":"string","title":"Id"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id"],"title":"AutomationRunAgentRun"},"AutomationRunItem":{"properties":{"id":{"type":"string","title":"Id"},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"results":{"anyOf":[{},{"type":"null"}],"title":"Results"},"projects":{"items":{"$ref":"#/components/schemas/AutomationRunProject"},"type":"array","title":"Projects","default":[]},"agent_runs":{"items":{"$ref":"#/components/schemas/AutomationRunAgentRun"},"type":"array","title":"Agent Runs","default":[]}},"type":"object","required":["id"],"title":"AutomationRunItem"},"AutomationRunProject":{"properties":{"id":{"type":"string","title":"Id"},"project_id":{"type":"string","title":"Project Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"rendered_video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rendered Video Url"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","project_id"],"title":"AutomationRunProject"},"BillingOwnerInfo":{"properties":{"userId":{"type":"string","title":"Userid"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"}},"type":"object","required":["userId"],"title":"BillingOwnerInfo","description":"Organization member responsible for billing administration."},"BillingPortalRequest":{"properties":{"returnUrl":{"type":"string","title":"Returnurl"}},"type":"object","required":["returnUrl"],"title":"BillingPortalRequest","description":"Request schema for billing portal"},"BillingPortalResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"BillingPortalResponse","description":"Response schema for billing portal"},"BillingSetupRequest":{"properties":{"successUrl":{"type":"string","title":"Successurl"},"cancelUrl":{"type":"string","title":"Cancelurl"}},"type":"object","required":["successUrl","cancelUrl"],"title":"BillingSetupRequest","description":"Request schema for billing setup"},"BillingSetupResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"customerId":{"type":"string","title":"Customerid"},"checkoutUrl":{"type":"string","title":"Checkouturl"},"checkoutSessionId":{"type":"string","title":"Checkoutsessionid"}},"type":"object","required":["customerId","checkoutUrl","checkoutSessionId"],"title":"BillingSetupResponse","description":"Response schema for billing setup"},"BillingUsageResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"hasBilling":{"type":"boolean","title":"Hasbilling"},"totalCostCents":{"type":"integer","title":"Totalcostcents"},"totalCostDollars":{"type":"number","title":"Totalcostdollars"},"totalVideoSeconds":{"type":"number","title":"Totalvideoseconds"},"eventCount":{"type":"integer","title":"Eventcount"},"periodStart":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodstart"},"periodEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodend"},"billedToUserId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billedtouserid"},"creditBalanceCents":{"type":"integer","title":"Creditbalancecents","default":0},"creditBalanceDollars":{"type":"number","title":"Creditbalancedollars","default":0.0},"billingMode":{"type":"string","title":"Billingmode","default":"payg"}},"type":"object","required":["hasBilling","totalCostCents","totalCostDollars","totalVideoSeconds","eventCount"],"title":"BillingUsageResponse","description":"Response schema for current billing usage"},"Body_analyze_video_brain_api_brain_analyze_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_analyze_video_brain_api_brain_analyze_post"},"Body_asset_from_audio_clip_api_projects__project_id__assets_from_audio_clip__audio_clip_id__post":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"Body_asset_from_audio_clip_api_projects__project_id__assets_from_audio_clip__audio_clip_id__post"},"Body_asset_from_video_api_projects__project_id__assets_from_video__video_id__post":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"Body_asset_from_video_api_projects__project_id__assets_from_video__video_id__post"},"Body_batch_generate_keyframes_api_projects__project_id__keyframes_batch_generate_post":{"properties":{"scene_ids":{"items":{"type":"string"},"type":"array","title":"Scene Ids"}},"type":"object","required":["scene_ids"],"title":"Body_batch_generate_keyframes_api_projects__project_id__keyframes_batch_generate_post"},"Body_capture_world_angle_api_projects__project_id__keyframes__keyframe_id__world_capture_post":{"properties":{"screenshot":{"type":"string","format":"binary","title":"Screenshot"},"prompt":{"type":"string","title":"Prompt","default":"Enhance this 3D-captured angle into a clean, high-quality image. **Exaclty change the camera angle and composition in the first image to match the 3D world capture.**"},"preview":{"type":"boolean","title":"Preview","default":true}},"type":"object","required":["screenshot"],"title":"Body_capture_world_angle_api_projects__project_id__keyframes__keyframe_id__world_capture_post"},"Body_change_keyframe_camera_angle_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__camera_angle_post":{"properties":{"horizontal_angle":{"type":"number","title":"Horizontal Angle","default":0},"vertical_angle":{"type":"number","title":"Vertical Angle","default":0},"zoom":{"type":"number","title":"Zoom","default":5},"preview":{"type":"boolean","title":"Preview","default":true},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"}},"type":"object","title":"Body_change_keyframe_camera_angle_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__camera_angle_post"},"Body_change_keyframe_camera_angle_project_level_api_projects__project_id__keyframes__keyframe_id__camera_angle_post":{"properties":{"horizontal_angle":{"type":"number","title":"Horizontal Angle","default":0},"vertical_angle":{"type":"number","title":"Vertical Angle","default":0},"zoom":{"type":"number","title":"Zoom","default":5},"preview":{"type":"boolean","title":"Preview","default":true},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"}},"type":"object","title":"Body_change_keyframe_camera_angle_project_level_api_projects__project_id__keyframes__keyframe_id__camera_angle_post"},"Body_change_org_asset_camera_angle_api_org_assets__asset_id__camera_angle_post":{"properties":{"horizontal_angle":{"type":"integer","title":"Horizontal Angle","default":0},"vertical_angle":{"type":"integer","title":"Vertical Angle","default":0},"zoom":{"type":"integer","title":"Zoom","default":5},"preview":{"type":"boolean","title":"Preview","default":true},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"Body_change_org_asset_camera_angle_api_org_assets__asset_id__camera_angle_post"},"Body_change_project_asset_camera_angle_api_projects__project_id__assets__asset_id__camera_angle_post":{"properties":{"horizontal_angle":{"type":"integer","title":"Horizontal Angle","default":0},"vertical_angle":{"type":"integer","title":"Vertical Angle","default":0},"zoom":{"type":"integer","title":"Zoom","default":5},"preview":{"type":"boolean","title":"Preview","default":true},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"Body_change_project_asset_camera_angle_api_projects__project_id__assets__asset_id__camera_angle_post"},"Body_chat_with_gemini_video_api_gemini_video_chat_post":{"properties":{"message":{"type":"string","title":"Message"},"system_prompt":{"type":"string","title":"System Prompt","default":"You are Gemini 3.7 Flash in a direct chat interface. Answer the user's questions about the attached videos and the ongoing conversation. Analyze both visual and audio content. Be precise, cite timestamps when useful, distinguish observation from inference, and say when something cannot be determined."},"history":{"type":"string","title":"History","default":"[]"},"video_references":{"type":"string","title":"Video References","default":"[]"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["message"],"title":"Body_chat_with_gemini_video_api_gemini_video_chat_post"},"Body_clone_voice_from_audio_api_projects__project_id__voices_clone_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":"Cloned from uploaded audio"}},"type":"object","required":["file","name"],"title":"Body_clone_voice_from_audio_api_projects__project_id__voices_clone_post"},"Body_compose_video_api_agent_compose_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"display_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Prompt"},"model_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Tier","default":"pro"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model","default":"openai/gpt-5.6-sol"},"default_video_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Video Model"},"available_video_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Video Models"},"default_image_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Image Model"},"available_image_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Image Models"},"media_model_preset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Preset Id"},"media_model_selection_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Selection Source"},"attachment_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Urls"},"attachment_references":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment References"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"video_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Id"},"analyze_video_attachments":{"type":"boolean","title":"Analyze Video Attachments","default":false},"multi_agent_enabled":{"type":"boolean","title":"Multi Agent Enabled","default":false},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["project_id","prompt"],"title":"Body_compose_video_api_agent_compose_post"},"Body_copy_project_and_compose_api_agent_projects__project_id__copy_and_compose_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"display_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Prompt"},"model_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Tier","default":"pro"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model","default":"openai/gpt-5.6-sol"},"default_video_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Video Model"},"available_video_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Video Models"},"default_image_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Image Model"},"available_image_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Image Models"},"media_model_preset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Preset Id"},"media_model_selection_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Selection Source"},"attachment_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Urls"},"attachment_references":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment References"},"analyze_video_attachments":{"type":"boolean","title":"Analyze Video Attachments","default":false},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["prompt"],"title":"Body_copy_project_and_compose_api_agent_projects__project_id__copy_and_compose_post"},"Body_create_blank_project_api_projects_blank_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format"}},"type":"object","required":["project_id"],"title":"Body_create_blank_project_api_projects_blank_post"},"Body_create_keyframe_api_projects__project_id__scenes__scene_id__keyframes_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["prompt"],"title":"Body_create_keyframe_api_projects__project_id__scenes__scene_id__keyframes_post"},"Body_create_project_keyframe_api_projects__project_id__keyframes_post":{"properties":{"prompt":{"type":"string","title":"Prompt","default":""},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"Body_create_project_keyframe_api_projects__project_id__keyframes_post"},"Body_create_uploaded_debug_decomposition_session_api_agent_decomposition_debug_sessions_upload_post":{"properties":{"project_id":{"type":"string","maxLength":160,"minLength":1,"title":"Project Id"},"overlay_hints":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Overlay Hints"},"video_file":{"type":"string","format":"binary","title":"Video File"}},"type":"object","required":["project_id","video_file"],"title":"Body_create_uploaded_debug_decomposition_session_api_agent_decomposition_debug_sessions_upload_post"},"Body_delete_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_delete_post":{"properties":{"masked_image_url":{"type":"string","title":"Masked Image Url"}},"type":"object","required":["masked_image_url"],"title":"Body_delete_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_delete_post"},"Body_delete_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_delete_post":{"properties":{"masked_image_url":{"type":"string","title":"Masked Image Url"}},"type":"object","required":["masked_image_url"],"title":"Body_delete_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_delete_post"},"Body_edit_layer_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__layer_edit_post":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"},"prompt":{"type":"string","title":"Prompt"},"edit_type":{"type":"string","title":"Edit Type"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"mask_bounds_x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds X"},"mask_bounds_y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Y"},"mask_bounds_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Width"},"mask_bounds_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Height"},"crop_x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop X"},"crop_y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Y"},"crop_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Width"},"crop_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Height"},"target_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Width"},"target_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Height"},"remove_background":{"type":"boolean","title":"Remove Background","default":false}},"type":"object","required":["prompt","edit_type"],"title":"Body_edit_layer_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__layer_edit_post"},"Body_edit_layer_project_level_api_projects__project_id__keyframes__keyframe_id__layer_edit_post":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"},"prompt":{"type":"string","title":"Prompt"},"edit_type":{"type":"string","title":"Edit Type"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"mask_bounds_x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds X"},"mask_bounds_y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Y"},"mask_bounds_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Width"},"mask_bounds_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mask Bounds Height"},"crop_x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop X"},"crop_y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Y"},"crop_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Width"},"crop_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crop Height"},"target_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Width"},"target_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Height"},"remove_background":{"type":"boolean","title":"Remove Background","default":false}},"type":"object","required":["prompt","edit_type"],"title":"Body_edit_layer_project_level_api_projects__project_id__keyframes__keyframe_id__layer_edit_post"},"Body_edit_motion_graphic_scene_api_projects__project_id__scenes__scene_id__motion_graphic_edit_post":{"properties":{"prompt":{"type":"string","title":"Prompt"}},"type":"object","required":["prompt"],"title":"Body_edit_motion_graphic_scene_api_projects__project_id__scenes__scene_id__motion_graphic_edit_post"},"Body_edit_motion_graphics_video_endpoint_api_videos__video_id__edit_motion_graphics_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"chat_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat History"},"attachments":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Attachments"}},"type":"object","required":["project_id","prompt"],"title":"Body_edit_motion_graphics_video_endpoint_api_videos__video_id__edit_motion_graphics_post"},"Body_edit_plan_endpoint_api_projects_plan_edit_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"current_plan":{"type":"string","title":"Current Plan"},"feedback":{"type":"string","title":"Feedback"},"edit_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edit History"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},"type":"object","required":["session_id","current_plan","feedback"],"title":"Body_edit_plan_endpoint_api_projects_plan_edit_post"},"Body_extract_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_extract_post":{"properties":{"masked_image_url":{"type":"string","title":"Masked Image Url"},"bounds_x":{"type":"integer","title":"Bounds X"},"bounds_y":{"type":"integer","title":"Bounds Y"},"bounds_width":{"type":"integer","title":"Bounds Width"},"bounds_height":{"type":"integer","title":"Bounds Height"}},"type":"object","required":["masked_image_url","bounds_x","bounds_y","bounds_width","bounds_height"],"title":"Body_extract_magic_select_region_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_extract_post"},"Body_extract_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_extract_post":{"properties":{"masked_image_url":{"type":"string","title":"Masked Image Url"},"bounds_x":{"type":"integer","title":"Bounds X"},"bounds_y":{"type":"integer","title":"Bounds Y"},"bounds_width":{"type":"integer","title":"Bounds Width"},"bounds_height":{"type":"integer","title":"Bounds Height"}},"type":"object","required":["masked_image_url","bounds_x","bounds_y","bounds_width","bounds_height"],"title":"Body_extract_magic_select_region_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_extract_post"},"Body_generate_action_frames_api_projects__project_id__keyframes_generate_action_frames_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"reference_keyframe_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Keyframe Ids"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"}},"type":"object","required":["prompt"],"title":"Body_generate_action_frames_api_projects__project_id__keyframes_generate_action_frames_post"},"Body_generate_asset_api_projects__project_id__assets_generate_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio","default":"1:1"},"output_format":{"type":"string","title":"Output Format","default":"png"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed"},"guidance_scale":{"type":"number","title":"Guidance Scale","default":3.5},"num_inference_steps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Inference Steps"},"acceleration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceleration"},"enable_prompt_expansion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Prompt Expansion"},"enable_safety_checker":{"type":"boolean","title":"Enable Safety Checker","default":true},"negative_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Negative Prompt"},"resolution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution"},"limit_generations":{"type":"boolean","title":"Limit Generations","default":false},"enable_web_search":{"type":"boolean","title":"Enable Web Search","default":false},"quality":{"type":"string","title":"Quality","default":"high"},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"}},"type":"object","required":["prompt"],"title":"Body_generate_asset_api_projects__project_id__assets_generate_post"},"Body_generate_hook_scripts_api_hook_changer_generate_hooks_post":{"properties":{"num_hooks":{"type":"integer","title":"Num Hooks","default":3},"video_file":{"type":"string","format":"binary","title":"Video File"}},"type":"object","required":["video_file"],"title":"Body_generate_hook_scripts_api_hook_changer_generate_hooks_post"},"Body_generate_org_asset_api_org_assets_generate_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"parent_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Id"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"}},"type":"object","required":["prompt"],"title":"Body_generate_org_asset_api_org_assets_generate_post"},"Body_generate_project_api_projects_generate_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"project_id":{"type":"string","title":"Project Id"},"plan":{"type":"string","title":"Plan"},"scope_data":{"type":"string","title":"Scope Data"},"prompt":{"type":"string","title":"Prompt"},"augmented_assets":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Augmented Assets"}},"type":"object","required":["session_id","project_id","plan","scope_data","prompt"],"title":"Body_generate_project_api_projects_generate_post"},"Body_generate_scene_api_projects__project_id__scenes_generate_post":{"properties":{"description":{"type":"string","title":"Description"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"}},"type":"object","required":["description"],"title":"Body_generate_scene_api_projects__project_id__scenes_generate_post"},"Body_generate_seed_voice_preview_api_voices_seed_preview_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"audio_files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Audio Files"},"image_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image File"},"audio_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audio Urls"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"type":"object","required":["prompt"],"title":"Body_generate_seed_voice_preview_api_voices_seed_preview_post"},"Body_generate_template_variants_api_video_template_variants_generate_post":{"properties":{"template_id":{"type":"string","title":"Template Id"},"num_variants":{"type":"integer","title":"Num Variants","default":3},"video_file":{"type":"string","format":"binary","title":"Video File"}},"type":"object","required":["template_id","video_file"],"title":"Body_generate_template_variants_api_video_template_variants_generate_post"},"Body_init_project_api_projects_init_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"}},"type":"object","required":["project_id","prompt"],"title":"Body_init_project_api_projects_init_post"},"Body_magic_select_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_post":{"properties":{"box_x1":{"type":"number","title":"Box X1"},"box_y1":{"type":"number","title":"Box Y1"},"box_x2":{"type":"number","title":"Box X2"},"box_y2":{"type":"number","title":"Box Y2"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"}},"type":"object","required":["box_x1","box_y1","box_x2","box_y2"],"title":"Body_magic_select_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__magic_select_post"},"Body_magic_select_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_post":{"properties":{"box_x1":{"type":"number","title":"Box X1"},"box_y1":{"type":"number","title":"Box Y1"},"box_x2":{"type":"number","title":"Box X2"},"box_y2":{"type":"number","title":"Box Y2"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"}},"type":"object","required":["box_x1","box_y1","box_x2","box_y2"],"title":"Body_magic_select_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__magic_select_post"},"Body_magic_select_org_asset_api_org_assets__asset_id__magic_select_post":{"properties":{"box_x1":{"type":"number","title":"Box X1"},"box_y1":{"type":"number","title":"Box Y1"},"box_x2":{"type":"number","title":"Box X2"},"box_y2":{"type":"number","title":"Box Y2"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"}},"type":"object","required":["box_x1","box_y1","box_x2","box_y2"],"title":"Body_magic_select_org_asset_api_org_assets__asset_id__magic_select_post"},"Body_magic_select_project_asset_api_projects__project_id__assets__asset_id__magic_select_post":{"properties":{"box_x1":{"type":"number","title":"Box X1"},"box_y1":{"type":"number","title":"Box Y1"},"box_x2":{"type":"number","title":"Box X2"},"box_y2":{"type":"number","title":"Box Y2"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Image"}},"type":"object","required":["box_x1","box_y1","box_x2","box_y2"],"title":"Body_magic_select_project_asset_api_projects__project_id__assets__asset_id__magic_select_post"},"Body_mobile_gpt_image2_endpoint_api_mobile_images_gpt_image_2_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"ratio":{"type":"string","title":"Ratio","default":"auto"},"image_files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Image Files"}},"type":"object","required":["prompt"],"title":"Body_mobile_gpt_image2_endpoint_api_mobile_images_gpt_image_2_post"},"Body_mobile_seedance2_video_endpoint_api_mobile_seedance_2_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"mode":{"type":"string","title":"Mode","default":"auto"},"ratio":{"type":"string","title":"Ratio","default":"auto"},"duration":{"type":"string","title":"Duration","default":"auto"},"model":{"type":"string","title":"Model","default":"fast"},"resolution":{"type":"string","title":"Resolution","default":"720"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"generateAudio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Generateaudio"},"generate_audio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Generate Audio"},"image_files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Image Files"},"video_files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Video Files"},"audio_files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Audio Files"}},"type":"object","required":["prompt"],"title":"Body_mobile_seedance2_video_endpoint_api_mobile_seedance_2_post"},"Body_motion_graphics_video_endpoint_api_videos_motion_graphics_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"order_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Index"},"voiceover":{"type":"string","title":"Voiceover","default":""},"is_overlay":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Is Overlay"},"overlay_start_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Overlay Start Ms"},"overlay_video_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overlay Video Id"},"attachments":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Attachments"}},"type":"object","required":["project_id","prompt"],"title":"Body_motion_graphics_video_endpoint_api_videos_motion_graphics_post"},"Body_multi_compose_api_agent_multi_compose_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"display_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Prompt"},"aspect_ratio":{"type":"string","title":"Aspect Ratio","default":"auto"},"llm_model":{"type":"string","title":"Llm Model","default":"openai/gpt-5.6-sol"},"default_video_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Video Model"},"available_video_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Video Models"},"default_image_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Image Model"},"available_image_models":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Image Models"},"media_model_preset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Preset Id"},"media_model_selection_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Model Selection Source"},"attachment_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Urls"},"attachment_references":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment References"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["prompt"],"title":"Body_multi_compose_api_agent_multi_compose_post"},"Body_multi_shot_video_endpoint_api_videos_multi_shot_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration","default":"10"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"order_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Index"}},"type":"object","required":["project_id","prompt"],"title":"Body_multi_shot_video_endpoint_api_videos_multi_shot_post"},"Body_org_asset_from_audio_clip_api_org_assets_from_audio_clip__audio_clip_id__post":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"parent_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Id"}},"type":"object","title":"Body_org_asset_from_audio_clip_api_org_assets_from_audio_clip__audio_clip_id__post"},"Body_org_asset_from_video_api_org_assets_from_video__video_id__post":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"parent_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Id"}},"type":"object","title":"Body_org_asset_from_video_api_org_assets_from_video__video_id__post"},"Body_regenerate_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__regenerate_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["prompt"],"title":"Body_regenerate_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__regenerate_post"},"Body_regenerate_motion_graphics_video_endpoint_api_videos_motion_graphics__video_id__regenerate_post":{"properties":{"project_id":{"type":"string","title":"Project Id"},"prompt":{"type":"string","title":"Prompt"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"voiceover":{"type":"string","title":"Voiceover","default":""},"attachments":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Attachments"}},"type":"object","required":["project_id","prompt"],"title":"Body_regenerate_motion_graphics_video_endpoint_api_videos_motion_graphics__video_id__regenerate_post"},"Body_start_plan_api_projects_plan_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"session_id":{"type":"string","title":"Session Id"},"style":{"type":"string","title":"Style"},"motion_graphics_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Motion Graphics Style"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"aspect_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"},"length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Length"},"voiceover":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceover"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["prompt","session_id","style"],"title":"Body_start_plan_api_projects_plan_post"},"Body_start_sandbox_export_api_hf_sandbox_export_post":{"properties":{"composition":{"type":"string","title":"Composition"},"manifest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manifest"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["composition"],"title":"Body_start_sandbox_export_api_hf_sandbox_export_post"},"Body_start_scope_api_projects_scope_post":{"properties":{"prompt":{"type":"string","title":"Prompt"},"session_id":{"type":"string","title":"Session Id"},"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","default":[]}},"type":"object","required":["prompt","session_id"],"title":"Body_start_scope_api_projects_scope_post"},"Body_update_asset_api_projects__project_id__assets__asset_id__put":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"preview":{"type":"boolean","title":"Preview","default":false},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"commit_upload":{"type":"boolean","title":"Commit Upload","default":false},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["prompt"],"title":"Body_update_asset_api_projects__project_id__assets__asset_id__put"},"Body_update_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__put":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"preview":{"type":"boolean","title":"Preview","default":false},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"commit_upload":{"type":"boolean","title":"Commit Upload","default":false},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["prompt"],"title":"Body_update_keyframe_api_projects__project_id__scenes__scene_id__keyframes__keyframe_id__put"},"Body_update_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__put":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"preview":{"type":"boolean","title":"Preview","default":false},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"commit_upload":{"type":"boolean","title":"Commit Upload","default":false},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["prompt"],"title":"Body_update_keyframe_project_level_api_projects__project_id__keyframes__keyframe_id__put"},"Body_update_org_asset_api_org_assets__asset_id__put":{"properties":{"prompt":{"type":"string","title":"Prompt"},"files":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Files"},"preview":{"type":"boolean","title":"Preview","default":false},"commit_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Url"},"commit_upload":{"type":"boolean","title":"Commit Upload","default":false},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"reference_image_urls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Image Urls"}},"type":"object","required":["prompt"],"title":"Body_update_org_asset_api_org_assets__asset_id__put"},"Body_update_user_voice_api_voices__voice_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"Body_update_user_voice_api_voices__voice_id__put"},"Body_update_voice_api_projects__project_id__voices__voice_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","title":"Body_update_voice_api_projects__project_id__voices__voice_id__put"},"Body_upload_asset_api_projects__project_id__assets_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_asset_api_projects__project_id__assets_upload_post"},"Body_upload_audio_clip_for_video_api_projects__project_id__videos__video_id__audio_clips_upload_post":{"properties":{"start_timestamp":{"type":"integer","title":"Start Timestamp"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["start_timestamp","file"],"title":"Body_upload_audio_clip_for_video_api_projects__project_id__videos__video_id__audio_clips_upload_post"},"Body_upload_marketing_image_api_onboarding_marketing_images_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_marketing_image_api_onboarding_marketing_images_post"},"Body_upload_org_asset_api_org_assets_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"parent_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Id"}},"type":"object","required":["file"],"title":"Body_upload_org_asset_api_org_assets_upload_post"},"Body_upload_overlay_clip_api_projects__project_id__overlay_clips_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_overlay_clip_api_projects__project_id__overlay_clips_upload_post"},"Body_upload_project_media_api_projects__project_id__media_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"thumbnail_metadata":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Metadata"}},"type":"object","required":["file"],"title":"Body_upload_project_media_api_projects__project_id__media_post"},"Body_upload_reference_image_api_videos_upload_reference_image_post":{"properties":{"image_file":{"type":"string","format":"binary","title":"Image File"}},"type":"object","required":["image_file"],"title":"Body_upload_reference_image_api_videos_upload_reference_image_post"},"Body_upload_reference_video_api_videos_upload_reference_video_post":{"properties":{"video_file":{"type":"string","format":"binary","title":"Video File"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"persist_record":{"type":"boolean","title":"Persist Record","default":false}},"type":"object","required":["video_file"],"title":"Body_upload_reference_video_api_videos_upload_reference_video_post"},"Body_upload_source_audio_api_videos_upload_source_audio_post":{"properties":{"audio_file":{"type":"string","format":"binary","title":"Audio File"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},"type":"object","required":["audio_file"],"title":"Body_upload_source_audio_api_videos_upload_source_audio_post"},"Body_upload_source_video_api_videos_upload_source_video_post":{"properties":{"video_file":{"type":"string","format":"binary","title":"Video File"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},"type":"object","required":["video_file"],"title":"Body_upload_source_video_api_videos_upload_source_video_post"},"Body_upload_space_item_api_spaces__space_id__upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["file"],"title":"Body_upload_space_item_api_spaces__space_id__upload_post"},"BrandIdentityRequest":{"properties":{"display_name":{"type":"string","maxLength":40,"minLength":1,"title":"Display Name"},"image_url":{"type":"string","title":"Image Url"}},"type":"object","required":["display_name","image_url"],"title":"BrandIdentityRequest"},"ChangePlanRequest":{"properties":{"newTier":{"type":"string","title":"Newtier"}},"type":"object","required":["newTier"],"title":"ChangePlanRequest","description":"Request schema for changing subscription tier"},"CharacterResponse":{"properties":{"id":{"type":"string","title":"Id"},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Orgid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"personality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality"},"physicalAppearance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Physicalappearance"},"assetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assetid"},"assetImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assetimageurl"},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceid"},"voiceName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voicename"},"voicePreviewUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voicepreviewurl"},"keywords":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Keywords"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["id"],"title":"CharacterResponse","description":"Response schema for a character"},"CheckoutResponse":{"properties":{"url":{"type":"string","title":"Url"},"sessionId":{"type":"string","title":"Sessionid"}},"type":"object","required":["url","sessionId"],"title":"CheckoutResponse","description":"Response schema for checkout session"},"CompetitorAdsStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"status":{"type":"string","title":"Status"},"competitorQuery":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Competitorquery"},"competitorName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Competitorname"},"competitorPageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Competitorpageid"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"competitorAds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Competitorads"},"selectedAds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Selectedads"}},"type":"object","required":["status"],"title":"CompetitorAdsStatusResponse","description":"Response schema for competitor ad fetch status."},"CompetitorSearchResult":{"properties":{"pageId":{"type":"string","title":"Pageid"},"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"pageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pageurl"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageurl"}},"type":"object","required":["pageId","name"],"title":"CompetitorSearchResult","description":"Single competitor page search result."},"CompleteOnboardingResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"creditBalanceCents":{"type":"integer","title":"Creditbalancecents","default":0},"availableCreditBalanceCents":{"type":"integer","title":"Availablecreditbalancecents","default":0},"availableCredits":{"type":"integer","title":"Availablecredits","default":0}},"type":"object","title":"CompleteOnboardingResponse","description":"Response schema for onboarding completion with confirmed signup credits."},"ComposeResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"attachment_previews":{"items":{"$ref":"#/components/schemas/AttachmentPreview"},"type":"array","title":"Attachment Previews"}},"type":"object","required":["run_id","status"],"title":"ComposeResponse"},"ComposerMediaJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"asset_id":{"type":"string","title":"Asset Id"},"run_id":{"type":"string","title":"Run Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"project_id":{"type":"string","title":"Project Id"},"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"result_data":{"anyOf":[{},{"type":"null"}],"title":"Result Data"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id","asset_id","run_id","project_id","kind","status"],"title":"ComposerMediaJobResponse"},"ConfirmCreditPurchaseRequest":{"properties":{"checkoutSessionId":{"type":"string","minLength":1,"title":"Checkoutsessionid"}},"type":"object","required":["checkoutSessionId"],"title":"ConfirmCreditPurchaseRequest","description":"Request schema for confirming a Stripe credit checkout session."},"ConfirmCreditPurchaseResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"applied":{"type":"boolean","title":"Applied"},"alreadyProcessed":{"type":"boolean","title":"Alreadyprocessed"},"creditedCents":{"type":"integer","title":"Creditedcents"},"newBalanceCents":{"type":"integer","title":"Newbalancecents"},"newBalanceDollars":{"type":"number","title":"Newbalancedollars"}},"type":"object","required":["applied","alreadyProcessed","creditedCents","newBalanceCents","newBalanceDollars"],"title":"ConfirmCreditPurchaseResponse","description":"Response schema for confirmed credit purchase."},"ConfirmPaymentMethodRequest":{"properties":{"checkoutSessionId":{"type":"string","maxLength":255,"minLength":1,"title":"Checkoutsessionid"}},"type":"object","required":["checkoutSessionId"],"title":"ConfirmPaymentMethodRequest"},"ConnectRequest":{"properties":{"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","title":"ConnectRequest"},"CopyComposeResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","title":"Status"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"attachment_previews":{"items":{"$ref":"#/components/schemas/AttachmentPreview"},"type":"array","title":"Attachment Previews"},"source_project_id":{"type":"string","title":"Source Project Id"},"project_id":{"type":"string","title":"Project Id"}},"type":"object","required":["run_id","status","source_project_id","project_id"],"title":"CopyComposeResponse"},"CreateAutomationRequest":{"properties":{"name":{"type":"string","title":"Name"},"prompt":{"type":"string","title":"Prompt"},"num_creatives":{"type":"integer","title":"Num Creatives","default":3},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"step_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Step Config"},"asset_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"character_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Character Ids"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["name","prompt"],"title":"CreateAutomationRequest"},"CreateCharacterRequest":{"properties":{"name":{"type":"string","maxLength":500,"title":"Name"},"personality":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Personality"},"physicalAppearance":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Physicalappearance"},"assetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assetid"},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceid"}},"type":"object","required":["name"],"title":"CreateCharacterRequest"},"CreateCheckoutRequest":{"properties":{"appUserId":{"type":"string","title":"Appuserid"},"customerEmail":{"type":"string","title":"Customeremail"},"priceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priceid"},"successUrl":{"type":"string","title":"Successurl"},"cancelUrl":{"type":"string","title":"Cancelurl"}},"type":"object","required":["appUserId","customerEmail","successUrl","cancelUrl"],"title":"CreateCheckoutRequest","description":"Request schema for creating checkout session"},"CreateConnectUrlRequest":{"properties":{"platform":{"type":"string","title":"Platform"}},"type":"object","required":["platform"],"title":"CreateConnectUrlRequest"},"CreateDebugSessionRequest":{"properties":{"project_id":{"type":"string","maxLength":160,"minLength":1,"title":"Project Id"},"video_url":{"type":"string","maxLength":4096,"minLength":1,"title":"Video Url"},"overlay_hints":{"items":{"type":"string"},"type":"array","maxItems":40,"title":"Overlay Hints"}},"type":"object","required":["project_id","video_url"],"title":"CreateDebugSessionRequest"},"CreateOrgInviteRequest":{"properties":{"email":{"type":"string","maxLength":255,"minLength":3,"title":"Email"},"role":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Role","default":"user"},"orgName":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Orgname"},"redirectUrl":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Redirecturl"}},"type":"object","required":["email"],"title":"CreateOrgInviteRequest","description":"Request schema for creating an organization invite"},"CreateOrgInviteResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"inviteId":{"type":"string","title":"Inviteid"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"}},"type":"object","required":["inviteId","email","status"],"title":"CreateOrgInviteResponse","description":"Response schema for creating an organization invite"},"CreateOverlayClipRequest":{"properties":{"sourceVideoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcevideoid","description":"Source Video ID (provides video_url/name/prompt/etc.)"},"videoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videoid","description":"Parent video ID (overlay is positioned relative to this video)"},"startMs":{"type":"integer","minimum":0.0,"title":"Startms","description":"Start position relative to parent video (ms)","default":0},"durationMs":{"type":"integer","exclusiveMinimum":0.0,"title":"Durationms","description":"Visible duration on timeline (ms)"},"sourceDurationMs":{"type":"integer","minimum":0.0,"title":"Sourcedurationms","description":"Original video duration (ms)","default":0},"opacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Opacity","description":"Overlay opacity (0.0-1.0)","default":1.0},"zIndex":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Zindex","description":"Stacking order among overlays (higher = on top)","default":1}},"type":"object","required":["durationMs"],"title":"CreateOverlayClipRequest","description":"Request schema for creating an overlay clip.\n\nThe source video must already exist — pass its id via source_video_id.\nOptional here because the from-video endpoint provides it via URL path; the\ndirect create endpoint enforces presence explicitly."},"CreatePaymentMethodSessionRequest":{"properties":{"returnUrl":{"type":"string","maxLength":2000,"minLength":1,"title":"Returnurl"}},"type":"object","required":["returnUrl"],"title":"CreatePaymentMethodSessionRequest","description":"Start a Stripe-hosted card setup flow and return to this app URL."},"CreateProjectResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"projectId":{"type":"string","title":"Projectid"},"status":{"type":"string","title":"Status","default":"processing"},"message":{"type":"string","title":"Message","default":"Project created successfully"}},"type":"object","required":["projectId"],"title":"CreateProjectResponse","description":"Response schema for project creation"},"CreateWorkflowRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition"},"canvas":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Canvas"}},"type":"object","required":["name"],"title":"CreateWorkflowRequest"},"CreateWorkflowTriggerRequest":{"properties":{"target_mode":{"type":"string","title":"Target Mode","default":"latest_published"},"workflow_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Id"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"status":{"type":"string","title":"Status","default":"paused"},"unattended_max_run_cost_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unattended Max Run Cost Cents"}},"type":"object","required":["config"],"title":"CreateWorkflowTriggerRequest"},"CreditBalanceResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"creditBalanceCents":{"type":"integer","title":"Creditbalancecents"},"creditBalanceDollars":{"type":"number","title":"Creditbalancedollars"}},"type":"object","required":["creditBalanceCents","creditBalanceDollars"],"title":"CreditBalanceResponse","description":"Response schema for credit balance check"},"CreditHistoryItem":{"properties":{"id":{"type":"string","title":"Id"},"amountCents":{"type":"integer","title":"Amountcents"},"amountDollars":{"type":"number","title":"Amountdollars"},"source":{"type":"string","title":"Source"},"status":{"type":"string","title":"Status"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"}},"type":"object","required":["id","amountCents","amountDollars","source","status"],"title":"CreditHistoryItem","description":"Schema for a single credit purchase history entry"},"CreditHistoryResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"items":{"items":{"$ref":"#/components/schemas/CreditHistoryItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"CreditHistoryResponse","description":"Response schema for credit purchase history"},"CreditPurchaseRequest":{"properties":{"amountCents":{"type":"integer","maximum":10000000.0,"minimum":500.0,"title":"Amountcents"},"successUrl":{"type":"string","title":"Successurl"},"cancelUrl":{"type":"string","title":"Cancelurl"},"eventId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eventid"},"fbc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbc"},"fbp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbp"}},"type":"object","required":["amountCents","successUrl","cancelUrl"],"title":"CreditPurchaseRequest","description":"Request schema for purchasing credits"},"CreditPurchaseResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"checkoutUrl":{"type":"string","title":"Checkouturl"},"checkoutSessionId":{"type":"string","title":"Checkoutsessionid"}},"type":"object","required":["checkoutUrl","checkoutSessionId"],"title":"CreditPurchaseResponse","description":"Response schema for credit purchase checkout session"},"CreditSettingsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"billingMode":{"type":"string","title":"Billingmode"},"autoReloadEnabled":{"type":"boolean","title":"Autoreloadenabled"},"autoReloadThresholdCents":{"type":"integer","title":"Autoreloadthresholdcents"},"autoReloadThresholdDollars":{"type":"number","title":"Autoreloadthresholddollars"},"autoReloadAmountCents":{"type":"integer","title":"Autoreloadamountcents"},"autoReloadAmountDollars":{"type":"number","title":"Autoreloadamountdollars"}},"type":"object","required":["billingMode","autoReloadEnabled","autoReloadThresholdCents","autoReloadThresholdDollars","autoReloadAmountCents","autoReloadAmountDollars"],"title":"CreditSettingsResponse","description":"Response schema for credit/auto-reload settings"},"DailyUsageItem":{"properties":{"date":{"type":"string","title":"Date"},"costCents":{"type":"integer","title":"Costcents"}},"type":"object","required":["date","costCents"],"title":"DailyUsageItem","description":"Schema for a single day's usage"},"DailyUsageResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"hasBilling":{"type":"boolean","title":"Hasbilling"},"periodStart":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodstart"},"periodEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodend"},"dailyUsage":{"items":{"$ref":"#/components/schemas/DailyUsageItem"},"type":"array","title":"Dailyusage"},"billedToUserId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billedtouserid"}},"type":"object","required":["hasBilling"],"title":"DailyUsageResponse","description":"Response schema for daily usage breakdown"},"DebugLoginRequest":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"},"password":{"type":"string","maxLength":4096,"minLength":1,"format":"password","title":"Password","writeOnly":true}},"type":"object","required":["email","password"],"title":"DebugLoginRequest"},"DebugRefreshRequest":{"properties":{"refresh_token":{"type":"string","maxLength":8192,"minLength":1,"format":"password","title":"Refresh Token","writeOnly":true}},"type":"object","required":["refresh_token"],"title":"DebugRefreshRequest"},"EditStageRequest":{"properties":{"result":{"additionalProperties":true,"type":"object","title":"Result"}},"type":"object","required":["result"],"title":"EditStageRequest"},"ElementSequence":{"properties":{"elements":{"items":{"$ref":"#/components/schemas/ElementSequenceItem"},"type":"array","title":"Elements","description":"Ordered list of elements"}},"type":"object","title":"ElementSequence","description":"Schema for the complete element sequence"},"ElementSequenceItem":{"properties":{"type":{"type":"string","title":"Type","description":"Element type: 'keyframe' or 'video'"},"id":{"type":"string","title":"Id","description":"UUID of the keyframe or video"},"startTime":{"type":"integer","title":"Starttime","description":"Start time relative to previous element (ms)","default":0},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Duration in milliseconds (null for keyframes)"}},"type":"object","required":["type","id"],"title":"ElementSequenceItem","description":"Schema for a single element in the sequence"},"EntitlementFeatures":{"properties":{"maxProjects":{"type":"integer","title":"Maxprojects"},"maxFileSize":{"type":"integer","title":"Maxfilesize"},"canExportVideo":{"type":"boolean","title":"Canexportvideo"},"priorityProcessing":{"type":"boolean","title":"Priorityprocessing"},"unlimitedImages":{"type":"boolean","title":"Unlimitedimages","default":false},"unlimitedVideo":{"type":"boolean","title":"Unlimitedvideo","default":false}},"type":"object","required":["maxProjects","maxFileSize","canExportVideo","priorityProcessing"],"title":"EntitlementFeatures","description":"Entitlement features schema"},"EntitlementResponse":{"properties":{"hasAccess":{"type":"boolean","title":"Hasaccess"},"subscriptionStatus":{"type":"string","title":"Subscriptionstatus"},"subscriptionTier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscriptiontier"},"trialEndsAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trialendsat"},"trialExpired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trialexpired"},"features":{"$ref":"#/components/schemas/EntitlementFeatures"},"videoAllowanceCents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videoallowancecents"},"videoAllowanceUsedCents":{"type":"integer","title":"Videoallowanceusedcents","default":0},"videoAllowanceRemainingCents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videoallowanceremainingcents"}},"type":"object","required":["hasAccess","subscriptionStatus","features"],"title":"EntitlementResponse","description":"Response schema for entitlements check"},"GeminiVideoChatResponse":{"properties":{"model":{"type":"string","title":"Model"},"reply":{"type":"string","title":"Reply"},"videos":{"items":{"$ref":"#/components/schemas/VideoReference"},"type":"array","title":"Videos"}},"type":"object","required":["model","reply","videos"],"title":"GeminiVideoChatResponse"},"GenerateAssetResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"asset":{"$ref":"#/components/schemas/AssetResponse"}},"type":"object","required":["asset"],"title":"GenerateAssetResponse","description":"Response schema for asset generation"},"GenerateMusicRequest":{"properties":{"prompt":{"type":"string","maxLength":2000,"minLength":1,"title":"Prompt","description":"Text description of the music to generate"},"startTimestamp":{"type":"integer","minimum":0.0,"title":"Starttimestamp","description":"Start time in milliseconds"},"durationSeconds":{"type":"integer","maximum":300.0,"minimum":10.0,"title":"Durationseconds","description":"Duration in seconds (10-300)","default":30},"audioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audioclipid","description":"Existing audio clip ID to update (for regeneration)"}},"type":"object","required":["prompt","startTimestamp"],"title":"GenerateMusicRequest","description":"Request schema for generating a music audio clip"},"GenerateOrgAssetResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"asset":{"$ref":"#/components/schemas/OrgAssetResponse"}},"type":"object","required":["asset"],"title":"GenerateOrgAssetResponse"},"GenerateProjectAudioRequest":{"properties":{"type":{"type":"string","enum":["voiceover","music_sfx"],"title":"Type"},"text":{"type":"string","maxLength":3000,"minLength":1,"title":"Text"},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceid"},"speed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Speed"},"pitch":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":-12.0},{"type":"null"}],"title":"Pitch"}},"type":"object","required":["type","text"],"title":"GenerateProjectAudioRequest"},"GenerateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"project_id":{"type":"string","title":"Project Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","project_id"],"title":"GenerateResponse","description":"Response model for project generation endpoint."},"GenerateSoundEffectRequest":{"properties":{"prompt":{"type":"string","maxLength":1000,"minLength":1,"title":"Prompt","description":"Text description of the sound effect"},"startTimestamp":{"type":"integer","minimum":0.0,"title":"Starttimestamp","description":"Start time in milliseconds"},"durationSeconds":{"anyOf":[{"type":"number","maximum":30.0,"minimum":0.5},{"type":"null"}],"title":"Durationseconds","description":"Optional duration in seconds (0.5-30)"},"promptInfluence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Promptinfluence","description":"How closely to follow the prompt (0-1)","default":0.3},"isLoop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isloop","description":"When true, allows extending duration beyond source by looping","default":false},"audioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audioclipid","description":"Existing audio clip ID to update (for regeneration)"}},"type":"object","required":["prompt","startTimestamp"],"title":"GenerateSoundEffectRequest","description":"Request schema for generating a sound effect audio clip"},"GenerateVoicePreviewRequest":{"properties":{"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description","description":"Voice description/prompt for ElevenLabs"}},"type":"object","required":["description"],"title":"GenerateVoicePreviewRequest","description":"Request schema for generating voice preview - no DB record created"},"GenerateVoiceoverRequest":{"properties":{"script":{"type":"string","maxLength":5000,"minLength":1,"title":"Script","description":"The text to be spoken"},"voiceId":{"type":"string","title":"Voiceid","description":"ID of the custom voice to use"},"startTimestamp":{"type":"integer","minimum":0.0,"title":"Starttimestamp","description":"Start time in milliseconds"},"speed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Speed","description":"Speech speed multiplier (0.5-2.0)","default":1.0}},"type":"object","required":["script","voiceId","startTimestamp"],"title":"GenerateVoiceoverRequest","description":"Request schema for generating a voiceover audio clip"},"GetProjectResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"project":{"$ref":"#/components/schemas/ProjectResponse"}},"type":"object","required":["project"],"title":"GetProjectResponse","description":"Response schema for getting a project"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HookChangerResponse":{"properties":{"video_url":{"type":"string","title":"Video Url"},"hooks":{"items":{"$ref":"#/components/schemas/HookItem"},"type":"array","title":"Hooks"}},"type":"object","required":["video_url","hooks"],"title":"HookChangerResponse"},"HookItem":{"properties":{"title":{"type":"string","title":"Title"},"hook_script":{"type":"string","title":"Hook Script"},"strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy"}},"type":"object","required":["title","hook_script"],"title":"HookItem"},"IdeationEventResponse":{"properties":{"id":{"type":"string","title":"Id"},"run_id":{"type":"string","title":"Run Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seq"},"event_type":{"type":"string","title":"Event Type"},"tool_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Name"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"result_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Type"},"result_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Url"},"result_data":{"anyOf":[{},{"type":"null"}],"title":"Result Data"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","run_id","event_type"],"title":"IdeationEventResponse"},"IdeationRunRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"num_creatives":{"type":"integer","title":"Num Creatives","default":3},"automation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Automation Id"},"asset_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"character_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Character Ids"}},"type":"object","required":["prompt"],"title":"IdeationRunRequest"},"IdeationRunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"automation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Automation Id"},"automation_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Automation Run Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["run_id","status"],"title":"IdeationRunResponse"},"IdeationRunStatusResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"total_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Usd"},"turn_count":{"type":"integer","title":"Turn Count","default":0}},"type":"object","required":["id","status"],"title":"IdeationRunStatusResponse"},"ImagePromptRequest":{"properties":{"text":{"type":"string","title":"Text","description":"The base text to enhance into an image prompt"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Optional project ID to use project's configured style"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","description":"Optional style guidance (overridden by project style if project_id provided)"},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood","description":"Optional mood guidance (e.g., 'tense', 'peaceful', 'dramatic')"}},"type":"object","required":["text"],"title":"ImagePromptRequest","description":"Request model for image prompt enhancement"},"ImportOrgAssetToProjectRequest":{"properties":{"orgAssetId":{"type":"string","title":"Orgassetid"}},"type":"object","required":["orgAssetId"],"title":"ImportOrgAssetToProjectRequest"},"InitWorkspaceRequest":{"properties":{"aspectRatio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspectratio"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"}},"type":"object","title":"InitWorkspaceRequest"},"InstallUrlRequest":{"properties":{"redirect_path":{"type":"string","title":"Redirect Path","default":"/settings/integrations"}},"type":"object","title":"InstallUrlRequest"},"KeyframeResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Projectid","description":"Project-level ownership (primary)"},"sceneId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sceneid","description":"DEPRECATED: kept for backward compatibility"},"keyframeUrl":{"type":"string","title":"Keyframeurl"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"Prompt used to generate this keyframe"},"imageWidth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imagewidth"},"imageHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imageheight"},"imageFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageformat"},"imageSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imagesize"},"aspectRatio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspectratio"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"assets":{"items":{"$ref":"#/components/schemas/AssetResponse"},"type":"array","title":"Assets"},"activeVersionNumber":{"type":"integer","title":"Activeversionnumber","default":0},"versions":{"items":{"$ref":"#/components/schemas/KeyframeVersionResponse"},"type":"array","title":"Versions"},"imageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageid"},"modelId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modelid"},"sourceImageIds":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sourceimageids"},"isUserUploaded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isuseruploaded"}},"type":"object","required":["id","keyframeUrl","createdAt","updatedAt"],"title":"KeyframeResponse","description":"Response schema for keyframe (project-level asset)"},"KeyframeVersionResponse":{"properties":{"id":{"type":"string","title":"Id"},"versionNumber":{"type":"integer","title":"Versionnumber"},"parentVersionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentversionid"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"isActive":{"type":"boolean","title":"Isactive","default":false},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"keyframeUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyframeurl"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"imageWidth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imagewidth"},"imageHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imageheight"},"imageFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageformat"},"imageSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Imagesize"},"aspectRatio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspectratio"},"assetIds":{"items":{"type":"string"},"type":"array","title":"Assetids"}},"type":"object","required":["id","versionNumber"],"title":"KeyframeVersionResponse"},"LinkCompleteRequest":{"properties":{"token":{"type":"string","maxLength":512,"minLength":20,"title":"Token"}},"type":"object","required":["token"],"title":"LinkCompleteRequest"},"LintRequest":{"properties":{"html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Html"}},"type":"object","title":"LintRequest"},"LipsyncVoiceoverRequest":{"properties":{"videoIds":{"items":{"type":"string"},"type":"array","title":"Videoids","description":"Video IDs to lip-sync"}},"type":"object","required":["videoIds"],"title":"LipsyncVoiceoverRequest","description":"Request schema for lip-syncing a voiceover to selected videos"},"ListCharactersResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"characters":{"items":{"$ref":"#/components/schemas/CharacterResponse"},"type":"array","title":"Characters"}},"type":"object","required":["characters"],"title":"ListCharactersResponse"},"ListOrgAssetsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"assets":{"items":{"$ref":"#/components/schemas/OrgAssetResponse"},"type":"array","title":"Assets"}},"type":"object","required":["assets"],"title":"ListOrgAssetsResponse"},"ListProjectsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"projects":{"items":{"$ref":"#/components/schemas/ProjectListItem"},"type":"array","title":"Projects"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["projects","pagination"],"title":"ListProjectsResponse","description":"Response schema for listing projects"},"MarkStoryboardGuideSeenResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"MarkStoryboardGuideSeenResponse","description":"Response schema for marking storyboard guide as seen"},"MarketingScanStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"status":{"type":"string","title":"Status"},"productWebsiteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Productwebsiteurl"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"productDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Productdescription"},"productImageUrls":{"items":{"type":"string"},"type":"array","title":"Productimageurls"},"productOrgAssetIds":{"items":{"type":"string"},"type":"array","title":"Productorgassetids"},"productSummaryJson":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Productsummaryjson"},"selectedCharacterId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selectedcharacterid"}},"type":"object","required":["status"],"title":"MarketingScanStatusResponse","description":"Response schema for marketing website scan status"},"MobileBillingStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"subscriptionTier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscriptiontier"},"subscriptionActive":{"type":"boolean","title":"Subscriptionactive","default":false},"subscriptionRenewsAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscriptionrenewsat"},"subscriptionAllowanceRemainingCents":{"type":"integer","title":"Subscriptionallowanceremainingcents","default":0},"purchasedCreditBalanceCents":{"type":"integer","title":"Purchasedcreditbalancecents","default":0},"availableCreditBalanceCents":{"type":"integer","title":"Availablecreditbalancecents","default":0},"availableCredits":{"type":"integer","title":"Availablecredits","default":0}},"type":"object","title":"MobileBillingStatusResponse","description":"Mobile-friendly subscription and credit balance response."},"NotificationContactResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber"}},"type":"object","title":"NotificationContactResponse","description":"Response schema for notification contact info."},"OnboardingStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"completed":{"type":"boolean","title":"Completed"},"useType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usetype"},"productWebsiteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Productwebsiteurl"},"needsProductWebsiteUrl":{"type":"boolean","title":"Needsproductwebsiteurl","default":false}},"type":"object","required":["completed"],"title":"OnboardingStatusResponse","description":"Response schema for onboarding completion status"},"OrgAssetResponse":{"properties":{"id":{"type":"string","title":"Id"},"userId":{"type":"string","title":"Userid"},"orgId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Orgid"},"parentAssetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentassetid"},"name":{"type":"string","title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"mediaType":{"type":"string","enum":["image","video","audio"],"title":"Mediatype","default":"image"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageurl"},"imageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageid"},"primaryImageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryimageid"},"secondaryImageIds":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secondaryimageids"},"videoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videourl"},"audioUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audiourl"},"durationMs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Durationms"},"primaryVideoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryvideoid"},"primaryAudioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primaryaudioclipid"},"hasMultipleAngles":{"type":"boolean","title":"Hasmultipleangles","default":false},"secondaryAngles":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secondaryangles"},"isUserUploaded":{"type":"boolean","title":"Isuseruploaded","default":false},"versions":{"items":{"$ref":"#/components/schemas/AssetVersionResponse"},"type":"array","title":"Versions"},"activeVersionNumber":{"type":"integer","title":"Activeversionnumber","default":0},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updatedat"},"subAssets":{"items":{"$ref":"#/components/schemas/OrgAssetResponse"},"type":"array","title":"Subassets"}},"type":"object","required":["id","userId","name"],"title":"OrgAssetResponse","description":"Response schema for an organization-level asset"},"OrgInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"ownerUserId":{"type":"string","title":"Owneruserid"},"role":{"type":"string","title":"Role"},"iconUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iconurl"},"allowUnattendedSocialPublish":{"type":"boolean","title":"Allowunattendedsocialpublish","default":false}},"type":"object","required":["id","name","ownerUserId","role"],"title":"OrgInfo","description":"Organization info for current user"},"OrgInviteCurrentOrganization":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"},"memberCount":{"type":"integer","title":"Membercount"},"iconUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iconurl"}},"type":"object","required":["id","name","role","memberCount"],"title":"OrgInviteCurrentOrganization","description":"The invitee's current organization when accepting requires a switch."},"OrgInviteItem":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"}},"type":"object","required":["id","email","role","status"],"title":"OrgInviteItem","description":"Organization invite info"},"OrgInviteMembershipTransition":{"properties":{"required":{"type":"boolean","title":"Required","default":true},"canAccept":{"type":"boolean","title":"Canaccept"},"strategy":{"type":"string","title":"Strategy"},"currentOrganization":{"$ref":"#/components/schemas/OrgInviteCurrentOrganization"}},"type":"object","required":["canAccept","strategy","currentOrganization"],"title":"OrgInviteMembershipTransition","description":"Safe, authenticated preview of the membership change behind an invite."},"OrgMeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"organization":{"anyOf":[{"$ref":"#/components/schemas/OrgInfo"},{"type":"null"}]}},"type":"object","title":"OrgMeResponse","description":"Response schema for current user's organization"},"OrgMemberItem":{"properties":{"userId":{"type":"string","title":"Userid"},"role":{"type":"string","title":"Role"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"},"joinedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Joinedat"}},"type":"object","required":["userId","role"],"title":"OrgMemberItem","description":"Organization member info"},"OrgMembersResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"organization":{"$ref":"#/components/schemas/OrgInfo"},"members":{"items":{"$ref":"#/components/schemas/OrgMemberItem"},"type":"array","title":"Members"},"invites":{"items":{"$ref":"#/components/schemas/OrgInviteItem"},"type":"array","title":"Invites"}},"type":"object","required":["organization","members","invites"],"title":"OrgMembersResponse","description":"Response schema for organization members and invites"},"OverlayClipResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"videoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videoid"},"startMs":{"type":"integer","title":"Startms","default":0},"durationMs":{"type":"integer","title":"Durationms"},"sourceDurationMs":{"type":"integer","title":"Sourcedurationms","default":0},"trimStartMs":{"type":"integer","title":"Trimstartms","default":0},"opacity":{"type":"number","title":"Opacity","default":1.0},"zIndex":{"type":"integer","title":"Zindex","default":1},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"elements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Elements"},"sourceVideoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcevideoid"},"versions":{"items":{},"type":"array","title":"Versions"},"activeVersionNumber":{"type":"integer","title":"Activeversionnumber","default":0},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","projectId","durationMs","createdAt","updatedAt"],"title":"OverlayClipResponse","description":"Response schema for overlay clip (B-roll video overlay).\n\nContent fields (video_url, name, status, prompt, type, start_keyframe_id) live\non the source Video referenced via elements[\"sourceVideoId\"]. The frontend\nresolves those fields from the source video."},"PaginationMeta":{"properties":{"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"},"totalCount":{"type":"integer","title":"Totalcount"},"totalPages":{"type":"integer","title":"Totalpages"},"hasNext":{"type":"boolean","title":"Hasnext"},"hasPrev":{"type":"boolean","title":"Hasprev"}},"type":"object","required":["page","limit","totalCount","totalPages","hasNext","hasPrev"],"title":"PaginationMeta","description":"Pagination metadata for list responses"},"PaymentMethodItem":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type","default":"card"},"brand":{"type":"string","title":"Brand"},"last4":{"type":"string","title":"Last4"},"expMonth":{"type":"integer","title":"Expmonth"},"expYear":{"type":"integer","title":"Expyear"},"cardholderName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cardholdername"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"isDefault":{"type":"boolean","title":"Isdefault","default":false}},"type":"object","required":["id","brand","last4","expMonth","expYear"],"title":"PaymentMethodItem","description":"PCI-safe summary of a Stripe card attached to the billing customer."},"PaymentMethodMutationResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"paymentMethodId":{"type":"string","title":"Paymentmethodid"},"message":{"type":"string","title":"Message"}},"type":"object","required":["paymentMethodId","message"],"title":"PaymentMethodMutationResponse"},"PaymentMethodSessionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"checkoutUrl":{"type":"string","title":"Checkouturl"},"checkoutSessionId":{"type":"string","title":"Checkoutsessionid"}},"type":"object","required":["checkoutUrl","checkoutSessionId"],"title":"PaymentMethodSessionResponse"},"PaymentMethodsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"organizationName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationname"},"billingOwner":{"$ref":"#/components/schemas/BillingOwnerInfo"},"canManage":{"type":"boolean","title":"Canmanage"},"stripeCustomerConfigured":{"type":"boolean","title":"Stripecustomerconfigured"},"paymentMethods":{"items":{"$ref":"#/components/schemas/PaymentMethodItem"},"type":"array","title":"Paymentmethods"},"personalStripeCustomerConfigured":{"type":"boolean","title":"Personalstripecustomerconfigured","default":false},"personalPaymentMethods":{"items":{"$ref":"#/components/schemas/PaymentMethodItem"},"type":"array","title":"Personalpaymentmethods"}},"type":"object","required":["billingOwner","canManage","stripeCustomerConfigured"],"title":"PaymentMethodsResponse","description":"Organization billing ownership and saved payment-method state."},"PlanResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"session_id":{"type":"string","title":"Session Id"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"augmented_assets":{"anyOf":[{"items":{"$ref":"#/components/schemas/AugmentedAsset"},"type":"array"},{"type":"null"}],"title":"Augmented Assets"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","session_id"],"title":"PlanResponse","description":"Response model for planning endpoint."},"ProjectListItem":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"sceneCount":{"type":"integer","title":"Scenecount"},"totalDuration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Totalduration"},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"totalCostCents":{"type":"integer","minimum":0.0,"title":"Totalcostcents","default":0}},"type":"object","required":["id","projectId","name","status","sceneCount","createdAt","updatedAt"],"title":"ProjectListItem","description":"Simplified project schema for listing"},"ProjectMetadata":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"},"motionGraphicsStyle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Motiongraphicsstyle"},"aspectRatio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspectratio"},"length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Length"},"voiceover":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Voiceover"}},"type":"object","title":"ProjectMetadata","description":"Project metadata schema"},"ProjectResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"userId":{"type":"string","title":"Userid"},"organizationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationid"},"name":{"type":"string","title":"Name"},"prompt":{"type":"string","title":"Prompt"},"status":{"type":"string","title":"Status"},"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid"},"planText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plantext"},"metadata":{"$ref":"#/components/schemas/ProjectMetadata"},"videos":{"items":{"$ref":"#/components/schemas/VideoResponse"},"type":"array","title":"Videos","description":"Videos directly owned by project (video-centric timeline)"},"keyframes":{"items":{"$ref":"#/components/schemas/KeyframeResponse"},"type":"array","title":"Keyframes","description":"Keyframes directly owned by project"},"audioClips":{"items":{"$ref":"#/components/schemas/AudioClipResponse"},"type":"array","title":"Audioclips","description":"Audio clips directly owned by project"},"overlayClips":{"items":{"$ref":"#/components/schemas/OverlayClipResponse"},"type":"array","title":"Overlayclips","description":"Overlay/B-roll video clips on the project timeline"},"scenes":{"items":{"$ref":"#/components/schemas/SceneResponse"},"type":"array","title":"Scenes","description":"DEPRECATED: use videos/keyframes instead"},"attachments":{"items":{"$ref":"#/components/schemas/AttachmentResponse"},"type":"array","title":"Attachments","default":[]},"assets":{"items":{"$ref":"#/components/schemas/AssetResponse"},"type":"array","title":"Assets","default":[]},"voices":{"items":{"$ref":"#/components/schemas/VoiceResponse"},"type":"array","title":"Voices","default":[]},"sceneCount":{"type":"integer","title":"Scenecount"},"totalDuration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Totalduration"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"renderedVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Renderedvideourl"},"format":{"type":"string","title":"Format","default":"legacy"},"workspaceVersion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workspaceversion"}},"type":"object","required":["id","projectId","userId","name","prompt","status","metadata","sceneCount","createdAt","updatedAt"],"title":"ProjectResponse","description":"Response schema for project"},"PromptResponse":{"properties":{"enhanced_prompt":{"type":"string","title":"Enhanced Prompt","description":"The enhanced prompt"},"original_text":{"type":"string","title":"Original Text","description":"The original input text"}},"type":"object","required":["enhanced_prompt","original_text"],"title":"PromptResponse","description":"Response model for prompt enhancement"},"PublicProgressArtifactResponse":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"label":{"type":"string","title":"Label"},"preview_url":{"type":"string","title":"Preview Url"}},"type":"object","required":["id","type","label","preview_url"],"title":"PublicProgressArtifactResponse"},"PublicProgressStepResponse":{"properties":{"id":{"type":"string","title":"Id"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"status":{"type":"string","title":"Status"},"completed":{"type":"integer","title":"Completed","default":0},"total":{"type":"integer","title":"Total","default":0},"unit":{"type":"string","title":"Unit","default":"tasks"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"artifacts":{"items":{"$ref":"#/components/schemas/PublicProgressArtifactResponse"},"type":"array","title":"Artifacts","default":[]}},"type":"object","required":["id","kind","title","description","status"],"title":"PublicProgressStepResponse"},"PublishPostRequest":{"properties":{"social_account_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Social Account Ids"},"caption":{"type":"string","title":"Caption"},"media_urls":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Media Urls"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At"},"platform_configurations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Platform Configurations"},"is_draft":{"type":"boolean","title":"Is Draft","default":false}},"type":"object","required":["social_account_ids","caption","media_urls"],"title":"PublishPostRequest"},"RedeemCouponRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"RedeemCouponRequest","description":"Request schema for redeeming a coupon code"},"RedeemCouponResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"creditedCents":{"type":"integer","title":"Creditedcents"},"creditedDollars":{"type":"number","title":"Crediteddollars"},"newBalanceCents":{"type":"integer","title":"Newbalancecents"},"newBalanceDollars":{"type":"number","title":"Newbalancedollars"},"couponCode":{"type":"string","title":"Couponcode"}},"type":"object","required":["creditedCents","creditedDollars","newBalanceCents","newBalanceDollars","couponCode"],"title":"RedeemCouponResponse","description":"Response schema for coupon redemption"},"ReelAnalyzeRequest":{"properties":{"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"permalink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permalink"},"shortcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shortcode"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"}},"type":"object","title":"ReelAnalyzeRequest"},"ReferralCodeResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"code":{"type":"string","title":"Code"},"url":{"type":"string","title":"Url"},"totalReferrals":{"type":"integer","title":"Totalreferrals","default":0},"pendingReferrals":{"type":"integer","title":"Pendingreferrals","default":0},"creditedReferrals":{"type":"integer","title":"Creditedreferrals","default":0},"totalEarnedCents":{"type":"integer","title":"Totalearnedcents","default":0},"totalEarnedDollars":{"type":"number","title":"Totalearneddollars","default":0.0},"referrals":{"items":{"$ref":"#/components/schemas/ReferralItem"},"type":"array","title":"Referrals","default":[]}},"type":"object","required":["code","url"],"title":"ReferralCodeResponse","description":"Response schema for getting/creating a referral code"},"ReferralItem":{"properties":{"status":{"type":"string","title":"Status"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"creditedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creditedat"}},"type":"object","required":["status"],"title":"ReferralItem","description":"Schema for a single referral entry"},"ResolveApprovalRequest":{"properties":{"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment"}},"type":"object","title":"ResolveApprovalRequest"},"RevenueCatSyncRequest":{"properties":{"customerInfo":{"additionalProperties":true,"type":"object","title":"Customerinfo"},"purchasedProductId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchasedproductid"}},"type":"object","required":["customerInfo"],"title":"RevenueCatSyncRequest","description":"Request schema for syncing RevenueCat CustomerInfo into backend credits."},"ReviewStageRequest":{"properties":{"decision":{"type":"string","title":"Decision"},"notes":{"type":"string","maxLength":20000,"title":"Notes","default":""}},"type":"object","required":["decision"],"title":"ReviewStageRequest"},"SaveFileRequest":{"properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"ops":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Ops"},"baseVersion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Baseversion"}},"type":"object","title":"SaveFileRequest"},"SaveSeedVoiceRequest":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Voice name"},"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description","description":"Prompt/description used to generate the voice"},"previewUrl":{"type":"string","title":"Previewurl","description":"CDN URL of the generated preview audio"}},"type":"object","required":["name","description","previewUrl"],"title":"SaveSeedVoiceRequest","description":"Request schema for saving a Seed Audio generated voice as a user-level voice"},"SaveVoiceRequest":{"properties":{"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description","description":"Voice description/prompt"},"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Voice name"},"generatedVoiceId":{"type":"string","title":"Generatedvoiceid","description":"Temporary voice ID from preview generation"},"previewAudioBase64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previewaudiobase64","description":"Base64 encoded preview audio to upload to CDN"}},"type":"object","required":["description","name","generatedVoiceId"],"title":"SaveVoiceRequest","description":"Request schema for saving a voice - creates DB record and saves to ElevenLabs"},"SceneResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"type":"string","title":"Projectid"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Scene type: 'cinematic-video' or 'motion-graphic'"},"requiresApproval":{"type":"boolean","title":"Requiresapproval"},"videoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videourl"},"keyframeUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyframeurl"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration","description":"Duration in ms. None = dynamic (determined by voiceover)"},"cropStartMs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cropstartms","description":"Milliseconds trimmed from start (soft crop)","default":0},"cropEndMs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cropendms","description":"Milliseconds trimmed from end (soft crop)","default":0},"order":{"type":"integer","title":"Order"},"voiceover":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceover","description":"Voiceover text for the scene"},"volume":{"type":"integer","title":"Volume","description":"Volume level 0-200 (percentage)","default":100},"videoWidth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videowidth"},"videoHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videoheight"},"videoFormat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videoformat"},"videoSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videosize"},"llmXml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llmxml"},"elementSequence":{"anyOf":[{"$ref":"#/components/schemas/ElementSequence"},{"type":"null"}]},"audioClips":{"items":{"$ref":"#/components/schemas/AudioClipResponse"},"type":"array","title":"Audioclips"},"keyframes":{"items":{"$ref":"#/components/schemas/KeyframeResponse"},"type":"array","title":"Keyframes"},"videos":{"items":{"$ref":"#/components/schemas/VideoResponse"},"type":"array","title":"Videos"},"assets":{"items":{"$ref":"#/components/schemas/AssetResponse"},"type":"array","title":"Assets"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"videoGeneratedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Videogeneratedat"},"lipSyncAudioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lipsyncaudioclipid"}},"type":"object","required":["id","projectId","name","description","requiresApproval","order","createdAt","updatedAt"],"title":"SceneResponse","description":"Response schema for scene.\n\nDEPRECATED: This response schema is being phased out in favor of VideoResponse\nfor the video-centric timeline architecture. Scene responses are maintained\nfor backward compatibility, but new API clients should use video endpoints."},"ScopeResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"session_id":{"type":"string","title":"Session Id"},"scope":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Scope"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","session_id"],"title":"ScopeResponse","description":"Response model for scoping endpoint."},"SearchCompetitorsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"results":{"items":{"$ref":"#/components/schemas/CompetitorSearchResult"},"type":"array","title":"Results"}},"type":"object","title":"SearchCompetitorsResponse","description":"Response schema for competitor search."},"SendMessageRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"SendMessageRequest"},"SendReferralInviteRequest":{"properties":{"email":{"type":"string","maxLength":255,"minLength":5,"title":"Email"}},"type":"object","required":["email"],"title":"SendReferralInviteRequest","description":"Request schema for sending a referral invite email"},"SendReferralInviteResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"sent":{"type":"boolean","title":"Sent"}},"type":"object","required":["sent"],"title":"SendReferralInviteResponse","description":"Response schema for sending a referral invite email"},"SingleCharacterResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"character":{"$ref":"#/components/schemas/CharacterResponse"}},"type":"object","required":["character"],"title":"SingleCharacterResponse"},"SpaceBulkNodeRequest":{"properties":{"nodeIds":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Nodeids"}},"type":"object","required":["nodeIds"],"title":"SpaceBulkNodeRequest"},"SpaceCreateRequest":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"SpaceCreateRequest"},"SpaceFolderCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"SpaceFolderCreateRequest"},"SpaceImportItem":{"properties":{"kind":{"type":"string","enum":["asset","image","video","character"],"title":"Kind"},"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"}},"type":"object","required":["kind","id"],"title":"SpaceImportItem"},"SpaceImportRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SpaceImportItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"SpaceImportRequest"},"SpaceItemUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"content":{"anyOf":[{"type":"string","maxLength":1048576},{"type":"null"}],"title":"Content"},"textFormat":{"anyOf":[{"type":"string","enum":["plain","markdown","skill"]},{"type":"null"}],"title":"Textformat"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"}},"type":"object","title":"SpaceItemUpdateRequest"},"SpaceMoveRequest":{"properties":{"nodeIds":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Nodeids"},"targetParentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Targetparentid"}},"type":"object","required":["nodeIds"],"title":"SpaceMoveRequest"},"SpaceNodeCreateRequest":{"properties":{"type":{"type":"string","enum":["folder","text"],"title":"Type"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"},"content":{"anyOf":[{"type":"string","maxLength":1048576},{"type":"null"}],"title":"Content"},"textFormat":{"anyOf":[{"type":"string","enum":["plain","markdown","skill"]},{"type":"null"}],"title":"Textformat"}},"type":"object","required":["type","name"],"title":"SpaceNodeCreateRequest"},"SpaceSkillCreateRequest":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":500,"minLength":1,"title":"Description"},"instructions":{"anyOf":[{"type":"string","maxLength":900000},{"type":"null"}],"title":"Instructions"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"},"createHere":{"type":"boolean","title":"Createhere","default":false}},"type":"object","required":["name","description"],"title":"SpaceSkillCreateRequest"},"SpaceTextCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"parentId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Parentid"},"content":{"type":"string","maxLength":1048576,"title":"Content","default":""},"textFormat":{"type":"string","enum":["plain","markdown"],"title":"Textformat","default":"plain"}},"type":"object","required":["name"],"title":"SpaceTextCreateRequest"},"SpaceUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"}},"type":"object","title":"SpaceUpdateRequest"},"StartCompetitorAdsFetchRequest":{"properties":{"competitorQuery":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Competitorquery"},"competitorName":{"type":"string","maxLength":255,"title":"Competitorname"},"competitorPageId":{"type":"string","maxLength":64,"title":"Competitorpageid"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","required":["competitorName","competitorPageId"],"title":"StartCompetitorAdsFetchRequest","description":"Request schema for starting competitor ad fetching."},"StartCompetitorAdsFetchResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StartCompetitorAdsFetchResponse","description":"Response schema for starting competitor ad fetch."},"StartMarketingScanRequest":{"properties":{"productWebsiteUrl":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Productwebsiteurl"}},"type":"object","title":"StartMarketingScanRequest","description":"Request schema for starting the marketing website scan"},"StartMarketingScanResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StartMarketingScanResponse","description":"Response schema for starting the marketing website scan"},"StartWorkflowNodeTestRequest":{"properties":{"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"node_id":{"type":"string","maxLength":64,"minLength":1,"title":"Node Id"},"workflow_input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Workflow Input"},"node_outputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Node Outputs"},"confirm_effects":{"type":"boolean","title":"Confirm Effects","default":false}},"type":"object","required":["definition","node_id"],"title":"StartWorkflowNodeTestRequest"},"StoryboardGuideStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"hasSeenStoryboardGuide":{"type":"boolean","title":"Hasseenstoryboardguide"}},"type":"object","required":["hasSeenStoryboardGuide"],"title":"StoryboardGuideStatusResponse","description":"Response schema for storyboard guide view status"},"SubmitOnboardingRequest":{"properties":{"useType":{"anyOf":[{"type":"string","pattern":"^(marketing|personal)$"},{"type":"null"}],"title":"Usetype"},"intendedUse":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Intendeduse"},"maxVideoLength":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Maxvideolength"},"company":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Company"},"role":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Role"},"heardAboutUs":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Heardaboutus"},"productWebsiteUrl":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Productwebsiteurl"}},"type":"object","title":"SubmitOnboardingRequest","description":"Request schema for post-signup onboarding questionnaire"},"SubmitOnboardingResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"SubmitOnboardingResponse","description":"Response schema for onboarding submission"},"SubscribeRequest":{"properties":{"tier":{"type":"string","title":"Tier","description":"Subscription tier: 'creator' or 'studio'"},"successUrl":{"type":"string","title":"Successurl"},"cancelUrl":{"type":"string","title":"Cancelurl"},"eventId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eventid"},"fbc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbc"},"fbp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbp"}},"type":"object","required":["tier","successUrl","cancelUrl"],"title":"SubscribeRequest","description":"Request schema for creating a subscription checkout"},"SubscriptionResponse":{"properties":{"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"periodStart":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodstart"},"periodEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Periodend"},"videoAllowanceCents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videoallowancecents"},"videoAllowanceUsedCents":{"type":"integer","title":"Videoallowanceusedcents","default":0},"videoAllowanceRemainingCents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Videoallowanceremainingcents"},"cancelAtPeriodEnd":{"type":"boolean","title":"Cancelatperiodend","default":false}},"type":"object","title":"SubscriptionResponse","description":"Response schema for subscription details"},"SwitchToCreditsResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"billingMode":{"type":"string","title":"Billingmode","default":"credits"},"bonusCents":{"type":"integer","title":"Bonuscents","default":0},"newBalanceCents":{"type":"integer","title":"Newbalancecents"},"newBalanceDollars":{"type":"number","title":"Newbalancedollars"}},"type":"object","required":["newBalanceCents","newBalanceDollars"],"title":"SwitchToCreditsResponse","description":"Response schema for switching from PAYG to credits"},"TemplateVariantItem":{"properties":{"title":{"type":"string","title":"Title"},"strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Strategy"},"variant_instruction":{"type":"string","title":"Variant Instruction"}},"type":"object","required":["title","variant_instruction"],"title":"TemplateVariantItem"},"TemplateVariantResponse":{"properties":{"template_id":{"type":"string","title":"Template Id"},"video_url":{"type":"string","title":"Video Url"},"variants":{"items":{"$ref":"#/components/schemas/TemplateVariantItem"},"type":"array","title":"Variants"}},"type":"object","required":["template_id","video_url","variants"],"title":"TemplateVariantResponse"},"TextAnalyzeRequest":{"properties":{"text":{"type":"string","title":"Text"}},"type":"object","required":["text"],"title":"TextAnalyzeRequest"},"UpdateAssetRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name"}},"type":"object","title":"UpdateAssetRequest","description":"Request schema for updating an asset"},"UpdateAudioClipPositionRequest":{"properties":{"newSceneId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newsceneid","description":"ID of the scene to move the clip to (legacy)"},"newVideoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newvideoid","description":"ID of the video to attach the clip to (video-centric mode)"},"startTimestamp":{"type":"integer","minimum":0.0,"title":"Starttimestamp","description":"Start time relative to the new scene/video in milliseconds"}},"type":"object","required":["startTimestamp"],"title":"UpdateAudioClipPositionRequest","description":"Request schema for updating audio clip position"},"UpdateAudioClipTimingRequest":{"properties":{"startTimestamp":{"type":"integer","minimum":0.0,"title":"Starttimestamp","description":"Start time relative to the scene in milliseconds"},"duration":{"type":"integer","minimum":0.0,"title":"Duration","description":"Clip duration in milliseconds"},"trimStartMs":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Trimstartms","description":"Milliseconds trimmed from start of the source audio (in-point offset)","default":0},"isLoop":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isloop","description":"When true, allows extending duration beyond source by looping"}},"type":"object","required":["startTimestamp","duration"],"title":"UpdateAudioClipTimingRequest","description":"Request schema for updating audio clip timing (start + duration)."},"UpdateAudioClipVolumeRequest":{"properties":{"volume":{"type":"integer","maximum":200.0,"minimum":0.0,"title":"Volume","description":"Volume percentage (0-200)"}},"type":"object","required":["volume"],"title":"UpdateAudioClipVolumeRequest","description":"Request schema for updating audio clip volume (0-200%)."},"UpdateAutomationRequest":{"properties":{"step_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Step Config"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"num_creatives":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Creatives"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"UpdateAutomationRequest"},"UpdateCharacterRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name"},"personality":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Personality"},"physicalAppearance":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Physicalappearance"},"assetId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assetid"},"voiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceid"}},"type":"object","title":"UpdateCharacterRequest"},"UpdateCreditSettingsRequest":{"properties":{"autoReloadEnabled":{"type":"boolean","title":"Autoreloadenabled"},"autoReloadThresholdCents":{"type":"integer","maximum":10000000.0,"minimum":100.0,"title":"Autoreloadthresholdcents"},"autoReloadAmountCents":{"type":"integer","maximum":10000000.0,"minimum":500.0,"title":"Autoreloadamountcents"}},"type":"object","required":["autoReloadEnabled","autoReloadThresholdCents","autoReloadAmountCents"],"title":"UpdateCreditSettingsRequest","description":"Request schema for updating auto-reload settings"},"UpdateMarketingCharacterSelectionRequest":{"properties":{"selectedCharacterId":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Selectedcharacterid"}},"type":"object","title":"UpdateMarketingCharacterSelectionRequest","description":"Request schema for choosing a character during marketing onboarding."},"UpdateMarketingScanRequest":{"properties":{"productDescription":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Productdescription"},"productImageUrls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Productimageurls"}},"type":"object","title":"UpdateMarketingScanRequest","description":"Request schema for editing marketing onboarding scan results"},"UpdateMotionRequest":{"properties":{"videoId":{"type":"string","title":"Videoid"},"prompt":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Prompt"},"duration":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":1.0},{"type":"null"}],"title":"Duration","description":"Duration in seconds"}},"type":"object","required":["videoId"],"title":"UpdateMotionRequest","description":"Update a motion/video prompt and/or duration in a scene"},"UpdateNotificationContactRequest":{"properties":{"phoneNumber":{"type":"string","maxLength":20,"minLength":8,"title":"Phonenumber"}},"type":"object","required":["phoneNumber"],"title":"UpdateNotificationContactRequest","description":"Request schema for updating notification contact info."},"UpdateOrgAssetRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Prompt"}},"type":"object","title":"UpdateOrgAssetRequest"},"UpdateOrgRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"allowUnattendedSocialPublish":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowunattendedsocialpublish"}},"type":"object","title":"UpdateOrgRequest","description":"Request schema for updating organization settings"},"UpdateOrgResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"organization":{"$ref":"#/components/schemas/OrgInfo"}},"type":"object","required":["organization"],"title":"UpdateOrgResponse","description":"Response schema for updating organization settings"},"UpdateOverlayClipPositionRequest":{"properties":{"startMs":{"type":"integer","minimum":0.0,"title":"Startms","description":"New start position relative to parent video (ms)"},"videoId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videoid","description":"Parent video ID (updated when dragged to a different video)"}},"type":"object","required":["startMs"],"title":"UpdateOverlayClipPositionRequest","description":"Request schema for moving overlay clip on timeline"},"UpdateOverlayClipRequest":{"properties":{"startMs":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Startms"},"durationMs":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Durationms"},"sourceDurationMs":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sourcedurationms"},"trimStartMs":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Trimstartms"},"opacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Opacity"},"zIndex":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zindex"}},"type":"object","title":"UpdateOverlayClipRequest","description":"Request schema for updating overlay clip properties"},"UpdateOverlayClipTimingRequest":{"properties":{"trimStartMs":{"type":"integer","minimum":0.0,"title":"Trimstartms","description":"Trim offset into source video (ms)","default":0},"durationMs":{"type":"integer","exclusiveMinimum":0.0,"title":"Durationms","description":"Visible duration on timeline (ms)"}},"type":"object","required":["durationMs"],"title":"UpdateOverlayClipTimingRequest","description":"Request schema for updating overlay clip timing (trim + duration)"},"UpdateProjectRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name"},"style":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Style"},"motionGraphicsStyle":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Motiongraphicsstyle"},"aspectRatio":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Aspectratio"}},"type":"object","title":"UpdateProjectRequest","description":"Request schema for updating a project"},"UpdateSceneSequenceRequest":{"properties":{"elements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Elements","description":"Ordered list of elements with type, id, startTime, duration"}},"type":"object","required":["elements"],"title":"UpdateSceneSequenceRequest","description":"Update the element sequence for a scene"},"UpdateSelectedCompetitorAdsRequest":{"properties":{"selectedAds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Selectedads"}},"type":"object","title":"UpdateSelectedCompetitorAdsRequest","description":"Request schema for saving selected competitor ads."},"UpdateWorkflowAssistantSessionRequest":{"properties":{"title":{"type":"string","maxLength":120,"minLength":1,"title":"Title"}},"type":"object","required":["title"],"title":"UpdateWorkflowAssistantSessionRequest"},"UpdateWorkflowDraftRequest":{"properties":{"expected_revision":{"type":"integer","minimum":1.0,"title":"Expected Revision"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition"},"canvas":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Canvas"}},"type":"object","required":["expected_revision"],"title":"UpdateWorkflowDraftRequest"},"UpdateWorkflowTriggerRequest":{"properties":{"expected_claim_version":{"type":"integer","minimum":0.0,"title":"Expected Claim Version"},"target_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Mode"},"workflow_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Version Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"unattended_max_run_cost_cents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Unattended Max Run Cost Cents"}},"type":"object","required":["expected_claim_version"],"title":"UpdateWorkflowTriggerRequest"},"UploadMarketingImageResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"imageUrl":{"type":"string","title":"Imageurl"}},"type":"object","required":["imageUrl"],"title":"UploadMarketingImageResponse","description":"Response schema for marketing onboarding image upload"},"ValidateOrgInviteResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"email":{"type":"string","title":"Email"},"organizationName":{"type":"string","title":"Organizationname"},"organizationIconUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organizationiconurl"},"role":{"type":"string","title":"Role"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"membershipTransition":{"anyOf":[{"$ref":"#/components/schemas/OrgInviteMembershipTransition"},{"type":"null"}]}},"type":"object","required":["email","organizationName","role"],"title":"ValidateOrgInviteResponse","description":"Response schema for validating an org invite token"},"ValidateWorkflowRequest":{"properties":{"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition"}},"type":"object","title":"ValidateWorkflowRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoPromptRequest":{"properties":{"text":{"type":"string","title":"Text","description":"The base text to enhance into a video prompt"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Optional project ID to use project's configured style"},"duration":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":4.0},{"type":"null"}],"title":"Duration","description":"Video duration in seconds (4-12)"},"camera_movement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Camera Movement","description":"Desired camera movement (e.g., 'static', 'dolly in', 'tracking')"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","description":"Optional style guidance (overridden by project style if project_id provided)"},"image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Image Urls","description":"Optional image URLs providing visual context (e.g., start/end keyframes)"},"video_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Context","description":"Optional video context or selected model capability summary"}},"type":"object","required":["text"],"title":"VideoPromptRequest","description":"Request model for video prompt enhancement"},"VideoReference":{"properties":{"uri":{"type":"string","title":"Uri"},"filename":{"type":"string","title":"Filename"},"mime_type":{"type":"string","title":"Mime Type"}},"type":"object","required":["uri","filename","mime_type"],"title":"VideoReference"},"VideoResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Projectid"},"sceneId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sceneid"},"orderIndex":{"type":"integer","title":"Orderindex","default":0},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional name for the video"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Visual description of the video"},"status":{"type":"string","title":"Status","description":"Generation status: pending, generating, completed, failed, dismissed","default":"generating"},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Errormessage","description":"Persisted generation failure reason"},"voiceover":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceover","description":"Voiceover text for this video"},"volume":{"type":"integer","title":"Volume","description":"Volume level 0-200 (percentage)","default":100},"sourceCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcecode","description":"Source code snapshot for generated/editable videos"},"workspaceArchiveUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspacearchiveurl","description":"Durable workspace archive URL for generated/editable videos"},"workspaceArchiveSha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspacearchivesha256"},"workspaceArchiveSizeBytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workspacearchivesizebytes"},"workspaceArchiveCreatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Workspacearchivecreatedat"},"videoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videourl"},"baseVideoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basevideourl"},"captionStyles":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Captionstyles"},"hlsUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hlsurl"},"model":{"type":"string","title":"Model"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"duration":{"type":"integer","title":"Duration"},"playbackSpeed":{"type":"number","title":"Playbackspeed","default":1.0},"cropStartMs":{"type":"integer","title":"Cropstartms","description":"Milliseconds trimmed from start (soft crop)","default":0},"cropEndMs":{"type":"integer","title":"Cropendms","description":"Milliseconds trimmed from end (soft crop)","default":0},"startKeyframeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Startkeyframeid"},"endKeyframeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endkeyframeid"},"lipSyncAudioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lipsyncaudioclipid"},"elements":{"additionalProperties":true,"type":"object","title":"Elements","description":"Per-video element references (e.g., {startKeyframeID,prompt[,endKeyframeID]})"},"audioClips":{"items":{"$ref":"#/components/schemas/AudioClipResponse"},"type":"array","title":"Audioclips"},"modelId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modelid","description":"FK to models(id)"},"prompts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Prompts","description":"[{prompt_str, duration}, ...]"},"imageRefs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Imagerefs","description":"[{image_id, type}, ...]"},"videoRefs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Videorefs","description":"Source video refs (v2v, motion-control, remix); each entry is {id, role}"},"assetRefs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Assetrefs","description":"Ids of asset overlays / elements"},"generationParams":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Generationparams","description":"Model-specific knobs"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"activeVersionNumber":{"type":"integer","title":"Activeversionnumber","default":0},"versions":{"items":{"$ref":"#/components/schemas/VideoVersionResponse"},"type":"array","title":"Versions"}},"type":"object","required":["id","model","duration","createdAt","updatedAt"],"title":"VideoResponse","description":"Response schema for video (video-centric timeline entity)"},"VideoVersionResponse":{"properties":{"id":{"type":"string","title":"Id"},"versionNumber":{"type":"integer","title":"Versionnumber"},"parentVersionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parentversionid"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Createdat"},"isActive":{"type":"boolean","title":"Isactive","default":false},"previewUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previewurl"},"videoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Videourl"},"hlsUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hlsurl"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Errormessage"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voiceover":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voiceover"},"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"},"sourceCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcecode"},"workspaceArchiveUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspacearchiveurl"},"workspaceArchiveSha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspacearchivesha256"},"workspaceArchiveSizeBytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workspacearchivesizebytes"},"workspaceArchiveCreatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Workspacearchivecreatedat"},"playbackSpeed":{"type":"number","title":"Playbackspeed","default":1.0},"cropStartMs":{"type":"integer","title":"Cropstartms","default":0},"cropEndMs":{"type":"integer","title":"Cropendms","default":0},"orderIndex":{"type":"integer","title":"Orderindex","default":0},"startKeyframeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Startkeyframeid"},"endKeyframeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endkeyframeid"},"lipSyncAudioClipId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lipsyncaudioclipid"},"elements":{"additionalProperties":true,"type":"object","title":"Elements"},"associatedKeyframes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Associatedkeyframes"}},"type":"object","required":["id","versionNumber"],"title":"VideoVersionResponse"},"VoiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"projectId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Projectid"},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"generationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generationid"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider","description":"Voice provider (e.g., hume, elevenlabs, seed-audio)"},"klingVoiceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Klingvoiceid"},"previewUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previewurl"},"languages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Languages"},"status":{"type":"string","title":"Status"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","name","description","status","createdAt","updatedAt"],"title":"VoiceResponse","description":"Response schema for custom voice"},"VoiceTTSRequest":{"properties":{"text":{"type":"string","maxLength":2500,"minLength":1,"title":"Text","description":"Text to synthesize"},"speed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Speed","description":"Speech speed multiplier","default":1.0},"pitch":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":-12.0},{"type":"null"}],"title":"Pitch","description":"Pitch shift in semitones"}},"type":"object","required":["text"],"title":"VoiceTTSRequest","description":"Request schema for generating speech from a saved voice via Seed Audio"},"WorkflowAssistantMessageRequest":{"properties":{"thread_id":{"anyOf":[{"type":"string","maxLength":36,"minLength":36},{"type":"null"}],"title":"Thread Id"},"message":{"type":"string","maxLength":12000,"minLength":1,"title":"Message"},"draft_revision":{"type":"integer","minimum":1.0,"title":"Draft Revision"},"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"canvas":{"additionalProperties":true,"type":"object","title":"Canvas"},"client_request_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Client Request Id"}},"type":"object","required":["message","draft_revision","definition"],"title":"WorkflowAssistantMessageRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}