{"openapi":"3.1.0","info":{"title":"Demo Video AI Narration","description":"Transform screen recordings into narrated demos using AI","version":"1.0.0"},"paths":{"/auth/register":{"post":{"tags":["authentication"],"summary":"Register","description":"Register a new user and send verification email\n\nNote: Terms and privacy policy acceptance happens after email verification\nwhen the user first enters the app, not during registration.","operationId":"register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["authentication"],"summary":"Login","description":"Login user and return access token","operationId":"login_auth_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_auth_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["authentication"],"summary":"Get Current User Info","description":"Get current user information","operationId":"get_current_user_info_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/google":{"get":{"tags":["authentication"],"summary":"Google Oauth","description":"Initiate Google OAuth flow.\n\nIf `cli_state` is provided (a signed JWT minted by `/cli/signup`),\nforward it through Google's `state` parameter so the callback can\nbranch into the CLI signup flow instead of the regular web flow.\n`next` is an in-app path, such as /app/voice-creator, sent back as state.","operationId":"google_oauth_auth_google_get","parameters":[{"name":"cli_state","in":"query","required":false,"schema":{"type":"string","title":"Cli State"}},{"name":"next","in":"query","required":false,"schema":{"type":"string","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google/callback":{"get":{"tags":["authentication"],"summary":"Google Oauth Callback","description":"Handle Google OAuth callback.\n\nBranches on `state`: if it decodes as a CLI signup intent, mint an\nAPI key and redirect to the CLI's loopback URL. Otherwise, run the\nregular web sign-in flow.","operationId":"google_oauth_callback_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":false,"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"}}}}}}},"/auth/github":{"get":{"tags":["authentication"],"summary":"Github Oauth","description":"Initiate GitHub OAuth flow.\n\nIf `cli_state` is provided (a signed JWT minted by `/cli/signup`),\nforward it through GitHub's `state` parameter so the callback can\nbranch into the CLI signup flow.","operationId":"github_oauth_auth_github_get","parameters":[{"name":"cli_state","in":"query","required":false,"schema":{"type":"string","title":"Cli State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/github/callback":{"get":{"tags":["authentication"],"summary":"Github Oauth Callback","description":"Handle GitHub OAuth callback.\n\nBranches on `state`: if it decodes as a CLI signup intent, mint an\nAPI key and redirect to the CLI's loopback URL. Otherwise, run the\nregular web sign-in flow.","operationId":"github_oauth_callback_auth_github_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":false,"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"}}}}}}},"/auth/verify-email":{"post":{"tags":["authentication"],"summary":"Verify Email","description":"Verify user email with verification code","operationId":"verify_email_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-verification":{"post":{"tags":["authentication"],"summary":"Resend Verification","description":"Resend verification email","operationId":"resend_verification_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/forgot-password":{"post":{"tags":["authentication"],"summary":"Forgot Password","description":"Request password reset code","operationId":"forgot_password_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset-password":{"post":{"tags":["authentication"],"summary":"Reset Password","description":"Reset password with verification code","operationId":"reset_password_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/mcp-google-signup":{"post":{"tags":["authentication"],"summary":"Mcp Google Signup","description":"Create or find a user from Google OAuth info and return an API key.\nCalled by the MCP server after it verifies with Google directly.","operationId":"mcp_google_signup_auth_mcp_google_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpGoogleSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/auto-login":{"post":{"tags":["authentication"],"summary":"Auto Login","description":"Auto-login user after successful subscription","operationId":"auto_login_auth_auto_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google/drive/callback":{"get":{"tags":["authentication"],"summary":"Google Drive Oauth Callback","description":"OAuth callback: store encrypted Drive refresh token for the user in JWT state.","operationId":"google_drive_oauth_callback_auth_google_drive_callback_get","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"}}}}}}},"/voice/profiles":{"get":{"tags":["voice profiles"],"summary":"Get Voice Profiles","description":"Get all voice profiles for the current user, synced with cloud bucket","operationId":"get_voice_profiles_voice_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileList"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["voice profiles"],"summary":"Create Voice Profile","description":"Create a new voice profile","operationId":"create_voice_profile_voice_profiles_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/profiles/{voice_profile_id}":{"get":{"tags":["voice profiles"],"summary":"Get Voice Profile","description":"Get a specific voice profile","operationId":"get_voice_profile_voice_profiles__voice_profile_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_profile_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["voice profiles"],"summary":"Update Voice Profile","description":"Update a voice profile","operationId":"update_voice_profile_voice_profiles__voice_profile_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_profile_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["voice profiles"],"summary":"Delete Voice Profile","description":"Delete a voice profile","operationId":"delete_voice_profile_voice_profiles__voice_profile_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"voice_profile_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/voice/profiles/default":{"get":{"tags":["voice profiles"],"summary":"Get Default Voice Profile","description":"Get the default voice profile for the current user","operationId":"get_default_voice_profile_voice_profiles_default_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/profiles/upload":{"post":{"tags":["voice profiles"],"summary":"Create Voice Profile With Upload","description":"Create a voice profile by uploading voice sample and preview files","operationId":"create_voice_profile_with_upload_voice_profiles_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_voice_profile_with_upload_voice_profiles_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/elevenlabs/status":{"get":{"tags":["elevenlabs"],"summary":"Elevenlabs Status","operationId":"elevenlabs_status_api_elevenlabs_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/elevenlabs/connect":{"post":{"tags":["elevenlabs"],"summary":"Connect Elevenlabs","operationId":"connect_elevenlabs_api_elevenlabs_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectElevenLabsRequest"}}},"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":[]}]},"delete":{"tags":["elevenlabs"],"summary":"Disconnect Elevenlabs","operationId":"disconnect_elevenlabs_api_elevenlabs_connect_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/elevenlabs/voices":{"get":{"tags":["elevenlabs"],"summary":"Elevenlabs Voices","operationId":"elevenlabs_voices_api_elevenlabs_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/video/videos":{"get":{"tags":["videos and processing"],"summary":"Get User Videos","description":"Get paginated videos for the current user","operationId":"get_user_videos_video_videos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/videos/{video_id}":{"get":{"tags":["videos and processing"],"summary":"Get Video","description":"Get a specific video","operationId":"get_video_video_videos__video_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs":{"get":{"tags":["videos and processing"],"summary":"Get User Processing Jobs","description":"Get paginated processing jobs for the current user\n\nNote: Free tier users will see empty results (videos are hidden from Narrated Videos section)","operationId":"get_user_processing_jobs_video_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessingJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}":{"get":{"tags":["videos and processing"],"summary":"Get Processing Job","description":"Get a specific processing job","operationId":"get_processing_job_video_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessingJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["videos and processing"],"summary":"Delete Processing Job","description":"Delete a processing job immediately from database.\nCloud storage cleanup happens in background (non-blocking).","operationId":"delete_processing_job_video_jobs__job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}/preview-url":{"get":{"tags":["videos and processing"],"summary":"Get Job Preview Url","description":"Generate a signed preview URL for a completed job's output video","operationId":"get_job_preview_url_video_jobs__job_id__preview_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}/download-url":{"get":{"tags":["videos and processing"],"summary":"Get Job Download Url","description":"Generate a signed download URL for a completed job's output video","operationId":"get_job_download_url_video_jobs__job_id__download_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}/download-srt":{"get":{"tags":["videos and processing"],"summary":"Get Job Srt Download Url","description":"Generate a signed download URL for a completed job's SRT subtitle file","operationId":"get_job_srt_download_url_video_jobs__job_id__download_srt_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}/translate-for-dubbing":{"post":{"tags":["videos and processing"],"summary":"Translate Job For Dubbing","description":"Translate an existing narrated video's transcript and create a dubbing job.\nCreates a copy of the source folder (name_{language}), copies narrated video + transcript,\nthen refinement plays from new folder. On continue, output replaces narrated video in new folder only.\nOriginal folder stays untouched.","operationId":"translate_job_for_dubbing_video_jobs__job_id__translate_for_dubbing_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateForDubbingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/jobs/{job_id}/load-for-feedback":{"get":{"tags":["videos and processing"],"summary":"Load Job For Feedback","description":"Load transcript, frames, and frame analysis from cloud for feedback flow","operationId":"load_job_for_feedback_video_jobs__job_id__load_for_feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/load-transcript-from-video-path":{"get":{"tags":["videos and processing"],"summary":"Load Transcript From Video Path","description":"Load transcript from cloud video path (for comparison screen 'Need Changes')","operationId":"load_transcript_from_video_path_video_load_transcript_from_video_path_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"video_path","in":"query","required":true,"schema":{"type":"string","title":"Video Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/":{"get":{"tags":["API Keys"],"summary":"Get Api Keys","description":"Get all API keys for the current user.\n\nNote: This only returns masked keys (e.g., \"demo_sk_live_abc...xyz\").\nThe full key is never stored or retrievable after creation.","operationId":"get_api_keys_api_keys__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyList"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["API Keys"],"summary":"Create Api Key","description":"Create a new API key.\n\n**IMPORTANT**: The full API key is only shown ONCE in this response.\nMake sure to copy it immediately - you won't be able to see it again!\n\n- **name**: A friendly name for this key (e.g., \"Production Server\", \"Mobile App\")\n- **key_type**: Either \"live\" or \"test\" (test keys are for development)\n- **expires_at**: Optional expiration date","operationId":"create_api_key_api_keys__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api-keys/{key_id}":{"get":{"tags":["API Keys"],"summary":"Get Api Key","description":"Get a specific API key by ID","operationId":"get_api_key_api_keys__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["API Keys"],"summary":"Update Api Key","description":"Update an API key.\n\nYou can update:\n- **name**: Change the friendly name\n- **is_active**: Enable or disable the key","operationId":"update_api_key_api_keys__key_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["API Keys"],"summary":"Delete Api Key","description":"Delete (permanently remove) an API key.\n\nThis action cannot be undone. Any applications using this key will\nimmediately lose access.","operationId":"delete_api_key_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/{key_id}/revoke":{"post":{"tags":["API Keys"],"summary":"Revoke Api Key","description":"Revoke an API key (soft delete).\n\nThis disables the key but keeps it in your records for audit purposes.\nYou can re-enable it later by updating is_active to true.","operationId":"revoke_api_key_api_keys__key_id__revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api-keys/{key_id}/stats":{"get":{"tags":["API Keys"],"summary":"Get Api Key Stats","description":"Get usage statistics for an API key.\n\nThis is useful for monitoring and billing purposes.","operationId":"get_api_key_stats_api_keys__key_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription/usage":{"get":{"tags":["subscription"],"summary":"Get Usage","description":"Get current usage statistics for the user","operationId":"get_usage_subscription_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/subscription/sync-usage":{"post":{"tags":["subscription"],"summary":"Sync Usage To Stripe","description":"Manually sync usage data to Stripe","operationId":"sync_usage_to_stripe_subscription_sync_usage_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/subscription/create-checkout-session":{"post":{"tags":["subscription"],"summary":"Create Checkout Session","description":"Create a Stripe checkout session for subscription or add-on","operationId":"create_checkout_session_subscription_create_checkout_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"price_id","in":"query","required":true,"schema":{"type":"string","title":"Price Id"}},{"name":"quantity","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Quantity"}},{"name":"gclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gclid"}},{"name":"wbraid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wbraid"}},{"name":"gbraid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gbraid"}},{"name":"ga_client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ga Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription/create-payg-checkout":{"post":{"tags":["subscription"],"summary":"Create Payg Checkout","description":"Start Checkout for a custom minute purchase. $5 minimum. No Stripe Price to create.","operationId":"create_payg_checkout_subscription_create_payg_checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"amount_cents","in":"query","required":true,"schema":{"type":"integer","title":"Amount Cents"}},{"name":"gclid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gclid"}},{"name":"wbraid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wbraid"}},{"name":"gbraid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gbraid"}},{"name":"ga_client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ga Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription/create-portal-session":{"post":{"tags":["subscription"],"summary":"Create Portal Session","description":"Create a Stripe customer portal session","operationId":"create_portal_session_subscription_create_portal_session_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/subscription/price-ids":{"get":{"tags":["subscription"],"summary":"Get Price Ids","description":"Get Stripe price IDs for frontend","operationId":"get_price_ids_subscription_price_ids_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/subscription/promo/usage":{"get":{"tags":["subscription"],"summary":"Get Promo Usage","description":"Get promo code usage statistics (public endpoint, no auth required)","operationId":"get_promo_usage_subscription_promo_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/subscription/status":{"get":{"tags":["subscription"],"summary":"Get Subscription Status","description":"Get current subscription status","operationId":"get_subscription_status_subscription_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/subscription/storage":{"get":{"tags":["subscription"],"summary":"Get Storage Info","description":"Get detailed storage information (calculated on-demand, can be slow)","operationId":"get_storage_info_subscription_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/subscription/success":{"get":{"tags":["subscription"],"summary":"Subscription Success","description":"Handle successful subscription checkout","operationId":"subscription_success_subscription_success_get","parameters":[{"name":"session_id","in":"query","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"}}}}}}},"/subscription/cancel":{"get":{"tags":["subscription"],"summary":"Subscription Cancel","description":"Handle cancelled subscription checkout","operationId":"subscription_cancel_subscription_cancel_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/subscription/webhook":{"post":{"tags":["subscription"],"summary":"Stripe Webhook","description":"Handle Stripe webhooks for subscription events","operationId":"stripe_webhook_subscription_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/documents":{"get":{"tags":["documents"],"summary":"Get User Documents","description":"Get paginated documents for the current user\n\nNote: Free tier users will see empty results (documents are hidden from Documents section)","operationId":"get_user_documents_documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}":{"get":{"tags":["documents"],"summary":"Get Document","description":"Get a specific document","operationId":"get_document_documents__document_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["documents"],"summary":"Delete Document","description":"Delete a document","operationId":"delete_document_documents__document_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/update":{"post":{"tags":["documents"],"summary":"Update Document","description":"Update a document's edited markdown (POST endpoint)","operationId":"update_document_documents__document_id__update_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/load-for-editor":{"get":{"tags":["documents"],"summary":"Load Document For Editor","description":"Load document with frames for editor (similar to load_job_for_feedback)","operationId":"load_document_for_editor_documents__document_id__load_for_editor_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/download/{format}":{"get":{"tags":["documents"],"summary":"Download Document","description":"Download document as markdown (PDF/DOCX handled client-side like transcript refinement screen)","operationId":"download_document_documents__document_id__download__format__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}},{"name":"format","in":"path","required":true,"schema":{"type":"string","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/batch/drive/status":{"get":{"tags":["batch-drive"],"summary":"Drive Connection Status","operationId":"drive_connection_status_api_batch_drive_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/batch/drive/connect-url":{"post":{"tags":["batch-drive"],"summary":"Drive Connect Url","operationId":"drive_connect_url_api_batch_drive_connect_url_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/batch/drive/disconnect":{"post":{"tags":["batch-drive"],"summary":"Drive Disconnect","operationId":"drive_disconnect_api_batch_drive_disconnect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/batch/drive/preview":{"post":{"tags":["batch-drive"],"summary":"Drive Preview Folder","operationId":"drive_preview_folder_api_batch_drive_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderPreviewRequest"}}},"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/batch/drive/stage":{"post":{"tags":["batch-drive"],"summary":"Drive Stage File","operationId":"drive_stage_file_api_batch_drive_stage_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StageRequest"}}},"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/batch/drive/export-narrated-folder":{"post":{"tags":["batch-drive"],"summary":"Export Narrated Folder","description":"Create a new Drive folder and upload narrated MP4s from completed jobs (GCS → Drive).","operationId":"export_narrated_folder_api_batch_drive_export_narrated_folder_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportNarratedRequest"}}},"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":[]}]}},"/legal/documents/{document_type}":{"get":{"tags":["legal documents"],"summary":"Get Legal Document","description":"Get a legal document by type (terms, privacy, voice_cloning_disclaimer)","operationId":"get_legal_document_legal_documents__document_type__get","parameters":[{"name":"document_type","in":"path","required":true,"schema":{"type":"string","title":"Document Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalDocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/legal/accept":{"post":{"tags":["legal documents"],"summary":"Accept Legal Document","description":"Record acceptance of a legal document","operationId":"accept_legal_document_legal_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalAcceptanceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalAcceptanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/legal/acceptance-status":{"get":{"tags":["legal documents"],"summary":"Get Acceptance Status","description":"Get current user's legal document acceptance status","operationId":"get_acceptance_status_legal_acceptance_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Acceptance Status Legal Acceptance Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/install.sh":{"get":{"tags":["cli-signup"],"summary":"Install Script","description":"Serve the one-curl installer for narrateai-demomaker.\n\nPublic entrypoint:\n    curl -sSL https://narrateai.app/install.sh | bash\n\nThe script is checked into the repo at `scripts/install-demomaker.sh`\nand is the source of truth — this route just streams its bytes with\nthe right Content-Type so curl-piped-to-bash works cleanly.","operationId":"install_script_install_sh_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/cli/signup":{"get":{"tags":["cli-signup"],"summary":"Cli Signup Page","description":"Render the NarrateAI sign-in landing page for the CLI loopback flow.","operationId":"cli_signup_page_cli_signup_get","parameters":[{"name":"cb","in":"query","required":true,"schema":{"type":"string","title":"Cb"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"demomaker","title":"Product"}},{"name":"version","in":"query","required":false,"schema":{"type":"string","default":"","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice-design/defaults":{"get":{"tags":["voice design"],"summary":"Voice Design Defaults","description":"The line a new voice says in each language, using a speakable first name.","operationId":"voice_design_defaults_api_voice_design_defaults_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceDesignDefaults"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/voice-design/check":{"post":{"tags":["voice design"],"summary":"Check Voice Design","description":"Read the prompt before any audio is made.\n\nA supported accent from another language returns the language to switch to.\nAn accent from outside the ten languages is refused. Neither case generates audio.","operationId":"check_voice_design_api_voice_design_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceDesignCheckRequest"}}},"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/voice-design/preview":{"post":{"tags":["voice design"],"summary":"Create Voice Design Preview","description":"Generate one to three takes of the described voice speaking the line.\n\nVoice Design speaks the selected language directly, so each take is the clip\nthat gets saved, with the line as its transcript.","operationId":"create_voice_design_preview_api_voice_design_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceDesignPreviewRequest"}}},"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/speech/defaults":{"get":{"tags":["speech"],"summary":"Speech Defaults","operationId":"speech_defaults_api_speech_defaults_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/speech/history":{"get":{"tags":["speech"],"summary":"Speech History","operationId":"speech_history_api_speech_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/speech/history/{speech_id}/file":{"get":{"tags":["speech"],"summary":"Speech File","operationId":"speech_file_api_speech_history__speech_id__file_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"speech_id","in":"path","required":true,"schema":{"type":"string","title":"Speech Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/speech/history/{speech_id}":{"delete":{"tags":["speech"],"summary":"Remove Speech","operationId":"remove_speech_api_speech_history__speech_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"speech_id","in":"path","required":true,"schema":{"type":"string","title":"Speech Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs":{"post":{"tags":["workflow-studio"],"summary":"Create Workflow Job","operationId":"create_workflow_job_workflow_studio_jobs_post","security":[{"HTTPBearer":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_workflow_job_workflow_studio_jobs_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workflow-studio"],"summary":"List Workflow Jobs","operationId":"list_workflow_jobs_workflow_studio_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},{"name":"unassigned","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unassigned"}},{"name":"lite","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Lite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/projects":{"get":{"tags":["workflow-studio"],"summary":"List Workflow Projects","operationId":"list_workflow_projects_workflow_studio_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioProjectListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["workflow-studio"],"summary":"Create Workflow Project","operationId":"create_workflow_project_workflow_studio_projects_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_workflow_project_workflow_studio_projects_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/workflow-studio/projects/{project_id}":{"get":{"tags":["workflow-studio"],"summary":"Get Workflow Project","operationId":"get_workflow_project_workflow_studio_projects__project_id__get","security":[{"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/WorkflowStudioProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["workflow-studio"],"summary":"Update Workflow Project","operationId":"update_workflow_project_workflow_studio_projects__project_id__put","security":[{"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_update_workflow_project_workflow_studio_projects__project_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflow-studio"],"summary":"Delete Workflow Project","operationId":"delete_workflow_project_workflow_studio_projects__project_id__delete","security":[{"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/WorkflowStudioJobCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/projects/{project_id}/logo":{"get":{"tags":["workflow-studio"],"summary":"Get Workflow Project Logo","operationId":"get_workflow_project_logo_workflow_studio_projects__project_id__logo_get","security":[{"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"}}}}}}},"/workflow-studio/jobs/{job_id}":{"get":{"tags":["workflow-studio"],"summary":"Get Workflow Job","operationId":"get_workflow_job_workflow_studio_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"lite","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Lite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflow-studio"],"summary":"Delete Workflow Job","operationId":"delete_workflow_job_workflow_studio_jobs__job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/second-frames":{"post":{"tags":["workflow-studio"],"summary":"Ensure Workflow Second Frames","description":"Publish every 1fps still into the editor catalog. Does not change chapters.","operationId":"ensure_workflow_second_frames_workflow_studio_jobs__job_id__second_frames_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/stills":{"post":{"tags":["workflow-studio"],"summary":"Upload Workflow Still","description":"Attach a screenshot to a stills storyboard. No agents.","operationId":"upload_workflow_still_workflow_studio_jobs__job_id__stills_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_workflow_still_workflow_studio_jobs__job_id__stills_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/recording":{"post":{"tags":["workflow-studio"],"summary":"Attach Workflow Recording","description":"Attach a short recording to one stills chapter. Several files. Each clip is at most 10 seconds.","operationId":"attach_workflow_recording_workflow_studio_jobs__job_id__recording_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_attach_workflow_recording_workflow_studio_jobs__job_id__recording_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/storyboard":{"put":{"tags":["workflow-studio"],"summary":"Update Workflow Storyboard","operationId":"update_workflow_storyboard_workflow_studio_jobs__job_id__storyboard_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioStoryboardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/render":{"post":{"tags":["workflow-studio"],"summary":"Render Workflow Job","operationId":"render_workflow_job_workflow_studio_jobs__job_id__render_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/assets/{filename}":{"get":{"tags":["workflow-studio"],"summary":"Get Workflow Asset","description":"Serve extracted screenshots / video frames for the storyboard editor.","operationId":"get_workflow_asset_workflow_studio_jobs__job_id__assets__filename__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/source":{"get":{"tags":["workflow-studio"],"summary":"Get Workflow Source Recording","description":"Source screen recording for review (the subclip Remotion will play).","operationId":"get_workflow_source_recording_workflow_studio_jobs__job_id__source_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/video":{"get":{"tags":["workflow-studio"],"summary":"Download Workflow Video","operationId":"download_workflow_video_workflow_studio_jobs__job_id__video_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/media-urls":{"get":{"tags":["workflow-studio"],"summary":"Workflow Media Signed Urls","description":"Signed stills and source when already in GCS. Browser loads them directly.","operationId":"workflow_media_signed_urls_workflow_studio_jobs__job_id__media_urls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioMediaUrlsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/video-url":{"get":{"tags":["workflow-studio"],"summary":"Workflow Video Signed Urls","operationId":"workflow_video_signed_urls_workflow_studio_jobs__job_id__video_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/cleanup":{"post":{"tags":["workflow-studio"],"summary":"Cleanup Workflow Job Temps","description":"Drop local temps if this user's completed film is already in GCS.","operationId":"cleanup_workflow_job_temps_workflow_studio_jobs__job_id__cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioJobCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workflow-studio/jobs/{job_id}/prepare-narration":{"post":{"tags":["workflow-studio"],"summary":"Prepare Workflow Narration","operationId":"prepare_workflow_narration_workflow_studio_jobs__job_id__prepare_narration_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStudioNarratePrepResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/appsumo/redeem":{"post":{"tags":["appsumo"],"summary":"Redeem Appsumo Code","operationId":"redeem_appsumo_code_api_appsumo_redeem_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemRequest"}}},"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/appsumo/status":{"get":{"tags":["appsumo"],"summary":"Appsumo Status","operationId":"appsumo_status_api_appsumo_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/":{"get":{"summary":"Root","description":"Serve the home page","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/video-narration":{"get":{"summary":"Video Narration Page","description":"Serve the video narration feature page","operationId":"video_narration_page_video_narration_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/voice-cloning":{"get":{"summary":"Voice Cloning Page","description":"Serve the voice cloning feature page","operationId":"voice_cloning_page_voice_cloning_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/voice-creator":{"get":{"summary":"Voice Creator Page","description":"Serve the Voice Creator feature page.","operationId":"voice_creator_page_voice_creator_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/document-generation":{"get":{"summary":"Document Generation Page","description":"Serve the document generation feature page","operationId":"document_generation_page_document_generation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auto-dubbing":{"get":{"summary":"Auto Dubbing Page","description":"Serve the auto-dubbing feature page","operationId":"auto_dubbing_page_auto_dubbing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/faq":{"get":{"summary":"Faq Page","description":"Serve the FAQ page","operationId":"faq_page_faq_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/about":{"get":{"summary":"About Page","description":"Serve the About / founder page.","operationId":"about_page_about_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/pricing":{"get":{"summary":"Pricing Page","description":"Serve the dedicated public pricing page (shareable URL for SEO and conversion).","operationId":"pricing_page_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/lifetime-deal":{"get":{"summary":"Lifetime Deal Page","description":"AppSumo lifetime-deal landing page. The button leaves the site; the page does not redirect.","operationId":"lifetime_deal_page_lifetime_deal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"summary":"Mcp Page","description":"Serve the MCP landing page","operationId":"mcp_page_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/demomaker":{"get":{"summary":"Demomaker Page","description":"Serve the DemoMaker landing page (narrateai-demomaker MCP).","operationId":"demomaker_page_demomaker_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/flow":{"get":{"summary":"Flow Page","description":"Serve the Flow landing page.","operationId":"flow_page_flow_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Privacy Policy Page","description":"Serve the standalone Privacy Policy page.\n\nRenders the same markdown content as the in-app footer modal (single\nsource of truth in app/routers/legal.py → get_privacy_policy_content),\njust at a stable public URL. Linked from:\n  - Cursor / Claude plugin marketplace listings\n  - The CLI signup page (/cli/signup) consent links\n  - Auth modals on every marketing page","operationId":"privacy_policy_page_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms":{"get":{"summary":"Terms Of Use Page","description":"Serve the standalone Terms of Use page. See /privacy for the pattern.","operationId":"terms_of_use_page_terms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog":{"get":{"summary":"Blog Page","description":"Serve the blog page","operationId":"blog_page_blog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Post Page","description":"Serve individual blog articles (canonical on-site versions).","operationId":"blog_post_page_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/home.html":{"get":{"summary":"Home Page Legacy","description":"Legacy route - redirects to home","operationId":"home_page_legacy_home_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/landing.html":{"get":{"summary":"Landing Page Legacy","description":"Legacy route - redirects to video-narration","operationId":"landing_page_legacy_landing_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/voice-cloning.html":{"get":{"summary":"Voice Cloning Page Legacy","description":"Legacy route - redirects to voice-cloning","operationId":"voice_cloning_page_legacy_voice_cloning_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feature-flags":{"get":{"summary":"Get Feature Flags","description":"Get feature flags for frontend","operationId":"get_feature_flags_api_feature_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app":{"get":{"summary":"App Page","description":"Serve the main application page - client-side handles authentication","operationId":"app_page_app_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/google-ads-conversions.js":{"get":{"summary":"Google Ads Conversions Js","description":"Google Ads signup/purchase conversion helper used on public pages and /app.","operationId":"google_ads_conversions_js_google_ads_conversions_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/redeem":{"get":{"summary":"Redeem Page","description":"AppSumo code redemption. Buyers land here from Redeem now.","operationId":"redeem_page_redeem_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/app/{path}":{"get":{"summary":"App Sections","description":"Catch-all for /app/* routes - serve the same index.html for client-side routing","operationId":"app_sections_app__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify-email.html":{"get":{"summary":"Verify Email Page","description":"Serve the email verification page","operationId":"verify_email_page_verify_email_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/examples.html":{"get":{"summary":"Examples Page","description":"Serve the example videos page","operationId":"examples_page_examples_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"Serve the sitemap.xml for SEO","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"Serve the robots.txt for SEO","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/Logo2.1.png":{"get":{"summary":"Serve Logo","description":"Serve the NarrateAI logo","operationId":"serve_logo_Logo2_1_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/appsumo-radar.png":{"get":{"summary":"Serve Appsumo Radar Logo","description":"Official AppSumo Radar lockup for marketing pages and email.","operationId":"serve_appsumo_radar_logo_appsumo_radar_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image.png":{"get":{"summary":"Serve Og Image","description":"Serve the OG image for social media sharing","operationId":"serve_og_image_og_image_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-voice-cloning.png":{"get":{"summary":"Serve Og Image Voice Cloning","description":"Serve the OG image for voice cloning page social media sharing","operationId":"serve_og_image_voice_cloning_og_image_voice_cloning_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-voice-creator.png":{"get":{"summary":"Serve Og Image Voice Creator","description":"Serve the OG image for Voice Creator page social media sharing","operationId":"serve_og_image_voice_creator_og_image_voice_creator_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-home.png":{"get":{"summary":"Serve Og Image Home","description":"Serve the OG image for home page social media sharing","operationId":"serve_og_image_home_og_image_home_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-document-generation.png":{"get":{"summary":"Serve Og Image Document Generation","description":"Serve the OG image for document generation page social media sharing","operationId":"serve_og_image_document_generation_og_image_document_generation_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-auto-dubbing.png":{"get":{"summary":"Serve Og Image Auto Dubbing","description":"Serve the OG image for auto-dubbing page social media sharing","operationId":"serve_og_image_auto_dubbing_og_image_auto_dubbing_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/og-image-flow.png":{"get":{"summary":"Serve Og Image Flow","description":"Serve the OG image for Flow page social media sharing","operationId":"serve_og_image_flow_og_image_flow_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog1.webp":{"get":{"summary":"Blog Image 1","description":"Serve blog post 1 featured image","operationId":"blog_image_1_blog1_webp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/blog2.webp":{"get":{"summary":"Blog Image 2","description":"Serve blog post 2 featured image","operationId":"blog_image_2_blog2_webp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/z-axissLogo.jpeg":{"get":{"summary":"Serve Zaxiss Logo","description":"Serve Z-Axiss logo for featured testimonial","operationId":"serve_zaxiss_logo_z_axissLogo_jpeg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dashboard/stats":{"get":{"summary":"Get Dashboard Stats","description":"Get dashboard statistics for the user","operationId":"get_dashboard_stats_api_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/early-upload-frames/{job_id}":{"post":{"summary":"Trigger Early Upload Frames","description":"Trigger early cloud upload of frames, frame analysis, and keyframes when transcript refinement screen appears","operationId":"trigger_early_upload_frames_api_early_upload_frames__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/save-voice-preview":{"post":{"summary":"Save Voice Preview","description":"Save voice preview audio file for voice profiles\n\nFor free users: is_pending=True allows temporary save before subscription\nFor paid users: Normal save, is_pending is ignored","operationId":"save_voice_preview_api_save_voice_preview_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_save_voice_preview_api_save_voice_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":[]}]}},"/api/providers":{"get":{"summary":"Get Available Providers","description":"Get information about available LLM providers","operationId":"get_available_providers_api_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice-preview-file/{preview_id}":{"get":{"summary":"Get Voice Preview File","description":"Serve voice preview audio files","operationId":"get_voice_preview_file_api_voice_preview_file__preview_id__get","parameters":[{"name":"preview_id","in":"path","required":true,"schema":{"type":"string","title":"Preview Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/process":{"post":{"summary":"Process Video","description":"Process uploaded video and generate narration using Google ADK agents","operationId":"process_video_api_process_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_process_video_api_process_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/process/authenticated":{"post":{"summary":"Process Video Authenticated","description":"Process uploaded video with user authentication and database persistence","operationId":"process_video_authenticated_api_process_authenticated_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_process_video_authenticated_api_process_authenticated_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/upload-url":{"post":{"summary":"Generate Upload Url","description":"Generate a signed upload URL for direct cloud upload","operationId":"generate_upload_url_api_upload_url_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_generate_upload_url_api_upload_url_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/temp-upload-url":{"post":{"summary":"Generate Temp Upload Url","description":"Generate a temporary signed upload URL for cost-optimized uploads","operationId":"generate_temp_upload_url_api_temp_upload_url_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_generate_temp_upload_url_api_temp_upload_url_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/temp-download-url":{"post":{"summary":"Generate Temp Download Url","description":"Generate a temporary signed download URL for a file in GCS temp storage.","operationId":"generate_temp_download_url_api_temp_download_url_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_generate_temp_download_url_api_temp_download_url_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/cleanup-temp-file":{"post":{"summary":"Cleanup Temp File","description":"Clean up a temporary file from cloud storage (for cancelled uploads)","operationId":"cleanup_temp_file_api_cleanup_temp_file_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/process/cloud":{"post":{"summary":"Process Video Cloud","description":"Process video that was uploaded directly to cloud storage","operationId":"process_video_cloud_api_process_cloud_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_process_video_cloud_api_process_cloud_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/process/temp":{"post":{"summary":"Process Video Temp","description":"Process video from temporary cloud storage (cost-optimized)","operationId":"process_video_temp_api_process_temp_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_process_video_temp_api_process_temp_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/process/dubbing":{"post":{"summary":"Process Video Dubbing","description":"Process video for auto-dubbing: transcribe with Whisper, translate, then continue with normal flow","operationId":"process_video_dubbing_api_process_dubbing_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_process_video_dubbing_api_process_dubbing_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/process/dubbing-full":{"post":{"summary":"Process Video Dubbing Full","description":"Full auto-dubbing: transcribe -> translate -> extract voice from video -> TTS with cloned voice -> video.\nNo refinement screen. Agent MUST ask for source_language, target_language, preserve_background_music.","operationId":"process_video_dubbing_full_api_process_dubbing_full_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_process_video_dubbing_full_api_process_dubbing_full_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/process/transcribe":{"post":{"summary":"Process Video Transcribe","description":"Transcription only: video with existing voice -> speech-to-text -> timed transcript.\nNo translation, no TTS, no video output. Uses same pipeline as auto-dubbing (Whisper/Qwen).\nFor MCP: agent MUST ask user for source_language if not specified.","operationId":"process_video_transcribe_api_process_transcribe_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_process_video_transcribe_api_process_transcribe_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/process/translate":{"post":{"summary":"Process Video Translate","description":"Translation (new upload): video with voice -> transcribe -> translate -> translated transcript.\nNo TTS, no video output. Same pipeline as auto-dubbing up to translation.\nAgent MUST ask for source_language and target_language if not specified.","operationId":"process_video_translate_api_process_translate_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_process_video_translate_api_process_translate_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/translate-transcript":{"post":{"summary":"Translate Existing Transcript","description":"Translation (existing video): Load transcript from cloud for a completed narrated/dubbed\nvideo, translate to target language, return translated transcript. No new upload.","operationId":"translate_existing_transcript_api_translate_transcript_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_translate_existing_transcript_api_translate_transcript_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/active-job":{"get":{"summary":"Get Active Job Status","description":"Get the user's current active job status with recovery for stale states","operationId":"get_active_job_status_api_active_job_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/abandon-job/{job_id}":{"post":{"summary":"Abandon Job","description":"Abandon a processing job - clears active job flag and allows new uploads","operationId":"abandon_job_api_abandon_job__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/status/{job_id}":{"get":{"summary":"Get Processing Status","description":"Get processing status for a job with database fallback","operationId":"get_processing_status_api_status__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/download/{job_id}":{"get":{"summary":"Download Video","description":"Download processed video","operationId":"download_video_api_download__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-url/{job_id}":{"get":{"summary":"Get Video Url","description":"Get signed URL for completed narrated video (for API/MCP clients).","operationId":"get_video_url_api_video_url__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transcript/{job_id}":{"get":{"summary":"Get Transcript","description":"Get current transcript for review and refinement with database/cloud fallback","operationId":"get_transcript_api_transcript__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document/{job_id}":{"get":{"summary":"Get Document","description":"Get generated document for a job","operationId":"get_document_api_document__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job 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 Document","description":"Save edited document markdown for a job","operationId":"save_document_api_document__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document/{job_id}/keyframes/{phase_index}":{"get":{"summary":"Get Section Keyframes","description":"Get all available keyframes for a specific section/phase - loads from local or cloud","operationId":"get_section_keyframes_api_document__job_id__keyframes__phase_index__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"phase_index","in":"path","required":true,"schema":{"type":"integer","title":"Phase Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transcript-download/{job_id}":{"get":{"summary":"Download Transcript","description":"Download transcript in specified format","operationId":"download_transcript_api_transcript_download__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Format: txt, srt, vtt","default":"txt","title":"Format"},"description":"Format: txt, srt, vtt"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-segment/{job_id}/{segment_id}":{"get":{"summary":"Get Video Segment","description":"Get video segment for a specific transcript chunk","operationId":"get_video_segment_api_video_segment__job_id___segment_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"segment_id","in":"path","required":true,"schema":{"type":"string","title":"Segment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-segments/{job_id}":{"get":{"summary":"Get Video Segments Info","description":"Get information about all video segments for a job","operationId":"get_video_segments_info_api_video_segments__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cleanup-video-segments":{"post":{"summary":"Cleanup Video Segments","description":"Clean up old video segments from cache","operationId":"cleanup_video_segments_api_cleanup_video_segments_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feedback/{job_id}":{"post":{"summary":"Process Feedback","description":"Process user feedback and smart reprocess\nSupports both general feedback and segment-specific feedback","operationId":"process_feedback_api_feedback__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Feedback Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback-status/{job_id}":{"get":{"summary":"Get Feedback Processing Status","description":"Get detailed status of feedback processing","operationId":"get_feedback_processing_status_api_feedback_status__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-comparison/{job_id}":{"get":{"summary":"Get Video Comparison","description":"Get both old and new video for comparison after feedback processing","operationId":"get_video_comparison_api_video_comparison__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/satisfaction/{job_id}":{"post":{"summary":"Record Satisfaction","description":"Record user satisfaction for learning","operationId":"record_satisfaction_api_satisfaction__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Satisfaction Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/job-cloud-upload-status/{job_id}":{"get":{"summary":"Check Job Cloud Upload Status","description":"Check if cloud upload is complete for a job (verifies final video is uploaded)","operationId":"check_job_cloud_upload_status_api_job_cloud_upload_status__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cleanup-job/{job_id}":{"post":{"summary":"Cleanup Job Endpoint","description":"Clean up temp files for a specific job (with cloud upload verification) - non-blocking","operationId":"cleanup_job_endpoint_api_cleanup_job__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/learning-insights":{"get":{"summary":"Get Learning Insights","description":"Get learning insights and analytics","operationId":"get_learning_insights_api_learning_insights_get","parameters":[{"name":"time_period_hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Time Period Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-performance":{"get":{"summary":"Get Agent Performance","description":"Get performance metrics for each agent","operationId":"get_agent_performance_api_agent_performance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/test-video-segment/{job_id}":{"get":{"summary":"Test Video Segment","description":"Test endpoint to verify video segment extraction","operationId":"test_video_segment_api_test_video_segment__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"start_time","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"Start Time"}},{"name":"duration","in":"query","required":false,"schema":{"type":"number","default":5.0,"title":"Duration"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/resume-after-trim/{job_id}":{"post":{"summary":"Resume After Trim","description":"Resume processing after video trimming is complete","operationId":"resume_after_trim_api_resume_after_trim__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/refine/{job_id}":{"post":{"summary":"Refine Transcript","description":"Refine transcript based on user feedback","operationId":"refine_transcript_api_refine__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Feedback"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/update-transcript/{job_id}":{"post":{"summary":"Update Transcript","description":"Update transcript chunks directly without going through refinement agent","operationId":"update_transcript_api_update_transcript__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Transcript Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transcript/{job_id}/segments/{segment_index}/ai-edit":{"post":{"summary":"Ai Edit Transcript Segment Endpoint","description":"AI rewrite for a single transcript segment during refinement (demo narration only).","operationId":"ai_edit_transcript_segment_endpoint_api_transcript__job_id__segments__segment_index__ai_edit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"segment_index","in":"path","required":true,"schema":{"type":"integer","title":"Segment Index"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/start-edit-video/{job_id}":{"post":{"summary":"Start Edit Video","description":"Start editing a completed narrated video - creates new version folder and ProcessingJob","operationId":"start_edit_video_api_start_edit_video__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apply-deletions/{job_id}":{"post":{"summary":"Apply Deletions To Video","description":"Apply deletion ranges to video preview (non-blocking, async)","operationId":"apply_deletions_to_video_api_apply_deletions__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Deletion Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice-clone/{job_id}":{"post":{"summary":"Upload Voice Sample","description":"Upload and process voice sample for cloning with quality settings","operationId":"upload_voice_sample_api_voice_clone__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_voice_sample_api_voice_clone__job_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/extract-voice-from-video/{job_id}":{"post":{"summary":"Extract Voice From Video","description":"Extract 30 seconds of audio from video for Auto-Dubbing voice cloning.\nSimple extraction - just get first 30 seconds of audio.","operationId":"extract_voice_from_video_api_extract_voice_from_video__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice-sample/{job_id}":{"get":{"summary":"Get Voice Sample","description":"Serve the processed voice sample file","operationId":"get_voice_sample_api_voice_sample__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice-files/{file_path}":{"get":{"summary":"Serve Voice File","description":"Serve voice files from saved_voices directory","operationId":"serve_voice_file_api_voice_files__file_path__get","parameters":[{"name":"file_path","in":"path","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice-profile/{voice_id}/audio":{"get":{"summary":"Get Voice Profile Audio","description":"Get audio file for a specific voice profile","operationId":"get_voice_profile_audio_api_voice_profile__voice_id__audio_get","security":[{"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/voice-profile/{voice_id}/download":{"get":{"summary":"Download Voice Profile","description":"Download audio file for a specific voice profile","operationId":"download_voice_profile_api_voice_profile__voice_id__download_get","security":[{"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/voice-preview/{job_id}":{"post":{"summary":"Generate Voice Preview","description":"Generate a preview of the cloned voice with current settings","operationId":"generate_voice_preview_api_voice_preview__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Preview Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/generate":{"post":{"summary":"Generate Voice Standalone","description":"Standalone voice generation endpoint for API users.\nGenerate audio with cloned voice from any text without video processing.\n\nEither provide voice_profile_id OR upload voice_sample file.","operationId":"generate_voice_standalone_api_voice_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_voice_standalone_api_voice_generate_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/voice-cloning/generate":{"post":{"summary":"Generate Voice Cloning","description":"Voice Cloning endpoint with TTS chunking support.\nGenerates audio with cloned voice, automatically chunking text > 400 characters.\nUses same chunking logic as Narrate Your Video flow.\n\nSupports three options:\n1. voice_type: Use default AI voices (chatterbox, female1, male2, etc.)\n2. voice_profile_id: Use saved voice profile\n3. voice_sample: Upload new voice sample for cloning","operationId":"generate_voice_cloning_api_voice_cloning_generate_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_voice_cloning_api_voice_cloning_generate_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/voice-cloning/preview-default":{"post":{"summary":"Preview Voice Cloning Default Voice","description":"Return the clip played for a built-in voice. Cloning uses a different file for Male 1 and Female 1.","operationId":"preview_voice_cloning_default_voice_api_voice_cloning_preview_default_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_preview_voice_cloning_default_voice_api_voice_cloning_preview_default_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/transcript/create":{"post":{"summary":"Create Transcript Standalone","description":"Standalone transcript generation endpoint for API users.\nGenerate transcript from video with optional context documents.\nReturns transcript JSON with time segments directly.","operationId":"create_transcript_standalone_api_transcript_create_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_transcript_standalone_api_transcript_create_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/default-voice-preview/{job_id}":{"post":{"summary":"Generate Default Voice Preview","description":"Generate a preview of the selected default voice","operationId":"generate_default_voice_preview_api_default_voice_preview__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Preview Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/set-default-voice/{job_id}":{"post":{"summary":"Set Default Voice","description":"Set the default voice type for the job","operationId":"set_default_voice_api_set_default_voice__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Voice Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/update-voice-settings/{job_id}":{"post":{"summary":"Update Voice Settings","description":"Update voice cloning settings for an existing job","operationId":"update_voice_settings_api_update_voice_settings__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Settings Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback-form/{job_id}":{"post":{"summary":"Process Intelligent Feedback","description":"Process intelligent feedback using Google ADK memory and context awareness\nNOTE: This endpoint accepts form data. For JSON requests, use /api/feedback/{job_id}","operationId":"process_intelligent_feedback_api_feedback_form__job_id__post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_process_intelligent_feedback_api_feedback_form__job_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/continue/{job_id}":{"post":{"summary":"Continue Processing","description":"Continue processing after transcript refinement","operationId":"continue_processing_api_continue__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_continue_processing_api_continue__job_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video/{job_id}":{"get":{"summary":"Get Video","description":"Get the final processed video file - prefers temp file if available for better performance","operationId":"get_video_api_video__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-preview/{job_id}":{"get":{"summary":"Get Video Preview Url","description":"Get signed URL for video preview streaming from GCS","operationId":"get_video_preview_url_api_video_preview__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/video-download/{job_id}":{"get":{"summary":"Get Video Download Url","description":"Get signed URL for video download from GCS","operationId":"get_video_download_url_api_video_download__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cleanup-video/{job_id}":{"post":{"summary":"Cleanup Video","description":"Clean up TEMP video files only (NOT cloud files - needed for streaming)","operationId":"cleanup_video_api_cleanup_video__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"User-friendly name for the API key"},"key_type":{"type":"string","pattern":"^(live|test)$","title":"Key Type","description":"Type of API key: 'live' or 'test'","default":"live"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration date"}},"type":"object","required":["name"],"title":"ApiKeyCreate","description":"Schema for creating a new API key"},"ApiKeyCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key":{"type":"string","title":"Key"},"key_type":{"type":"string","title":"Key Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"warning":{"type":"string","title":"Warning","default":"Save this API key now. You won't be able to see it again!"}},"type":"object","required":["id","name","key","key_type","created_at","expires_at"],"title":"ApiKeyCreateResponse","description":"Schema for API key creation response (includes full key ONE TIME)"},"ApiKeyList":{"properties":{"api_keys":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Api Keys"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["api_keys","total"],"title":"ApiKeyList","description":"Schema for list of API keys"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"key_type":{"type":"string","title":"Key Type"},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"usage_count":{"type":"integer","title":"Usage Count"}},"type":"object","required":["id","name","key_prefix","key_type","is_active","last_used_at","created_at","expires_at","usage_count"],"title":"ApiKeyResponse","description":"Schema for API key response (without the full key)"},"ApiKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ApiKeyUpdate","description":"Schema for updating an API key"},"AutoLoginRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"AutoLoginRequest"},"Body_attach_workflow_recording_workflow_studio_jobs__job_id__recording_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"step_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Step Index"}},"type":"object","required":["video"],"title":"Body_attach_workflow_recording_workflow_studio_jobs__job_id__recording_post"},"Body_continue_processing_api_continue__job_id__post":{"properties":{"voice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Type"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"voice_sample_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Sample Path"},"voice_exaggeration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Voice Exaggeration"},"voice_cfg_weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Voice Cfg Weight"},"voice_temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Voice Temperature"},"voice_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Style"},"voice_from_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice From Source"},"voice_from_video":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice From Video"},"elevenlabs_voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Voice Id"},"elevenlabs_voice_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Voice Name"},"clone_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model"},"clone_model_explicit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model Explicit"}},"type":"object","title":"Body_continue_processing_api_continue__job_id__post"},"Body_create_transcript_standalone_api_transcript_create_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"context_docs":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Context Docs"},"video_type":{"type":"string","title":"Video Type","default":"demo"},"narration_type":{"type":"string","title":"Narration Type","default":"demo"},"style":{"type":"string","title":"Style","default":"professional"}},"type":"object","required":["video"],"title":"Body_create_transcript_standalone_api_transcript_create_post"},"Body_create_voice_profile_with_upload_voice_profiles_upload_post":{"properties":{"voice_sample":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Voice Sample"},"voice_preview":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Voice Preview"},"name":{"type":"string","title":"Name"},"exaggeration":{"type":"number","title":"Exaggeration","default":0.5},"cfg_weight":{"type":"number","title":"Cfg Weight","default":0.5},"temperature":{"type":"number","title":"Temperature","default":0.8},"voice_style":{"type":"string","title":"Voice Style","default":"natural"},"is_default":{"type":"boolean","title":"Is Default","default":false},"clone_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model"},"qwen_ref_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qwen Ref Text"},"qwen_xvector_only":{"type":"boolean","title":"Qwen Xvector Only","default":false},"voice_origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Origin"}},"type":"object","required":["name"],"title":"Body_create_voice_profile_with_upload_voice_profiles_upload_post"},"Body_create_workflow_job_workflow_studio_jobs_post":{"properties":{"pdf":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Pdf"},"video":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Video"},"format":{"type":"string","title":"Format","default":"mobile"},"include_voiceover":{"type":"boolean","title":"Include Voiceover","default":false},"voice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Type","default":"male1"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"brand_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Color"},"brand_color_secondary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Color Secondary"},"typeface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typeface"},"film_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Template"},"film_join":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Join"},"film_music":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Music"},"wow_mode":{"type":"boolean","title":"Wow Mode","default":true},"input_mode":{"type":"string","title":"Input Mode","default":"auto"},"brief_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brief Text"},"brief":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Brief"},"stills":{"anyOf":[{"items":{"type":"string","format":"binary"},"type":"array"},{"type":"null"}],"title":"Stills"},"logo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Logo"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"temp_file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temp File Path"},"video_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Filename"}},"type":"object","title":"Body_create_workflow_job_workflow_studio_jobs_post"},"Body_create_workflow_project_workflow_studio_projects_post":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"primary_color":{"type":"string","title":"Primary Color","default":"#0F4C81"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"default_format":{"type":"string","title":"Default Format","default":"mobile"},"typeface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typeface","default":"inter"},"film_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Template","default":"spot"},"film_join":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Join","default":"default"},"film_music":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Music","default":"none"},"logo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Logo"}},"type":"object","required":["name"],"title":"Body_create_workflow_project_workflow_studio_projects_post"},"Body_generate_temp_download_url_api_temp_download_url_post":{"properties":{"file_path":{"type":"string","title":"File Path"}},"type":"object","required":["file_path"],"title":"Body_generate_temp_download_url_api_temp_download_url_post"},"Body_generate_temp_upload_url_api_temp_upload_url_post":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type","default":"video/mp4"}},"type":"object","required":["filename"],"title":"Body_generate_temp_upload_url_api_temp_upload_url_post"},"Body_generate_upload_url_api_upload_url_post":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type","default":"video/mp4"}},"type":"object","required":["filename"],"title":"Body_generate_upload_url_api_upload_url_post"},"Body_generate_voice_cloning_api_voice_cloning_generate_post":{"properties":{"text":{"type":"string","title":"Text"},"language":{"type":"string","title":"Language","default":""},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"voice_sample":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Voice Sample"},"voice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Type"},"elevenlabs_voice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Voice Id"},"exaggeration":{"type":"number","title":"Exaggeration","default":0.5},"cfg_weight":{"type":"number","title":"Cfg Weight","default":0.5},"temperature":{"type":"number","title":"Temperature","default":0.8},"voice_style":{"type":"string","title":"Voice Style","default":"natural"},"clone_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model"},"voice_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Label"}},"type":"object","required":["text"],"title":"Body_generate_voice_cloning_api_voice_cloning_generate_post"},"Body_generate_voice_standalone_api_voice_generate_post":{"properties":{"text":{"type":"string","title":"Text"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"voice_sample":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Voice Sample"},"exaggeration":{"type":"number","title":"Exaggeration","default":0.5},"cfg_weight":{"type":"number","title":"Cfg Weight","default":0.5},"temperature":{"type":"number","title":"Temperature","default":0.8},"voice_style":{"type":"string","title":"Voice Style","default":"natural"}},"type":"object","required":["text"],"title":"Body_generate_voice_standalone_api_voice_generate_post"},"Body_login_auth_login_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_auth_login_post"},"Body_preview_voice_cloning_default_voice_api_voice_cloning_preview_default_post":{"properties":{"voice_type":{"type":"string","title":"Voice Type"}},"type":"object","required":["voice_type"],"title":"Body_preview_voice_cloning_default_voice_api_voice_cloning_preview_default_post"},"Body_process_intelligent_feedback_api_feedback_form__job_id__post":{"properties":{"feedback_text":{"type":"string","title":"Feedback Text"}},"type":"object","required":["feedback_text"],"title":"Body_process_intelligent_feedback_api_feedback_form__job_id__post"},"Body_process_video_api_process_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"style":{"type":"string","title":"Style","default":"professional"},"speed":{"type":"number","title":"Speed","default":1.0},"video_type":{"type":"string","title":"Video Type","default":"demo"},"context_docs":{"items":{"type":"string","format":"binary"},"type":"array","title":"Context Docs"},"manual_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Context"},"user_transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Transcript"},"user_transcript_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"User Transcript File"},"script_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script Source","default":"ai_generated"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"},"llm_provider":{"type":"string","title":"Llm Provider","default":"gemini"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"}},"type":"object","required":["video"],"title":"Body_process_video_api_process_post"},"Body_process_video_authenticated_api_process_authenticated_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"style":{"type":"string","title":"Style","default":"professional"},"speed":{"type":"number","title":"Speed","default":1.0},"video_type":{"type":"string","title":"Video Type","default":"demo"},"narration_type":{"type":"string","title":"Narration Type","default":"demo"},"narrator_perspective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrator Perspective"},"context_docs":{"items":{"type":"string","format":"binary"},"type":"array","title":"Context Docs"},"manual_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Context"},"user_transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Transcript"},"user_transcript_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"User Transcript File"},"script_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script Source","default":"ai_generated"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"llm_provider":{"type":"string","title":"Llm Provider","default":"gemini"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"acknowledge_overage":{"type":"boolean","title":"Acknowledge Overage","default":false}},"type":"object","required":["video"],"title":"Body_process_video_authenticated_api_process_authenticated_post"},"Body_process_video_cloud_api_process_cloud_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"},"style":{"type":"string","title":"Style","default":"professional"},"speed":{"type":"number","title":"Speed","default":1.0},"video_type":{"type":"string","title":"Video Type","default":"demo"},"narration_type":{"type":"string","title":"Narration Type","default":"demo"},"narrator_perspective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrator Perspective"},"context_docs":{"items":{"type":"string","format":"binary"},"type":"array","title":"Context Docs"},"manual_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Context"},"user_transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Transcript"},"user_transcript_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"User Transcript File"},"script_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script Source","default":"ai_generated"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"llm_provider":{"type":"string","title":"Llm Provider","default":"gemini"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"}},"type":"object","required":["video"],"title":"Body_process_video_cloud_api_process_cloud_post"},"Body_process_video_dubbing_api_process_dubbing_post":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"target_language":{"type":"string","title":"Target Language","default":"en"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"},"style":{"type":"string","title":"Style","default":"professional"},"speed":{"type":"number","title":"Speed","default":1.0},"language":{"type":"string","title":"Language","default":"en"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"llm_provider":{"type":"string","title":"Llm Provider","default":"gemini"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"acknowledge_overage":{"type":"boolean","title":"Acknowledge Overage","default":false},"enable_subtitles":{"type":"boolean","title":"Enable Subtitles","default":false},"preserve_background_music":{"type":"boolean","title":"Preserve Background Music","default":false},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"}},"type":"object","required":["temp_file_path","original_filename"],"title":"Body_process_video_dubbing_api_process_dubbing_post"},"Body_process_video_dubbing_full_api_process_dubbing_full_post":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"source_language":{"type":"string","title":"Source Language"},"target_language":{"type":"string","title":"Target Language"},"preserve_background_music":{"type":"boolean","title":"Preserve Background Music"},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"}},"type":"object","required":["temp_file_path","original_filename","source_language","target_language","preserve_background_music"],"title":"Body_process_video_dubbing_full_api_process_dubbing_full_post"},"Body_process_video_temp_api_process_temp_post":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"style":{"type":"string","title":"Style","default":"professional"},"speed":{"type":"number","title":"Speed","default":1.0},"video_type":{"type":"string","title":"Video Type","default":"demo"},"narration_type":{"type":"string","title":"Narration Type","default":"demo"},"narrator_perspective":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrator Perspective"},"language":{"type":"string","title":"Language","default":"en"},"context_docs":{"items":{"type":"string","format":"binary"},"type":"array","title":"Context Docs"},"manual_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Context"},"user_transcript":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Transcript"},"user_transcript_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"User Transcript File"},"script_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script Source","default":"ai_generated"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"},"voice_profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Profile Id"},"llm_provider":{"type":"string","title":"Llm Provider","default":"gemini"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"acknowledge_overage":{"type":"boolean","title":"Acknowledge Overage","default":false},"enable_subtitles":{"type":"boolean","title":"Enable Subtitles","default":false},"generate_document":{"type":"boolean","title":"Generate Document","default":false},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type","default":"user_onboarding"},"frontend_video_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frontend Video Type"},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"},"wants_to_trim":{"type":"boolean","title":"Wants To Trim","default":false},"batch_mode":{"type":"boolean","title":"Batch Mode","default":false},"instrumental_temp_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrumental Temp Path"},"preserve_background_music":{"type":"boolean","title":"Preserve Background Music","default":false}},"type":"object","required":["temp_file_path","original_filename"],"title":"Body_process_video_temp_api_process_temp_post"},"Body_process_video_transcribe_api_process_transcribe_post":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"source_language":{"type":"string","title":"Source Language"},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"}},"type":"object","required":["temp_file_path","original_filename","source_language"],"title":"Body_process_video_transcribe_api_process_transcribe_post"},"Body_process_video_translate_api_process_translate_post":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"source_language":{"type":"string","title":"Source Language"},"target_language":{"type":"string","title":"Target Language"},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"}},"type":"object","required":["temp_file_path","original_filename","source_language","target_language"],"title":"Body_process_video_translate_api_process_translate_post"},"Body_save_voice_preview_api_save_voice_preview_post":{"properties":{"voice_preview":{"type":"string","format":"binary","title":"Voice Preview"},"job_id":{"type":"string","title":"Job Id"},"is_pending":{"type":"boolean","title":"Is Pending","default":false}},"type":"object","required":["voice_preview","job_id"],"title":"Body_save_voice_preview_api_save_voice_preview_post"},"Body_translate_existing_transcript_api_translate_transcript_post":{"properties":{"job_id":{"type":"string","title":"Job Id"},"source_language":{"type":"string","title":"Source Language"},"target_language":{"type":"string","title":"Target Language"}},"type":"object","required":["job_id","source_language","target_language"],"title":"Body_translate_existing_transcript_api_translate_transcript_post"},"Body_update_workflow_project_workflow_studio_projects__project_id__put":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"default_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Format"},"typeface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typeface"},"film_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Template"},"film_join":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Join"},"film_music":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Music"},"logo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Logo"}},"type":"object","title":"Body_update_workflow_project_workflow_studio_projects__project_id__put"},"Body_upload_voice_sample_api_voice_clone__job_id__post":{"properties":{"voice_sample":{"type":"string","format":"binary","title":"Voice Sample"},"exaggeration":{"type":"number","title":"Exaggeration","default":0.5},"cfg_weight":{"type":"number","title":"Cfg Weight","default":0.5},"temperature":{"type":"number","title":"Temperature","default":0.3},"voice_style":{"type":"string","title":"Voice Style","default":"natural"}},"type":"object","required":["voice_sample"],"title":"Body_upload_voice_sample_api_voice_clone__job_id__post"},"Body_upload_workflow_still_workflow_studio_jobs__job_id__stills_post":{"properties":{"image":{"type":"string","format":"binary","title":"Image"},"step_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Step Index"}},"type":"object","required":["image"],"title":"Body_upload_workflow_still_workflow_studio_jobs__job_id__stills_post"},"ConnectElevenLabsRequest":{"properties":{"api_key":{"type":"string","maxLength":400,"minLength":10,"title":"Api Key"}},"type":"object","required":["api_key"],"title":"ConnectElevenLabsRequest"},"DocumentListResponse":{"properties":{"documents":{"items":{"$ref":"#/components/schemas/DocumentResponse"},"type":"array","title":"Documents"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["documents","total","page","per_page"],"title":"DocumentListResponse","description":"Schema for document list response"},"DocumentResponse":{"properties":{"id":{"type":"string","title":"Id"},"processing_job_id":{"type":"string","title":"Processing Job Id"},"user_id":{"type":"string","title":"User Id"},"title":{"type":"string","title":"Title"},"document_type":{"type":"string","title":"Document Type"},"markdown_content":{"type":"string","title":"Markdown Content"},"edited_markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edited Markdown"},"document_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document Data"},"language":{"type":"string","title":"Language"},"cloud_document_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Document Path"},"cloud_frames_folder_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Frames Folder Path"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","processing_job_id","user_id","title","document_type","markdown_content","language","created_at"],"title":"DocumentResponse","description":"Schema for document response"},"DownloadUrlResponse":{"properties":{"download_url":{"type":"string","title":"Download Url"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"cloud_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Path"}},"type":"object","required":["download_url"],"title":"DownloadUrlResponse","description":"Signed download URL response"},"EmailVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","title":"Code"}},"type":"object","required":["email","code"],"title":"EmailVerificationRequest","description":"Schema for email verification request"},"ExportNarratedRequest":{"properties":{"job_ids":{"items":{"type":"string"},"type":"array","maxItems":30,"minItems":1,"title":"Job Ids"},"folder_title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Folder Title"},"send_completion_email":{"type":"boolean","title":"Send Completion Email","default":false}},"type":"object","required":["job_ids"],"title":"ExportNarratedRequest"},"FolderPreviewRequest":{"properties":{"folder_url":{"type":"string","maxLength":2048,"minLength":3,"title":"Folder Url"}},"type":"object","required":["folder_url"],"title":"FolderPreviewRequest"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest","description":"Schema for forgot password request"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LegalAcceptanceRequest":{"properties":{"document_type":{"type":"string","title":"Document Type"},"version":{"type":"string","title":"Version"},"accepted":{"type":"boolean","title":"Accepted","default":true}},"type":"object","required":["document_type","version"],"title":"LegalAcceptanceRequest"},"LegalAcceptanceResponse":{"properties":{"document_type":{"type":"string","title":"Document Type"},"accepted":{"type":"boolean","title":"Accepted"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}},"type":"object","required":["document_type","accepted","accepted_at","version"],"title":"LegalAcceptanceResponse"},"LegalDocumentResponse":{"properties":{"document_type":{"type":"string","title":"Document Type"},"version":{"type":"string","title":"Version"},"content":{"type":"string","title":"Content"},"last_updated":{"type":"string","title":"Last Updated"}},"type":"object","required":["document_type","version","content","last_updated"],"title":"LegalDocumentResponse"},"McpGoogleSignupRequest":{"properties":{"google_id":{"type":"string","title":"Google Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture"}},"type":"object","required":["google_id","email","name"],"title":"McpGoogleSignupRequest"},"PreviewUrlResponse":{"properties":{"preview_url":{"type":"string","title":"Preview Url"},"streaming":{"type":"boolean","title":"Streaming"},"cloud_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Path"},"local_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Path"}},"type":"object","required":["preview_url","streaming"],"title":"PreviewUrlResponse","description":"Signed preview URL response"},"ProcessingJobListResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/ProcessingJobResponse"},"type":"array","title":"Jobs"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["jobs","total","page","per_page"],"title":"ProcessingJobListResponse","description":"Schema for processing job list response"},"ProcessingJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"video_id":{"type":"string","title":"Video Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"output_video_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Video Path"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["id","video_id","status","progress","created_at"],"title":"ProcessingJobResponse","description":"Schema for processing job response"},"RedeemRequest":{"properties":{"code":{"type":"string","maxLength":255,"minLength":2,"title":"Code"}},"type":"object","required":["code"],"title":"RedeemRequest"},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest","description":"Schema for resend verification email request"},"ResetPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","title":"Code"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["email","code","new_password"],"title":"ResetPasswordRequest","description":"Schema for reset password request"},"StageRequest":{"properties":{"drive_file_id":{"type":"string","maxLength":128,"minLength":5,"title":"Drive File Id"}},"type":"object","required":["drive_file_id"],"title":"StageRequest"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"Token","description":"Schema for JWT token response"},"TranslateForDubbingRequest":{"properties":{"target_language":{"type":"string","title":"Target Language","default":"es"}},"type":"object","title":"TranslateForDubbingRequest"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"type":"string","title":"Name"},"terms_accepted":{"type":"boolean","title":"Terms Accepted","default":false},"privacy_policy_accepted":{"type":"boolean","title":"Privacy Policy Accepted","default":false}},"type":"object","required":["email","password","name"],"title":"UserCreate","description":"Schema for user registration"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"subscription_tier":{"type":"string","title":"Subscription Tier"},"is_active":{"type":"boolean","title":"Is Active"},"email_verified":{"type":"boolean","title":"Email Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login"}},"type":"object","required":["id","email","subscription_tier","is_active","email_verified","created_at"],"title":"UserResponse","description":"Schema for user response"},"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"},"VideoListResponse":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/VideoResponse"},"type":"array","title":"Videos"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["videos","total","page","per_page"],"title":"VideoListResponse","description":"Schema for video list response"},"VideoResponse":{"properties":{"id":{"type":"string","title":"Id"},"original_filename":{"type":"string","title":"Original Filename"},"file_path":{"type":"string","title":"File Path"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"file_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size"},"processing_status":{"type":"string","title":"Processing Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","original_filename","file_path","processing_status","created_at"],"title":"VideoResponse","description":"Schema for video response"},"VoiceDesignCheckRequest":{"properties":{"description":{"type":"string","title":"Description"},"language":{"type":"string","title":"Language","default":"en"},"change":{"type":"string","title":"Change","default":""},"traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traits"}},"type":"object","required":["description"],"title":"VoiceDesignCheckRequest"},"VoiceDesignDefaults":{"properties":{"preview_text":{"type":"string","title":"Preview Text"},"preview_texts":{"additionalProperties":true,"type":"object","title":"Preview Texts"},"preview_max_chars":{"type":"integer","title":"Preview Max Chars"},"max_variants":{"type":"integer","title":"Max Variants"}},"type":"object","required":["preview_text","preview_texts","preview_max_chars","max_variants"],"title":"VoiceDesignDefaults"},"VoiceDesignPreviewRequest":{"properties":{"description":{"type":"string","title":"Description"},"preview_text":{"type":"string","title":"Preview Text","default":""},"language":{"type":"string","title":"Language","default":"en"},"change":{"type":"string","title":"Change","default":""},"traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traits"},"reuse_traits":{"type":"boolean","title":"Reuse Traits","default":false},"variants":{"type":"integer","title":"Variants","default":1}},"type":"object","required":["description"],"title":"VoiceDesignPreviewRequest"},"VoiceProfileCreate":{"properties":{"name":{"type":"string","title":"Name"},"voice_sample_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Sample Path"},"voice_preview_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Preview Path"},"exaggeration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exaggeration","default":0.5},"cfg_weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cfg Weight","default":0.5},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature","default":0.8},"voice_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Style","default":"natural"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":false},"clone_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model"},"qwen_ref_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qwen Ref Text"},"qwen_xvector_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Qwen Xvector Only","default":false},"voice_origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Origin"}},"type":"object","required":["name"],"title":"VoiceProfileCreate","description":"Schema for creating a voice profile"},"VoiceProfileList":{"properties":{"profiles":{"items":{"$ref":"#/components/schemas/VoiceProfileResponse"},"type":"array","title":"Profiles"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["profiles","total"],"title":"VoiceProfileList","description":"Schema for voice profile list response"},"VoiceProfileResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"voice_sample_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Sample Path"},"voice_preview_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Preview Path"},"cloud_sample_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Sample Path"},"cloud_preview_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Preview Path"},"cloud_sample_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Sample Url"},"cloud_preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloud Preview Url"},"storage_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Provider","default":"local"},"exaggeration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exaggeration"},"cfg_weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cfg Weight"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"voice_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Style"},"clone_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone Model"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin","default":"cloned"},"is_default":{"type":"boolean","title":"Is Default"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","is_default","created_at"],"title":"VoiceProfileResponse","description":"Schema for voice profile response"},"VoiceProfileUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"voice_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Settings"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"VoiceProfileUpdate","description":"Schema for updating a voice profile"},"WorkflowStudioJobCreateResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["job_id","status","message"],"title":"WorkflowStudioJobCreateResponse"},"WorkflowStudioJobListResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/WorkflowStudioJobResponse"},"type":"array","title":"Jobs"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["jobs","total","page","per_page"],"title":"WorkflowStudioJobListResponse"},"WorkflowStudioJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress","default":0},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"format":{"type":"string","enum":["mobile","desktop"],"title":"Format","default":"mobile"},"include_voiceover":{"type":"boolean","title":"Include Voiceover","default":false},"voice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Type"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"brand_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Color"},"brand_color_secondary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Color Secondary"},"storyboard":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Storyboard"},"output_video_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Video Path"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"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"}},"type":"object","required":["id","user_id","status"],"title":"WorkflowStudioJobResponse"},"WorkflowStudioMediaUrlsResponse":{"properties":{"assets":{"additionalProperties":{"type":"string"},"type":"object","title":"Assets"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"}},"type":"object","title":"WorkflowStudioMediaUrlsResponse"},"WorkflowStudioNarratePrepResponse":{"properties":{"temp_file_path":{"type":"string","title":"Temp File Path"},"original_filename":{"type":"string","title":"Original Filename"},"size_bytes":{"type":"integer","title":"Size Bytes","default":0},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"},"film_music":{"type":"string","title":"Film Music","default":"none"},"instrumental_temp_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instrumental Temp Path"},"complementary_context":{"type":"string","title":"Complementary Context"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"}},"type":"object","required":["temp_file_path","original_filename","complementary_context"],"title":"WorkflowStudioNarratePrepResponse"},"WorkflowStudioProjectListResponse":{"properties":{"projects":{"items":{"$ref":"#/components/schemas/WorkflowStudioProjectResponse"},"type":"array","title":"Projects"},"export_count":{"type":"integer","title":"Export Count","default":0},"export_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Export Limit"},"export_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Export Period"},"project_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Project Limit"}},"type":"object","required":["projects"],"title":"WorkflowStudioProjectListResponse"},"WorkflowStudioProjectResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"default_format":{"type":"string","enum":["mobile","desktop"],"title":"Default Format","default":"mobile"},"typeface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typeface","default":"inter"},"film_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Template","default":"spot"},"film_join":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Join","default":"default"},"film_music":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Music","default":"none"},"has_logo":{"type":"boolean","title":"Has Logo","default":false},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"video_count":{"type":"integer","title":"Video Count","default":0},"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"}},"type":"object","required":["id","name"],"title":"WorkflowStudioProjectResponse"},"WorkflowStudioStoryboardUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"opener_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opener Text"},"closer_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closer Text"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"format":{"anyOf":[{"type":"string","enum":["mobile","desktop"]},{"type":"null"}],"title":"Format"},"wow_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Wow Mode"},"input_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Mode"},"steps":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Steps"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"asset_catalog":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Catalog"},"has_footage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Footage"},"video_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Video Duration"},"frame_timestamps":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Frame Timestamps"},"typeface":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typeface"},"film_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Template"},"film_join":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Join"},"film_music":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Film Music"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"brand_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Color"},"apply_project_kit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Apply Project Kit"}},"type":"object","title":"WorkflowStudioStoryboardUpdate"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}