{"openapi":"3.1.0","info":{"title":"短视频文案提取","version":"0.1.0"},"paths":{"/v1/transcript":{"get":{"summary":"Transcript Get","operationId":"transcript_get_v1_transcript_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"segments","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Segments"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Transcript Post","operationId":"transcript_post_v1_transcript_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/platforms":{"get":{"summary":"Platforms","description":"免费探测端点,也是 listing 的活文档。","operationId":"platforms_v1_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Platforms V1 Platforms Get"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"默认全放行。搜索引擎收录落地页是获客渠道之一,没有需要屏蔽的路径\n(API 端点有鉴权,爬虫拿不到内容;admin 靠 token 不靠隐藏)。","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"只列公开可索引的页面。应用内的 Library/Account 是登录后的状态,不是独立 URL。","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/terms":{"get":{"summary":"Terms","description":"服务条款。Paddle 网站审核要求条款+退款政策可见,收款的市场各有一份。","operationId":"terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api-landing":{"get":{"summary":"Api Landing","description":"Video Transcript API 落地页。api.payload.cool 的 nginx 把 / 反代到这里,\n与 /v1、/mcp 同进程同域,不单独起实例。","operationId":"api_landing_api_landing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Privacy","description":"Google OAuth 同意屏幕要求填隐私政策 URL。sermon 处理的是教会录音,\n必须单独披露音频经过哪些第三方处理器,所以它有自己的一份。","operationId":"privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/px":{"post":{"summary":"Pixel","description":"第一方埋点接收端。sendBeacon 打过来的,永远返回 204——\n统计失败绝不能影响页面,也不给爬虫任何可探测的响应差异。","operationId":"pixel_api_px_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/traffic":{"post":{"summary":"Admin Traffic","description":"停留时长 / 跳出率 / 人均页数,以及来源域名。","operationId":"admin_traffic_api_admin_traffic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_traffic_api_admin_traffic_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Traffic Api Admin Traffic Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/static/wechat-qr.png":{"get":{"summary":"Wechat Qr","description":"只对外提供购买页需要的微信二维码，不开放整个 static 目录。","operationId":"wechat_qr_static_wechat_qr_png_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/me":{"post":{"summary":"Me","operationId":"me_api_me_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_me_api_me_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Me Api Me Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/register":{"post":{"summary":"Register","operationId":"register_api_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_register_api_register_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Register Api Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/login":{"post":{"summary":"Login","operationId":"login_api_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_login_api_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Login Api Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google":{"post":{"summary":"Google Auth","description":"Google 一键登录。credential 是前端 GIS 弹窗返回的 id_token(JWT)。\n验证走 Google 的 tokeninfo 接口——它替我们校验签名和有效期,我们只需要\n再核对 aud(必须是自己的 client_id,防止别家应用的 token 混进来)。","operationId":"google_auth_api_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_google_auth_api_auth_google_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Google Auth Api Auth Google Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/paddle/webhook":{"post":{"summary":"Paddle Webhook","description":"Paddle 支付完成 → 自动到账。验签失败 400;secret 未配置整个接口关闭(503)。","operationId":"paddle_webhook_api_paddle_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Paddle Webhook Api Paddle Webhook Post"}}}}}}},"/api/redeem":{"post":{"summary":"Redeem","operationId":"redeem_api_redeem_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_redeem_api_redeem_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Redeem Api Redeem Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ledger":{"post":{"summary":"Ledger","operationId":"ledger_api_ledger_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_ledger_api_ledger_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ledger Api Ledger Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/resolve_profile":{"post":{"summary":"Resolve Profile","description":"主页 → 作品链接列表。不扣时长(没识别任何音频),但要挡住滥用:\n每次都要开一个 Chromium(约 300MB),连点几下就能把内存吃光。","operationId":"resolve_profile_api_resolve_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_resolve_profile_api_resolve_profile_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resolve Profile Api Resolve Profile Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/extract":{"post":{"summary":"Start Extract","operationId":"start_extract_api_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_start_extract_api_extract_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Start Extract Api Extract Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/upload":{"post":{"summary":"Upload Extract","description":"讲道录音/录像直传 → ASR。sermon 市场专用,其它实例不开这个口。\n\n计费同 URL 流程:先 ffprobe 拿时长、按秒扣费,识别失败全额退。","operationId":"upload_extract_api_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_extract_api_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload Extract Api Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sermon_pack_cached":{"post":{"summary":"Sermon Pack Cached","description":"只查已生成的内容包,不触发 LLM——重开历史记录时前端静默调用。","operationId":"sermon_pack_cached_api_sermon_pack_cached_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sermon_pack_cached_api_sermon_pack_cached_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sermon Pack Cached Api Sermon Pack Cached Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sermon_pack":{"post":{"summary":"Sermon Pack","description":"transcript → 整周教会内容包(摘要/灵修/讨论题/金句/社媒/邮件)。缓存同 analyze。","operationId":"sermon_pack_api_sermon_pack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sermon_pack_api_sermon_pack_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sermon Pack Api Sermon Pack Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/job/{job_id}":{"get":{"summary":"Job Status","operationId":"job_status_api_job__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":{"post":{"summary":"Jobs","operationId":"jobs_api_jobs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_jobs_api_jobs_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Jobs Api Jobs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analyze":{"post":{"summary":"Analyze","operationId":"analyze_api_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_analyze_api_analyze_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Analyze Api Analyze Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rewrite":{"post":{"summary":"Rewrite","operationId":"rewrite_api_rewrite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_rewrite_api_rewrite_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Rewrite Api Rewrite Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin":{"get":{"summary":"Admin Page","operationId":"admin_page_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/overview":{"post":{"summary":"Admin Overview","operationId":"admin_overview_api_admin_overview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_overview_api_admin_overview_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Overview Api Admin Overview Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/codes":{"post":{"summary":"Admin Codes","operationId":"admin_codes_api_admin_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_codes_api_admin_codes_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Codes Api Admin Codes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/create_codes":{"post":{"summary":"Admin Create Codes","operationId":"admin_create_codes_api_admin_create_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_create_codes_api_admin_create_codes_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Create Codes Api Admin Create Codes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"post":{"summary":"Admin Users","operationId":"admin_users_api_admin_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_users_api_admin_users_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Users Api Admin Users Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/grant":{"post":{"summary":"Admin Grant","operationId":"admin_grant_api_admin_grant_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_grant_api_admin_grant_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Grant Api Admin Grant Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reset_password":{"post":{"summary":"Admin Reset Password","operationId":"admin_reset_password_api_admin_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_admin_reset_password_api_admin_reset_password_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin Reset Password Api Admin Reset Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_admin_codes_api_admin_codes_post":{"properties":{"pw":{"type":"string","title":"Pw"},"status":{"type":"string","title":"Status","default":"all"}},"type":"object","required":["pw"],"title":"Body_admin_codes_api_admin_codes_post"},"Body_admin_create_codes_api_admin_create_codes_post":{"properties":{"pw":{"type":"string","title":"Pw"},"count":{"type":"integer","title":"Count"},"minutes":{"type":"integer","title":"Minutes"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["pw","count","minutes"],"title":"Body_admin_create_codes_api_admin_create_codes_post"},"Body_admin_grant_api_admin_grant_post":{"properties":{"pw":{"type":"string","title":"Pw"},"user_id":{"type":"integer","title":"User Id"},"minutes":{"type":"integer","title":"Minutes"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["pw","user_id","minutes"],"title":"Body_admin_grant_api_admin_grant_post"},"Body_admin_overview_api_admin_overview_post":{"properties":{"pw":{"type":"string","title":"Pw"}},"type":"object","required":["pw"],"title":"Body_admin_overview_api_admin_overview_post"},"Body_admin_reset_password_api_admin_reset_password_post":{"properties":{"pw":{"type":"string","title":"Pw"},"user_id":{"type":"integer","title":"User Id"},"password":{"type":"string","title":"Password"}},"type":"object","required":["pw","user_id","password"],"title":"Body_admin_reset_password_api_admin_reset_password_post"},"Body_admin_traffic_api_admin_traffic_post":{"properties":{"pw":{"type":"string","title":"Pw"},"days":{"type":"integer","title":"Days","default":7}},"type":"object","required":["pw"],"title":"Body_admin_traffic_api_admin_traffic_post"},"Body_admin_users_api_admin_users_post":{"properties":{"pw":{"type":"string","title":"Pw"},"keyword":{"type":"string","title":"Keyword","default":""}},"type":"object","required":["pw"],"title":"Body_admin_users_api_admin_users_post"},"Body_analyze_api_analyze_post":{"properties":{"token":{"type":"string","title":"Token"},"job_id":{"type":"string","title":"Job Id"},"index":{"type":"integer","title":"Index"}},"type":"object","required":["token","job_id","index"],"title":"Body_analyze_api_analyze_post"},"Body_google_auth_api_auth_google_post":{"properties":{"credential":{"type":"string","title":"Credential"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","required":["credential"],"title":"Body_google_auth_api_auth_google_post"},"Body_jobs_api_jobs_post":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"Body_jobs_api_jobs_post"},"Body_ledger_api_ledger_post":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"Body_ledger_api_ledger_post"},"Body_login_api_login_post":{"properties":{"phone":{"type":"string","title":"Phone"},"password":{"type":"string","title":"Password"}},"type":"object","required":["phone","password"],"title":"Body_login_api_login_post"},"Body_me_api_me_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","title":"Body_me_api_me_post"},"Body_redeem_api_redeem_post":{"properties":{"token":{"type":"string","title":"Token"},"code":{"type":"string","title":"Code"}},"type":"object","required":["token","code"],"title":"Body_redeem_api_redeem_post"},"Body_register_api_register_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"phone":{"type":"string","title":"Phone"},"password":{"type":"string","title":"Password"}},"type":"object","required":["phone","password"],"title":"Body_register_api_register_post"},"Body_resolve_profile_api_resolve_profile_post":{"properties":{"token":{"type":"string","title":"Token"},"url":{"type":"string","title":"Url"}},"type":"object","required":["token","url"],"title":"Body_resolve_profile_api_resolve_profile_post"},"Body_rewrite_api_rewrite_post":{"properties":{"token":{"type":"string","title":"Token"},"job_id":{"type":"string","title":"Job Id"},"index":{"type":"integer","title":"Index"},"mode":{"type":"string","title":"Mode"},"extra":{"type":"string","title":"Extra","default":""}},"type":"object","required":["token","job_id","index","mode"],"title":"Body_rewrite_api_rewrite_post"},"Body_sermon_pack_api_sermon_pack_post":{"properties":{"token":{"type":"string","title":"Token"},"job_id":{"type":"string","title":"Job Id"},"index":{"type":"integer","title":"Index"}},"type":"object","required":["token","job_id","index"],"title":"Body_sermon_pack_api_sermon_pack_post"},"Body_sermon_pack_cached_api_sermon_pack_cached_post":{"properties":{"token":{"type":"string","title":"Token"},"job_id":{"type":"string","title":"Job Id"},"index":{"type":"integer","title":"Index"}},"type":"object","required":["token","job_id","index"],"title":"Body_sermon_pack_cached_api_sermon_pack_cached_post"},"Body_start_extract_api_extract_post":{"properties":{"token":{"type":"string","title":"Token"},"text":{"type":"string","title":"Text"}},"type":"object","required":["token","text"],"title":"Body_start_extract_api_extract_post"},"Body_upload_extract_api_upload_post":{"properties":{"token":{"type":"string","title":"Token"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["token","file"],"title":"Body_upload_extract_api_upload_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"TranscriptIn":{"properties":{"url":{"type":"string","title":"Url"},"segments":{"type":"boolean","title":"Segments","default":false}},"type":"object","required":["url"],"title":"TranscriptIn"},"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"}}}}