{"openapi":"3.1.0","info":{"title":"Dynamo.sh","description":"Prompts and documents in, hand-drawn explainer videos out.","version":"1.0.0"},"paths":{"/api/auth/state":{"get":{"tags":["accounts"],"summary":"Auth State","description":"What the pages need before they render anything.","operationId":"auth_state_api_auth_state_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Auth State Api Auth State Get"}}}}}}},"/api/auth/signup":{"post":{"tags":["accounts"],"summary":"Sign Up","operationId":"sign_up_api_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignUpIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sign Up Api Auth Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/signin":{"post":{"tags":["accounts"],"summary":"Sign In","operationId":"sign_in_api_auth_signin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sign In Api Auth Signin Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/signout":{"post":{"tags":["accounts"],"summary":"Sign Out","operationId":"sign_out_api_auth_signout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sign Out Api Auth Signout Post"}}}}}}},"/api/auth/code/{code}":{"get":{"tags":["accounts"],"summary":"Inspect Code","description":"What the sign-up form shows next to the code box as it is typed.\n\nOne box, four kinds of code, because the person typing it was handed a code\nand does not know which kind it is.","operationId":"inspect_code_api_auth_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inspect Code Api Auth Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account":{"get":{"tags":["accounts"],"summary":"My Account","operationId":"my_account_api_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Account Api Account Get"}}}}}},"patch":{"tags":["accounts"],"summary":"Update Profile","operationId":"update_profile_api_account_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Profile Api Account Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/password":{"post":{"tags":["accounts"],"summary":"Change Password","operationId":"change_password_api_account_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Change Password Api Account Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/provider-key":{"put":{"tags":["accounts"],"summary":"Set Provider Key","description":"An account's own Groq or Fish key.\n\nKept encrypted, never sent back, and worth setting: work done on your own\nkey is not charged against your credits.","operationId":"set_provider_key_api_account_provider_key_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderKeyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Set Provider Key Api Account Provider Key Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/credits":{"get":{"tags":["accounts"],"summary":"My Credits","operationId":"my_credits_api_account_credits_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response My Credits Api Account Credits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/redeem":{"post":{"tags":["accounts"],"summary":"Redeem Code","operationId":"redeem_code_api_account_redeem_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Redeem Code Api Account Redeem Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/keys":{"get":{"tags":["accounts"],"summary":"My Keys","operationId":"my_keys_api_account_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Keys Api Account Keys Get"}}}}}},"post":{"tags":["accounts"],"summary":"New Key","operationId":"new_key_api_account_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response New Key Api Account Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/keys/{key_id}":{"delete":{"tags":["accounts"],"summary":"Revoke Key","operationId":"revoke_key_api_account_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/team":{"get":{"tags":["accounts"],"summary":"My Team","operationId":"my_team_api_account_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Team Api Account Team Get"}}}}}},"post":{"tags":["accounts"],"summary":"Start Team","operationId":"start_team_api_account_team_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Start Team Api Account Team Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["accounts"],"summary":"Disband Team","operationId":"disband_team_api_account_team_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Disband Team Api Account Team Delete"}}}}}},"patch":{"tags":["accounts"],"summary":"Rename Team","operationId":"rename_team_api_account_team_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Rename Team Api Account Team Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/team/invites":{"post":{"tags":["accounts"],"summary":"Create Invite","description":"Invite somebody. Making a team first if there isn't one, because \"invite\na colleague\" should not begin with a form asking you to name something.","operationId":"create_invite_api_account_team_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Invite Api Account Team Invites Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/team/invites/{invite_id}":{"delete":{"tags":["accounts"],"summary":"Revoke Invite","operationId":"revoke_invite_api_account_team_invites__invite_id__delete","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/team/join":{"post":{"tags":["accounts"],"summary":"Join Team","description":"For somebody who already has an account when the invitation arrives.","operationId":"join_team_api_account_team_join_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Join Team Api Account Team Join Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/team/members/{member_id}":{"delete":{"tags":["accounts"],"summary":"Remove Member","operationId":"remove_member_api_account_team_members__member_id__delete","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Member Api Account Team Members  Member Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/packs":{"get":{"tags":["accounts"],"summary":"Credit Packs","description":"What this instance sells, and how it takes the money.","operationId":"credit_packs_api_account_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Credit Packs Api Account Packs Get"}}}}}}},"/api/account/checkout":{"post":{"tags":["accounts"],"summary":"Checkout","operationId":"checkout_api_account_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout Api Account Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/purchases":{"get":{"tags":["accounts"],"summary":"My Purchases","operationId":"my_purchases_api_account_purchases_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response My Purchases Api Account Purchases Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/stripe":{"post":{"tags":["accounts"],"summary":"Stripe Webhook","description":"Credits land here, and only here.\n\nThe page somebody is sent back to after paying is a page anyone can open, so\nit grants nothing; this endpoint is what the money actually moving looks\nlike. It is unauthenticated by necessity and authenticated by signature.","operationId":"stripe_webhook_api_payments_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stripe Webhook Api Payments Stripe Post"}}}}}}},"/api/admin/overview":{"get":{"tags":["admin"],"summary":"Overview","operationId":"overview_api_admin_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Overview Api Admin Overview Get"}}}}}}},"/api/admin/settings":{"put":{"tags":["admin"],"summary":"Update Settings","description":"Prices and sign-up rules. Only the fields this page owns.\n\nPassing the whole runtime config through here would let a dashboard for\nmanaging accounts quietly rewrite the render settings and the API keys.","operationId":"update_settings_api_admin_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__routes__admin__SettingsIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Settings Api Admin Settings Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purchases":{"get":{"tags":["admin"],"summary":"List Purchases","operationId":"list_purchases_api_admin_purchases_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Purchases Api Admin Purchases Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purchases/{purchase_id}/settle":{"post":{"tags":["admin"],"summary":"Settle Purchase","description":"Mark a purchase paid by hand, which is how an invoice becomes credits.\n\nIdempotent, like the webhook: clicking it twice does not pay twice.","operationId":"settle_purchase_api_admin_purchases__purchase_id__settle_post","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Settle Purchase Api Admin Purchases  Purchase Id  Settle Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/purchases/{purchase_id}/refund":{"post":{"tags":["admin"],"summary":"Refund Purchase","description":"Take the credits back. The money going back is your processor's job.","operationId":"refund_purchase_api_admin_purchases__purchase_id__refund_post","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refund Purchase Api Admin Purchases  Purchase Id  Refund Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts":{"get":{"tags":["admin"],"summary":"List Accounts","operationId":"list_accounts_api_admin_accounts_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"","title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Accounts Api Admin Accounts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Account","operationId":"create_account_api_admin_accounts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Account Api Admin Accounts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts/{account_id}":{"get":{"tags":["admin"],"summary":"Get Account","operationId":"get_account_api_admin_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Account Api Admin Accounts  Account Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Update Account","operationId":"update_account_api_admin_accounts__account_id__patch","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Account Api Admin Accounts  Account Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts/{account_id}/credits":{"post":{"tags":["admin"],"summary":"Grant Credits","operationId":"grant_credits_api_admin_accounts__account_id__credits_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Grant Credits Api Admin Accounts  Account Id  Credits Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts/{account_id}/signout":{"post":{"tags":["admin"],"summary":"Sign Out Account","operationId":"sign_out_account_api_admin_accounts__account_id__signout_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sign Out Account Api Admin Accounts  Account Id  Signout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/teams":{"get":{"tags":["admin"],"summary":"List Teams","description":"Every team, its size and its balance.","operationId":"list_teams_api_admin_teams_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Teams Api Admin Teams Get"}}}}}}},"/api/admin/codes":{"get":{"tags":["admin"],"summary":"List Codes","operationId":"list_codes_api_admin_codes_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":"kind","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Codes Api Admin Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Code","operationId":"create_code_api_admin_codes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Code Api Admin Codes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/codes/{code_id}":{"patch":{"tags":["admin"],"summary":"Update Code","operationId":"update_code_api_admin_codes__code_id__patch","parameters":[{"name":"code_id","in":"path","required":true,"schema":{"type":"string","title":"Code Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodePatchIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Code Api Admin Codes  Code Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Code","operationId":"delete_code_api_admin_codes__code_id__delete","parameters":[{"name":"code_id","in":"path","required":true,"schema":{"type":"string","title":"Code Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/codes/{code_id}/redemptions":{"get":{"tags":["admin"],"summary":"Code Redemptions","operationId":"code_redemptions_api_admin_codes__code_id__redemptions_get","parameters":[{"name":"code_id","in":"path","required":true,"schema":{"type":"string","title":"Code Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Code Redemptions Api Admin Codes  Code Id  Redemptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs":{"post":{"tags":["jobs"],"summary":"Create Job","description":"Accepts JSON, or multipart with a `payload` JSON field plus a `file`.","operationId":"create_job_api_jobs_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_job_api_jobs_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["jobs"],"summary":"List Jobs","description":"A page of renders. `search` matches the title; `status` accepts a job\nstatus, `active` for anything still running, or `all`.\n\nYou see your own. An administrator can ask for `everyone=true` and see the\nwhole instance, which is the only way to answer \"who is using all the\ncredits\" without reading the database by hand.","operationId":"list_jobs_api_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"","title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Status"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"everyone","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Everyone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Jobs Api Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/latest":{"get":{"tags":["jobs"],"summary":"Latest Job","description":"The most recent render — what the studio page shows.","operationId":"latest_job_api_jobs_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}}}}},"/api/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"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":{"$ref":"#/components/schemas/JobOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Delete Job","operationId":"delete_job_api_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/cancel":{"post":{"tags":["jobs"],"summary":"Cancel Job","operationId":"cancel_job_api_jobs__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/video":{"get":{"tags":["jobs"],"summary":"Get Video","operationId":"get_video_api_jobs__job_id__video_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/poster":{"get":{"tags":["jobs"],"summary":"Get Poster","operationId":"get_poster_api_jobs__job_id__poster_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/{job_id}/previews/{name}":{"get":{"tags":["jobs"],"summary":"Get Preview","operationId":"get_preview_api_jobs__job_id__previews__name__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"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"}}}}}}},"/api/assets/formats":{"get":{"tags":["assets"],"summary":"List Formats","operationId":"list_formats_api_assets_formats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Formats Api Assets Formats Get"}}}}}}},"/api/assets/voices/search":{"get":{"tags":["assets"],"summary":"Search Voices","description":"Search a provider's voice library.\n\nFish Audio's library is public and community-contributed, so it is browsed\nrather than enumerated. The built-in voices are a fixed list and ignore the\nfilters other than the text query.","operationId":"search_voices_api_assets_voices_search_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"type":"string","default":"fish","title":"Provider"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"language","in":"query","required":false,"schema":{"type":"string","default":"","title":"Language"}},{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Mine"}},{"name":"licensed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Licensed"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"score","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":40,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Voices Api Assets Voices Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/voices/test":{"post":{"tags":["assets"],"summary":"Test Voice","description":"Speak one line with the chosen voice and return it, so a key or a model\ncan be verified by ear rather than by a status code.","operationId":"test_voice_api_assets_voices_test_post","parameters":[{"name":"provider","in":"query","required":false,"schema":{"type":"string","default":"","title":"Provider"}},{"name":"voice","in":"query","required":false,"schema":{"type":"string","default":"","title":"Voice"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Voice Api Assets Voices Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/voices/sample/{name}":{"get":{"tags":["assets"],"summary":"Voice Sample","description":"Play back the line just synthesised.","operationId":"voice_sample_api_assets_voices_sample__name__get","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"}}}}}}},"/api/assets/sources":{"get":{"tags":["assets"],"summary":"List Sources","description":"The key-free endpoints used when the local library has no match.","operationId":"list_sources_api_assets_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Sources Api Assets Sources Get"}}}}}}},"/api/assets/sources/cache":{"delete":{"tags":["assets"],"summary":"Clear Source Cache","description":"Drop everything fetched so far; the next render re-fetches.","operationId":"clear_source_cache_api_assets_sources_cache_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Clear Source Cache Api Assets Sources Cache Delete"}}}}}}},"/api/assets/styles":{"get":{"tags":["assets"],"summary":"List Styles","description":"Named looks, plus the two axes they are built from.","operationId":"list_styles_api_assets_styles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Styles Api Assets Styles Get"}}}}}}},"/api/assets/music":{"get":{"tags":["assets"],"summary":"List Music","operationId":"list_music_api_assets_music_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Music Api Assets Music Get"}}}}}},"post":{"tags":["assets"],"summary":"Upload Music","operationId":"upload_music_api_assets_music_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_music_api_assets_music_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Music Api Assets Music Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/music/{track_id}":{"delete":{"tags":["assets"],"summary":"Delete Music","operationId":"delete_music_api_assets_music__track_id__delete","parameters":[{"name":"track_id","in":"path","required":true,"schema":{"type":"string","title":"Track Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/music/{track_id}/file":{"get":{"tags":["assets"],"summary":"Music File","operationId":"music_file_api_assets_music__track_id__file_get","parameters":[{"name":"track_id","in":"path","required":true,"schema":{"type":"string","title":"Track Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/voices":{"get":{"tags":["assets"],"summary":"List Voices","description":"Every voice this machine can produce, grouped by provider.","operationId":"list_voices_api_assets_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Voices Api Assets Voices Get"}}}}}}},"/api/assets/fonts":{"get":{"tags":["assets"],"summary":"List Fonts","operationId":"list_fonts_api_assets_fonts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Fonts Api Assets Fonts Get"}}}}}}},"/api/assets/hands":{"get":{"tags":["assets"],"summary":"List Hands","operationId":"list_hands_api_assets_hands_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Hands Api Assets Hands Get"}}}}}},"post":{"tags":["assets"],"summary":"Upload Hand","operationId":"upload_hand_api_assets_hands_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_hand_api_assets_hands_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Hand Api Assets Hands Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/hands/{asset_id}":{"patch":{"tags":["assets"],"summary":"Patch Hand","operationId":"patch_hand_api_assets_hands__asset_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Hand Api Assets Hands  Asset Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete Hand","operationId":"delete_hand_api_assets_hands__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/hands/{asset_id}/file":{"get":{"tags":["assets"],"summary":"Hand File","operationId":"hand_file_api_assets_hands__asset_id__file_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/dusters":{"get":{"tags":["assets"],"summary":"List Dusters","operationId":"list_dusters_api_assets_dusters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Dusters Api Assets Dusters Get"}}}}}},"post":{"tags":["assets"],"summary":"Upload Duster","operationId":"upload_duster_api_assets_dusters_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_duster_api_assets_dusters_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Duster Api Assets Dusters Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/dusters/{asset_id}":{"patch":{"tags":["assets"],"summary":"Patch Duster","operationId":"patch_duster_api_assets_dusters__asset_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Duster Api Assets Dusters  Asset Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete Duster","operationId":"delete_duster_api_assets_dusters__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/dusters/{asset_id}/file":{"get":{"tags":["assets"],"summary":"Duster File","operationId":"duster_file_api_assets_dusters__asset_id__file_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/media":{"get":{"tags":["assets"],"summary":"List Media","operationId":"list_media_api_assets_media_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Media Api Assets Media Get"}}}}}},"post":{"tags":["assets"],"summary":"Upload Media","operationId":"upload_media_api_assets_media_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_media_api_assets_media_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Media Api Assets Media Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/media/{asset_id}":{"delete":{"tags":["assets"],"summary":"Delete Media","operationId":"delete_media_api_assets_media__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/media/{asset_id}/file":{"get":{"tags":["assets"],"summary":"Media File","operationId":"media_file_api_assets_media__asset_id__file_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/assets/images/test":{"post":{"tags":["assets"],"summary":"Test Image Provider","description":"Fetch one image end to end so configuration problems surface here.","operationId":"test_image_provider_api_assets_images_test_post","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","default":"a red apple on a white background","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Image Provider Api Assets Images Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/timeline":{"get":{"tags":["editing"],"summary":"Get Timeline","operationId":"get_timeline_api_jobs__job_id__timeline_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Timeline Api Jobs  Job Id  Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["editing"],"summary":"Put Timeline","description":"Replace the whole timeline. Used by the editor's manual controls.","operationId":"put_timeline_api_jobs__job_id__timeline_put","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Timeline Api Jobs  Job Id  Timeline Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/ops":{"post":{"tags":["editing"],"summary":"Apply Ops","description":"Apply structured edits. This is what every editor control goes through.","operationId":"apply_ops_api_jobs__job_id__ops_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Apply Ops Api Jobs  Job Id  Ops Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/frame":{"get":{"tags":["editing"],"summary":"Get Frame","description":"One frame of the *current* timeline — the editor's live preview.\n\nServed from a warm browser, so scrubbing costs about 80ms a frame instead of\nthe two seconds a cold launch would.","operationId":"get_frame_api_jobs__job_id__frame_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"t","in":"query","required":false,"schema":{"type":"number","default":0.0,"title":"T"}},{"name":"scale","in":"query","required":false,"schema":{"type":"number","default":0.5,"title":"Scale"}},{"name":"quality","in":"query","required":false,"schema":{"type":"integer","default":82,"title":"Quality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/chat":{"get":{"tags":["editing"],"summary":"Get Chat","operationId":"get_chat_api_jobs__job_id__chat_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Chat Api Jobs  Job Id  Chat Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["editing"],"summary":"Clear Chat","operationId":"clear_chat_api_jobs__job_id__chat_delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["editing"],"summary":"Post Chat","operationId":"post_chat_api_jobs__job_id__chat_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Post Chat Api Jobs  Job Id  Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/chat/image":{"post":{"tags":["editing"],"summary":"Chat Image","description":"Drop an image into the conversation, optionally straight onto a scene.","operationId":"chat_image_api_jobs__job_id__chat_image_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_chat_image_api_jobs__job_id__chat_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Chat Image Api Jobs  Job Id  Chat Image Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/audio":{"post":{"tags":["editing"],"summary":"Upload Audio","description":"Attach a recording. With an .srt/.vtt the boards are timed to the words.","operationId":"upload_audio_api_jobs__job_id__audio_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_audio_api_jobs__job_id__audio_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Audio Api Jobs  Job Id  Audio Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["editing"],"summary":"Clear Audio","operationId":"clear_audio_api_jobs__job_id__audio_delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/presenter":{"post":{"tags":["editing"],"summary":"Upload Presenter","description":"Attach a webcam recording: its audio drives the timing, its video the inset.","operationId":"upload_presenter_api_jobs__job_id__presenter_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_presenter_api_jobs__job_id__presenter_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Presenter Api Jobs  Job Id  Presenter Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["editing"],"summary":"Clear Presenter","operationId":"clear_presenter_api_jobs__job_id__presenter_delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/rerender":{"post":{"tags":["editing"],"summary":"Rerender","operationId":"rerender_api_jobs__job_id__rerender_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RerenderRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rerender Api Jobs  Job Id  Rerender Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/generate":{"post":{"tags":["v2"],"summary":"Generate","description":"Generate a video from a prompt or script.","operationId":"generate_api_v2_videos_generate_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/stream":{"post":{"tags":["v2"],"summary":"Stream","description":"Generate a video and stream its scenes as they are finished.\n\nTakes the same body as `/generate`, and returns `text/event-stream` rather\nthan a job id. The first scene arrives once its narration has been spoken —\nseconds, not the length of a full encode — and the client draws it while the\nrest are still being made.\n\nEvents, in order:\n\n  * `meta`     — canvas size, style, fonts, hand, and where the renderer is\n  * `scene`    — one per scene: its elements with absolute times, any\n                 drawings it is the first to use, and the URL of its voice\n                 clip. Times are final when sent; later scenes never move it\n  * `progress` — stage and fraction\n  * `done`     — totals\n  * `error`    — the stream stops here, with a reason\n\nDrawings are sent once and referenced by key afterwards, so accumulate\n`assets` across events rather than replacing them.","operationId":"stream_api_v2_videos_stream_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/{video_id}/scenes/{scene_id}/audio":{"get":{"tags":["v2"],"summary":"Scene Audio","description":"The narration clip for one scene of a streamed video.\n\nUnauthenticated, like the finished video and poster it sits beside: an\n`<audio>` element cannot be made to send an `x-api-key` header, so requiring\none would mean no client could ever play the sound. The URL carries a\nrandom 32-character video id, and knowing one is the price of entry.","operationId":"scene_audio_api_v2_videos__video_id__scenes__scene_id__audio_get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"scene_id","in":"path","required":true,"schema":{"type":"string","title":"Scene Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos":{"get":{"tags":["v2"],"summary":"List Videos","description":"Retrieve videos belonging to the authenticated user.","operationId":"list_videos_api_v2_videos_get","parameters":[{"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"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/{video_id}":{"get":{"tags":["v2"],"summary":"Get Video","description":"Retrieve metadata for a single video.","operationId":"get_video_api_v2_videos__video_id__get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["v2"],"summary":"Update Video","description":"Update video metadata. Only title and visibility can be changed.","operationId":"update_video_api_v2_videos__video_id__patch","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["v2"],"summary":"Delete Video","description":"Delete a generated video (soft delete).","operationId":"delete_video_api_v2_videos__video_id__delete","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/{video_id}/podcast":{"get":{"tags":["v2"],"summary":"Get Podcast","description":"The audio-only export produced by enable_podcast_engine.","operationId":"get_podcast_api_v2_videos__video_id__podcast_get","parameters":[{"name":"video_id","in":"path","required":true,"schema":{"type":"string","title":"Video Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/videos/upload-file":{"post":{"tags":["v2"],"summary":"Upload File","description":"Store a file and return URLs for it.\n\nThe contract describes a presigned PUT flow. This instance has no object\nstore, so it accepts the bytes here and returns an `upload_url` that is a\nno-op PUT for the same object — a client that follows the documented\nthree-step flow works unchanged, and one that skips step two also works.","operationId":"upload_file_api_v2_videos_upload_file_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_v2_videos_upload_file_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/links":{"get":{"tags":["system"],"summary":"Links","description":"Outbound links for the landing page. Empty values are not rendered.","operationId":"links_api_links_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Links Api Links Get"}}}}}}},"/api/health":{"get":{"tags":["system"],"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Health Get"}}}}}}},"/api/system":{"get":{"tags":["system"],"summary":"System","operationId":"system_api_system_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response System Api System Get"}}}}}}},"/api/icons":{"get":{"tags":["system"],"summary":"Icons","operationId":"icons_api_icons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Icons Api Icons Get"}}}}}}},"/api/settings":{"get":{"tags":["system"],"summary":"Get Settings","operationId":"get_settings_api_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Settings Api Settings Get"}}}}}},"put":{"tags":["system"],"summary":"Put Settings","operationId":"put_settings_api_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__schemas__SettingsIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Put Settings Api Settings Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/settings/keys/{field}":{"delete":{"tags":["system"],"summary":"Clear Key","operationId":"clear_key_api_settings_keys__field__delete","parameters":[{"name":"field","in":"path","required":true,"schema":{"type":"string","title":"Field"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Clear Key Api Settings Keys  Field  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/settings/test":{"post":{"tags":["system"],"summary":"Test Provider","description":"Verify a provider end-to-end: key present, reachable, and it answers.","operationId":"test_provider_api_settings_test_post","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderCheck"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiKeyIn":{"properties":{"name":{"type":"string","title":"Name","default":""}},"type":"object","title":"ApiKeyIn"},"Body_chat_image_api_jobs__job_id__chat_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"scene":{"type":"string","title":"Scene","default":""},"frame":{"type":"boolean","title":"Frame","default":true},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["file"],"title":"Body_chat_image_api_jobs__job_id__chat_image_post"},"Body_create_job_api_jobs_post":{"properties":{"payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload"},"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"}},"type":"object","title":"Body_create_job_api_jobs_post"},"Body_upload_audio_api_jobs__job_id__audio_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"transcript":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Transcript"}},"type":"object","required":["file"],"title":"Body_upload_audio_api_jobs__job_id__audio_post"},"Body_upload_duster_api_assets_dusters_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name","default":""},"tip_x":{"type":"number","title":"Tip X","default":0.5},"tip_y":{"type":"number","title":"Tip Y","default":0.5}},"type":"object","required":["file"],"title":"Body_upload_duster_api_assets_dusters_post"},"Body_upload_file_api_v2_videos_upload_file_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_api_v2_videos_upload_file_post"},"Body_upload_hand_api_assets_hands_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name","default":""},"tip_x":{"type":"number","title":"Tip X","default":0.12},"tip_y":{"type":"number","title":"Tip Y","default":0.08}},"type":"object","required":["file"],"title":"Body_upload_hand_api_assets_hands_post"},"Body_upload_media_api_assets_media_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name","default":""},"keywords":{"type":"string","title":"Keywords","default":""},"frame":{"type":"boolean","title":"Frame","default":false}},"type":"object","required":["file"],"title":"Body_upload_media_api_assets_media_post"},"Body_upload_music_api_assets_music_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"type":"string","title":"Name","default":""},"mood":{"type":"string","title":"Mood","default":""}},"type":"object","required":["file"],"title":"Body_upload_music_api_assets_music_post"},"Body_upload_presenter_api_jobs__job_id__presenter_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"transcript":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Transcript"},"size":{"type":"number","title":"Size","default":0.3},"position":{"type":"string","title":"Position","default":"bottom_right"},"shape":{"type":"string","title":"Shape","default":"circle"},"border":{"type":"boolean","title":"Border","default":true},"mirror":{"type":"boolean","title":"Mirror","default":true}},"type":"object","required":["file"],"title":"Body_upload_presenter_api_jobs__job_id__presenter_post"},"ChatRequest":{"properties":{"message":{"type":"string","maxLength":4000,"minLength":1,"title":"Message"},"apply":{"type":"boolean","title":"Apply","default":true},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},"additionalProperties":false,"type":"object","required":["message"],"title":"ChatRequest"},"CheckoutIn":{"properties":{"pack":{"type":"string","title":"Pack"}},"type":"object","required":["pack"],"title":"CheckoutIn"},"CodeIn":{"properties":{"code":{"type":"string","title":"Code"},"kind":{"type":"string","title":"Kind","default":"discount"},"credits":{"type":"integer","minimum":0.0,"title":"Credits","default":0},"referrer_credits":{"type":"integer","minimum":0.0,"title":"Referrer Credits","default":0},"max_uses":{"type":"integer","minimum":0.0,"title":"Max Uses","default":0},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["code"],"title":"CodeIn"},"CodePatchIn":{"properties":{"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"CodePatchIn"},"CreateAccountIn":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"type":"string","title":"Name","default":""},"role":{"type":"string","title":"Role","default":"user"},"credits":{"type":"integer","title":"Credits","default":0}},"type":"object","required":["email","password"],"title":"CreateAccountIn"},"CreditsIn":{"properties":{"delta":{"type":"integer","title":"Delta"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["delta"],"title":"CreditsIn"},"DeleteResponse":{"properties":{"video_id":{"type":"string","title":"Video Id"},"deleted":{"type":"boolean","title":"Deleted","default":true},"message":{"type":"string","title":"Message","default":"Video deleted"}},"type":"object","required":["video_id"],"title":"DeleteResponse"},"EditOp":{"properties":{"op":{"type":"string","maxLength":40,"title":"Op"},"scene":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scene"},"element":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Element"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"type":{"anyOf":[{"type":"string","enum":["text","svg","shape","arrow","highlight","image"]},{"type":"null"}],"title":"Type"},"anchor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anchor"},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"},"start":{"anyOf":[{"type":"number","maximum":3600.0,"minimum":0.0},{"type":"null"}],"title":"Start"},"duration":{"anyOf":[{"type":"number","maximum":30.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Duration"},"x":{"anyOf":[{"type":"number","maximum":1.5,"minimum":-0.5},{"type":"null"}],"title":"X"},"y":{"anyOf":[{"type":"number","maximum":1.5,"minimum":-0.5},{"type":"null"}],"title":"Y"},"w":{"anyOf":[{"type":"number","maximum":2.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"W"},"h":{"anyOf":[{"type":"number","maximum":2.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"H"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"font_scale":{"anyOf":[{"type":"number","maximum":6.0,"minimum":0.2},{"type":"null"}],"title":"Font Scale"},"emphasis":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Emphasis"},"align":{"anyOf":[{"type":"string","enum":["left","center","right"]},{"type":"null"}],"title":"Align"},"draw":{"anyOf":[{"type":"string","enum":["write","fade","pop","wipe","instant"]},{"type":"null"}],"title":"Draw"},"frame":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Frame"},"zoom":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.4},{"type":"null"}],"title":"Zoom"},"center_x":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Center X"},"center_y":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Center Y"},"ink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ink"},"accent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent"},"background":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Background"},"font_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Family"},"hand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hand"},"order":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Order"}},"additionalProperties":false,"type":"object","required":["op"],"title":"EditOp","description":"One change. Unused fields are simply omitted."},"GenerateResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"video_id":{"type":"string","title":"Video Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message","default":"Video generation started"},"unsupported_parameters":{"items":{"type":"string"},"type":"array","title":"Unsupported Parameters"}},"type":"object","required":["job_id","video_id","status"],"title":"GenerateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HandPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tip_x":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Tip X"},"tip_y":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Tip Y"},"scale":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.2},{"type":"null"}],"title":"Scale"}},"additionalProperties":false,"type":"object","title":"HandPatch"},"InviteIn":{"properties":{"email":{"type":"string","title":"Email","default":""}},"type":"object","title":"InviteIn"},"JobOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"number","title":"Progress"},"stage":{"type":"string","title":"Stage"},"title":{"type":"string","title":"Title"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"provider_used":{"type":"string","title":"Provider Used","default":""},"source_chars":{"type":"integer","title":"Source Chars","default":0},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"scene_count":{"type":"integer","title":"Scene Count","default":0},"element_count":{"type":"integer","title":"Element Count","default":0},"frames":{"type":"integer","title":"Frames","default":0},"render_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Render Seconds"},"has_video":{"type":"boolean","title":"Has Video","default":false},"has_poster":{"type":"boolean","title":"Has Poster","default":false},"has_timeline":{"type":"boolean","title":"Has Timeline","default":false},"preview_files":{"items":{"type":"string"},"type":"array","title":"Preview Files"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"logs":{"items":{"$ref":"#/components/schemas/LogLine"},"type":"array","title":"Logs"},"request":{"additionalProperties":true,"type":"object","title":"Request"}},"type":"object","required":["id","status","progress","stage","title","created_at"],"title":"JobOut"},"JoinIn":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"JoinIn"},"LogLine":{"properties":{"t":{"type":"number","title":"T"},"level":{"type":"string","title":"Level","default":"info"},"msg":{"type":"string","title":"Msg"}},"type":"object","required":["t","msg"],"title":"LogLine"},"OpsRequest":{"properties":{"ops":{"items":{"$ref":"#/components/schemas/EditOp"},"type":"array","maxItems":60,"minItems":1,"title":"Ops"}},"additionalProperties":false,"type":"object","required":["ops"],"title":"OpsRequest"},"PasswordIn":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"PasswordIn"},"ProfileIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"ProfileIn"},"ProviderCheck":{"properties":{"provider":{"type":"string","title":"Provider"},"ok":{"type":"boolean","title":"Ok"},"detail":{"type":"string","title":"Detail"},"models":{"items":{"type":"string"},"type":"array","title":"Models"}},"type":"object","required":["provider","ok","detail"],"title":"ProviderCheck"},"ProviderKeyIn":{"properties":{"provider":{"type":"string","pattern":"^(groq|fish)$","title":"Provider"},"key":{"type":"string","title":"Key","default":""}},"type":"object","required":["provider"],"title":"ProviderKeyIn"},"RedeemIn":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"RedeemIn"},"RerenderRequest":{"properties":{"quality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality"},"revoice":{"type":"boolean","title":"Revoice","default":false},"music_track":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Music Track"},"music_gain":{"anyOf":[{"type":"number","maximum":0.0,"minimum":-40.0},{"type":"null"}],"title":"Music Gain"},"music_duck":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Music Duck"},"previews":{"type":"boolean","title":"Previews","default":true}},"additionalProperties":false,"type":"object","title":"RerenderRequest"},"SettleIn":{"properties":{"reference":{"type":"string","title":"Reference","default":""}},"type":"object","title":"SettleIn"},"SignInIn":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"SignInIn"},"SignUpIn":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"type":"string","title":"Name","default":""},"code":{"type":"string","title":"Code","default":""}},"type":"object","required":["email","password"],"title":"SignUpIn"},"TeamIn":{"properties":{"name":{"type":"string","title":"Name","default":""}},"type":"object","title":"TeamIn"},"UpdateAccountIn":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","title":"UpdateAccountIn"},"UpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Title"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"}},"additionalProperties":false,"type":"object","title":"UpdateRequest","description":"PATCH /api/v2/videos/{video_id} — only title and visibility."},"UploadResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"file_url":{"type":"string","title":"File Url"},"file_name":{"type":"string","title":"File Name"},"content_type":{"type":"string","title":"Content Type"}},"type":"object","required":["upload_url","file_url","file_name","content_type"],"title":"UploadResponse"},"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"},"VideoListResponse":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/VideoOut"},"type":"array","title":"Videos"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["videos","total","limit","offset"],"title":"VideoListResponse"},"VideoOut":{"properties":{"video_id":{"type":"string","title":"Video Id"},"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"number","title":"Progress","default":0.0},"stage":{"type":"string","title":"Stage","default":""},"title":{"type":"string","title":"Title","default":""},"visibility":{"type":"string","title":"Visibility","default":"private"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"podcast_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Podcast Url"},"script_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Script Text"},"video_orientation":{"type":"string","title":"Video Orientation","default":"horizontal"},"dynamo_video_engine":{"type":"string","title":"Dynamo Video Engine","default":"dynamo_canvas"},"canvas_style_variant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canvas Style Variant"},"sketch_style_variant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sketch Style Variant"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["video_id","job_id","status"],"title":"VideoOut"},"app__api__routes__admin__SettingsIn":{"properties":{"values":{"additionalProperties":true,"type":"object","title":"Values"}},"type":"object","required":["values"],"title":"SettingsIn"},"app__api__schemas__SettingsIn":{"properties":{"llm_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Provider"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"groq_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groq Api Key"},"anthropic_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anthropic Api Key"},"openai_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Openai Api Key"},"elevenlabs_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Elevenlabs Api Key"},"tts_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tts Provider"},"tts_voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tts Voice"},"web_assets":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Assets"},"image_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Provider"},"image_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Api Key"},"image_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Model"},"image_custom_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Custom Url"},"image_custom_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Custom Path"},"image_custom_header":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Custom Header"},"fish_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fish Api Key"},"fish_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fish Model"},"system_voice_rate":{"anyOf":[{"type":"integer","maximum":400.0,"minimum":80.0},{"type":"null"}],"title":"System Voice Rate"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"house_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Rules"},"style_preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Preset"},"font":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font"},"hand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hand"},"hand_scale":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.2},{"type":"null"}],"title":"Hand Scale"},"duster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duster"},"duster_scale":{"anyOf":[{"type":"number","maximum":4.0,"minimum":0.2},{"type":"null"}],"title":"Duster Scale"},"public_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Url"}},"additionalProperties":false,"type":"object","title":"SettingsIn"}}}}