{"openapi":"3.1.0","info":{"title":"锐消 RedactX","description":"病案等文档的本地脱敏服务。全部在本机处理，不调用外部模型。","version":"0.2.7"},"paths":{"/v1/health":{"get":{"tags":["系统"],"summary":"服务状态","description":"返回版本号、是否找到打码标签字体、默认渲染分辨率、单个文件上传上限（max_upload_mb）。不需要 API Key。","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/catalog":{"get":{"tags":["目录"],"summary":"完整目录","description":"实体分组、实体类型、打码样式与场景预设。Web 页据此生成设置面板。","operationId":"catalog_v1_catalog_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entities":{"get":{"tags":["目录"],"summary":"实体类型","description":"可遮盖的实体类型：code 用于 options.entities，default 为病案审核场景的默认勾选。","operationId":"entities_v1_entities_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/styles":{"get":{"tags":["目录"],"summary":"打码样式","description":"七种打码样式。所有样式都先擦除原像素再绘制外观。","operationId":"styles_v1_styles_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs":{"post":{"tags":["任务"],"summary":"提交异步任务","description":"上传文件，立即返回 job_id，后台排队处理。用 GET /v1/jobs/{job_id} 轮询，status 为 succeeded 后下载结果。上传的原文件处理完立即删除；原件预览图（GET /v1/jobs/{job_id}/preview/{page}?v=before，宽度不超过 1400 像素）与结果一起保留到期；options.keep_source 为 true 时另存打码前的页面供复核删框、改框，复核完成或到期时删除。","operationId":"create_job_v1_jobs_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_job_v1_jobs_post"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["任务"],"summary":"最近任务","description":"按提交时间倒序，只列当前 API Key 提交的任务（管理员 Key 列出全部）。name 为上传时的原文件名（旧任务可能为空），随任务到期或删除一并删除。","operationId":"list_jobs_v1_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"返回条数，1–100","default":30,"title":"Limit"},"description":"返回条数，1–100"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["任务"],"summary":"任务状态","description":"status 依次为 queued、running、succeeded 或 failed；progress 为 0–1；完成后 summary 含各类型遮盖数量。","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"提交任务时返回的 job_id","title":"Job Id"},"description":"提交任务时返回的 job_id"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["任务"],"summary":"删除结果","description":"立即删除脱敏文件、报告与预览，不等保留时长到期。处理中的任务返回 409。","operationId":"delete_job_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/result":{"get":{"tags":["任务"],"summary":"下载脱敏文件","description":"PDF 或多页输入输出栅格化重建的 PDF（已清除元数据）；单张图片输出同格式图片。任务未完成返回 409。","operationId":"get_result_v1_jobs__job_id__result_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/report":{"get":{"tags":["任务"],"summary":"打码报告","description":"每处遮盖的页码、类型、来源、样式与归一化坐标 box=[x0,y0,x1,y1]（左上角为原点）。不含任何原文。","operationId":"get_report_v1_jobs__job_id__report_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/preview/{page}":{"get":{"tags":["任务"],"summary":"页面预览图","description":"JPEG，宽度不超过 1400 像素。v=before 为原件缩小版，含未脱敏内容，与结果一起保留到期或随任务删除。","operationId":"get_preview_v1_jobs__job_id__preview__page__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"page","in":"path","required":true,"schema":{"type":"integer","description":"页码，从 1 开始","title":"Page"},"description":"页码，从 1 开始"},{"name":"v","in":"query","required":false,"schema":{"type":"string","description":"after 脱敏后，before 原件","default":"after","title":"V"},"description":"after 脱敏后，before 原件"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/review":{"put":{"tags":["复核"],"summary":"提交复核后的遮盖框","description":"body 为 {\"items\": [...]}：本任务全部遮盖框（格式同打码报告的 items；新框只需 page、type、box，style 可省略）。服务按改动重新打码受影响的页并重建输出，返回新的报告。提交时 options.keep_source 为 true 的任务可以加框、删框、改框；其余任务只能加框，删框或改框返回 409 NOT_EDITABLE。","operationId":"put_review_v1_jobs__job_id__review_put","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"{\"items\": [...]}","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/export":{"get":{"tags":["复核"],"summary":"导出标注","description":"打码前的原始页面与复核后的全部框（COCO 格式），供训练检测模型。含真实病案内容：服务端设置 REDACTX_ALLOW_EXPORT=1 才可用，且只有保留原件、尚未完成复核的任务可以导出；只有管理员 Key 能导出。","operationId":"export_annotations_v1_jobs__job_id__export_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}/review/finish":{"post":{"tags":["复核"],"summary":"复核完成","description":"立即删除为复核保留的打码前页面。之后只能再加框。","operationId":"finish_review_v1_jobs__job_id__review_finish_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","description":"任务 ID","title":"Job Id"},"description":"任务 ID"},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/redact":{"post":{"tags":["同步"],"summary":"同步脱敏","description":"限 10 页、20 MB 以内，直接返回脱敏后的文件；响应头 X-Redact-Counts 为各类型遮盖数量（JSON）。病案等大文件请用 /v1/jobs。","operationId":"redact_sync_v1_redact_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填","title":"X-Api-Key"},"description":"服务端设置了 REDACTX_API_KEY 或已生成用户 Key 时必填"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_redact_sync_v1_redact_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_create_job_v1_jobs_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"PDF、图片或 Word/WPS/Excel/PPT/Markdown/TXT 等文档，按文件头识别真实类型"},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options","description":"脱敏选项，JSON 字符串；不传时用病案审核默认值。字段见接口文档页"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"加密 PDF 的打开密码"},"retention_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention Hours","description":"结果保留时长（小时），0.1–168，默认 24"}},"type":"object","required":["file"],"title":"Body_create_job_v1_jobs_post"},"Body_redact_sync_v1_redact_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"待脱敏文件"},"options":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Options","description":"脱敏选项，JSON 字符串，同 /v1/jobs"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"加密 PDF 的打开密码"}},"type":"object","required":["file"],"title":"Body_redact_sync_v1_redact_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}},"tags":[{"name":"系统","description":"服务状态"},{"name":"目录","description":"可选的实体类型、打码样式与场景预设"},{"name":"任务","description":"异步脱敏：提交后轮询状态，完成后下载结果、报告与预览"},{"name":"复核","description":"人工复核：加框、删框、改框后重新打码并重建输出"},{"name":"同步","description":"小文件直接返回脱敏结果"}]}