{"openapi":"3.1.0","info":{"title":"PremiereCopilot API","description":"\n    API pour l'extension Adobe Premiere Pro Copilot.    \n    Pour utiliser cette API, vous devez être un utilisateur enregistré.\n    ","version":"1.6.0"},"paths":{"/internal/render-progress":{"post":{"summary":"Internal Render Progress","operationId":"internal_render_progress_internal_render_progress_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_RenderProgressBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Hello World","operationId":"hello_world__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/status":{"get":{"summary":"Status","operationId":"status_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/users/":{"post":{"tags":["Login"],"summary":"Create User","description":"Crée un nouvel utilisateur dans Supabase.\n\nTwo anti-abuse paths:\n  - From CEP panel (X-Device-Fingerprint header present): block if this device\n    already created an account. Account is active immediately.\n  - From web site (no fingerprint header): require email verification before\n    the account receives any AI credits. Disposable emails rejected.\nBoth paths are rate-limited per source IP.","operationId":"create_user_api_users__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSupabase"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Admin"],"summary":"Read Users","description":"Récupère tous les utilisateurs (admin uniquement).","operationId":"read_users_api_users__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserSupabase"},"title":"Response Read Users Api Users  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/token":{"post":{"tags":["Login"],"summary":"Login For Access Token","description":"Authentifie un utilisateur et retourne un token JWT.","operationId":"login_for_access_token_api_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_for_access_token_api_token_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"}}}}}}},"/api/refresh":{"post":{"tags":["Login"],"summary":"Refresh Token","description":"Échange un refresh token contre un nouveau access token.","operationId":"refresh_token_api_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRefresh"}}},"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"}}}}}}},"/api/users/me/":{"get":{"tags":["Login"],"summary":"Read Users Me","description":"Récupère les informations de l'utilisateur connecté.","operationId":"read_users_me_api_users_me__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSupabase"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/users/me/full":{"get":{"tags":["Login"],"summary":"Get Full User Profile","description":"User info + credits + tier info en un seul call.","operationId":"get_full_user_profile_api_users_me_full_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/password-reset/request":{"post":{"tags":["Login"],"summary":"Request Password Reset","description":"Public endpoint — user requests a reset email for their address.\n\nAlways returns 200 with the same message so the endpoint cannot be used\nto enumerate which emails are registered. Throttled per-account: if a\ntoken was issued in the last 60 seconds, we don't reissue/email again.","operationId":"request_password_reset_api_password_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/password-reset/verify":{"post":{"tags":["Login"],"summary":"Reset Password","description":"Vérifie le token et réinitialise le mot de passe.","operationId":"reset_password_api_password_reset_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordReset"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/verify-email":{"get":{"tags":["Login"],"summary":"Verify Email","description":"Email verification link target. Redirects to the website with a status param.","operationId":"verify_email_api_verify_email_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"fp","in":"query","required":false,"schema":{"type":"string","default":"","title":"Fp"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/resend-verification":{"post":{"tags":["Login"],"summary":"Resend Verification","description":"Renvoie le mail de vérification avec un nouveau token. No-op si déjà vérifié.\nL'utilisateur est identifié par son JWT (le login marche même non vérifié).","operationId":"resend_verification_api_resend_verification_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/create-checkout-session":{"post":{"tags":["Stripe"],"summary":"Create Checkout Session","operationId":"create_checkout_session_api_create_checkout_session_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"subscription_type","in":"query","required":true,"schema":{"type":"integer","title":"Subscription Type"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal":{"post":{"tags":["Stripe"],"summary":"Create Portal Session","operationId":"create_portal_session_api_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/stripe-webhook-credits":{"post":{"tags":["Stripe"],"summary":"Stripe Webhook Credits","operationId":"stripe_webhook_credits_api_stripe_webhook_credits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/website/checkout":{"post":{"tags":["Stripe (public)"],"summary":"Create Website Checkout","description":"Anonymous Stripe Checkout. No auth header required.\n\nReturns a Stripe-hosted checkout URL the frontend redirects to.\nStripe collects the email at the checkout form. On success the user\nlands on /thank-you?session_id=cs_xxx which decides whether to show\na sign-in or a create-account flow.","operationId":"create_website_checkout_api_billing_website_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/website/session-status":{"get":{"tags":["Stripe (public)"],"summary":"Get Session Status","description":"Called by /thank-you to decide which UI to show:\n  - user_exists=True  → \"Welcome back, sign in\"\n  - user_exists=False → \"Create your account\"\n\nReturns email (lowercased) so the sign-up form can pre-fill it.","operationId":"get_session_status_api_billing_website_session_status_get","parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/password-reset/generate-link":{"post":{"tags":["Admin"],"summary":"Admin Generate Password Reset Link","description":"Génère un lien de réinitialisation de mot de passe pour un utilisateur spécifique (admin uniquement).","operationId":"admin_generate_password_reset_link_api_admin_password_reset_generate_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPasswordResetLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/api-logs":{"get":{"tags":["Admin"],"summary":"Get Api Logs","description":"Retrieve the API calls log file (admin only).","operationId":"get_api_logs_api_admin_api_logs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/api-usage-logs":{"get":{"tags":["Admin"],"summary":"Get Api Usage Logs","description":"Retrieve the standard API usage log file (admin only).","operationId":"get_api_usage_logs_api_admin_api_usage_logs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/users/{user_id}/credits":{"put":{"tags":["Admin"],"summary":"Admin Update User Credits","description":"Met à jour les crédits d'un utilisateur (admin uniquement).","operationId":"admin_update_user_credits_api_admin_users__user_id__credits_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateCredits"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/membership":{"put":{"tags":["Admin"],"summary":"Admin Update User Membership","description":"Met à jour l'abonnement d'un utilisateur (admin uniquement).","operationId":"admin_update_user_membership_api_admin_users__user_id__membership_put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateMembership"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/":{"post":{"tags":["Admin"],"summary":"Admin Create User","description":"Crée un nouvel utilisateur avec des paramètres spécifiques (admin uniquement).","operationId":"admin_create_user_api_admin_users__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateUser"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSupabase"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/users/{user_id}":{"delete":{"tags":["Admin"],"summary":"Admin Delete User","description":"Supprime un utilisateur et ses données Stripe associées (admin uniquement).","operationId":"admin_delete_user_api_admin_users__user_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminDeleteUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/podcast-access":{"get":{"tags":["Access"],"summary":"Check Podcast Access","description":"Accès Podcast / Jump Cut (système one-time).","operationId":"check_podcast_access_api_user_podcast_access_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/user/check-feature-access":{"post":{"tags":["Access"],"summary":"Check Feature Access","description":"Catégorise par type de feature :\n- smart features → toujours autorisées (les crédits IA gateront au runtime)\n- podcast/jump_cut → require_podcast_access\n- gen_ai → require_genai_access","operationId":"check_feature_access_api_user_check_feature_access_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureAccessRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/user/membership":{"post":{"tags":["Access"],"summary":"Get User Membership","description":"Retourne le numéro de membership de l'utilisateur.","operationId":"get_user_membership_api_user_membership_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMembershipRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/user/tier-info":{"get":{"tags":["Access"],"summary":"Get Tier Info","description":"Tier courant + quota AI quotidien + crédits restants pour aujourd'hui.","operationId":"get_tier_info_api_user_tier_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/version":{"get":{"tags":["Access"],"summary":"Get Version","description":"Retourne la version actuelle et la liste des fonctionnalités.","operationId":"get_version_api_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/discord/verify/start":{"post":{"tags":["Discord"],"summary":"Discord Verify Start","description":"Renvoie l'URL d'autorisation Discord (le panneau l'ouvre dans le navigateur).","operationId":"discord_verify_start_api_discord_verify_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Discord Verify Start Api Discord Verify Start Post"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/discord/verify/callback":{"get":{"tags":["Discord"],"summary":"Discord Verify Callback","description":"Callback OAuth Discord : vérifie la membership serveur puis crédite.","operationId":"discord_verify_callback_api_discord_verify_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gen-ai/status":{"get":{"tags":["GenAI"],"summary":"Check Gen Ai Status","description":"Autorise GenAI si :\n- L'utilisateur est dans le bundle GenAI (membership ∈ {1,2,3,5} ou has_pay_genAI)\n- OU il a au moins 1 crédit AI (le débit du forfait CREDITS_GENAI_GENERATION\n  sera appliqué après chaque génération réussie via /increment).","operationId":"check_gen_ai_status_api_gen_ai_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAIStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/gen-ai/increment":{"post":{"tags":["GenAI"],"summary":"Increment Gen Ai Request","description":"Appelé par le frontend APRÈS qu'une génération a réussi.\n- Incrémente le compteur historique nb_gen_request (analytics).\n- Débite CREDITS_GENAI_GENERATION crédits SI l'utilisateur n'est pas\n  dans le bundle GenAI.","operationId":"increment_gen_ai_request_api_gen_ai_increment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAIStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/errors/report":{"post":{"tags":["Errors"],"summary":"Report Front Error","description":"Front error reporting endpoint. Auth optional (lets us capture pre-login crashes).\nReturns the short error_code so the user can give it to support.","operationId":"report_front_error_api_errors_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrontErrorReport"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/errors/policy":{"get":{"tags":["Errors"],"summary":"Get Error Policy","description":"Table de classification servie au panneau, pour qu'il affiche le même\nmessage d'aide que celui décidé côté serveur — sans le dupliquer.\n\nMême intention que /ai-credits/costs pour les prix : une seule source de\nvérité, jamais de désynchronisation front/back. Le panneau en garde une copie\nde secours embarquée, car c'est précisément quand le réseau tombe qu'il a\nbesoin du message réseau.","operationId":"get_error_policy_api_errors_policy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/errors/":{"get":{"tags":["Errors"],"summary":"List Errors","operationId":"list_errors_api_errors__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"feature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feature"}},{"name":"user_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolved"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/errors/full":{"get":{"tags":["Errors"],"summary":"List Errors Full","description":"List errors most-recent-first with a slim-but-investigable payload.\nEach item also exposes:\n  - `id` / `error_code` so you can deep-link to `GET /errors/{id}` to fetch\n    the full row (front/back logs, extras, full inputs).\n  - `object_keys` : R2 keys of any associated artifacts (audio uploads for\n    podcast/labelize_speech, video chunks for vibe_motion, etc.) so you can\n    retrieve the files from the bucket without re-reading the DB.\n  - `r2_console_urls` : ready-to-click Cloudflare dashboard URLs for each\n    object key (same bucket, no auth math required).\nCapped at 200 per call.","operationId":"list_errors_full_api_errors_full_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"user_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}},{"name":"resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolved"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/errors/all":{"delete":{"tags":["Errors"],"summary":"Delete All Errors","description":"Wipe ALL errors from the store. Pass any non-empty `confirm=<string>`\nquery param to actually run — empty string aborts. Designed only to make\naccidental cURL/typo invocations impossible, not as a security control.","operationId":"delete_all_errors_api_errors_all_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"confirm","in":"query","required":false,"schema":{"type":"string","default":"","title":"Confirm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/errors/{error_id}":{"get":{"tags":["Errors"],"summary":"Get Error","operationId":"get_error_api_errors__error_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"error_id","in":"path","required":true,"schema":{"type":"string","title":"Error Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/errors/{error_id}/resolve":{"post":{"tags":["Errors"],"summary":"Resolve Error","operationId":"resolve_error_api_errors__error_id__resolve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"error_id","in":"path","required":true,"schema":{"type":"string","title":"Error Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/claude-call":{"post":{"tags":["Claude","Copilot"],"summary":"Claude Call Endpoint","description":"Appelle l'API Anthropic Claude avec les mêmes paramètres que GeminiCallRequest.\nSupporte les Sorties Structurées natives (GA) et le Tool Calling.","operationId":"claude_call_endpoint_api_claude_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiCallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/track":{"post":{"tags":["Tracking"],"summary":"Track Event","description":"Forward a frontend product event to PostHog.\n\nThe user's email is automatically attached as distinct_id; the front never\nhas to send it. Properties are passed through verbatim — keep them small\n(PostHog truncates very large payloads).","operationId":"track_event_api_track_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/check":{"post":{"tags":["AICredits"],"summary":"Check Ai Credits","description":"Pré-run : autorise si le solde total couvre le coût de la feature.\n\nSolde total = quota journalier + crédits bonus (offerts, non reset la nuit).\n\nPar défaut le seuil reste 1 crédit : pour la plupart des features le coût\ndépend des tokens et n'est connu qu'après le run (cf. feature_costs.py),\nil est alors débité via /ai-credits/update.\n\nPour les features à FORFAIT PLAT (auto b-roll, audio mix), on compare au\nmontant exact — le même que celui que leur router exigera. Sans ça, la porte\nd'entrée était plus permissive que le contrôle final : l'utilisateur passait,\npayait une transcription, puis se prenait un 402 sur un travail déjà fait.","operationId":"check_ai_credits_api_ai_credits_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AICreditsCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Check Ai Credits Api Ai Credits Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/costs":{"get":{"tags":["AICredits"],"summary":"Get Ai Credits Costs","description":"Coût en crédits par feature — source de vérité = config.py.\n\n- `fixed_costs` : forfaits fixes → l'UI affiche le nombre exact.\n- `estimated_costs` : coût variable (tokens/durée) → l'UI préfixe par \"≈\".\n\nPermet au front d'afficher le coût sans hardcoder les valeurs (jamais de\ndésync avec le backend).","operationId":"get_ai_credits_costs_api_ai_credits_costs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Ai Credits Costs Api Ai Credits Costs Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/reward":{"post":{"tags":["AICredits"],"summary":"Claim Onboarding Reward","description":"Crédite une récompense d'onboarding — 1 seule fois par (user, reward_id).\n\nLes rewards \"vérifiés\" (ex. join_discord) NE passent PAS par ici : ils exigent\nune preuve (OAuth Discord) et sont crédités par leur propre callback. On les\nrefuse ici pour fermer le trou honor-system (sinon un simple POST donnerait\nles crédits sans avoir rejoint).","operationId":"claim_onboarding_reward_api_ai_credits_reward_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewardClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Claim Onboarding Reward Api Ai Credits Reward Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/rewards-claimed":{"get":{"tags":["AICredits"],"summary":"Rewards Claimed","description":"État des rewards de l'user, source de vérité pour la relance sociale.\n\n- `claimed` : reward_ids déjà crédités (le panneau ne les repropose jamais).\n- `pending` : follows en cours de vérification (différés non encore crédités)\n  → alimente l'icône \"vérif en cours\" de la TopBar, et survit à un redémarrage\n  du panneau ou à un changement de machine (contrairement à un localStorage).","operationId":"rewards_claimed_api_ai_credits_rewards_claimed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Rewards Claimed Api Ai Credits Rewards Claimed Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/reward-pending":{"post":{"tags":["AICredits"],"summary":"Claim Reward Pending","description":"Enregistre un reward différé (\"under review\") — crédité par le scheduler\nN min plus tard (cf. config.DELAYED_REWARDS). Idempotent : pas de double\nprogrammation, et no-op si déjà crédité.","operationId":"claim_reward_pending_api_ai_credits_reward_pending_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewardClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Claim Reward Pending Api Ai Credits Reward Pending Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/ai-credits/logs":{"get":{"tags":["AICredits","Admin"],"summary":"Get Ai Credits Logs","description":"Récupère le fichier de logs des crédits AI (admin uniquement).","operationId":"get_ai_credits_logs_api_ai_credits_logs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/music-analysis":{"post":{"tags":["Music","Music"],"summary":"Start Music Analysis","description":"Receives audio data, saves to temp file, runs MODAL_music.py via Modal,\nand returns a job_id for polling.","operationId":"start_music_analysis_api_music_analysis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MusicRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/music-analysis-url":{"post":{"tags":["Music","Music"],"summary":"Start Music Analysis From Url","description":"Agent-internal endpoint: downloads audio from a presigned R2 URL and runs Modal analysis.","operationId":"start_music_analysis_from_url_api_music_analysis_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MusicUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/music-status/{job_id}":{"get":{"tags":["Music","Music"],"summary":"Get Music Status","description":"Polls for music analysis job status and results.","operationId":"get_music_status_api_music_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/diarization/request-upload":{"post":{"tags":["Diarization"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_diarization_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiarizationUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiarizationUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/diarization":{"post":{"tags":["Diarization"],"summary":"Start Diarization","operationId":"start_diarization_api_diarization_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiarizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiarizationJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/diarization/status/{job_id}":{"get":{"tags":["Diarization"],"summary":"Get Diarization Status","operationId":"get_diarization_status_api_diarization_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/DiarizationStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/smart-chapters/request-upload":{"post":{"tags":["Smart Chapters"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_smart_chapters_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartChaptersUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartChaptersUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-chapters":{"post":{"tags":["Smart Chapters"],"summary":"Start Smart Chapters","operationId":"start_smart_chapters_api_smart_chapters_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartChaptersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartChaptersJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-chapters/status/{job_id}":{"get":{"tags":["Smart Chapters"],"summary":"Get Smart Chapters Status","operationId":"get_smart_chapters_status_api_smart_chapters_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/SmartChaptersStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/smart-virals/request-upload":{"post":{"tags":["Smart Virals"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_smart_virals_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartViralsUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartViralsUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-virals":{"post":{"tags":["Smart Virals"],"summary":"Start Smart Virals","operationId":"start_smart_virals_api_smart_virals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartViralsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartViralsJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-virals/status/{job_id}":{"get":{"tags":["Smart Virals"],"summary":"Get Smart Virals Status","operationId":"get_smart_virals_status_api_smart_virals_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/SmartViralsStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auto-zoom/request-upload":{"post":{"tags":["AutoZoom"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_auto_zoom_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoZoomUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoZoomUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-zoom":{"post":{"tags":["AutoZoom"],"summary":"Start Auto Zoom","operationId":"start_auto_zoom_api_auto_zoom_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoZoomRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoZoomJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-zoom/status/{job_id}":{"get":{"tags":["AutoZoom"],"summary":"Get Auto Zoom Status","operationId":"get_auto_zoom_status_api_auto_zoom_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/AutoZoomStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jump-cut/request-upload":{"post":{"tags":["Jump Cut"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_jump_cut_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpCutUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpCutUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/jump-cut/preview/upload":{"post":{"tags":["Jump Cut"],"summary":"Jump Cut Preview Upload","description":"Direct-upload preview — receives 15s audio, runs Silero VAD only.\nThe frontend applies threshold + min duration + padding live (no round-trip).\nPreview est GRATUIT pour tous (Free / bundled) — pas de débit.","operationId":"jump_cut_preview_upload_api_jump_cut_preview_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_jump_cut_preview_upload_api_jump_cut_preview_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpCutPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/jump-cut":{"post":{"tags":["Jump Cut"],"summary":"Start Jump Cut","operationId":"start_jump_cut_api_jump_cut_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpCutRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpCutJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/jump-cut/apply-xml":{"post":{"tags":["Jump Cut"],"summary":"Apply Xml Cuts","description":"Moteur XML (config.JUMPCUT_XML_MODE) : reçoit le FCP7 XML exporté par Premiere\n+ les plages de silence (s), applique les coupes + ripple hors-Premiere, et\nrenvoie le XML d'une NOUVELLE séquence à réimporter. Aucun débit crédit ici\n(déjà débité au moment du run VAD).","operationId":"apply_xml_cuts_api_jump_cut_apply_xml_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_apply_xml_cuts_api_jump_cut_apply_xml_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":[{"OAuth2PasswordBearer":[]}]}},"/api/jump-cut/status/{job_id}":{"get":{"tags":["Jump Cut"],"summary":"Get Jump Cut Status","operationId":"get_jump_cut_status_api_jump_cut_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/JumpCutStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subtitles-pro/request-upload":{"post":{"tags":["Subtitles Pro"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload audio directly to R2.","operationId":"request_upload_url_api_subtitles_pro_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitlesProUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubtitlesProUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subtitles-pro/transcribe":{"post":{"tags":["Subtitles Pro"],"summary":"Start Transcribe","operationId":"start_transcribe_api_subtitles_pro_transcribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subtitles-pro/transcribe/status/{job_id}":{"get":{"tags":["Subtitles Pro"],"summary":"Get Transcribe Status","operationId":"get_transcribe_status_api_subtitles_pro_transcribe_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/features__subtitles_pro__schemas__JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subtitles-pro/generate-srt":{"post":{"tags":["Subtitles Pro"],"summary":"Generate Srt","description":"Returns the SRT content as text. The client writes it to disk locally\nand then imports it via JSX — the global API is remote and never touches\nthe user's filesystem.","operationId":"generate_srt_api_subtitles_pro_generate_srt_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSrtRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSrtResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subtitles-pro/translate":{"post":{"tags":["Subtitles Pro"],"summary":"Start Translate","operationId":"start_translate_api_subtitles_pro_translate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/subtitles-pro/translate/status/{job_id}":{"get":{"tags":["Subtitles Pro"],"summary":"Get Translate Status","operationId":"get_translate_status_api_subtitles_pro_translate_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/features__subtitles_pro__schemas__JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subtitles-pro/import-srt-track":{"post":{"tags":["Subtitles Pro"],"summary":"Track Import Srt","operationId":"track_import_srt_api_subtitles_pro_import_srt_track_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportSrtTrackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/spelling/prepare":{"post":{"tags":["Spelling"],"summary":"Prepare","description":"Detect the dominant language of the sequence text and translate the\nuser's correction instruction into it (so /analyze reasons natively).","operationId":"prepare_api_spelling_prepare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/spelling/analyze":{"post":{"tags":["Spelling"],"summary":"Analyze","description":"SOTA spell/grammar pass on a batch of text items. Returns per-item\ncorrections; the panel diffs `original` vs `corrected` for display.","operationId":"analyze_api_spelling_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/features__spelling__schemas__AnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/metered/status":{"get":{"tags":["Metered"],"summary":"Metered Status","operationId":"metered_status_api_metered_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/metered/charge":{"post":{"tags":["Metered"],"summary":"Metered Charge","operationId":"metered_charge_api_metered_charge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/metered/history":{"get":{"tags":["Metered"],"summary":"Metered History","operationId":"metered_history_api_metered_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/metered/checkout-link":{"post":{"tags":["Metered"],"summary":"Metered Checkout Link","operationId":"metered_checkout_link_api_metered_checkout_link_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/claudecut/request-upload":{"post":{"tags":["ClaudeCut"],"summary":"Request Upload Url","operationId":"request_upload_url_api_claudecut_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/claudecut/transcribe":{"post":{"tags":["ClaudeCut"],"summary":"Start Transcribe","operationId":"start_transcribe_api_claudecut_transcribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutTranscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/claudecut/analyze":{"post":{"tags":["ClaudeCut"],"summary":"Start Analyze","operationId":"start_analyze_api_claudecut_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/claudecut/status/{job_id}":{"get":{"tags":["ClaudeCut"],"summary":"Get Status","operationId":"get_status_api_claudecut_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/ClaudeCutStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/claudecut/apply-cut":{"post":{"tags":["ClaudeCut"],"summary":"Track Apply Cut","operationId":"track_apply_cut_api_claudecut_apply_cut_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaudeCutApplyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-motion/generate":{"post":{"tags":["VibeMotion"],"summary":"Start Generation","operationId":"start_generation_api_vibe_motion_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-motion/export":{"post":{"tags":["VibeMotion"],"summary":"Start Export","operationId":"start_export_api_vibe_motion_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-motion/status/{job_id}":{"get":{"tags":["VibeMotion"],"summary":"Get Status","operationId":"get_status_api_vibe_motion_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/VibeMotionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-motion/export/{job_id}":{"delete":{"tags":["VibeMotion"],"summary":"Delete Export","description":"Called by the client after the export file has been downloaded. Deletes the R2 object.","operationId":"delete_export_api_vibe_motion_export__job_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-motion/request-upload":{"post":{"tags":["VibeMotion"],"summary":"Request Upload Url","description":"URL présignée pour pousser l'audio de la séquence sur R2.\n\nMême forme que Vibe Kinetic et Auto Zoom : garde-fou R2, clé `stem-uuid8.ext`,\net une ligne de log avec la clé pour pouvoir retrouver l'objet.","operationId":"request_upload_url_api_vibe_motion_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-motion/analyze":{"post":{"tags":["VibeMotion"],"summary":"Start Analyze","operationId":"start_analyze_api_vibe_motion_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeMotionJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-motion/fonts":{"get":{"tags":["VibeMotion"],"summary":"List Fonts","operationId":"list_fonts_api_vibe_motion_fonts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibe-motion/fonts/{slug}.woff2":{"get":{"tags":["VibeMotion"],"summary":"Get Font","operationId":"get_font_api_vibe_motion_fonts__slug__woff2_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"face","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Face"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/smart-captions/request-upload":{"post":{"tags":["Smart Captions"],"summary":"Request Upload Url","operationId":"request_upload_url_api_smart_captions_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartCaptionsUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartCaptionsUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-captions/preview":{"post":{"tags":["Smart Captions"],"summary":"Preview","operationId":"preview_api_smart_captions_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-captions/export":{"post":{"tags":["Smart Captions"],"summary":"Start Export","operationId":"start_export_api_smart_captions_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/smart-captions/export/status/{job_id}":{"get":{"tags":["Smart Captions"],"summary":"Get Export Status","operationId":"get_export_status_api_smart_captions_export_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/features__smart_captions__schemas__JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/smart-captions/export/{job_id}":{"delete":{"tags":["Smart Captions"],"summary":"Delete Export","description":"Called by the client after the ZIP has been downloaded. Deletes the R2 object.","operationId":"delete_export_api_smart_captions_export__job_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/smart-captions/get-emojis":{"post":{"tags":["Smart Captions"],"summary":"Get Emojis","operationId":"get_emojis_api_smart_captions_get_emojis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetEmojisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EmojiSelection"},"type":"array","title":"Response Get Emojis Api Smart Captions Get Emojis Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/request-upload":{"post":{"tags":["Vibe Captions"],"summary":"Request Upload Url","operationId":"request_upload_url_api_vibe_captions_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/analyze":{"post":{"tags":["Vibe Captions"],"summary":"Start Analyze","operationId":"start_analyze_api_vibe_captions_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/features__vibe_captions__schemas__AnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/resolve-font":{"post":{"tags":["Vibe Captions"],"summary":"Resolve Font Endpoint","description":"Nom de police LIBRE → nom EXACT d'une police réellement disponible.\n\nLe copilot écrit « Montserrat Bold » ou « une grotesque » : sans cette étape\nle nom ne correspondrait à aucun fichier et le moteur retomberait\nsilencieusement sur une police arbitraire.","operationId":"resolve_font_endpoint_api_vibe_captions_resolve_font_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveFontRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveFontResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/plan-from-texts":{"post":{"tags":["Vibe Captions"],"summary":"Plan From Texts Endpoint","description":"Textes + timing FOURNIS → plan de design prêt à rendre.\n\nSynchrone : seules les 2 passes de design tournent (quelques secondes), là où\n/analyze enchaîne transcription + N appels de curation.","operationId":"plan_from_texts_endpoint_api_vibe_captions_plan_from_texts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanFromTextsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/render":{"post":{"tags":["Vibe Captions"],"summary":"Start Render","operationId":"start_render_api_vibe_captions_render_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/features__vibe_captions__schemas__RenderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/vibe-captions/status/{job_id}":{"get":{"tags":["Vibe Captions"],"summary":"Get Status","operationId":"get_status_api_vibe_captions_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/StatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-captions/export/{job_id}":{"delete":{"tags":["Vibe Captions"],"summary":"Delete Export","operationId":"delete_export_api_vibe_captions_export__job_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audio-mix/request-upload":{"post":{"tags":["AudioMix"],"summary":"Request Upload","description":"Presigned PUT so the panel streams a stem straight to R2.","operationId":"request_upload_api_audio_mix_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audio-mix/resolve-params":{"post":{"tags":["AudioMix"],"summary":"Resolve Params","description":"Synchronous: Gemini maps each desired param → its property index + a value\nconverted into the property's scale (language-robust), from the props the panel\njust read back. Replaces the panel's local regex matcher.","operationId":"resolve_params_api_audio_mix_resolve_params_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveParamsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audio-mix":{"post":{"tags":["AudioMix"],"summary":"Start Audio Mix","description":"Kick off the async mix job. Panel has already uploaded the stems to R2.","operationId":"start_audio_mix_api_audio_mix_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioMixRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/audio-mix/status/{job_id}":{"get":{"tags":["AudioMix"],"summary":"Get Status","operationId":"get_status_api_audio_mix_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/color-grade/request-upload":{"post":{"tags":["ColorGrade"],"summary":"Request Upload","description":"Presigned PUT so the panel streams a frame straight to R2.","operationId":"request_upload_api_color_grade_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/color-grade":{"post":{"tags":["ColorGrade"],"summary":"Start Color Grade","description":"Kick off the async grade job. Panel has already exported + uploaded ONE\nframe per source to R2. Cost = 1 credit / frame.","operationId":"start_color_grade_api_color_grade_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorGradeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/color-grade/status/{job_id}":{"get":{"tags":["ColorGrade"],"summary":"Get Status","operationId":"get_status_api_color_grade_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/auto-broll/request-upload":{"post":{"tags":["AutoBroll"],"summary":"Request Upload","description":"Presigned PUT so the panel streams a b-roll frame straight to R2.","operationId":"request_upload_api_auto_broll_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-broll":{"post":{"tags":["AutoBroll"],"summary":"Start Auto Broll","description":"Kick off the async job. Flat 40 credits, debited on success.","operationId":"start_auto_broll_api_auto_broll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoBrollRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-broll/status/{job_id}":{"get":{"tags":["AutoBroll"],"summary":"Get Status","operationId":"get_status_api_auto_broll_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/auto-sfx/status/{job_id}":{"get":{"tags":["AutoSFX"],"summary":"Get Status","operationId":"get_status_api_auto_sfx_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/SfxStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auto-sfx/request-upload":{"post":{"tags":["AutoSFX"],"summary":"Request Upload","description":"Presigned PUT — le panneau pousse l'audio et les planches direct sur R2.","operationId":"request_upload_api_auto_sfx_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SfxUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SfxUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-sfx/analyze":{"post":{"tags":["AutoSFX"],"summary":"Start Analyze","operationId":"start_analyze_api_auto_sfx_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/features__auto_sfx__schemas__AnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SfxJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auto-sfx/render":{"post":{"tags":["AutoSFX"],"summary":"Start Render","operationId":"start_render_api_auto_sfx_render_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/features__auto_sfx__schemas__RenderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SfxJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/podcast/request-upload":{"post":{"tags":["Podcast"],"summary":"Request Upload Url","description":"Returns a presigned PUT URL so the client can upload one audio track to R2.","operationId":"request_upload_url_api_podcast_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PodcastUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PodcastUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/podcast":{"post":{"tags":["Podcast"],"summary":"Start Podcast","operationId":"start_podcast_api_podcast_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PodcastRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PodcastJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/podcast/status/{job_id}":{"get":{"tags":["Podcast"],"summary":"Get Podcast Status","operationId":"get_podcast_status_api_podcast_status__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"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/PodcastStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-v2/stream-chat":{"post":{"tags":["AgentV2"],"summary":"Stream Chat","operationId":"stream_chat_api_agent_v2_stream_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StreamChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agent-v2/stop":{"post":{"tags":["AgentV2"],"summary":"Stop Agent","operationId":"stop_agent_api_agent_v2_stop_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopAgentResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agent-v2/admin/audit-logs/download":{"get":{"tags":["AgentV2"],"summary":"Admin Download Audit Logs","description":"Streams a ZIP of the audit log folders.\n\nFilters:\n  - email   : exact sanitized email folder name (e.g. `a3@a.com` → `a3@a.com`)\n  - since   : ISO date — keep only Conv_* whose mtime >= this date\n  - limit   : cap total Conv_* folders included (newest first when limit applies)","operationId":"admin_download_audit_logs_api_agent_v2_admin_audit_logs_download_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one user folder (sanitized email match).","title":"Email"},"description":"Filter to one user folder (sanitized email match)."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date (YYYY-MM-DD or full ISO). Keeps Conv_* dirs modified on/after this date.","title":"Since"},"description":"ISO date (YYYY-MM-DD or full ISO). Keeps Conv_* dirs modified on/after this date."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"Max number of conversation folders included (0 = no limit).","default":0,"title":"Limit"},"description":"Max number of conversation folders included (0 = no limit)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-v2/admin/audit-logs/schedule-purge":{"post":{"tags":["AgentV2"],"summary":"Admin Schedule Audit Purge","description":"Schedules a full deletion of the audit logs in 5 minutes.\n\nBody MUST include a non-empty `confirm` string (any value) — friction guard\nagainst accidental purge. Files remain downloadable for 5 minutes after the\ncall, then are permanently deleted.\n\nCalling this again before the timer fires REPLACES the scheduled time\n(sliding 5-minute window from the last call).","operationId":"admin_schedule_audit_purge_api_agent_v2_admin_audit_logs_schedule_purge_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"},"example":{"confirm":"DELETE"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agent-v2/admin/audit-logs/cancel-purge":{"post":{"tags":["AgentV2"],"summary":"Admin Cancel Audit Purge","description":"Cancels a pending audit-logs purge, if one is scheduled.","operationId":"admin_cancel_audit_purge_api_agent_v2_admin_audit_logs_cancel_purge_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/agent-v2/bridge/status":{"get":{"tags":["AgentV2"],"summary":"Bridge Status","description":"Debug: list emails currently connected via WebSocket bridge.\nAdmin (membership=3) sees all; other users see only their own connection state.","operationId":"bridge_status_api_agent_v2_bridge_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/outreach/run/{step}":{"post":{"tags":["Outreach"],"summary":"Run Step","description":"Déclenche une étape à la main (le scheduler fait `all` chaque matin).","operationId":"run_step_api_outreach_run__step__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"step","in":"path","required":true,"schema":{"type":"string","title":"Step"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/creators":{"get":{"tags":["Outreach"],"summary":"List Creators","operationId":"list_creators_api_outreach_creators_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},{"name":"min_score","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Min Score"}},{"name":"has_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email"}},{"name":"has_sponsored","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Sponsored"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/stats":{"get":{"tags":["Outreach"],"summary":"Stats","description":"Entonnoir par étape — la seule vue qui dise si le pipeline convertit.","operationId":"stats_api_outreach_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/outreach/creators/{creator_id}/timeline":{"get":{"tags":["Outreach"],"summary":"Timeline","operationId":"timeline_api_outreach_creators__creator_id__timeline_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"creator_id","in":"path","required":true,"schema":{"type":"integer","title":"Creator Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/creators/{creator_id}":{"patch":{"tags":["Outreach"],"summary":"Update Stage","description":"Avance manuelle : réponse reçue, call calé, deal signé, opt-out.\n\nC'est ici qu'atterrissent les événements que le pipeline ne voit pas —\nune réponse dans ta boîte, un call posé sur Cal.com, un STOP.","operationId":"update_stage_api_outreach_creators__creator_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"creator_id","in":"path","required":true,"schema":{"type":"integer","title":"Creator Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/review":{"get":{"tags":["Outreach"],"summary":"Review Queue","description":"La file de validation : qui on propose de contacter, et pourquoi.\n\nC'est l'écran de travail quotidien. Chaque ligne porte de quoi trancher en\nquelques secondes — le score, la raison, les concurrents déjà sponsorisés,\net l'accroche que le rédacteur utilisera.","operationId":"review_queue_api_outreach_review_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Outreach"],"summary":"Submit Review","description":"Valide ou écarte en lot. Seuls les approuvés recevront un email.","operationId":"submit_review_api_outreach_review_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewDecision"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/drafts":{"get":{"tags":["Outreach"],"summary":"List Drafts","description":"Seconde porte : les emails rédigés, avant export ou envoi.\n\n`flags` vient du contrôle anti-formule-toute-faite (cf. sequences.lint).\nUn brouillon sans drapeau n'est pas forcément bon, mais un brouillon avec\ndrapeaux est à relire en premier — d'où `only_flagged`.","operationId":"list_drafts_api_outreach_drafts_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"only_flagged","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Flagged"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/creators/{creator_id}/redraft":{"post":{"tags":["Outreach"],"summary":"Redraft","description":"Régénère la séquence d'un créateur dont le brouillon ne convient pas.\n\nLa rédaction tourne à température haute : deux passages donnent deux angles\ndifférents. Plus rapide que de réécrire à la main quand l'ouverture tombe\nà côté.","operationId":"redraft_api_outreach_creators__creator_id__redraft_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"creator_id","in":"path","required":true,"schema":{"type":"integer","title":"Creator Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/outreach/export.csv":{"get":{"tags":["Outreach"],"summary":"Export Csv","description":"Export pour l'outil de cold email (Instantly / Smartlead).\n\nUne ligne par créateur, avec les trois emails de la séquence déjà rédigés\nen colonnes séparées : l'outil se charge de la cadence, du warm-up et de\nl'envoi depuis le domaine dédié.","operationId":"export_csv_api_outreach_export_csv_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"stage","in":"query","required":false,"schema":{"type":"string","default":"queued","title":"Stage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/improvements":{"post":{"tags":["Improvements"],"summary":"Submit Improvement","operationId":"submit_improvement_api_improvements_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImprovementRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImprovementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}}},"components":{"schemas":{"AICreditsCheckRequest":{"properties":{"feature_name":{"type":"string","title":"Feature Name"}},"type":"object","required":["feature_name"],"title":"AICreditsCheckRequest","description":"Pré-run (gate) ET post-run (débit) : juste le nom de la feature.\nLe coût est calculé côté serveur (cf. _server_authoritative_cost)."},"AdminCreateUser":{"properties":{"email":{"type":"string","title":"Email"},"firstname":{"type":"string","title":"Firstname"},"name":{"type":"string","title":"Name"},"password":{"type":"string","title":"Password"},"membership":{"type":"integer","title":"Membership","default":0},"ai_credits":{"type":"integer","title":"Ai Credits","default":10}},"type":"object","required":["email","firstname","name","password"],"title":"AdminCreateUser","description":"Schéma pour la création d'un utilisateur par l'administrateur."},"AdminDeleteUserResponse":{"properties":{"message":{"type":"string","title":"Message"},"deleted_user":{"additionalProperties":true,"type":"object","title":"Deleted User"},"stripe_deleted":{"type":"boolean","title":"Stripe Deleted"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"}},"type":"object","required":["message","deleted_user","stripe_deleted"],"title":"AdminDeleteUserResponse","description":"Schéma pour la réponse de suppression d'un utilisateur par l'administrateur."},"AdminPasswordResetLinkRequest":{"properties":{"user_id":{"type":"integer","title":"User Id"}},"type":"object","required":["user_id"],"title":"AdminPasswordResetLinkRequest"},"AdminUpdateCredits":{"properties":{"ai_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Credits"},"grant_bonus_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grant Bonus Credits"}},"type":"object","title":"AdminUpdateCredits"},"AdminUpdateMembership":{"properties":{"membership":{"type":"integer","title":"Membership"}},"type":"object","required":["membership"],"title":"AdminUpdateMembership"},"AnalyzeResponse":{"properties":{"corrections":{"items":{"$ref":"#/components/schemas/Correction"},"type":"array","title":"Corrections"}},"type":"object","required":["corrections"],"title":"AnalyzeResponse"},"AudioMixRequest":{"properties":{"stems":{"items":{"$ref":"#/components/schemas/StemRef"},"type":"array","title":"Stems"},"timeline_info":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Timeline Info"},"available_effects":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Available Effects"},"user_prompt":{"type":"string","title":"User Prompt","default":""},"model":{"type":"string","title":"Model","default":"flash"},"time_start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time Start"},"time_end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time End"}},"type":"object","required":["stems","timeline_info"],"title":"AudioMixRequest"},"AutoBrollRequest":{"properties":{"segments":{"items":{"$ref":"#/components/schemas/SegmentIn"},"type":"array","title":"Segments"},"broll":{"items":{"$ref":"#/components/schemas/BrollIn"},"type":"array","title":"Broll"},"mode":{"type":"string","title":"Mode","default":"project"},"broll_per_minute":{"type":"integer","title":"Broll Per Minute","default":8},"allow_reuse":{"type":"boolean","title":"Allow Reuse","default":false},"user_prompt":{"type":"string","title":"User Prompt","default":""},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"source":{"type":"string","title":"Source","default":"panel"}},"type":"object","required":["segments","broll"],"title":"AutoBrollRequest"},"AutoZoomJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"AutoZoomJobResponse"},"AutoZoomRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"sequence_structure":{"type":"string","title":"Sequence Structure"},"prompt":{"type":"string","title":"Prompt","default":""},"model":{"type":"string","title":"Model","default":"fast"},"motion_camera":{"type":"integer","title":"Motion Camera","default":0},"zoom_rythm":{"type":"integer","title":"Zoom Rythm","default":3},"zoom_fastness":{"type":"integer","title":"Zoom Fastness","default":3},"zoom":{"type":"integer","title":"Zoom","default":120},"based_cuts":{"type":"boolean","title":"Based Cuts","default":true},"based_emotion":{"type":"boolean","title":"Based Emotion","default":true},"based_speech":{"type":"boolean","title":"Based Speech","default":true},"based_random":{"type":"boolean","title":"Based Random","default":false},"based_context":{"type":"boolean","title":"Based Context","default":false},"jump_cut":{"additionalProperties":true,"type":"object","title":"Jump Cut"},"ease_inout":{"additionalProperties":true,"type":"object","title":"Ease Inout"},"snap_inout":{"additionalProperties":true,"type":"object","title":"Snap Inout"},"coordinates":{"additionalProperties":true,"type":"object","title":"Coordinates"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"}},"type":"object","required":["object_key","filename","sequence_structure"],"title":"AutoZoomRequest"},"AutoZoomStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"AutoZoomStatusResponse"},"AutoZoomUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"AutoZoomUploadRequest"},"AutoZoomUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"AutoZoomUploadResponse"},"Body_apply_xml_cuts_api_jump_cut_apply_xml_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"time_segments":{"type":"string","title":"Time Segments"},"sequence_name":{"type":"string","title":"Sequence Name","default":""}},"type":"object","required":["file","time_segments"],"title":"Body_apply_xml_cuts_api_jump_cut_apply_xml_post"},"Body_jump_cut_preview_upload_api_jump_cut_preview_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_jump_cut_preview_upload_api_jump_cut_preview_upload_post"},"Body_login_for_access_token_api_token_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","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"}],"title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_for_access_token_api_token_post"},"BrollIn":{"properties":{"node_id":{"type":"string","title":"Node Id"},"media_path":{"type":"string","title":"Media Path","default":""},"label":{"type":"string","title":"Label","default":""},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"timeline_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timeline Id"},"object_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Key"}},"type":"object","required":["node_id"],"title":"BrollIn"},"CaptionItem":{"properties":{"start":{"type":"number","title":"Start"},"end":{"type":"number","title":"End"},"text":{"type":"string","title":"Text"},"emphasis":{"type":"boolean","title":"Emphasis","default":false},"design":{"additionalProperties":true,"type":"object","title":"Design","default":{}},"position":{"type":"string","title":"Position","default":"bottom_center"},"color":{"type":"string","title":"Color","default":""},"animation":{"type":"string","title":"Animation","default":"fade"},"shape":{"type":"string","title":"Shape","default":"none"}},"type":"object","required":["start","end","text"],"title":"CaptionItem"},"ChargeRequest":{"properties":{"feature":{"type":"string","title":"Feature"},"duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration S"},"advanced":{"type":"boolean","title":"Advanced","default":false},"client_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Ref"},"engine":{"type":"string","title":"Engine","default":"standard"}},"type":"object","required":["feature"],"title":"ChargeRequest"},"CheckoutIn":{"properties":{"subscription_type":{"type":"integer","title":"Subscription Type","description":"1=PRO, 2=CREATOR, 4=PODCAST, 5=CREDITS"},"billing":{"type":"string","title":"Billing","description":"'monthly' or 'annual'. Only applies to subscription_type 1 and 2.","default":"monthly"},"prefill_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Prefill Email"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Where Stripe sends the visitor after a cancel."},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Where Stripe sends the visitor after success. May contain {CHECKOUT_SESSION_ID}."}},"type":"object","required":["subscription_type"],"title":"CheckoutIn"},"CheckoutOut":{"properties":{"url":{"type":"string","title":"Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["url","session_id"],"title":"CheckoutOut"},"ClaudeCutAnalyzeRequest":{"properties":{"transcription":{"title":"Transcription"},"model_name":{"type":"string","title":"Model Name"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"cut_silences_over":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cut Silences Over","default":0.6},"autopilot":{"type":"boolean","title":"Autopilot","default":false},"advanced_word_precision":{"type":"boolean","title":"Advanced Word Precision","default":false}},"type":"object","required":["transcription","model_name"],"title":"ClaudeCutAnalyzeRequest"},"ClaudeCutApplyRequest":{"properties":{"cuts_applied":{"type":"integer","title":"Cuts Applied","default":0},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},"type":"object","title":"ClaudeCutApplyRequest"},"ClaudeCutJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"ClaudeCutJobResponse"},"ClaudeCutStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"ClaudeCutStatusResponse"},"ClaudeCutTranscribeRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"},"advanced_word_precision":{"type":"boolean","title":"Advanced Word Precision","default":false},"no_charge":{"type":"boolean","title":"No Charge","default":false}},"type":"object","required":["object_key","filename"],"title":"ClaudeCutTranscribeRequest"},"ClaudeCutUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"ClaudeCutUploadRequest"},"ClaudeCutUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"ClaudeCutUploadResponse"},"ColorGradeRequest":{"properties":{"frames":{"items":{"$ref":"#/components/schemas/FrameRef"},"type":"array","title":"Frames"},"timeline_clips":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Timeline Clips"},"available_effects":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Available Effects"},"user_prompt":{"type":"string","title":"User Prompt","default":""},"model":{"type":"string","title":"Model","default":"flash"},"source":{"type":"string","title":"Source","default":"panel"},"time_start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time Start"},"time_end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time End"}},"type":"object","required":["frames","timeline_clips"],"title":"ColorGradeRequest"},"Correction":{"properties":{"id":{"type":"string","title":"Id"},"original":{"type":"string","title":"Original"},"corrected":{"type":"string","title":"Corrected"},"changed":{"type":"boolean","title":"Changed"},"issues":{"items":{"$ref":"#/components/schemas/Issue"},"type":"array","title":"Issues","default":[]}},"type":"object","required":["id","original","corrected","changed"],"title":"Correction"},"DiarizationJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"DiarizationJobResponse"},"DiarizationRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"}},"type":"object","required":["object_key","filename"],"title":"DiarizationRequest"},"DiarizationStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"DiarizationStatusResponse"},"DiarizationUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"DiarizationUploadRequest"},"DiarizationUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"DiarizationUploadResponse"},"EmojiSelection":{"properties":{"id":{"type":"integer","title":"Id"},"emoji_codepoint":{"type":"string","title":"Emoji Codepoint"}},"type":"object","required":["id","emoji_codepoint"],"title":"EmojiSelection"},"ExportRequest":{"properties":{"font_object_key":{"type":"string","title":"Font Object Key"},"transcription":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Transcription"},"font_size":{"type":"integer","title":"Font Size","default":60},"color":{"items":{"type":"integer"},"type":"array","title":"Color","default":[255,255,255,255]},"letter_spacing":{"type":"integer","title":"Letter Spacing","default":0},"strokes_width":{"type":"integer","title":"Strokes Width","default":0},"strokes_color":{"items":{"type":"integer"},"type":"array","title":"Strokes Color","default":[255,0,0,0]},"is_bold":{"type":"boolean","title":"Is Bold","default":false},"is_italic":{"type":"boolean","title":"Is Italic","default":false},"is_all_caps":{"type":"boolean","title":"Is All Caps","default":false},"no_punctuation":{"type":"boolean","title":"No Punctuation","default":false},"nb_lines":{"type":"integer","title":"Nb Lines","default":1},"sequence_size":{"items":{"type":"integer"},"type":"array","title":"Sequence Size","default":[1920,1080]},"subtitles_box":{"type":"boolean","title":"Subtitles Box","default":false},"shadow":{"type":"boolean","title":"Shadow","default":false},"active_word":{"type":"boolean","title":"Active Word","default":false},"active_box":{"type":"boolean","title":"Active Box","default":false},"animation":{"type":"boolean","title":"Animation","default":false},"emojis":{"type":"boolean","title":"Emojis","default":false},"shadow_color":{"items":{"type":"integer"},"type":"array","title":"Shadow Color","default":[0,0,0,0]},"shadow_opacity":{"type":"number","title":"Shadow Opacity","default":0.0},"shadow_direction":{"type":"number","title":"Shadow Direction","default":0.0},"shadow_distance":{"type":"number","title":"Shadow Distance","default":0.0},"shadow_softness":{"type":"number","title":"Shadow Softness","default":0.0},"left_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Left Color"},"active_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Active Color"},"right_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Right Color"},"active_scale":{"type":"number","title":"Active Scale","default":100.0},"active_letter_spacing":{"type":"number","title":"Active Letter Spacing","default":0.0},"box_color":{"items":{"type":"integer"},"type":"array","title":"Box Color","default":[0,0,0,255]},"box_stroke_color":{"items":{"type":"integer"},"type":"array","title":"Box Stroke Color","default":[255,255,255,255]},"box_roundness":{"type":"number","title":"Box Roundness","default":10.0},"box_opacity":{"type":"number","title":"Box Opacity","default":80.0},"box_padding_top":{"type":"number","title":"Box Padding Top","default":20.0},"box_padding_bottom":{"type":"number","title":"Box Padding Bottom","default":20.0},"box_horizontal_padding":{"type":"number","title":"Box Horizontal Padding","default":40.0},"box_stroke_width":{"type":"number","title":"Box Stroke Width","default":0.0},"active_box_color":{"items":{"type":"integer"},"type":"array","title":"Active Box Color","default":[255,0,0,255]},"active_box_stroke_color":{"items":{"type":"integer"},"type":"array","title":"Active Box Stroke Color","default":[255,255,255,255]},"active_box_roundness":{"type":"number","title":"Active Box Roundness","default":10.0},"active_box_opacity":{"type":"number","title":"Active Box Opacity","default":100.0},"active_box_vertical_padding":{"type":"number","title":"Active Box Vertical Padding","default":20.0},"active_box_horizontal_padding":{"type":"number","title":"Active Box Horizontal Padding","default":40.0},"active_box_stroke_width":{"type":"number","title":"Active Box Stroke Width","default":0.0},"animation_zoom":{"type":"boolean","title":"Animation Zoom","default":false},"animation_blur":{"type":"boolean","title":"Animation Blur","default":false},"emoji_scale":{"type":"number","title":"Emoji Scale","default":1.0},"emoji_position":{"items":{"type":"number"},"type":"array","title":"Emoji Position","default":[0.5,0.5]},"position_subtitles":{"items":{"type":"number"},"type":"array","title":"Position Subtitles","default":[0.5,0.5]}},"type":"object","required":["font_object_key","transcription"],"title":"ExportRequest"},"FeatureAccessRequest":{"properties":{"feature_name":{"type":"string","title":"Feature Name"}},"type":"object","required":["feature_name"],"title":"FeatureAccessRequest","description":"Schéma pour la requête de vérification d'accès à une fonctionnalité."},"FontRef":{"properties":{"name":{"type":"string","title":"Name"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["name","object_key"],"title":"FontRef"},"FrameRef":{"properties":{"node_id":{"type":"string","title":"Node Id"},"object_key":{"type":"string","title":"Object Key"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["node_id","object_key"],"title":"FrameRef"},"FrontErrorReport":{"properties":{"feature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feature"},"hook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hook"},"error_message":{"type":"string","title":"Error Message"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stack"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inputs"},"breadcrumbs":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Breadcrumbs"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"},"frontend_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frontend Version"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"silent_alert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Silent Alert"}},"type":"object","required":["error_message"],"title":"FrontErrorReport"},"GeminiCallRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"system_instruction":{"type":"string","title":"System Instruction"},"structured_output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output"},"tool_list":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool List"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature","default":0.1},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"gemini-3.1-flash-lite"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"}},"type":"object","required":["prompt","system_instruction"],"title":"GeminiCallRequest","description":"Schéma pour la requête d'appel à l'API Gemini."},"GenAIStatusResponse":{"properties":{"allowed":{"type":"boolean","title":"Allowed"},"nb_gen_request":{"type":"integer","title":"Nb Gen Request"},"max_requests":{"type":"integer","title":"Max Requests"},"has_pay_genAI":{"type":"boolean","title":"Has Pay Genai"}},"type":"object","required":["allowed","nb_gen_request","max_requests","has_pay_genAI"],"title":"GenAIStatusResponse","description":"Schéma pour la réponse du statut des requêtes GenAI."},"GenerateSrtRequest":{"properties":{"transcription":{"type":"string","title":"Transcription"},"nb_lines":{"type":"integer","title":"Nb Lines","default":1},"punctuation_solo":{"type":"boolean","title":"Punctuation Solo","default":false}},"type":"object","required":["transcription"],"title":"GenerateSrtRequest"},"GenerateSrtResponse":{"properties":{"srt_content":{"type":"string","title":"Srt Content"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["srt_content","filename"],"title":"GenerateSrtResponse"},"GetEmojisRequest":{"properties":{"transcription":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Transcription"},"anim":{"type":"boolean","title":"Anim","default":false}},"type":"object","required":["transcription"],"title":"GetEmojisRequest"},"GridIn":{"properties":{"object_key":{"type":"string","maxLength":1024,"minLength":1,"title":"Object Key"},"times":{"items":{"type":"number"},"type":"array","maxItems":6,"minItems":1,"title":"Times"}},"type":"object","required":["object_key","times"],"title":"GridIn","description":"Une planche contact 3x2 déjà composée par le panneau.\n\n`times` porte le timecode de CHAQUE case, dans l'ordre de lecture (gauche→\ndroite puis ligne suivante) — le modèle renvoie un numéro de case, on le\nretraduit en secondes ici plutôt que de faire confiance au modèle sur un\ntimecode."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportSrtTrackRequest":{"properties":{"line_count":{"type":"integer","title":"Line Count","default":0},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"}},"type":"object","title":"ImportSrtTrackRequest"},"ImprovementRequest":{"properties":{"tool":{"type":"string","maxLength":100,"minLength":1,"title":"Tool"},"text":{"type":"string","maxLength":5000,"minLength":1,"title":"Text"}},"type":"object","required":["tool","text"],"title":"ImprovementRequest"},"ImprovementResponse":{"properties":{"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","created_at"],"title":"ImprovementResponse"},"Issue":{"properties":{"type":{"type":"string","title":"Type"},"wrong":{"type":"string","title":"Wrong"},"suggestion":{"type":"string","title":"Suggestion"},"explanation":{"type":"string","title":"Explanation","default":""}},"type":"object","required":["type","wrong","suggestion"],"title":"Issue"},"JobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"JobResponse"},"JumpCutJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"JumpCutJobResponse"},"JumpCutPreviewResponse":{"properties":{"waveform_amplitudes":{"items":{"type":"number"},"type":"array","title":"Waveform Amplitudes"},"vad_probs":{"items":{"type":"number"},"type":"array","title":"Vad Probs"},"frame_ms":{"type":"number","title":"Frame Ms"},"total_seconds":{"type":"number","title":"Total Seconds"}},"type":"object","required":["waveform_amplitudes","vad_probs","frame_ms","total_seconds"],"title":"JumpCutPreviewResponse","description":"Returned by /preview/upload.\nBackend runs ONLY the VAD (no thresholding / padding / min duration).\nThe frontend applies all post-processing live as the user moves sliders."},"JumpCutRunRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"vad_sensitivity":{"type":"number","title":"Vad Sensitivity","default":0.5},"remove_silences_over":{"type":"number","title":"Remove Silences Over"},"keep_segments_over":{"type":"number","title":"Keep Segments Over"},"padding":{"type":"number","title":"Padding","default":0.0},"padding_right":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Padding Right"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"},"source":{"type":"string","title":"Source","default":"tool"},"no_charge":{"type":"boolean","title":"No Charge","default":false}},"type":"object","required":["object_key","filename","remove_silences_over","keep_segments_over"],"title":"JumpCutRunRequest"},"JumpCutStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"JumpCutStatusResponse"},"JumpCutUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"JumpCutUploadRequest"},"JumpCutUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"JumpCutUploadResponse"},"MusicRequest":{"properties":{"audio_base64":{"type":"string","title":"Audio Base64"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["audio_base64","filename"],"title":"MusicRequest","description":"Schéma pour la requête d'analyse de musique."},"MusicUrlRequest":{"properties":{"audio_url":{"type":"string","title":"Audio Url"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["audio_url","filename"],"title":"MusicUrlRequest","description":"Agent-internal: analyse depuis une URL R2 présignée."},"PasswordReset":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"PasswordReset"},"PasswordResetLinkResponse":{"properties":{"message":{"type":"string","title":"Message"},"reset_link":{"type":"string","title":"Reset Link"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["message","reset_link","expires_at"],"title":"PasswordResetLinkResponse"},"PasswordResetRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"PasswordResetRequest"},"PlanFromTextsRequest":{"properties":{"texts":{"items":{"$ref":"#/components/schemas/SuppliedText"},"type":"array","title":"Texts"},"prompt":{"type":"string","title":"Prompt","default":""},"duration_target_s":{"type":"number","title":"Duration Target S","default":2.0},"sequence":{"$ref":"#/components/schemas/SequenceInfo"},"style":{"$ref":"#/components/schemas/StyleSettings"}},"type":"object","required":["texts","sequence","style"],"title":"PlanFromTextsRequest"},"PlanResponse":{"properties":{"plan":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Plan"},"n_texts":{"type":"integer","title":"N Texts"}},"type":"object","required":["plan","n_texts"],"title":"PlanResponse"},"PodcastJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"PodcastJobResponse"},"PodcastRunRequest":{"properties":{"object_keys":{"items":{"type":"string"},"type":"array","title":"Object Keys"},"filenames":{"items":{"type":"string"},"type":"array","title":"Filenames"},"front_data":{"additionalProperties":true,"type":"object","title":"Front Data"},"advanced_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Advanced Settings"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"}},"type":"object","required":["object_keys","filenames","front_data"],"title":"PodcastRunRequest"},"PodcastStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"PodcastStatusResponse"},"PodcastUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"PodcastUploadRequest"},"PodcastUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"PodcastUploadResponse"},"PrepareRequest":{"properties":{"sample_text":{"type":"string","title":"Sample Text"},"correction_prompt":{"type":"string","title":"Correction Prompt","default":""},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"flash"}},"type":"object","required":["sample_text"],"title":"PrepareRequest"},"PrepareResponse":{"properties":{"language":{"type":"string","title":"Language"},"language_name":{"type":"string","title":"Language Name"},"translated_prompt":{"type":"string","title":"Translated Prompt","default":""}},"type":"object","required":["language","language_name"],"title":"PrepareResponse"},"PreviewRequest":{"properties":{"font_object_key":{"type":"string","title":"Font Object Key"},"transcription":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Transcription"},"font_size":{"type":"integer","title":"Font Size","default":60},"color":{"items":{"type":"integer"},"type":"array","title":"Color","default":[255,255,255,255]},"letter_spacing":{"type":"integer","title":"Letter Spacing","default":0},"strokes_width":{"type":"integer","title":"Strokes Width","default":0},"strokes_color":{"items":{"type":"integer"},"type":"array","title":"Strokes Color","default":[255,0,0,0]},"is_bold":{"type":"boolean","title":"Is Bold","default":false},"is_italic":{"type":"boolean","title":"Is Italic","default":false},"is_all_caps":{"type":"boolean","title":"Is All Caps","default":false},"no_punctuation":{"type":"boolean","title":"No Punctuation","default":false},"nb_lines":{"type":"integer","title":"Nb Lines","default":1},"sequence_size":{"items":{"type":"integer"},"type":"array","title":"Sequence Size","default":[1920,1080]},"subtitles_box":{"type":"boolean","title":"Subtitles Box","default":false},"shadow":{"type":"boolean","title":"Shadow","default":false},"active_word":{"type":"boolean","title":"Active Word","default":false},"active_box":{"type":"boolean","title":"Active Box","default":false},"animation":{"type":"boolean","title":"Animation","default":false},"emojis":{"type":"boolean","title":"Emojis","default":false},"shadow_color":{"items":{"type":"integer"},"type":"array","title":"Shadow Color","default":[0,0,0,0]},"shadow_opacity":{"type":"number","title":"Shadow Opacity","default":0.0},"shadow_direction":{"type":"number","title":"Shadow Direction","default":0.0},"shadow_distance":{"type":"number","title":"Shadow Distance","default":0.0},"shadow_softness":{"type":"number","title":"Shadow Softness","default":0.0},"left_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Left Color"},"active_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Active Color"},"right_color":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Right Color"},"active_scale":{"type":"number","title":"Active Scale","default":100.0},"active_letter_spacing":{"type":"number","title":"Active Letter Spacing","default":0.0},"box_color":{"items":{"type":"integer"},"type":"array","title":"Box Color","default":[0,0,0,255]},"box_stroke_color":{"items":{"type":"integer"},"type":"array","title":"Box Stroke Color","default":[255,255,255,255]},"box_roundness":{"type":"number","title":"Box Roundness","default":10.0},"box_opacity":{"type":"number","title":"Box Opacity","default":80.0},"box_padding_top":{"type":"number","title":"Box Padding Top","default":20.0},"box_padding_bottom":{"type":"number","title":"Box Padding Bottom","default":20.0},"box_horizontal_padding":{"type":"number","title":"Box Horizontal Padding","default":40.0},"box_stroke_width":{"type":"number","title":"Box Stroke Width","default":0.0},"active_box_color":{"items":{"type":"integer"},"type":"array","title":"Active Box Color","default":[255,0,0,255]},"active_box_stroke_color":{"items":{"type":"integer"},"type":"array","title":"Active Box Stroke Color","default":[255,255,255,255]},"active_box_roundness":{"type":"number","title":"Active Box Roundness","default":10.0},"active_box_opacity":{"type":"number","title":"Active Box Opacity","default":100.0},"active_box_vertical_padding":{"type":"number","title":"Active Box Vertical Padding","default":20.0},"active_box_horizontal_padding":{"type":"number","title":"Active Box Horizontal Padding","default":40.0},"active_box_stroke_width":{"type":"number","title":"Active Box Stroke Width","default":0.0},"animation_zoom":{"type":"boolean","title":"Animation Zoom","default":false},"animation_blur":{"type":"boolean","title":"Animation Blur","default":false},"emoji_scale":{"type":"number","title":"Emoji Scale","default":1.0},"emoji_position":{"items":{"type":"number"},"type":"array","title":"Emoji Position","default":[0.5,0.5]},"position_subtitles":{"items":{"type":"number"},"type":"array","title":"Position Subtitles","default":[0.5,0.5]}},"type":"object","required":["font_object_key","transcription"],"title":"PreviewRequest"},"PreviewResponse":{"properties":{"image_base64":{"type":"string","title":"Image Base64"}},"type":"object","required":["image_base64"],"title":"PreviewResponse"},"RenderItem":{"properties":{"candidate_id":{"type":"integer","title":"Candidate Id"},"t":{"type":"number","minimum":0.0,"title":"T"},"prompt":{"type":"string","maxLength":2000,"minLength":1,"title":"Prompt"},"category":{"type":"string","enum":["impact","transition","foley","ambience"],"title":"Category","default":"impact"},"subcategory":{"type":"string","maxLength":100,"title":"Subcategory","default":"custom"},"duration_seconds":{"type":"number","maximum":22.0,"minimum":0.5,"title":"Duration Seconds","default":5.0},"gain_db":{"type":"number","maximum":12.0,"minimum":-60.0,"title":"Gain Db","default":-14.0}},"type":"object","required":["candidate_id","t","prompt"],"title":"RenderItem"},"ResolveFontRequest":{"properties":{"requested":{"type":"string","title":"Requested","default":""},"local_fonts":{"items":{"type":"string"},"type":"array","title":"Local Fonts","default":[]}},"type":"object","title":"ResolveFontRequest"},"ResolveFontResponse":{"properties":{"name":{"type":"string","title":"Name"},"source":{"type":"string","title":"Source"},"requested":{"type":"string","title":"Requested"},"matched":{"type":"boolean","title":"Matched"}},"type":"object","required":["name","source","requested","matched"],"title":"ResolveFontResponse"},"ResolveParamsRequest":{"properties":{"requests":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Requests","default":[]}},"type":"object","title":"ResolveParamsRequest"},"ReviewDecision":{"properties":{"approve":{"items":{"type":"integer"},"type":"array","title":"Approve","default":[]},"reject":{"items":{"type":"integer"},"type":"array","title":"Reject","default":[]},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ReviewDecision","description":"Validation en lot : les ids qu'on autorise à être contactés, et ceux\nqu'on écarte. Les deux listes sont optionnelles pour pouvoir n'en faire\nqu'une à la fois."},"RewardClaimRequest":{"properties":{"reward_id":{"type":"string","maxLength":40,"minLength":1,"title":"Reward Id"}},"type":"object","required":["reward_id"],"title":"RewardClaimRequest"},"SegmentIn":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text","default":""},"start":{"type":"number","title":"Start","default":0.0},"end":{"type":"number","title":"End","default":0.0}},"type":"object","required":["id"],"title":"SegmentIn"},"SequenceInfo":{"properties":{"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"fps":{"type":"number","title":"Fps"},"duration_s":{"type":"number","title":"Duration S","default":0.0}},"type":"object","required":["width","height","fps"],"title":"SequenceInfo"},"SessionStatusOut":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"user_exists":{"type":"boolean","title":"User Exists"},"payment_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Status"},"subscription_type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription Type"}},"type":"object","required":["email","user_exists","payment_status","subscription_type"],"title":"SessionStatusOut"},"SfxJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"SfxJobResponse"},"SfxStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"progress":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Progress"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"SfxStatusResponse"},"SfxUploadRequest":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename"}},"type":"object","required":["filename"],"title":"SfxUploadRequest"},"SfxUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"SfxUploadResponse"},"SmartCaptionsUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"SmartCaptionsUploadRequest"},"SmartCaptionsUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"SmartCaptionsUploadResponse"},"SmartChaptersJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"SmartChaptersJobResponse"},"SmartChaptersRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"min_chapters":{"type":"integer","title":"Min Chapters","default":5},"max_chapters":{"type":"integer","title":"Max Chapters","default":10},"user_prompt":{"type":"string","title":"User Prompt","default":""},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"}},"type":"object","required":["object_key","filename"],"title":"SmartChaptersRequest"},"SmartChaptersStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"SmartChaptersStatusResponse"},"SmartChaptersUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"SmartChaptersUploadRequest"},"SmartChaptersUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"SmartChaptersUploadResponse"},"SmartViralsJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"SmartViralsJobResponse"},"SmartViralsRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"model":{"type":"string","title":"Model","default":"flash"},"clip_number":{"type":"integer","title":"Clip Number","default":3},"emotion_based":{"type":"boolean","title":"Emotion Based","default":true},"cut_frequency_based":{"type":"boolean","title":"Cut Frequency Based","default":true},"transcription_based":{"type":"boolean","title":"Transcription Based","default":true},"sequence_structure":{"type":"string","title":"Sequence Structure","default":"[]"},"target_duration":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Target Duration","default":{"30-60":true}},"prompt":{"type":"string","title":"Prompt","default":""},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"}},"type":"object","required":["object_key","filename"],"title":"SmartViralsRequest"},"SmartViralsStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Result"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"SmartViralsStatusResponse"},"SmartViralsUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"SmartViralsUploadRequest"},"SmartViralsUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"SmartViralsUploadResponse"},"StageUpdate":{"properties":{"stage":{"type":"string","title":"Stage"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["stage"],"title":"StageUpdate"},"StatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"StatusResponse"},"StemRef":{"properties":{"track":{"type":"integer","title":"Track"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["track","object_key"],"title":"StemRef"},"StopAgentResponse":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StopAgentResponse"},"StreamChatRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"user_email":{"type":"string","title":"User Email"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"gemini-3-5-flash"},"nle_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nle Type","default":"premiere"}},"type":"object","required":["prompt","user_email"],"title":"StreamChatRequest"},"StyleSettings":{"properties":{"register":{"type":"string","title":"Register","default":"clean"},"colors":{"additionalProperties":{"type":"string"},"type":"object","title":"Colors","default":{}},"font_object_key":{"type":"string","title":"Font Object Key","default":""},"font_name":{"type":"string","title":"Font Name","default":""},"fonts":{"items":{"$ref":"#/components/schemas/FontRef"},"type":"array","title":"Fonts","default":[]},"placement":{"type":"string","title":"Placement","default":"auto"},"uniform_size":{"type":"boolean","title":"Uniform Size","default":true},"uniform_font":{"type":"boolean","title":"Uniform Font","default":true},"preset":{"additionalProperties":true,"type":"object","title":"Preset","default":{}},"preset_lines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Preset Lines","default":[]},"advanced":{"type":"boolean","title":"Advanced","default":false}},"type":"object","title":"StyleSettings"},"SubtitlesProUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"SubtitlesProUploadRequest"},"SubtitlesProUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"SubtitlesProUploadResponse"},"SuppliedText":{"properties":{"text":{"type":"string","title":"Text"},"start":{"type":"number","title":"Start","default":0.0},"end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End"},"emphasis":{"type":"boolean","title":"Emphasis","default":false},"highlight_words":{"items":{"type":"string"},"type":"array","title":"Highlight Words","default":[]}},"type":"object","required":["text"],"title":"SuppliedText"},"TextItem":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"start_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start S"},"end_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End S"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},"type":"object","required":["id","text"],"title":"TextItem"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"Token"},"TokenRefresh":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"TokenRefresh"},"TrackRequest":{"properties":{"event":{"type":"string","maxLength":100,"minLength":1,"title":"Event","description":"PostHog event name (e.g. 'panel.opened')"},"properties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["event"],"title":"TrackRequest"},"TranscribeRequest":{"properties":{"object_key":{"type":"string","title":"Object Key"},"filename":{"type":"string","title":"Filename"},"model":{"type":"string","title":"Model","default":"gpt-5"},"spelling_check":{"type":"boolean","title":"Spelling Check","default":true},"user_prompt":{"type":"string","maxLength":800,"title":"User Prompt","default":""},"language":{"type":"string","title":"Language","default":""},"source":{"type":"string","title":"Source","default":"subtitles_pro"},"audio_duration_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Audio Duration S"},"advanced_word_precision":{"type":"boolean","title":"Advanced Word Precision","default":false},"transcription_engine":{"type":"string","title":"Transcription Engine","default":"standard"}},"type":"object","required":["object_key","filename"],"title":"TranscribeRequest"},"TranslateRequest":{"properties":{"transcription":{"type":"string","title":"Transcription"},"language":{"type":"string","title":"Language"}},"type":"object","required":["transcription","language"],"title":"TranslateRequest"},"UploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"},"kind":{"type":"string","title":"Kind","default":"audio"}},"type":"object","required":["filename"],"title":"UploadRequest"},"UploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"UploadResponse"},"UploadUrlRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"UploadUrlRequest"},"UserCreate":{"properties":{"email":{"type":"string","title":"Email"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"membership":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Membership","default":0},"ai_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Credits","default":10},"password":{"type":"string","title":"Password"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserMembershipRequest":{"properties":{"tag":{"type":"string","title":"Tag"}},"type":"object","required":["tag"],"title":"UserMembershipRequest","description":"Schéma pour la requête de récupération du membership avec un tag pour les logs."},"UserSupabase":{"properties":{"email":{"type":"string","title":"Email"},"firstname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"membership":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Membership","default":0},"ai_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Credits","default":10},"id":{"type":"integer","title":"Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"has_pay_podcast":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Pay Podcast","default":false},"subscription_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscription Active","default":false},"nb_gen_request":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nb Gen Request","default":0},"has_pay_genAI":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Pay Genai","default":false},"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":["email","id"],"title":"UserSupabase"},"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"},"VibeMotionAnalyzeRequest":{"properties":{"audio_object_key":{"type":"string","title":"Audio Object Key"},"filename":{"type":"string","title":"Filename","default":""},"language":{"type":"string","title":"Language","default":""},"briefs":{"items":{"type":"string"},"type":"array","title":"Briefs"},"designs_per_min":{"type":"number","title":"Designs Per Min","default":2.0},"duration_s":{"type":"number","title":"Duration S","default":0.0},"animation_duration":{"type":"number","title":"Animation Duration","default":5.0},"resolution":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Resolution"},"fps":{"type":"integer","title":"Fps","default":24},"transparent_background":{"type":"boolean","title":"Transparent Background","default":true},"colors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Colors"}},"type":"object","required":["audio_object_key","briefs"],"title":"VibeMotionAnalyzeRequest","description":"Audio déjà uploadé sur R2 → transcription → liste de designs proposés."},"VibeMotionExportRequest":{"properties":{"html_code":{"type":"string","title":"Html Code"},"resolution":{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2,"title":"Resolution"},"fps":{"type":"integer","title":"Fps"},"duration":{"type":"number","title":"Duration"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","default":"vibe_motion.mov"}},"type":"object","required":["html_code","resolution","fps","duration"],"title":"VibeMotionExportRequest"},"VibeMotionGenerateRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"model":{"type":"string","title":"Model","default":"fast"},"resolution":{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2,"title":"Resolution"},"fps":{"type":"integer","title":"Fps"},"duration":{"type":"number","title":"Duration"},"actual_html_animation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actual Html Animation","default":""},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images"},"colors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Colors"},"transparent_background":{"type":"boolean","title":"Transparent Background","default":true},"font_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Slug"},"font_slugs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Font Slugs"},"provider":{"type":"string","title":"Provider","default":"gemini"},"origin":{"type":"string","title":"Origin","default":"prompt"}},"type":"object","required":["prompt","resolution","fps","duration"],"title":"VibeMotionGenerateRequest"},"VibeMotionJobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"VibeMotionJobResponse"},"VibeMotionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"thoughts":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thoughts"}},"type":"object","required":["status"],"title":"VibeMotionStatusResponse"},"VibeMotionUploadRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"VibeMotionUploadRequest"},"VibeMotionUploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"object_key":{"type":"string","title":"Object Key"}},"type":"object","required":["upload_url","object_key"],"title":"VibeMotionUploadResponse"},"_RenderProgressBody":{"properties":{"job_id":{"type":"string","title":"Job Id"},"current":{"type":"integer","title":"Current"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["job_id","current","total"],"title":"_RenderProgressBody"},"features__auto_sfx__schemas__AnalyzeRequest":{"properties":{"object_key":{"type":"string","maxLength":1024,"title":"Object Key","default":""},"filename":{"type":"string","maxLength":255,"title":"Filename","default":""},"cut_points":{"items":{"type":"number"},"type":"array","maxItems":200,"title":"Cut Points"},"grids":{"items":{"$ref":"#/components/schemas/GridIn"},"type":"array","maxItems":34,"title":"Grids"},"scope":{"type":"string","enum":["timeline","inout"],"title":"Scope","default":"timeline"},"range_start":{"type":"number","minimum":0.0,"title":"Range Start","default":0.0},"range_end":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Range End"},"fps":{"type":"number","maximum":240.0,"exclusiveMinimum":0.0,"title":"Fps","default":25.0},"trigger_speech":{"type":"boolean","title":"Trigger Speech","default":true},"trigger_cuts":{"type":"boolean","title":"Trigger Cuts","default":true},"allowed_categories":{"items":{"type":"string","enum":["impact","transition","foley","ambience"]},"type":"array","minItems":1,"title":"Allowed Categories"},"sfx_per_minute":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Sfx Per Minute","default":6},"user_prompt":{"type":"string","maxLength":4000,"title":"User Prompt","default":""},"model":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Model"},"source":{"type":"string","enum":["panel","agent"],"title":"Source","default":"panel"}},"type":"object","title":"AnalyzeRequest"},"features__auto_sfx__schemas__RenderRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RenderItem"},"type":"array","maxItems":2500,"minItems":1,"title":"Items"},"fps":{"type":"number","maximum":240.0,"exclusiveMinimum":0.0,"title":"Fps","default":25.0},"base_track":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"Base Track","default":0},"source":{"type":"string","enum":["panel","agent"],"title":"Source","default":"panel"}},"type":"object","required":["items"],"title":"RenderRequest","description":"Deuxième temps : l'utilisateur a validé la liste, on génère et on place."},"features__smart_captions__schemas__JobStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"JobStatusResponse"},"features__spelling__schemas__AnalyzeRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TextItem"},"type":"array","title":"Items"},"language":{"type":"string","title":"Language"},"language_name":{"type":"string","title":"Language Name"},"correction_prompt":{"type":"string","title":"Correction Prompt","default":""},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","default":"flash"}},"type":"object","required":["items","language","language_name"],"title":"AnalyzeRequest"},"features__subtitles_pro__schemas__JobStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"JobStatusResponse"},"features__vibe_captions__schemas__AnalyzeRequest":{"properties":{"audio_object_key":{"type":"string","title":"Audio Object Key"},"filename":{"type":"string","title":"Filename","default":"sequence_audio.wav"},"language":{"type":"string","title":"Language","default":""},"prompt":{"type":"string","title":"Prompt","default":""},"texts_per_min":{"type":"number","title":"Texts Per Min","default":8.0},"duration_target_s":{"type":"number","title":"Duration Target S","default":2.0},"sequence":{"$ref":"#/components/schemas/SequenceInfo"},"style":{"$ref":"#/components/schemas/StyleSettings"}},"type":"object","required":["audio_object_key","sequence","style"],"title":"AnalyzeRequest"},"features__vibe_captions__schemas__RenderRequest":{"properties":{"plan":{"items":{"$ref":"#/components/schemas/CaptionItem"},"type":"array","title":"Plan"},"sequence":{"$ref":"#/components/schemas/SequenceInfo"},"style":{"$ref":"#/components/schemas/StyleSettings"},"filename":{"type":"string","title":"Filename","default":"vibe_captions"}},"type":"object","required":["plan","sequence","style"],"title":"RenderRequest"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"token"}}}}}}