{"openapi":"3.1.0","info":{"title":"VideoRouter","version":"0.1.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/route":{"post":{"summary":"Route Endpoint","description":"Layer 1 (requirement profile) + Layer 2 (capability matcher) → chosen model (no upstream call).","operationId":"route_endpoint_route_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Route Endpoint Route Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metrics":{"get":{"summary":"Metrics Endpoint","description":"Prometheus scrape target — incl. the routing-overhead SLO histogram (§13).","operationId":"metrics_endpoint_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/workspaces":{"get":{"summary":" Workspaces Redirect","operationId":"_workspaces_redirect_workspaces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":" Marketing Home","operationId":"_marketing_home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh":{"get":{"summary":" Marketing Home Zh","operationId":"_marketing_home_zh_zh_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pricing":{"get":{"summary":" Pricing","operationId":"_pricing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/pricing":{"get":{"summary":" Pricing Zh","operationId":"_pricing_zh_zh_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/cli":{"get":{"summary":" Cli","operationId":"_cli_cli_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/cli":{"get":{"summary":" Cli Zh","operationId":"_cli_zh_zh_cli_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"summary":" About","operationId":"_about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/about":{"get":{"summary":" About Zh","operationId":"_about_zh_zh_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contact":{"get":{"summary":" Contact","operationId":"_contact_contact_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/contact":{"get":{"summary":" Contact Zh","operationId":"_contact_zh_zh_contact_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"summary":" Privacy","operationId":"_privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/privacy":{"get":{"summary":" Privacy Zh","operationId":"_privacy_zh_zh_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":" Terms","operationId":"_terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/terms":{"get":{"summary":" Terms Zh","operationId":"_terms_zh_zh_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/content-policy":{"get":{"summary":" Content Policy","operationId":"_content_policy_content_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/content-policy":{"get":{"summary":" Content Policy Zh","operationId":"_content_policy_zh_zh_content_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/favicon.ico":{"get":{"summary":" Favicon","operationId":"_favicon_favicon_ico_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/":{"get":{"summary":" Docs Redirect","operationId":"_docs_redirect_docs__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs":{"get":{"summary":" Docs Redirect","operationId":"_docs_redirect_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/zh/docs/":{"get":{"summary":" Docs Redirect Zh","operationId":"_docs_redirect_zh_zh_docs__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/zh/docs":{"get":{"summary":" Docs Redirect Zh","operationId":"_docs_redirect_zh_zh_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/{slug}":{"get":{"summary":" Docs Page","operationId":"_docs_page_docs__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/docs/{slug}":{"get":{"summary":" Docs Page Zh","operationId":"_docs_page_zh_zh_docs__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login":{"get":{"summary":"Login Page","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/signup":{"get":{"summary":"Signup Page","operationId":"signup_page_signup_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/auth/signup":{"post":{"summary":"Signup","operationId":"signup_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Creds"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/verify-code":{"post":{"summary":"Verify Code Submit","operationId":"verify_code_submit_auth_verify_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-code":{"post":{"summary":"Resend Code","operationId":"resend_code_auth_resend_code_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify":{"get":{"summary":"Verify Email","operationId":"verify_email_verify_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/unsubscribe":{"get":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe_get","parameters":[{"name":"email","in":"query","required":false,"schema":{"type":"string","default":"","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Unsubscribe Submit","operationId":"unsubscribe_submit_unsubscribe_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsubscribeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-verification":{"post":{"summary":"Resend Verification","operationId":"resend_verification_auth_resend_verification_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/forgot":{"get":{"summary":"Forgot Page","operationId":"forgot_page_forgot_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/auth/forgot":{"post":{"summary":"Forgot","operationId":"forgot_auth_forgot_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailOnly"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reset":{"get":{"summary":"Reset Page","operationId":"reset_page_reset_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset":{"post":{"summary":"Reset","operationId":"reset_auth_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Creds"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google":{"get":{"summary":"Google Login","operationId":"google_login_auth_google_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"","title":"Source"}},{"name":"click_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Click Id"}},{"name":"oppref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Oppref"}},{"name":"ref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google/callback":{"get":{"summary":"Google Callback","operationId":"google_callback_auth_google_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"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"summary":"Logout","operationId":"logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/me":{"get":{"summary":"Me","operationId":"me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/survey/heard-about-us":{"post":{"summary":"Submit Heard About Us","description":"One-time mandatory \"how did you hear about us?\" survey, shown by the dashboard chrome\n(gateway/webui.py COMMON_JS) after first sign-in — there is no Skip option; the client\nre-shows the modal until a real answer is submitted (legacy 'skipped' rows are treated\nas unanswered too). Feeds the /admin \"Signup by self-reported source\" card\n(auth_store.admin_heard_about_us_sources).","operationId":"submit_heard_about_us_api_survey_heard_about_us_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeardAboutUsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/preferences/mode":{"post":{"summary":"Set Ui Mode","description":"Persists the dashboard Creator/Developer toggle (gateway/webui.py's `llmrSetMode`)\nso it's remembered on re-login/another device, not just this browser's localStorage\ncache. Drives `_home_for` for where login/signup land next time.","operationId":"set_ui_mode_api_preferences_mode_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UiModeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/preferences/fallback-strategy":{"post":{"summary":"Set Fallback Strategy","description":"Persists Creator Studio's fallback-strategy setting (`/studio/settings`) — 'pinned'\ndisables provider-level failover for that user's Studio submissions\n(gateway/studio/core.py's `_apply_fallback_strategy`); 'cheapest' (default) fails over\nto the next-cheapest host of the same model, same as every other API caller gets.","operationId":"set_fallback_strategy_api_preferences_fallback_strategy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FallbackStrategyBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/preferences/timezone":{"post":{"summary":"Set Timezone","description":"Persists the display timezone chosen on `/studio/settings` — every dashboard page\nthat renders a request timestamp client-side (`/logs`' `fmtDate`/`localDay`,\n`gateway/dashboard.py`) reads this back via `/auth/me`.","operationId":"set_timezone_api_preferences_timezone_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimezoneBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard":{"get":{"summary":"Dashboard Page","operationId":"dashboard_page_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/keys":{"get":{"summary":"Keys Page","operationId":"keys_page_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/keys":{"get":{"summary":"Api List Keys","description":"Org- and role-aware: an admin of the active org sees (and can act on) every key\nin that org, including teammates' — the whole point of a shared team balance being\nmanageable from one place. A regular member only ever sees their own, same as before\nreal multi-member orgs existed.","operationId":"api_list_keys_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Api Create Key","description":"Minting a key against the active org's balance is an admin action (§10.6c) — a\nsolo user is always admin of their own personal org (`auth/orgs.py::get_or_create_personal_org`),\nso this is a no-op restriction for the common case; it only bites a regular team\nmember, who must ask an admin instead. `user_id` optionally names which teammate the\nkey is for (defaults to the caller).","operationId":"api_create_key_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/keys/{key_id}":{"patch":{"summary":"Api Update Key","operationId":"api_update_key_api_keys__key_id__patch","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/keys/{key_id}/revoke":{"post":{"summary":"Api Revoke Key","operationId":"api_revoke_key_api_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/keys/{key_id}/roll":{"post":{"summary":"Api Roll Key","description":"Rotate a key: issue a replacement inheriting its settings, revoke the old one\n(DESIGN §9/§10). New plaintext returned once.","operationId":"api_roll_key_api_keys__key_id__roll_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys":{"get":{"summary":"List Keys","operationId":"list_keys_api_v1_keys_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"include_disabled","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Disabled"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Key","operationId":"create_key_api_v1_keys_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionKeyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/{key_hash}":{"get":{"summary":"Get Key","operationId":"get_key_api_v1_keys__key_hash__get","parameters":[{"name":"key_hash","in":"path","required":true,"schema":{"type":"string","title":"Key Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Key","operationId":"update_key_api_v1_keys__key_hash__patch","parameters":[{"name":"key_hash","in":"path","required":true,"schema":{"type":"string","title":"Key Hash"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Key","operationId":"delete_key_api_v1_keys__key_hash__delete","parameters":[{"name":"key_hash","in":"path","required":true,"schema":{"type":"string","title":"Key Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/mine":{"get":{"summary":"Api Orgs Mine","operationId":"api_orgs_mine_api_orgs_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orgs/switch":{"post":{"summary":"Api Orgs Switch","operationId":"api_orgs_switch_api_orgs_switch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orgs/members":{"get":{"summary":"Api Orgs Members","operationId":"api_orgs_members_api_orgs_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orgs/members/{user_id}":{"delete":{"summary":"Api Orgs Remove Member","operationId":"api_orgs_remove_member_api_orgs_members__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/invite":{"post":{"summary":"Api Orgs Invite","operationId":"api_orgs_invite_api_orgs_invite_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orgs/invites":{"get":{"summary":"Api Orgs Invites","operationId":"api_orgs_invites_api_orgs_invites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orgs/invites/{invite_id}":{"delete":{"summary":"Api Orgs Revoke Invite","operationId":"api_orgs_revoke_invite_api_orgs_invites__invite_id__delete","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"integer","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orgs/invite/{token}/accept":{"post":{"summary":"Api Orgs Accept Invite","operationId":"api_orgs_accept_invite_api_orgs_invite__token__accept_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invite/{token}":{"get":{"summary":"Invite Landing Page","operationId":"invite_landing_page_invite__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/team":{"get":{"summary":"Team Page","description":"Team management is admin-only (the roster/invite/remove controls only ever make\nsense for whoever runs the workspace) — a regular member of a real multi-member org\nis redirected away; a solo user is always admin of their own personal org so this is\na no-op restriction for the common case, same trust boundary as `_require_admin`.","operationId":"team_page_team_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/usage":{"get":{"summary":"Usage Page","operationId":"usage_page_usage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/usage/by-member":{"get":{"summary":"Usage By Member Page","operationId":"usage_by_member_page_usage_by_member_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/usage/by-key":{"get":{"summary":"Usage By Key Page","operationId":"usage_by_key_page_usage_by_key_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/logs":{"get":{"summary":"Logs Page","operationId":"logs_page_logs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/jobs":{"get":{"summary":"Jobs Page","operationId":"jobs_page_jobs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/settings/webhooks":{"get":{"summary":"Webhooks Page","operationId":"webhooks_page_settings_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/settings/credits":{"get":{"summary":"Credits Redirect","operationId":"credits_redirect_settings_credits_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing":{"get":{"summary":"Overview Page","operationId":"overview_page_billing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/payment":{"get":{"summary":"Payment Page","operationId":"payment_page_billing_payment_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/history":{"get":{"summary":"History Page","operationId":"history_page_billing_history_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/orders":{"get":{"summary":"Orders Page Redirect","operationId":"orders_page_redirect_billing_orders_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/recharge":{"get":{"summary":"Recharge Page Redirect","operationId":"recharge_page_redirect_billing_recharge_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/invoice":{"get":{"summary":"Invoice Page","operationId":"invoice_page_billing_invoice_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/preference":{"get":{"summary":"Preference Page Redirect","operationId":"preference_page_redirect_billing_preference_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/billing/referral":{"get":{"summary":"Referral Page","operationId":"referral_page_billing_referral_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/api/catalog":{"get":{"summary":"Studio Catalog","operationId":"studio_catalog_studio_api_catalog_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}},{"name":"nsfw","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Nsfw"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/task-pin-caps":{"get":{"summary":"Studio Task Pin Caps","description":"Which Seedance 2.5 task types each HOST can explicitly pin (`_supports_task_pin`) — the\ncomposer greys out the chips a picked host can't honor instead of silently rerouting. A slug\nabsent here (OpenSand, SandBase, ...) pins nothing: the host decides from the prompt.","operationId":"studio_task_pin_caps_studio_api_task_pin_caps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/estimate":{"get":{"summary":"Studio Estimate","operationId":"studio_estimate_studio_api_estimate_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"","title":"Model"}},{"name":"aspect_ratio","in":"query","required":false,"schema":{"type":"string","default":"16:9","title":"Aspect Ratio"}},{"name":"n","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"N"}},{"name":"duration_secs","in":"query","required":false,"schema":{"type":"number","default":8,"title":"Duration Secs"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"720p","title":"Resolution"}},{"name":"upscale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Upscale"}},{"name":"in_w","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"In W"}},{"name":"in_h","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"In H"}},{"name":"in_secs","in":"query","required":false,"schema":{"type":"number","default":0,"title":"In Secs"}},{"name":"in_fps","in":"query","required":false,"schema":{"type":"number","default":30.0,"title":"In Fps"}},{"name":"lipsync","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Lipsync"}},{"name":"audio_secs","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Audio Secs"}},{"name":"motion","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Motion"}},{"name":"orientation","in":"query","required":false,"schema":{"type":"string","default":"image","title":"Orientation"}},{"name":"task_type","in":"query","required":false,"schema":{"type":"string","default":"auto","title":"Task Type"}},{"name":"auto_upscale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Auto Upscale"}},{"name":"draft","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Draft"}},{"name":"ref_video_secs","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Ref Video Secs"}},{"name":"ref_images","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Ref Images"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/uploads":{"post":{"summary":"Studio Upload","operationId":"studio_upload_studio_api_uploads_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_studio_upload_studio_api_uploads_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Studio List Uploads","operationId":"studio_list_uploads_studio_api_uploads_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"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"}}}}}}},"/studio/api/uploads/{upload_id}":{"delete":{"summary":"Studio Delete Upload","operationId":"studio_delete_upload_studio_api_uploads__upload_id__delete","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"integer","title":"Upload Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/generate/image":{"post":{"summary":"Studio Generate Image","operationId":"studio_generate_image_studio_api_generate_image_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/video":{"post":{"summary":"Studio Generate Video","operationId":"studio_generate_video_studio_api_generate_video_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/video/{video_id}":{"get":{"summary":"Studio Video Status","operationId":"studio_video_status_studio_api_generate_video__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/agent/skills":{"get":{"summary":"Studio List Skills","operationId":"studio_list_skills_studio_api_agent_skills_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/agent/skills/{skill_id}/tile.svg":{"get":{"summary":"Studio Skill Tile","operationId":"studio_skill_tile_studio_api_agent_skills__skill_id__tile_svg_get","parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/agent/sessions":{"get":{"summary":"Studio List Agent Sessions","operationId":"studio_list_agent_sessions_studio_api_agent_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Studio Create Agent Session","operationId":"studio_create_agent_session_studio_api_agent_sessions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/agent/sessions/{session_id}":{"get":{"summary":"Studio Get Agent Session","operationId":"studio_get_agent_session_studio_api_agent_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/agent/sessions/{session_id}/messages":{"post":{"summary":"Studio Agent Message","operationId":"studio_agent_message_studio_api_agent_sessions__session_id__messages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/agent/uploads/doc":{"post":{"summary":"Studio Agent Upload Doc","operationId":"studio_agent_upload_doc_studio_api_agent_uploads_doc_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_studio_agent_upload_doc_studio_api_agent_uploads_doc_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/history":{"get":{"summary":"Studio History","operationId":"studio_history_studio_api_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"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"}}}}}}},"/studio/api/elements/media/{key}":{"get":{"summary":"Studio Element Media","description":"Backs every `_element_media_url` link (`/studio/api/elements/media/<key>`) — the\nsession+org-gated indirection that keeps a display URL from ever being a bare, anyone-\nwith-the-link R2 bearer token (2026-09-27, see `_element_media_url`'s own docstring for\nthe full reasoning). Confirms `key` is actually one of THIS org's own Elements/Voices\n(own image/video, or a sample of a voice the org can use — an org's own clone, or any\nvoice preset), OR one of the hardcoded platform-preset keys `_register_platform_preset_\nkeys` collected at import time (`_platform_preset_media_url`'s own docstring — these are\nliteral constants baked into our own source, never caller-supplied, so there's nothing to\nown-check), before ever presigning anything for it, then 302s to a short-lived (5 min —\nthis is re-derived on every single request anyway, so there's no reason for the redirect\ntarget itself to outlive one page load) real R2 URL. `key`'s own `ELEMENTS_PREFIX` check\n(`_valid_element_key`) blocks probing this into an unrelated part of the bucket the same\nway every other key-accepting endpoint in this module already does.","operationId":"studio_element_media_studio_api_elements_media__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/elements/upload":{"post":{"summary":"Studio Element Upload","operationId":"studio_element_upload_studio_api_elements_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_studio_element_upload_studio_api_elements_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/voices/upload":{"post":{"summary":"Studio Voice Upload","operationId":"studio_voice_upload_studio_api_voices_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_studio_voice_upload_studio_api_voices_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/elements/upload-from-url":{"post":{"summary":"Studio Element Upload From Url","description":"Re-copies an already-generated/uploaded image (picked via \"Select from History\"\ninside the Create Element modal) into the durable `elements-media/` prefix, so an\nElement's stored image never depends on the source object's own (14-day, or for a\nscratch upload 30-minute) retention window. Fetched server-side, not by the browser,\nso this works regardless of the R2 bucket's CORS policy and can be restricted to our\nown bucket only (`_own_bucket_key`) rather than trusting a caller-supplied URL.","operationId":"studio_element_upload_from_url_studio_api_elements_upload_from_url_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/elements":{"get":{"summary":"Studio List Elements","operationId":"studio_list_elements_studio_api_elements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Studio Create Element","operationId":"studio_create_element_studio_api_elements_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/elements/{element_id}":{"patch":{"summary":"Studio Update Element","operationId":"studio_update_element_studio_api_elements__element_id__patch","parameters":[{"name":"element_id","in":"path","required":true,"schema":{"type":"integer","title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Studio Delete Element","operationId":"studio_delete_element_studio_api_elements__element_id__delete","parameters":[{"name":"element_id","in":"path","required":true,"schema":{"type":"integer","title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/voices":{"get":{"summary":"Studio List Voices","operationId":"studio_list_voices_studio_api_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Studio Create Voice","description":"Uploading a voice sample now performs REAL cloning (docs/DESIGN-creator-elements.md\n§9) — through `POST /v1/audio/voices` (MiniMax, `gateway/minimax_voice_clone.py`), called\nhere via `_ShimRequest` exactly like every other Studio-invoked model call, never a\ndirect provider call from this module — so it's fully gated/billed/traced through the\nsame pipeline a direct API caller would hit. This is a real, tiny billed request\n(`cost_mod.VOICE_CLONE_PRICES`), same as image/video generation or \"Auto\" description —\na failed clone (no credits, upstream error) fails this whole call rather than silently\nfalling back to a stored-but-unusable voice. Org-shared, like Elements: the cloned\nvoice becomes usable by every member of the caller's current org, not just the\nuploader.","operationId":"studio_create_voice_studio_api_voices_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/voices/{voice_id}":{"delete":{"summary":"Studio Delete Voice","operationId":"studio_delete_voice_studio_api_voices__voice_id__delete","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"integer","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/elements/describe":{"post":{"summary":"Studio Element Describe","description":"\"Auto\" description (docs/DESIGN-creator-elements.md §9's \"small, deferred as\nnon-core\" Phase-2 item, now built): one vision chat completion against the Element's\nown already-uploaded primary image, reusing this platform's own router (`model:\"auto\"`\nroutes to a vision-capable model via `router/complexity.py`'s `requires_vision` signal,\nno new provider needed) rather than a hardcoded model pin. Goes through the exact same\n`chat_completions` HTTP path (full gate/billing/trace, `_ShimRequest` as elsewhere in\nthis module) as a real `/v1/chat/completions` call — this is a real, tiny billed request,\nnot a free side effect, same as every other Studio action.","operationId":"studio_element_describe_studio_api_elements_describe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/act/examples":{"get":{"summary":"Studio Act Examples","operationId":"studio_act_examples_studio_api_act_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/agent":{"get":{"summary":"Studio Agent Page","operationId":"studio_agent_page_studio_agent_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/agent/{session_id}":{"get":{"summary":"Studio Agent Session Page","operationId":"studio_agent_session_page_studio_agent__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/ai-filter/options":{"get":{"summary":"Studio Ai Filter Options","operationId":"studio_ai_filter_options_studio_api_ai_filter_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/ai-filter":{"post":{"summary":"Studio Generate Ai Filter","operationId":"studio_generate_ai_filter_studio_api_generate_ai_filter_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/background-remove":{"post":{"summary":"Studio Generate Background Remove","operationId":"studio_generate_background_remove_studio_api_generate_background_remove_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/drama/video-models":{"get":{"summary":"Drama Video Models","description":"Video Production's own model picker (`drama_produce.py`) — the same choices\n`_resolve_video_model` picks from, exposed as data so the frontend never hardcodes a\nsecond, driftable copy of this list.","operationId":"drama_video_models_studio_api_drama_video_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/drama/style-presets":{"get":{"summary":"Drama Style Presets","operationId":"drama_style_presets_studio_api_drama_style_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/drama":{"get":{"summary":"Drama Page","operationId":"drama_page_studio_drama_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/drama/{project_id}":{"get":{"summary":"Drama Project Page","operationId":"drama_project_page_studio_drama__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/drama/{project_id}/{episode_id}":{"get":{"summary":"Drama Episode Page","operationId":"drama_episode_page_studio_drama__project_id___episode_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects":{"get":{"summary":"Drama List Projects","operationId":"drama_list_projects_studio_api_drama_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Drama Create Project","operationId":"drama_create_project_studio_api_drama_projects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/drama/projects/{project_id}":{"get":{"summary":"Drama Get Project","operationId":"drama_get_project_studio_api_drama_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Drama Delete Project","operationId":"drama_delete_project_studio_api_drama_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Drama Update Project","description":"Same fields the \"New Drama Project\" modal collects at creation time (title/aspect_ratio/\nstyle) — surfaced again here so they're viewable/editable after the fact, not just a\none-time creation-only input.","operationId":"drama_update_project_studio_api_drama_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/outline":{"post":{"summary":"Drama Generate Outline","operationId":"drama_generate_outline_studio_api_drama_projects__project_id__outline_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/episodes":{"post":{"summary":"Drama Create Episode","operationId":"drama_create_episode_studio_api_drama_projects__project_id__episodes_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}":{"get":{"summary":"Drama Get Episode","operationId":"drama_get_episode_studio_api_drama_episodes__episode_id__get","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Drama Update Episode","description":"Only `video_model` today — a per-episode override of the project's own default\n(`null` means \"inherit the project's setting\"), same two-level pattern as\n`drama_update_project`'s own `video_model` field.","operationId":"drama_update_episode_studio_api_drama_episodes__episode_id__patch","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Drama Delete Episode","operationId":"drama_delete_episode_studio_api_drama_episodes__episode_id__delete","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}/rewrite":{"post":{"summary":"Drama Rewrite","operationId":"drama_rewrite_studio_api_drama_episodes__episode_id__rewrite_post","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/extract":{"post":{"summary":"Drama Project Extract","operationId":"drama_project_extract_studio_api_drama_projects__project_id__extract_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}/generate_image":{"post":{"summary":"Drama Project Cast Generate Image","description":"Generates a reference image for one extracted cast/environment/prop item and immediately\nre-hosts it under R2's durable `elements-media/` prefix (`_store_cast_image`), persisting\nthe resulting key on the cast_library item so a reload never loses it and the link never\ngoes dead — saving it as a durable, org-wide *Element* (docs/DESIGN-video-agent.md §6.2's\ngenerate/review/persist split) is still a separate, explicit step, matching huobao-drama's\nown \"extract, then generate a reference image for each, then approve\" flow.","operationId":"drama_project_cast_generate_image_studio_api_drama_projects__project_id__cast__idx__generate_image_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}/upload_image":{"post":{"summary":"Drama Project Cast Upload Image","description":"Local Upload — stores the file directly under R2's durable `elements-media/` prefix\n(`upload_element_asset`), the same as `generate_image`/`save_element`. Deliberately does NOT\ngo through the generic scratch-upload endpoint (`/studio/api/uploads`), which deletes its\nobjects after `UPLOAD_TTL_SECONDS` (30 minutes) — fine for a one-shot generation input, but\nit would have silently deleted a saved \"reference image\" out from under this project.","operationId":"drama_project_cast_upload_image_studio_api_drama_projects__project_id__cast__idx__upload_image_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}/save_element":{"post":{"summary":"Drama Project Cast Save Element","operationId":"drama_project_cast_save_element_studio_api_drama_projects__project_id__cast__idx__save_element_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}/link_element":{"post":{"summary":"Drama Project Cast Link Element","description":"Avatar Library — bind an already-saved Element instead of generating a new image\n(a project's cast/environments/props are just this platform's Elements, so picking an\nexisting one is a straight lookup + link, not a second generate/save round trip).","operationId":"drama_project_cast_link_element_studio_api_drama_projects__project_id__cast__idx__link_element_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}/update_description":{"post":{"summary":"Drama Project Cast Update Description","description":"The Characters/Environments/Props panel edits `name`/`role`/`description` (and, for\ncharacters, `personality` tags) directly in place (no more separate \"custom prompt\" box for\nroutine edits — that box now only holds a one-off override passed at generation time, see\n`prompt_override` above); this persists those edits so they survive a reload and are what\n`generate_image`/`save_element` build off of next. Every field is optional — only the ones\npresent in the body are touched, so an appearance-only edit never clobbers a name/role edit\nthat hasn't been saved yet, or vice versa.","operationId":"drama_project_cast_update_description_studio_api_drama_projects__project_id__cast__idx__update_description_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/add":{"post":{"summary":"Drama Project Cast Add","description":"+ Add Character/Environment/Prop — appends one blank item, editable in place exactly like\nan extracted one (same name/description/personality fields), for a manually-conceived\nelement that was never going to come out of the script (or won't until it's written).","operationId":"drama_project_cast_add_studio_api_drama_projects__project_id__cast_add_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/projects/{project_id}/cast/{idx}":{"delete":{"summary":"Drama Project Cast Delete","description":"Removes one item from this project's cast_library — does not touch a saved Element it\nmay be linked to (that's a durable, org-wide asset reused elsewhere; only the reference is\ndropped here) or the R2 asset behind an ungenerated image_key.","operationId":"drama_project_cast_delete_studio_api_drama_projects__project_id__cast__idx__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"idx","in":"path","required":true,"schema":{"type":"integer","title":"Idx"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}/scene_script/generate":{"post":{"summary":"Drama Generate Scene Script","operationId":"drama_generate_scene_script_studio_api_drama_episodes__episode_id__scene_script_generate_post","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}/scenes":{"post":{"summary":"Drama Add Scene","operationId":"drama_add_scene_studio_api_drama_episodes__episode_id__scenes_post","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/scenes/{scene_id}":{"delete":{"summary":"Drama Delete Scene","operationId":"drama_delete_scene_studio_api_drama_scenes__scene_id__delete","parameters":[{"name":"scene_id","in":"path","required":true,"schema":{"type":"integer","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/scenes/{scene_id}/shots":{"post":{"summary":"Drama Add Shot","operationId":"drama_add_shot_studio_api_drama_scenes__scene_id__shots_post","parameters":[{"name":"scene_id","in":"path","required":true,"schema":{"type":"integer","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/split":{"post":{"summary":"Drama Split Shot","operationId":"drama_split_shot_studio_api_drama_storyboards__shot_id__split_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}/storyboard":{"post":{"summary":"Drama Storyboard","operationId":"drama_storyboard_studio_api_drama_episodes__episode_id__storyboard_post","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}":{"patch":{"summary":"Drama Update Shot","operationId":"drama_update_shot_studio_api_drama_storyboards__shot_id__patch","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Drama Delete Shot","operationId":"drama_delete_shot_studio_api_drama_storyboards__shot_id__delete","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/regenerate_prompt":{"post":{"summary":"Drama Shot Regenerate Prompt","description":"Video Production's own \"Regenerate Prompt\" action (`drama_produce.py`) — (re)writes this\none shot's `image_prompt`/`video_prompt` from its `script_text` and scene context, without\ntouching any other shot or re-running the whole episode's storyboard break. Also\nauto-binds whichever known characters/environments/props the model cites as appearing in\nthe shot (as real reference images, same as the original bulk storyboard break) — the user\ncan still add/remove references afterward via the @mention picker or the Avatar Library.","operationId":"drama_shot_regenerate_prompt_studio_api_drama_storyboards__shot_id__regenerate_prompt_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/generate_image":{"post":{"summary":"Drama Shot Generate Image","operationId":"drama_shot_generate_image_studio_api_drama_storyboards__shot_id__generate_image_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/generate_video":{"post":{"summary":"Drama Shot Generate Video","operationId":"drama_shot_generate_video_studio_api_drama_storyboards__shot_id__generate_video_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/upload_video":{"post":{"summary":"Drama Shot Upload Video","description":"Video Production's own \"Or Upload a Local Video\" action — a manual alternative to\nGenerate Video, for a shot whose footage was shot/edited outside this platform.","operationId":"drama_shot_upload_video_studio_api_drama_storyboards__shot_id__upload_video_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/versions":{"get":{"summary":"Drama Shot List Versions","description":"Every past take for this shot, newest first — Video Production's own \"VERSION\" panel\n(matches the reference product), populated on demand when a shot's preview is opened\nrather than embedded in the bulk shot list (most shots are never regenerated).","operationId":"drama_shot_list_versions_studio_api_drama_storyboards__shot_id__versions_get","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Drama Shot Add Version","description":"Records a finished Regenerate Video render as a new take (called by the client once its\npoll of `/studio/api/generate/video/{id}` reports completion) instead of overwriting the\nshot's previous video in place — see `drama_store.add_shot_version`.","operationId":"drama_shot_add_version_studio_api_drama_storyboards__shot_id__versions_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/storyboards/{shot_id}/versions/{version_id}/activate":{"post":{"summary":"Drama Shot Activate Version","description":"Switches which past take is \"the\" video for this shot — every existing reader\n(preview pane, shot strip, episode merge) only ever looks at `video_url`, so activating an\nolder version is enough to bring it back without touching anything else.","operationId":"drama_shot_activate_version_studio_api_drama_storyboards__shot_id__versions__version_id__activate_post","parameters":[{"name":"shot_id","in":"path","required":true,"schema":{"type":"integer","title":"Shot Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"integer","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/drama/episodes/{episode_id}/merge":{"post":{"summary":"Drama Merge Episode","operationId":"drama_merge_episode_studio_api_drama_episodes__episode_id__merge_post","parameters":[{"name":"episode_id","in":"path","required":true,"schema":{"type":"string","title":"Episode Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/face-swap/examples":{"get":{"summary":"Studio Face Swap Examples","operationId":"studio_face_swap_examples_studio_api_face_swap_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/face-swap":{"post":{"summary":"Studio Generate Face Swap","operationId":"studio_generate_face_swap_studio_api_generate_face_swap_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/face-swap/{face_swap_id}":{"get":{"summary":"Studio Face Swap Status","operationId":"studio_face_swap_status_studio_api_generate_face_swap__face_swap_id__get","parameters":[{"name":"face_swap_id","in":"path","required":true,"schema":{"type":"string","title":"Face Swap Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/uploads/init":{"post":{"summary":"Film Restore Upload Init","operationId":"film_restore_upload_init_studio_api_film_restore_uploads_init_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/film-restore/uploads/{upload_id}/chunk/{n}":{"put":{"summary":"Film Restore Upload Chunk","operationId":"film_restore_upload_chunk_studio_api_film_restore_uploads__upload_id__chunk__n__put","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}},{"name":"n","in":"path","required":true,"schema":{"type":"integer","title":"N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/uploads/{upload_id}/complete":{"post":{"summary":"Film Restore Upload Complete","operationId":"film_restore_upload_complete_studio_api_film_restore_uploads__upload_id__complete_post","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/config":{"get":{"summary":"Film Restore Config","operationId":"film_restore_config_studio_api_film_restore_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/film-restore/projects":{"get":{"summary":"Film Restore List","operationId":"film_restore_list_studio_api_film_restore_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/film-restore/projects/{project_id}":{"get":{"summary":"Film Restore Get","operationId":"film_restore_get_studio_api_film_restore_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"lite","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Lite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Film Restore Delete","operationId":"film_restore_delete_studio_api_film_restore_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/projects/{project_id}/estimate":{"get":{"summary":"Film Restore Estimate","operationId":"film_restore_estimate_studio_api_film_restore_projects__project_id__estimate_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"standard","title":"Model"}},{"name":"scale","in":"query","required":false,"schema":{"type":"number","default":2.0,"title":"Scale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/projects/{project_id}/restore":{"post":{"summary":"Film Restore Start","operationId":"film_restore_start_studio_api_film_restore_projects__project_id__restore_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/film-restore/projects/{project_id}/stitch":{"post":{"summary":"Film Restore Stitch","operationId":"film_restore_stitch_studio_api_film_restore_projects__project_id__stitch_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/music/options":{"get":{"summary":"Studio Music Options","operationId":"studio_music_options_studio_api_music_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/music/generate":{"post":{"summary":"Studio Music Generate","operationId":"studio_music_generate_studio_api_music_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/music/jobs/{job_id}":{"get":{"summary":"Studio Music Job","operationId":"studio_music_job_studio_api_music_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/api/music/history":{"get":{"summary":"Studio Music History","description":"One page of the caller's finished songs, newest first. `q` is a case-insensitive substring\nmatch over title / description / lyrics / model; `total` is the match count so the client can\nrender a pager. Search runs over the most recent `_HISTORY_SCAN_LIMIT` requests in Python —\n`req_params` is a JSON blob with no text index, and a person's music history is small.","operationId":"studio_music_history_studio_api_music_history_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":12,"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"}}}}}}},"/studio/api/pet-lipsync/options":{"get":{"summary":"Studio Pet Lipsync Options","operationId":"studio_pet_lipsync_options_studio_api_pet_lipsync_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/pet-lipsync/song":{"post":{"summary":"Studio Pet Lipsync Song","operationId":"studio_pet_lipsync_song_studio_api_pet_lipsync_song_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/pet-lipsync/tts":{"post":{"summary":"Studio Pet Lipsync Tts","operationId":"studio_pet_lipsync_tts_studio_api_pet_lipsync_tts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/lipsync":{"post":{"summary":"Studio Generate Lipsync","operationId":"studio_generate_lipsync_studio_api_generate_lipsync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/api/generate/lipsync/{lipsync_id}":{"get":{"summary":"Studio Lipsync Status","operationId":"studio_lipsync_status_studio_api_generate_lipsync__lipsync_id__get","parameters":[{"name":"lipsync_id","in":"path","required":true,"schema":{"type":"string","title":"Lipsync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/settings":{"get":{"summary":"Studio Settings Page","operationId":"studio_settings_page_studio_settings_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio":{"get":{"summary":"Studio Page","operationId":"studio_page_studio_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/assets":{"get":{"summary":"Studio Assets Page","operationId":"studio_assets_page_studio_assets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/tools":{"get":{"summary":"Studio Tools Page","operationId":"studio_tools_page_studio_tools_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/nsfw":{"get":{"summary":"Studio Nsfw Page","operationId":"studio_nsfw_page_studio_nsfw_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/studio/tools/{slug}":{"get":{"summary":"Studio Tool Page","operationId":"studio_tool_page_studio_tools__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena":{"get":{"summary":"Arena Home","description":"Signed-in -> the battle app. Signed-out -> a public intro page (this is a top-nav tab on\nthe landing site, so a visitor must see something meaningful, not a bare login wall).","operationId":"arena_home_arena_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/arena/c/{battle_id}":{"get":{"summary":"Arena Battle Page","operationId":"arena_battle_page_arena_c__battle_id__get","parameters":[{"name":"battle_id","in":"path","required":true,"schema":{"type":"string","title":"Battle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/arena":{"get":{"summary":"Arena Zh Redirect","description":"The localized public nav links every tab as /zh/<path>; the arena has no zh variant yet.","operationId":"arena_zh_redirect_zh_arena_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arena/api/quota":{"get":{"summary":"Arena Quota","operationId":"arena_quota_arena_api_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/arena/api/suggestion":{"get":{"summary":"Arena Suggestion","description":"The dice button: a random prompt from the curated library (gateway/arena_prompts.py) —\nno LLM call at request time. `{prompt, category}`; no repeats per user until the library cycles.","operationId":"arena_suggestion_arena_api_suggestion_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/battles":{"post":{"summary":"Arena Create","operationId":"arena_create_arena_api_battles_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"Arena History","operationId":"arena_history_arena_api_battles_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/uploads":{"post":{"summary":"Arena Upload","operationId":"arena_upload_arena_api_uploads_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_arena_upload_arena_api_uploads_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/input/{input_id}":{"get":{"summary":"Arena Input Media","operationId":"arena_input_media_arena_input__input_id__get","parameters":[{"name":"input_id","in":"path","required":true,"schema":{"type":"string","title":"Input Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/modes":{"get":{"summary":"Arena Modes","description":"How many selected models can run each input mode WITH the composer's current settings —\ndrives which mode pills / slots are enabled and the \"only N models support this\" note.\nCounts are canonical models (a battle needs >= 2), not hosts.","operationId":"arena_modes_arena_api_modes_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}},{"name":"aspect_ratio","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aspect Ratio"}},{"name":"duration_secs","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Secs"}},{"name":"resolution","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/availability":{"get":{"summary":"Arena Availability","description":"For the composer's \"only N can run this\" note: how many (model, host) options exist for THIS\nmode + inputs under every length x resolution combination, so the UI can suggest a setting\nthat works instead of just saying \"no\".","operationId":"arena_availability_arena_api_availability_get","parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"text_to_video","title":"Mode"}},{"name":"aspect_ratio","in":"query","required":false,"schema":{"type":"string","default":"16:9","title":"Aspect Ratio"}},{"name":"end","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"End"}},{"name":"images","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Images"}},{"name":"videos","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Videos"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/battles/{battle_id}":{"get":{"summary":"Arena Get","operationId":"arena_get_arena_api_battles__battle_id__get","parameters":[{"name":"battle_id","in":"path","required":true,"schema":{"type":"string","title":"Battle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/battles/{battle_id}/vote":{"post":{"summary":"Arena Vote","operationId":"arena_vote_arena_api_battles__battle_id__vote_post","parameters":[{"name":"battle_id","in":"path","required":true,"schema":{"type":"string","title":"Battle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/media/{battle_id}/{side}":{"get":{"summary":"Arena Media","operationId":"arena_media_arena_media__battle_id___side__get","parameters":[{"name":"battle_id","in":"path","required":true,"schema":{"type":"string","title":"Battle Id"}},{"name":"side","in":"path","required":true,"schema":{"type":"string","title":"Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/api/leaderboard/{kind}":{"get":{"summary":"Arena Leaderboard Json","operationId":"arena_leaderboard_json_arena_api_leaderboard__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"model","title":"By"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/leaderboard/{kind}":{"get":{"summary":"Arena Leaderboard Page","operationId":"arena_leaderboard_page_arena_leaderboard__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"model","title":"By"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/arena/leaderboard":{"get":{"summary":"Arena Leaderboard Page","operationId":"arena_leaderboard_page_arena_leaderboard_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}},{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"model","title":"By"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin":{"get":{"summary":"Admin Overview Page","operationId":"admin_overview_page_admin_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/users":{"get":{"summary":"Admin Users Page","operationId":"admin_users_page_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/users/{target_id}":{"get":{"summary":"Admin User Detail Page","operationId":"admin_user_detail_page_admin_users__target_id__get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"integer","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing":{"get":{"summary":"Admin Pricing Page","operationId":"admin_pricing_page_admin_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/provider-health":{"get":{"summary":"Admin Provider Health Page","operationId":"admin_provider_health_page_admin_provider_health_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/performance":{"get":{"summary":"Admin Performance Page","operationId":"admin_performance_page_admin_performance_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/transactions":{"get":{"summary":"Admin Transactions Page","operationId":"admin_transactions_page_admin_transactions_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/transactions/reconciliation":{"get":{"summary":"Admin Reconciliation Page","operationId":"admin_reconciliation_page_admin_transactions_reconciliation_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/admin/reconciliation":{"get":{"summary":"Api Admin Reconciliation","operationId":"api_admin_reconciliation_api_admin_reconciliation_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reconciliation/orders":{"get":{"summary":"Api Admin Reconciliation Orders","operationId":"api_admin_reconciliation_orders_api_admin_reconciliation_orders_get","parameters":[{"name":"provider","in":"query","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reconciliation/run":{"post":{"summary":"Api Admin Reconciliation Run","operationId":"api_admin_reconciliation_run_api_admin_reconciliation_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/transactions":{"get":{"summary":"Api Admin Transactions","operationId":"api_admin_transactions_api_admin_transactions_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"money","title":"Kind"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/requests":{"get":{"summary":"Admin Requests Page","operationId":"admin_requests_page_admin_requests_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/flagged":{"get":{"summary":"Admin Flagged Page","operationId":"admin_flagged_page_admin_flagged_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/reports":{"get":{"summary":"Admin Reports Page","operationId":"admin_reports_page_admin_reports_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/logs":{"get":{"summary":"Admin Logs Page","operationId":"admin_logs_page_admin_logs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/errors":{"get":{"summary":"Admin Error Groups Page","operationId":"admin_error_groups_page_admin_errors_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/arena":{"get":{"summary":"Admin Arena Page","operationId":"admin_arena_page_admin_arena_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/broadcast":{"get":{"summary":"Admin Broadcast Page","operationId":"admin_broadcast_page_admin_broadcast_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/admin/overview":{"get":{"summary":"Api Admin Overview","operationId":"api_admin_overview_api_admin_overview_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orgs":{"get":{"summary":"Api Admin Orgs","operationId":"api_admin_orgs_api_admin_orgs_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"summary":"Api Admin Users","operationId":"api_admin_users_api_admin_users_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/search":{"get":{"summary":"Api Admin Users Search","description":"Email typeahead for the `/admin/requests` filter box — separate from the full\n`/api/admin/users` rollup (which computes daily series + balances for every user and\nwould be wasteful to re-run on every keystroke).","operationId":"api_admin_users_search_api_admin_users_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{target_id}":{"get":{"summary":"Api Admin User Detail","operationId":"api_admin_user_detail_api_admin_users__target_id__get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"integer","title":"Target Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orgs/{org_id}/limits":{"get":{"summary":"Api Admin Org Limits","description":"An org's rate/concurrency ceilings: raw override (null = platform default, 0 = unlimited),\nthe effective value, and live in-flight media jobs (docs/DESIGN-rate-limits-concurrency.md).","operationId":"api_admin_org_limits_api_admin_orgs__org_id__limits_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Api Admin Set Org Limits","description":"Set/clear an org's `plan` and/or per-field limit overrides (`max_concurrent_jobs`,\n`rpm_limit`, `new_acct_spend_7d_usd`, `new_acct_spend_30d_usd`). Only fields present in the JSON\nbody change; `null` resets that field to its plan default (plan: null -> standard), `0` makes it\nunlimited. An explicit override wins over the plan.","operationId":"api_admin_set_org_limits_api_admin_orgs__org_id__limits_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orgs/{org_id}/ach":{"get":{"summary":"Api Admin Org Ach","description":"An org's ACH state: block reason (null = allowed), limits, and any funds on settlement hold.","operationId":"api_admin_org_ach_api_admin_orgs__org_id__ach_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Api Admin Set Org Ach","description":"Manually block ACH for an org, or lift an automatic block (dispute/return or repeated failed\ntransfers — billing/ach.py). Lifting also clears the org's failed-transfer history.","operationId":"api_admin_set_org_ach_api_admin_orgs__org_id__ach_put","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AchBlockBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{target_id}/suspend":{"post":{"summary":"Api Admin Suspend User","operationId":"api_admin_suspend_user_api_admin_users__target_id__suspend_post","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"integer","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/requests":{"get":{"summary":"Api Admin Requests","operationId":"api_admin_requests_api_admin_requests_get","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":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"user_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}},{"name":"canonical_model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Model"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/moderation-events":{"get":{"summary":"Api Admin Moderation Events","description":"`/admin/flagged`'s \"Moderation events\" view (`gateway/moderation.py::admin_list_events`) —\nour own pre-flight classifier's verdicts (blocked / shadow / allowed), as opposed to\n`/api/admin/requests/flagged`'s retroactive keyword scan over served requests.","operationId":"api_admin_moderation_events_api_admin_moderation_events_get","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":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"user_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}},{"name":"outcome","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Outcome"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/requests/flagged":{"get":{"summary":"Api Admin Requests Flagged","operationId":"api_admin_requests_flagged_api_admin_requests_flagged_get","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":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"include_reviewed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Reviewed"}},{"name":"user_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/requests/{trace_id}":{"get":{"summary":"Api Admin Request Detail","operationId":"api_admin_request_detail_api_admin_requests__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/requests/{trace_id}/review":{"post":{"summary":"Api Admin Request Review","description":"The only action `/admin/flagged` can take on a flagged request: record that an admin\nlooked at it, with an optional note, and whether they dismissed it as a false positive.\nDeliberately does NOT suspend, disable, or otherwise act on the account — see\n`gateway/risk_flags.py`'s own module docstring for why. An admin who decides after reading\nthe actual request that the account should be suspended does that separately, on\n`/admin/users` (the existing `auth/store.py::set_suspended` flow).","operationId":"api_admin_request_review_api_admin_requests__trace_id__review_post","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestReviewBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reports":{"get":{"summary":"Api Admin Reports","description":"`/admin/reports` — every `moderation_events` row a customer flagged via `/logs`'\n\"Report false positive\" button (`gateway/moderation.py::admin_list_customer_reports`).\nSeparate data source from `/admin/flagged`'s risk-keyword scan — this is customer-\ninitiated, not admin-suspected.","operationId":"api_admin_reports_api_admin_reports_get","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":"include_reviewed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Reviewed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reports/{event_id}/review":{"post":{"summary":"Api Admin Report Review","description":"Records that an admin looked at a customer's false-positive report, with an optional\nnote — same \"review records a decision, never acts on one\" discipline as `/admin/flagged`'s\nown review endpoint above (`gateway/moderation.py::admin_mark_reviewed`'s own docstring).","operationId":"api_admin_report_review_api_admin_reports__event_id__review_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportReviewBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/logs":{"get":{"summary":"Api Admin Logs","operationId":"api_admin_logs_api_admin_logs_get","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":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/logs/sources":{"get":{"summary":"Api Admin Logs Sources","operationId":"api_admin_logs_sources_api_admin_logs_sources_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/logs/{error_id}":{"get":{"summary":"Api Admin Log Detail","operationId":"api_admin_log_detail_api_admin_logs__error_id__get","parameters":[{"name":"error_id","in":"path","required":true,"schema":{"type":"integer","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/admin/errors":{"get":{"summary":"Api Admin Error Groups","operationId":"api_admin_error_groups_api_admin_errors_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"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"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/errors/{group_id}":{"get":{"summary":"Api Admin Error Group Detail","operationId":"api_admin_error_group_detail_api_admin_errors__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Api Admin Error Group Update","operationId":"api_admin_error_group_update_api_admin_errors__group_id__patch","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorGroupStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/broadcast/recipients":{"get":{"summary":"Api Admin Broadcast Recipients","operationId":"api_admin_broadcast_recipients_api_admin_broadcast_recipients_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/broadcast/preview":{"post":{"summary":"Api Admin Broadcast Preview","operationId":"api_admin_broadcast_preview_api_admin_broadcast_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/broadcast/test":{"post":{"summary":"Api Admin Broadcast Test","operationId":"api_admin_broadcast_test_api_admin_broadcast_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/broadcast/send":{"post":{"summary":"Api Admin Broadcast Send","operationId":"api_admin_broadcast_send_api_admin_broadcast_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastSendBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/arena/models":{"get":{"summary":"Api Admin Arena Models","description":"Arena model selection (docs/DESIGN-arena.md §3/§8) — candidates + selection + per-model stats.","operationId":"api_admin_arena_models_api_admin_arena_models_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"video","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api Admin Arena Set Models","description":"{kind, hosts:[host-specific slugs]} — replaces the arena's selected (model, host) list for `kind`.","operationId":"api_admin_arena_set_models_api_admin_arena_models_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pricing":{"get":{"summary":"Api Admin Pricing","operationId":"api_admin_pricing_api_admin_pricing_get","parameters":[{"name":"competitor","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Competitor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing/history":{"get":{"summary":"Api Admin Pricing History","operationId":"api_admin_pricing_history_api_admin_pricing_history_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"type":"string","default":"","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing/snapshot":{"post":{"summary":"Api Admin Pricing Snapshot","operationId":"api_admin_pricing_snapshot_api_admin_pricing_snapshot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pricing/mark-checked":{"post":{"summary":"Api Admin Mark Checked","description":"Re-stamp verified_at=today on a provider's (or one model's) verified prices, clearing\nthe >1-week stale flag without hand-editing router/price_overrides.json.","operationId":"api_admin_mark_checked_api_admin_pricing_mark_checked_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkCheckedBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing/media":{"get":{"summary":"Api Admin Pricing Media","operationId":"api_admin_pricing_media_api_admin_pricing_media_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing/media/snapshot":{"post":{"summary":"Api Admin Pricing Media Snapshot","operationId":"api_admin_pricing_media_snapshot_api_admin_pricing_media_snapshot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pricing/media/history":{"get":{"summary":"Api Admin Pricing Media History","operationId":"api_admin_pricing_media_history_api_admin_pricing_media_history_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"slug","in":"query","required":false,"schema":{"type":"string","default":"","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing/media/mark-checked":{"post":{"summary":"Api Admin Media Mark Checked","operationId":"api_admin_media_mark_checked_api_admin_pricing_media_mark_checked_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaMarkCheckedBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/provider-health":{"get":{"summary":"Api Admin Provider Health","operationId":"api_admin_provider_health_api_admin_provider_health_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/performance":{"get":{"summary":"Api Admin Performance","operationId":"api_admin_performance_api_admin_performance_get","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Window"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/performance/history":{"get":{"summary":"Api Admin Performance History","operationId":"api_admin_performance_history_api_admin_performance_history_get","parameters":[{"name":"canonical_model","in":"query","required":false,"schema":{"type":"string","default":"","title":"Canonical Model"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string","default":"","title":"Provider"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/performance/refresh":{"post":{"summary":"Api Admin Performance Refresh","description":"Manual \"refresh now\" — the background loop (`gateway/perf_rollup.py::start`,\ndefault every 5min) already keeps this current; this just lets an admin force a\nrecompute without waiting on the next tick, same convenience `/api/admin/pricing/\nsnapshot` gives the price monitor.","operationId":"api_admin_performance_refresh_api_admin_performance_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/quality":{"get":{"summary":"Api Admin Quality","operationId":"api_admin_quality_api_admin_quality_get","parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Window"}},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"}},{"name":"optimize_for","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optimize For"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quality/refresh":{"post":{"summary":"Api Admin Quality Refresh","description":"Manual \"refresh now\" — unlike `/api/admin/performance/refresh`, there's no background\nloop behind this one to mirror (`gateway/quality_rollup.py`'s own module docstring): run\nthis (or `python scripts/run_quality_scoring.py`) after a scoring pass to pick up new\nsamples.","operationId":"api_admin_quality_refresh_api_admin_quality_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/usage":{"get":{"summary":"Api Usage","operationId":"api_usage_api_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usage/by-end-user":{"get":{"summary":"Api Usage By End User","operationId":"api_usage_by_end_user_api_usage_by_end_user_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usage/by-member":{"get":{"summary":"Api Usage By Member","operationId":"api_usage_by_member_api_usage_by_member_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usage/by-key":{"get":{"summary":"Api Usage By Key","operationId":"api_usage_by_key_api_usage_by_key_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usage/by-transport":{"get":{"summary":"Api Usage By Transport","description":"Spend/request split by `served_via` for the caller's own traffic — every serving\nrow is `direct` today (chat serving never routes through OpenRouter,\n`router/build_litellm_config.py`); kept generic rather than removed since historical\nrows predating that change may still carry other values.","operationId":"api_usage_by_transport_api_usage_by_transport_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/requests":{"get":{"summary":"Api Requests","operationId":"api_requests_api_requests_get","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":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/requests/{trace_id}":{"get":{"summary":"Api Request Detail","operationId":"api_request_detail_api_requests__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/requests/delete-outputs":{"post":{"summary":"Api Delete Outputs","description":"`/logs` bulk delete: permanently removes the stored image/video files of the caller's own\nrequests (`gateway/output_retention.py`). Only the files — the log row, prompt and cost stay.\nRows that aren't the caller's, or aren't an image/video, are skipped silently (a 200 with\nsmaller counts), never an error that would confirm they exist.","operationId":"api_delete_outputs_api_requests_delete_outputs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteOutputsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/requests/{trace_id}/report-false-positive":{"post":{"summary":"Api Report False Positive","description":"The customer-facing \"I think this was wrongly rejected\" button (`/logs`, design doc\n§2's \"false-positive path for legitimate customers\" goal, finally wired up 2026-09-29).\nOwnership is checked the same way `api_request_detail` above already does — `trace.\nget_trace(user_id, trace_id)` returns `None` for a trace that isn't this user's own, same\n404 either way, so this can't be used to probe for or flag another user's request. Only\nmeaningful on a trace this pipeline itself blocked (`error_type == 'content_moderation'`,\n`gateway/server/_shared.py::_moderate`'s own `_block` closure) — reports a no-op `False`->\n400 for anything else rather than silently accepting a report against, say, a genuine\nupstream provider rejection, which this system had no part in and can't act on.","operationId":"api_report_false_positive_api_requests__trace_id__report_false_positive_post","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalsePositiveReportBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account":{"get":{"summary":"Api Account","operationId":"api_account_api_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/playground/key":{"post":{"summary":"Api Playground Key","description":"Mints a real, standard-kind API key for the /video and /image detail pages'\ninline Playground (`gateway/public_pages/media_page.py::_media_playground_block`) so a\nsigned-in visitor is never asked to paste one — session-cookie-gated the same way\n`/api/account` is, never API-key-gated (there's no key yet to gate with). Always\ncreates a fresh key rather than trying to reuse an existing \"Playground\" one, since\n`auth_store.create_api_key`'s plaintext secret is genuinely shown once and never\nstored anywhere retrievable (same \"shown once\" contract as the real /keys page) — the\nbrowser is the only place that can hold onto it afterwards\n(`localStorage['llmrouter_playground_key']`), so this only gets called again if that\ncache is empty (first visit, cleared storage, a different browser).","operationId":"api_playground_key_api_playground_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/models":{"get":{"summary":"Api Models","operationId":"api_models_api_models_get","parameters":[{"name":"all","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"All"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Api Models Toggle","operationId":"api_models_toggle_api_models_put","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelToggle"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/credits":{"get":{"summary":"Api Credits","operationId":"api_credits_api_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/credits/topup":{"post":{"summary":"Api Credits Topup","operationId":"api_credits_topup_api_credits_topup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/credits/topup/crypto":{"post":{"summary":"Api Credits Topup Crypto","operationId":"api_credits_topup_crypto_api_credits_topup_crypto_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/credits/auto-topup":{"get":{"summary":"Get Auto Topup","operationId":"get_auto_topup_api_credits_auto_topup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Set Auto Topup","operationId":"set_auto_topup_api_credits_auto_topup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoTopupConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/referral":{"get":{"summary":"Api Referral","operationId":"api_referral_api_referral_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/referral/poster.svg":{"get":{"summary":"Api Referral Poster","description":"The sidebar 'Invite Friends' modal's shareable poster (gateway/webui.py) — an\n<img src> hit, so this returns a plain SVG body, not JSON. 404s (rather than\nlazily minting a code) if the caller isn't eligible yet — the modal only ever\npoints an <img> here once `/api/referral` has already confirmed `eligible`.","operationId":"api_referral_poster_api_referral_poster_svg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/payment-method":{"get":{"summary":"Get Payment Method","operationId":"get_payment_method_api_billing_payment_method_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Delete Payment Method","description":"Refuses to remove the saved card: an org has exactly one, so it is always the primary and the only\none, and our terms let us charge it for a negative balance — we must always have one on file. To change\ncards, add a new one (`POST /api/billing/payment-method/setup`), which replaces it.","operationId":"delete_payment_method_api_billing_payment_method_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/payment-method/setup":{"post":{"summary":"Create Payment Method Setup","description":"Stripe Checkout in `mode=setup` — saves a card with no charge, so a customer can\nadd a payment method up front instead of one being captured as a side effect of\ntheir first top-up.","operationId":"create_payment_method_setup_api_billing_payment_method_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/transactions":{"get":{"summary":"List Billing Transactions","operationId":"list_billing_transactions_api_billing_transactions_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"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/billing/invoices":{"get":{"summary":"List Invoices","operationId":"list_invoices_api_billing_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/invoices/{period}/download":{"get":{"summary":"Download Invoice","operationId":"download_invoice_api_billing_invoices__period__download_get","parameters":[{"name":"period","in":"path","required":true,"schema":{"type":"string","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/preference":{"get":{"summary":"Get Preference","operationId":"get_preference_api_billing_preference_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Set Preference","operationId":"set_preference_api_billing_preference_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/stripe":{"post":{"summary":"Stripe Webhook","operationId":"stripe_webhook_api_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/coinbase":{"post":{"summary":"Coinbase Webhook","operationId":"coinbase_webhook_api_webhooks_coinbase_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/videos/models":{"get":{"summary":"List Video Models","description":"Lists valid `model` slugs for `POST /v1/videos` — mirrors `GET /v1/images/models`\n(`gateway/server/images.py`) so a caller has a real listing route instead of having to\nsubmit a deliberately-invalid model and parse the slug list back out of the resulting\n400 error's `available: ...` message (what `cli/src/client.js::listMediaModels`\ncurrently does for video, per `docs/DESIGN-mcp-cli.md` §4.4). `_VIDEO_MODELS` keys are\nalready the public-facing slugs, so this is a direct sort — no union-of-dicts needed\nthe way images.py's `_ALL_IMAGE_MODELS` requires. Bare ids only, same minimal shape as\n`list_image_models` — no provider/price breakdown; see https://videorouter.sh/models\nfor that.","operationId":"list_video_models_v1_videos_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Video Models V1 Videos Models Get"}}}}}}},"/v1/videos":{"post":{"summary":"Videos Create","operationId":"videos_create_v1_videos_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/videos/{video_id}":{"delete":{"summary":"Videos Delete","description":"Permanently deletes a finished video's stored output (the mirrored file under\n`generated-outputs/`) and makes the job answer 404 from then on. Only a finished job can be\ndeleted: a still-rendering one is 409, because the host would complete it and the result would\nhave to be stored again, and one generated less than 24 hours ago is 403 (`delete_not_allowed_yet`). The request-log row (prompt, parameters, cost) is kept for billing; its\noutput link is blanked. Hosts' own copies are governed by the host (`docs/data-privacy`) — none of\nthe host integrations here exposes a delete call, so none is made. Same ownership discipline as\n`videos_status`, but strict: a job with no recorded owner is 404, not allowed.","operationId":"videos_delete_v1_videos__video_id__delete","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Videos Status","description":"Unbilled: polling job status has no incremental provider cost — the full cost was\nalready billed at creation time from the requested `duration_secs` (§ `videos_create`\nabove).","operationId":"videos_status_v1_videos__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/route":{"post":{"summary":"Route Explain","operationId":"route_explain_v1_route_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/chat/completions":{"post":{"summary":"Chat Completions","operationId":"chat_completions_v1_chat_completions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/embeddings":{"post":{"summary":"Embeddings","operationId":"embeddings_v1_embeddings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/images/models":{"get":{"summary":"List Image Models","description":"Lists valid `model` slugs for `POST /v1/images` — a real listing route, so a caller\n(e.g. a ComfyUI model-picker widget, docs/DESIGN-comfyui-integration.md §7.1) doesn't\nhave to do what `cli/src/client.js::listMediaModels` currently does: submit a\ndeliberately-invalid model and parse the slug list back out of the resulting 400 error's\n`available: ...` message. `_ALL_IMAGE_MODELS` is a flat set of slugs unioned across\nseveral heterogeneously-shaped per-provider dicts (`_IMAGE_MODELS`/`_CHAT_IMAGE_MODELS`/\n`_IMAGE_DIRECT_MODELS`/...), so — same minimal shape as the `auto` row in chat's own\n`GET /v1/models` — this returns bare ids, not a provider/price breakdown.","operationId":"list_image_models_v1_images_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Image Models V1 Images Models Get"}}}}}}},"/v1/images":{"post":{"summary":"Images Unified","operationId":"images_unified_v1_images_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/speech":{"post":{"summary":"Audio Speech","operationId":"audio_speech_v1_audio_speech_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/music/models":{"get":{"summary":"List Music Models","description":"Valid `model` slugs for `POST /v1/audio/music` — same bare-id shape as\n`GET /v1/videos/models`; `provider` is the upstream host the row routes to.","operationId":"list_music_models_v1_audio_music_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Music Models V1 Audio Music Models Get"}}}}}}},"/v1/audio/music":{"post":{"summary":"Audio Music","description":"Text-to-music across 5 providers (Google Lyria x3, Mureka, ElevenLabs, StepFun,\nSuno Chirp via Atlas Cloud) — every row is a bespoke direct-HTTP client, no litellm\nadapter exists for any music-generation surface (see each client module's own\ndocstring). Most rows have a flat per-song price known upfront\n(`gateway/cost.py::MUSIC_PRICES`); ElevenLabs is billed on the actual requested\nduration; the Suno Chirp rows are billed on Atlas Cloud's own real settled per-request\nprice, unknown until the call completes (same \"trust the real settlement\" precedent the\ntoken-metered Seedance video rows already use).","operationId":"audio_music_v1_audio_music_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/sfx/models":{"get":{"summary":"List Sfx Models","description":"Valid `model` slugs for `POST /v1/audio/sfx`.","operationId":"list_sfx_models_v1_audio_sfx_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Sfx Models V1 Audio Sfx Models Get"}}}}}}},"/v1/audio/sfx":{"post":{"summary":"Audio Sfx","description":"Text-to-sound-effect (and, for `mirelo-*`, video-to-sound-effect via `video_url`): returns\nthe raw audio (Sonilo: AAC in an m4a container, `audio/mp4`; Mirelo: MP3). Billed per\ngenerated second on the duration the provider reports back (`gateway/cost.py::sfx_cost`,\n$0.0018/s for `sonilo-sfx`); Mirelo is billed on the credits it reports back\n(`gateway/cost.py::sfx_credit_cost`).","operationId":"audio_sfx_v1_audio_sfx_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/voices":{"post":{"summary":"Audio Voices Clone","description":"Real voice cloning (`docs/DESIGN-creator-elements.md` §9), sitting under `/v1/` so it\ngoes through the EXACT SAME gate/billing/trace path every other provider call on this\nplatform does — never called directly from a feature module bypassing that pipeline (a\nprovider call that isn't billed/traced through this path is a margin and observability\nhole, not a shortcut). Provider-agnostic by design (`_VOICE_CLONE_MODELS`/\n`_VOICE_CLONE_DISPATCH` above), same catalog shape as `/v1/audio/speech`'s\n`_AUDIO_SPEECH_MODELS` — not a MiniMax-only endpoint, MiniMax is just the only row wired\ntoday. The returned `voice_id` is immediately usable as the `voice` field on a real\n`/v1/audio/speech` call against that model's own TTS family — no schema change needed\nthere, it's just another provider voice id from that endpoint's own perspective.\n\nTakes `sample_url` (a public URL, e.g. from `POST /v1/uploads`) rather than a raw\nmultipart file — same JSON-body shape every other endpoint here uses, and the one that\n`gateway/studio.py`'s `_ShimRequest` (built around `.json()`, no multipart/form-data\nsupport) can actually drive without a second request-shim implementation. Fetched\nserver-side (SSRF-checked, size-capped, same discipline as `images.py`'s\n`_fetch_reference_image`).\n\nBilled a flat `cost_mod.VOICE_CLONE_PRICES[model]` at clone time (that table's own\ncomment explains why, vs. MiniMax's real first-synthesis-use billing moment).","operationId":"audio_voices_clone_v1_audio_voices_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/transcriptions":{"post":{"summary":"Audio Transcriptions","description":"`response_format` supports `json` (default, `{\"text\": ...}`) `text` (raw body) and\n`verbose_json` (full provider object incl. `duration`/`segments`) — `srt`/`vtt` are not\nsupported yet (no design doc coverage; would need real reformatting, not just a passthrough).\n\nWe always request `verbose_json` from the upstream provider regardless of what the client\nasked for, purely to get a real `duration` to bill on (§ vs. guessing from file size),\nthen reshape the response to match what the client actually requested.","operationId":"audio_transcriptions_v1_audio_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audio_transcriptions_v1_audio_transcriptions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lipsync/models":{"get":{"summary":"List Lipsync Models","description":"Valid `model` slugs for `POST /v1/lipsync`. `input` says which visual the row takes\nalongside `audio_url`: `image` (`image_url`, a still animated into a talking video) or\n`video` (`video_url`, an existing clip re-synced to the new audio).","operationId":"list_lipsync_models_v1_lipsync_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Lipsync Models V1 Lipsync Models Get"}}}}}}},"/v1/lipsync":{"post":{"summary":"Lipsync Create","operationId":"lipsync_create_v1_lipsync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/lipsync/{lipsync_id}":{"get":{"summary":"Lipsync Status","description":"Identical job-id scheme/settlement/hedge/R2-mirroring logic as `/v1/videos/{id}` — a\nlip-sync job IS a video job once submitted, this just delegates wholesale rather than\nre-implementing any of it (see this module's own docstring).","operationId":"lipsync_status_v1_lipsync__lipsync_id__get","parameters":[{"name":"lipsync_id","in":"path","required":true,"schema":{"type":"string","title":"Lipsync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/face-swap/models":{"get":{"summary":"List Face Swap Models","description":"Valid `model` slugs for `POST /v1/face-swap` (which also requires `source_face_consent: true`).","operationId":"list_face_swap_models_v1_face_swap_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Face Swap Models V1 Face Swap Models Get"}}}}}}},"/v1/face-swap":{"post":{"summary":"Face Swap Create","operationId":"face_swap_create_v1_face_swap_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/face-swap/{face_swap_id}":{"get":{"summary":"Face Swap Status","description":"Identical job-id scheme/settlement/R2-mirroring logic as `/v1/videos/{id}` — a\nface-swap job IS a video job once submitted, this just delegates wholesale rather than\nre-implementing any of it (see this module's own docstring).","operationId":"face_swap_status_v1_face_swap__face_swap_id__get","parameters":[{"name":"face_swap_id","in":"path","required":true,"schema":{"type":"string","title":"Face Swap Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/meshes/models":{"get":{"summary":"List Mesh Models","description":"Valid `model` slugs for `POST /v1/meshes`. `input` is the request shape the row takes:\n`text` (prompt), `image` (image_url), `multi-image` (image_urls) or `text-or-image`.","operationId":"list_mesh_models_v1_meshes_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Mesh Models V1 Meshes Models Get"}}}}}}},"/v1/meshes":{"post":{"summary":"Meshes Create","operationId":"meshes_create_v1_meshes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/meshes/{mesh_id}":{"get":{"summary":"Meshes Status","description":"Unbilled: polling job status has no incremental provider cost — the full cost was\nalready billed at creation time (`meshes_create`, same discipline as `/v1/videos`).","operationId":"meshes_status_v1_meshes__mesh_id__get","parameters":[{"name":"mesh_id","in":"path","required":true,"schema":{"type":"string","title":"Mesh Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/live-video/tokens":{"post":{"summary":"Live Video Token","description":"Mint a short-lived credential for a BROWSER (docs/DESIGN-realtime-video.md §4.1, modelled on Reactor's\n`POST /tokens`): scoped to live-video only, an optional model allowlist, a per-session duration ceiling and a cap on\nsessions held open at once. Call it from YOUR server with your own key; hand the result to the browser. It bills\nnothing by itself — sessions opened with it are billed to your organization as usual.","operationId":"live_video_token_v1_live_video_tokens_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/live-video/models":{"get":{"summary":"Live Video Models","operationId":"live_video_models_v1_live_video_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/live-video/sessions":{"post":{"summary":"Live Video Create","operationId":"live_video_create_v1_live_video_sessions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/live-video/sessions/{session_id}":{"get":{"summary":"Live Video Get","operationId":"live_video_get_v1_live_video_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/live-video/sessions/{session_id}/heartbeat":{"post":{"summary":"Live Video Heartbeat","operationId":"live_video_heartbeat_v1_live_video_sessions__session_id__heartbeat_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/live-video/sessions/{session_id}/end":{"post":{"summary":"Live Video End","operationId":"live_video_end_v1_live_video_sessions__session_id__end_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/balance":{"get":{"summary":"Get Balance","operationId":"get_balance_v1_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Balance V1 Balance Get"}}}}}}},"/v1/avatars/models":{"get":{"summary":"List Avatar Models","description":"Valid `model` slugs for `POST /v1/avatars/videos`; `input` says what each takes.","operationId":"list_avatar_models_v1_avatars_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Avatar Models V1 Avatars Models Get"}}}}}}},"/v1/avatars":{"get":{"summary":"List Avatars","description":"Catalog avatars (HeyGen's public library) usable with `heygen/avatar-iv`. Page with `limit` (1-50) and the\nreturned `next_token`; `type` is `photo_avatar` or `digital_twin`. `id` is what you pass as `avatar_id`.","operationId":"list_avatars_v1_avatars_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Limit"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/avatars/voices":{"get":{"summary":"List Voices","description":"Voices for `script` mode. `language` is HeyGen's own spelling (\"Arabic\", \"English\", \"Spanish\", ...;\n\"Multilingual\" voices speak several). `id` is what you pass as `voice_id`; page with `next_token`.","operationId":"list_voices_v1_avatars_voices_get","parameters":[{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},{"name":"gender","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Limit"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/avatars/videos":{"post":{"summary":"Avatar Video Create","operationId":"avatar_video_create_v1_avatars_videos_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/avatars/videos/{video_id}":{"get":{"summary":"Avatar Video Status","description":"Same job object, ownership check, R2 mirroring and `cost_usd` as `GET /v1/videos/{id}`.","operationId":"avatar_video_status_v1_avatars_videos__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"summary":"List Models","operationId":"list_models_v1_models_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response List Models V1 Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pricing/estimate":{"post":{"summary":"Pricing Estimate","operationId":"pricing_estimate_v1_pricing_estimate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Pricing Estimate V1 Pricing Estimate Post"}}}}}}},"/v1/uploads":{"post":{"summary":"Upload File","operationId":"upload_file_v1_uploads_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_v1_uploads_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/media/{name}":{"head":{"summary":"Media Redirect","description":"Stable, public link for a generated output (`r2_uploads.stable_output_url`): 302 to a freshly\npresigned URL while the object still exists (30 days), 404 after. Public on purpose — outside `/v1/`,\nso a browser `<img>`/`<video>` or a provider can fetch it — and the capability is the unguessable\nuuid in `name`, the same trust model as the presigned URL it replaces. Only ever resolves keys\nunder `generated-outputs/`, never an arbitrary bucket key.","operationId":"media_redirect_media__name__head","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Media Redirect","description":"Stable, public link for a generated output (`r2_uploads.stable_output_url`): 302 to a freshly\npresigned URL while the object still exists (30 days), 404 after. Public on purpose — outside `/v1/`,\nso a browser `<img>`/`<video>` or a provider can fetch it — and the capability is the unguessable\nuuid in `name`, the same trust model as the presigned URL it replaces. Only ever resolves keys\nunder `generated-outputs/`, never an arbitrary bucket key.","operationId":"media_redirect_media__name__head","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/comfy/{api_key}/customers/storage":{"post":{"summary":"Comfy Customers Storage","operationId":"comfy_customers_storage_comfy__api_key__customers_storage_post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/comfy/{api_key}/proxy/{rest}":{"post":{"summary":"Comfy Proxy","operationId":"comfy_proxy_comfy__api_key__proxy__rest__post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Comfy Proxy","operationId":"comfy_proxy_comfy__api_key__proxy__rest__post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/comfy/{api_key}/{policy}/customers/storage":{"post":{"summary":"Comfy Customers Storage With Policy","operationId":"comfy_customers_storage_with_policy_comfy__api_key___policy__customers_storage_post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"policy","in":"path","required":true,"schema":{"type":"string","title":"Policy"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/comfy/{api_key}/{policy}/proxy/{rest}":{"post":{"summary":"Comfy Proxy With Policy","operationId":"comfy_proxy_with_policy_comfy__api_key___policy__proxy__rest__post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"policy","in":"path","required":true,"schema":{"type":"string","title":"Policy"}},{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Comfy Proxy With Policy","operationId":"comfy_proxy_with_policy_comfy__api_key___policy__proxy__rest__post","parameters":[{"name":"api_key","in":"path","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"policy","in":"path","required":true,"schema":{"type":"string","title":"Policy"}},{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reviews/upload":{"post":{"summary":"Upload Review Media","operationId":"upload_review_media_api_reviews_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_review_media_api_reviews_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reviews":{"post":{"summary":"Create Review","operationId":"create_review_api_reviews_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/files":{"post":{"summary":"Upload File","operationId":"upload_file_v1_files_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_v1_files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Files","operationId":"list_files_v1_files_get","parameters":[{"name":"purpose","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/files/{file_id}":{"get":{"summary":"Get File","operationId":"get_file_v1_files__file_id__get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/files/{file_id}/content":{"get":{"summary":"Get File Content","operationId":"get_file_content_v1_files__file_id__content_get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/batches":{"post":{"summary":"Create Batch","operationId":"create_batch_v1_batches_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Batches","operationId":"list_batches_v1_batches_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/batches/{batch_id}":{"get":{"summary":"Get Batch","operationId":"get_batch_v1_batches__batch_id__get","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/batches/{batch_id}/cancel":{"post":{"summary":"Cancel Batch","operationId":"cancel_batch_v1_batches__batch_id__cancel_post","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs":{"post":{"summary":"Create Job","operationId":"create_job_v1_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/jobs/{job_id}":{"get":{"summary":"Get Job","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs":{"get":{"summary":"Api List Jobs","description":"Dashboard-facing (Async Jobs tab): recent Jobs for the caller's active org — an admin\nsees every teammate's jobs (the shared wallet they're responsible for), a regular\nmember only ever sees their own, same trust boundary as `GET /api/keys`/`GET /api/usage`.","operationId":"api_list_jobs_api_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/jobs/{job_id}":{"get":{"summary":"Api Get Job","description":"Dashboard-facing job detail drawer: row fields plus the prompt (request body) and\nthe full result/error, unlike the lightweight `/api/jobs` list row.","operationId":"api_get_job_api_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks":{"get":{"summary":"Api Webhooks","description":"Dashboard-facing (Async Jobs > Webhooks tab): the org's signing secret plus its saved\ndefault `webhook_url` (if any). Per-job delivery status lives on the sibling Jobs tab\n(`GET /api/jobs`, `gateway/jobs_api.py`), not here.","operationId":"api_webhooks_api_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/secret/roll":{"post":{"summary":"Api Roll Webhook Secret","operationId":"api_roll_webhook_secret_api_webhooks_secret_roll_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/default":{"post":{"summary":"Api Set Default Webhook","description":"Save (or, with `webhook_url: null`/blank, clear) the org's default webhook — the\ndashboard's \"Add a webhook\" button. A `POST /v1/jobs` call can still pass its own\n`webhook_url` to override this per-request.","operationId":"api_set_default_webhook_api_webhooks_default_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_DefaultWebhook"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/video-deliveries":{"get":{"summary":"Api Video Webhook Deliveries","description":"Dashboard-facing: the org's most recent video / lip-sync / face-swap webhook deliveries, so a\ncustomer can see for themselves that their endpoint is failing. (Chat Jobs deliveries are on the\nJobs tab, `GET /api/jobs`.)","operationId":"api_video_webhook_deliveries_api_webhooks_video_deliveries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/webhook-test-sink/{token}":{"post":{"summary":"Receive","operationId":"receive_internal_webhook_test_sink__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Deliveries","operationId":"list_deliveries_internal_webhook_test_sink__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts":{"get":{"summary":"Api List Posts","operationId":"api_list_posts_api_community_posts_get","parameters":[{"name":"medium","in":"query","required":false,"schema":{"type":"string","default":"","title":"Medium"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"","title":"Model"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"nsfw","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Nsfw"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api Create Post","operationId":"api_create_post_api_community_posts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/community/posts/{post_id}":{"get":{"summary":"Api Get Post","operationId":"api_get_post_api_community_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Api Edit Post","operationId":"api_edit_post_api_community_posts__post_id__patch","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Api Delete Post","operationId":"api_delete_post_api_community_posts__post_id__delete","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}/recipe":{"get":{"summary":"Api Post Recipe","description":"What Studio's `?remix=` bootstrap fetches. Shape is exactly what `stReuse()` wants.","operationId":"api_post_recipe_api_community_posts__post_id__recipe_get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/me":{"get":{"summary":"Api Me","operationId":"api_me_api_community_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/community/handle":{"post":{"summary":"Api Set Handle","operationId":"api_set_handle_api_community_handle_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/community/upload":{"post":{"summary":"Api Upload","operationId":"api_upload_api_community_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_api_upload_api_community_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/import":{"get":{"summary":"Api Import Preview","description":"Composer prefill for `/community/new?trace=...` — nothing is copied yet.","operationId":"api_import_preview_api_community_import_get","parameters":[{"name":"trace_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}/comments":{"post":{"summary":"Api Create Comment","operationId":"api_create_comment_api_community_posts__post_id__comments_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/comments/{comment_id}":{"patch":{"summary":"Api Edit Comment","operationId":"api_edit_comment_api_community_comments__comment_id__patch","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"integer","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Api Delete Comment","operationId":"api_delete_comment_api_community_comments__comment_id__delete","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"integer","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/like":{"post":{"summary":"Api Like","operationId":"api_like_api_community_like_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/community/report":{"post":{"summary":"Api Report","operationId":"api_report_api_community_report_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/community/posts/{post_id}/remix":{"post":{"summary":"Api Remix Event","description":"`{kind: \"click\"}` from the post page (anyone — beacon); `{kind: \"open\"}` from Studio once the\nrecipe is applied (login required, it's the funnel's real \"landed in Studio\" signal).","operationId":"api_remix_event_api_community_posts__post_id__remix_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/admin/posts/{post_id}":{"post":{"summary":"Api Admin Post","operationId":"api_admin_post_api_community_admin_posts__post_id__post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/admin/comments/{comment_id}":{"post":{"summary":"Api Admin Comment","operationId":"api_admin_comment_api_community_admin_comments__comment_id__post","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"integer","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/community/reports":{"get":{"summary":"Api Admin Reports","operationId":"api_admin_reports_api_admin_community_reports_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"open","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/community/reports/resolve":{"post":{"summary":"Api Admin Resolve","operationId":"api_admin_resolve_api_admin_community_reports_resolve_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/community/funnel":{"get":{"summary":"Api Admin Funnel","operationId":"api_admin_funnel_api_admin_community_funnel_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/community":{"get":{"summary":"Page Index","operationId":"page_index_community_get","parameters":[{"name":"medium","in":"query","required":false,"schema":{"type":"string","default":"","title":"Medium"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"","title":"Model"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"nsfw","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Nsfw"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/community/new":{"get":{"summary":"Page New","operationId":"page_new_community_new_get","parameters":[{"name":"medium","in":"query","required":false,"schema":{"type":"string","default":"","title":"Medium"}},{"name":"trace","in":"query","required":false,"schema":{"type":"string","default":"","title":"Trace"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/community/p/{ref}":{"get":{"summary":"Page Post","operationId":"page_post_community_p__ref__get","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/forum":{"get":{"summary":"Forum Redirect Index","operationId":"forum_redirect_index_forum_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/forum/{rest}":{"get":{"summary":"Forum Redirect Rest","operationId":"forum_redirect_rest_forum__rest__get","parameters":[{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/community":{"get":{"summary":"Page Admin","operationId":"page_admin_admin_community_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/models":{"get":{"summary":"Models Listing Page","operationId":"models_listing_page_models_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"release_date","title":"Sort"}},{"name":"out","in":"query","required":false,"schema":{"type":"string","default":"image,video","title":"Out"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/compare":{"get":{"summary":"Compare Landing Page","operationId":"compare_landing_page_compare_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare/{rest}":{"get":{"summary":"Compare Page","operationId":"compare_page_compare__rest__get","parameters":[{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video-generation-api":{"get":{"summary":"Video Generation Api Hub Page","operationId":"video_generation_api_hub_page_video_generation_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/video-generation-api/pricing":{"get":{"summary":"Video Generation Api Price Index Page","operationId":"video_generation_api_price_index_page_video_generation_api_pricing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/vs/{provider_key}":{"get":{"summary":"Provider Vs Page","operationId":"provider_vs_page_vs__provider_key__get","parameters":[{"name":"provider_key","in":"path","required":true,"schema":{"type":"string","title":"Provider Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/blogs":{"get":{"summary":"Blog Index Page","operationId":"blog_index_page_blogs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blogs/{slug}":{"get":{"summary":"Blog Post Page","operationId":"blog_post_page_blogs__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blogs":{"get":{"summary":"Blogs Api","operationId":"blogs_api_api_blogs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/rankings":{"get":{"summary":"Rankings Default Page","operationId":"rankings_default_page_rankings_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/rankings/{kind}":{"get":{"summary":"Rankings Page","operationId":"rankings_page_rankings__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rankings/{kind}/leaderboard":{"get":{"summary":"Rankings Leaderboard Fragment","operationId":"rankings_leaderboard_fragment_api_rankings__kind__leaderboard_get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"week","title":"Period"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"requests","title":"Metric"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rankings/{kind}/share":{"get":{"summary":"Rankings Share Fragment","operationId":"rankings_share_fragment_api_rankings__kind__share_get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"requests","title":"Metric"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leaderboard":{"get":{"summary":"Leaderboard Page","operationId":"leaderboard_page_leaderboard_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"intelligence","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leaderboard/video":{"get":{"summary":"Video Leaderboard Default Page","operationId":"video_leaderboard_default_page_leaderboard_video_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"rank","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"asc","title":"Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leaderboard/video/{category}":{"get":{"summary":"Video Leaderboard Page","operationId":"video_leaderboard_page_leaderboard_video__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"rank","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"asc","title":"Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/{rest}":{"get":{"summary":"Chat Model Detail Page","operationId":"chat_model_detail_page_chat__rest__get","parameters":[{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/{slug}":{"get":{"summary":"Video Model Detail Page","operationId":"video_model_detail_page_video__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/image/{slug}":{"get":{"summary":"Image Model Detail Page","operationId":"image_model_detail_page_image__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speech/{slug}":{"get":{"summary":"Speech Model Detail Page","operationId":"speech_model_detail_page_speech__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/transcription/{slug}":{"get":{"summary":"Transcription Model Detail Page","operationId":"transcription_model_detail_page_transcription__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/realtime/{slug}":{"get":{"summary":"Realtime Model Detail Page","operationId":"realtime_model_detail_page_realtime__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/music/{slug}":{"get":{"summary":"Music Model Detail Page","operationId":"music_model_detail_page_music__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sfx/{slug}":{"get":{"summary":"Sfx Model Detail Page","operationId":"sfx_model_detail_page_sfx__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embedding/{slug}":{"get":{"summary":"Embedding Model Detail Page","operationId":"embedding_model_detail_page_embedding__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mesh/{slug}":{"get":{"summary":"Mesh Model Detail Page","operationId":"mesh_model_detail_page_mesh__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat-audio/{slug}":{"get":{"summary":"Chat Audio Model Detail Page","operationId":"chat_audio_model_detail_page_chat_audio__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/catalog-rates":{"get":{"summary":"Catalog Rates Api","operationId":"catalog_rates_api_api_catalog_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Xml","operationId":"sitemap_xml_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{provider}/{slug}":{"get":{"summary":"Model Detail Page","operationId":"model_detail_page__provider___slug__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{provider}/{slug}/{host}":{"get":{"summary":"Model Detail Page With Host","operationId":"model_detail_page_with_host__provider___slug___host__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"host","in":"path","required":true,"schema":{"type":"string","title":"Host"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/models":{"get":{"summary":"Models Listing Page Zh","operationId":"models_listing_page_zh_zh_models_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"release_date","title":"Sort"}},{"name":"out","in":"query","required":false,"schema":{"type":"string","default":"image,video","title":"Out"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/compare":{"get":{"summary":"Compare Landing Page Zh","operationId":"compare_landing_page_zh_zh_compare_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/zh/compare/{rest}":{"get":{"summary":"Compare Page Zh","operationId":"compare_page_zh_zh_compare__rest__get","parameters":[{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/leaderboard":{"get":{"summary":"Leaderboard Page Zh","operationId":"leaderboard_page_zh_zh_leaderboard_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"intelligence","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/chat/{rest}":{"get":{"summary":"Chat Model Detail Page Zh","operationId":"chat_model_detail_page_zh_zh_chat__rest__get","parameters":[{"name":"rest","in":"path","required":true,"schema":{"type":"string","title":"Rest"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/{provider}/{slug}":{"get":{"summary":"Model Detail Page Zh","operationId":"model_detail_page_zh_zh__provider___slug__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zh/{provider}/{slug}/{host}":{"get":{"summary":"Model Detail Page With Host Zh","operationId":"model_detail_page_with_host_zh_zh__provider___slug___host__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"host","in":"path","required":true,"schema":{"type":"string","title":"Host"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AchBlockBody":{"properties":{"blocked":{"type":"boolean","title":"Blocked"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["blocked"],"title":"AchBlockBody"},"AutoTopupConfig":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"threshold_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Threshold Usd"},"amount_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Usd"},"daily_topup_cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Topup Cap"}},"type":"object","required":["enabled"],"title":"AutoTopupConfig"},"Body_api_upload_api_community_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_api_upload_api_community_upload_post"},"Body_arena_upload_arena_api_uploads_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_arena_upload_arena_api_uploads_post"},"Body_audio_transcriptions_v1_audio_transcriptions_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"model":{"type":"string","title":"Model","default":"whisper-1"},"response_format":{"type":"string","title":"Response Format","default":"json"},"store":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store"}},"type":"object","required":["file"],"title":"Body_audio_transcriptions_v1_audio_transcriptions_post"},"Body_studio_agent_upload_doc_studio_api_agent_uploads_doc_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_studio_agent_upload_doc_studio_api_agent_uploads_doc_post"},"Body_studio_element_upload_studio_api_elements_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_studio_element_upload_studio_api_elements_upload_post"},"Body_studio_upload_studio_api_uploads_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_studio_upload_studio_api_uploads_post"},"Body_studio_voice_upload_studio_api_voices_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_studio_voice_upload_studio_api_voices_upload_post"},"Body_upload_file_v1_files_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"purpose":{"type":"string","title":"Purpose","default":"batch"}},"type":"object","required":["file"],"title":"Body_upload_file_v1_files_post"},"Body_upload_file_v1_uploads_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_v1_uploads_post"},"Body_upload_review_media_api_reviews_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_review_media_api_reviews_upload_post"},"BroadcastBody":{"properties":{"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"}},"type":"object","required":["subject","body"],"title":"BroadcastBody"},"BroadcastSendBody":{"properties":{"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"},"emails":{"items":{"type":"string"},"type":"array","title":"Emails"},"confirm_count":{"type":"integer","title":"Confirm Count"}},"type":"object","required":["subject","body","emails","confirm_count"],"title":"BroadcastSendBody"},"CodeBody":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"CodeBody"},"Creds":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"click_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Click Id"},"oppref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oppref"},"referral_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referral Code"}},"type":"object","required":["email","password"],"title":"Creds"},"DeleteOutputsBody":{"properties":{"trace_ids":{"items":{"type":"string"},"type":"array","title":"Trace Ids"}},"type":"object","required":["trace_ids"],"title":"DeleteOutputsBody"},"EmailOnly":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"EmailOnly"},"ErrorGroupStatusUpdate":{"properties":{"status":{"type":"string","title":"Status"},"fixed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed By"},"fix_commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fix Commit Sha"},"fix_pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fix Pr Url"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["status"],"title":"ErrorGroupStatusUpdate"},"FallbackStrategyBody":{"properties":{"strategy":{"type":"string","title":"Strategy"}},"type":"object","required":["strategy"],"title":"FallbackStrategyBody"},"FalsePositiveReportBody":{"properties":{"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"FalsePositiveReportBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeardAboutUsBody":{"properties":{"source":{"type":"string","title":"Source"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["source"],"title":"HeardAboutUsBody"},"KeyCreate":{"properties":{"name":{"type":"string","title":"Name","default":""},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode"},"rpm_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rpm Limit"},"tpm_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tpm Limit"},"monthly_spend_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Spend Cap Usd"},"model_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Model Allowlist"},"expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires Days"},"kind":{"type":"string","title":"Kind","default":"standard"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},"type":"object","title":"KeyCreate"},"KeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"monthly_spend_cap_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Spend Cap Usd"},"clear_cap":{"type":"boolean","title":"Clear Cap","default":false}},"type":"object","title":"KeyUpdate"},"MarkCheckedBody":{"properties":{"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","title":"MarkCheckedBody"},"MediaMarkCheckedBody":{"properties":{"kind":{"type":"string","title":"Kind"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["kind"],"title":"MediaMarkCheckedBody"},"ModelToggle":{"properties":{"slug":{"type":"string","title":"Slug"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["slug","enabled"],"title":"ModelToggle"},"PreferenceBody":{"properties":{"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"tax_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},"type":"object","title":"PreferenceBody"},"ProvisionKeyCreate":{"properties":{"name":{"type":"string","title":"Name","default":""},"limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Limit"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"model_allowlist":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Model Allowlist"}},"type":"object","title":"ProvisionKeyCreate"},"ProvisionKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"disabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Disabled"},"limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Limit"}},"type":"object","title":"ProvisionKeyUpdate"},"ReportReviewBody":{"properties":{"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"ReportReviewBody"},"RequestReviewBody":{"properties":{"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"dismissed":{"type":"boolean","title":"Dismissed","default":false}},"type":"object","title":"RequestReviewBody"},"ResetBody":{"properties":{"token":{"type":"string","title":"Token"},"password":{"type":"string","title":"Password"}},"type":"object","required":["token","password"],"title":"ResetBody"},"RouteRequest":{"properties":{"query":{"type":"string","title":"Query"},"mode":{"type":"string","title":"Mode","default":"balanced"}},"type":"object","required":["query"],"title":"RouteRequest"},"SuspendBody":{"properties":{"suspended":{"type":"boolean","title":"Suspended"}},"type":"object","required":["suspended"],"title":"SuspendBody"},"TimezoneBody":{"properties":{"timezone":{"type":"string","title":"Timezone"}},"type":"object","required":["timezone"],"title":"TimezoneBody"},"TopupRequest":{"properties":{"amount_usd":{"type":"number","title":"Amount Usd"},"method":{"type":"string","title":"Method","default":"card"}},"type":"object","required":["amount_usd"],"title":"TopupRequest"},"UiModeBody":{"properties":{"mode":{"type":"string","title":"Mode"}},"type":"object","required":["mode"],"title":"UiModeBody"},"UnsubscribeBody":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"UnsubscribeBody"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"_DefaultWebhook":{"properties":{"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","title":"_DefaultWebhook"}}}}