{
  "components": {
    "schemas": {
      "AAPImportErrorEntry": {
        "properties": {
          "reason": {
            "title": "Reason",
            "type": "string"
          },
          "task_match": {
            "additionalProperties": true,
            "title": "Task Match",
            "type": "object"
          }
        },
        "required": [
          "reason"
        ],
        "title": "AAPImportErrorEntry",
        "type": "object"
      },
      "AAPImportResult": {
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "errors": {
            "items": {
              "$ref": "#/components/schemas/AAPImportErrorEntry"
            },
            "title": "Errors",
            "type": "array"
          },
          "imported": {
            "default": 0,
            "title": "Imported",
            "type": "integer"
          },
          "skipped": {
            "default": 0,
            "title": "Skipped",
            "type": "integer"
          }
        },
        "title": "AAPImportResult",
        "type": "object"
      },
      "AdminDashboardStats": {
        "properties": {
          "active_users": {
            "title": "Active Users",
            "type": "integer"
          },
          "ml_backends_connected": {
            "title": "Ml Backends Connected",
            "type": "integer"
          },
          "ml_backends_total": {
            "title": "Ml Backends Total",
            "type": "integer"
          },
          "pre_annotated_batches": {
            "default": 0,
            "title": "Pre Annotated Batches",
            "type": "integer"
          },
          "projects_archived": {
            "title": "Projects Archived",
            "type": "integer"
          },
          "projects_completed": {
            "title": "Projects Completed",
            "type": "integer"
          },
          "projects_in_progress": {
            "title": "Projects In Progress",
            "type": "integer"
          },
          "projects_pending_review": {
            "title": "Projects Pending Review",
            "type": "integer"
          },
          "registration_by_day": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/RegistrationDayPoint"
            },
            "title": "Registration By Day",
            "type": "array"
          },
          "role_distribution": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "Role Distribution",
            "type": "object"
          },
          "total_annotations": {
            "title": "Total Annotations",
            "type": "integer"
          },
          "total_projects": {
            "title": "Total Projects",
            "type": "integer"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          },
          "total_users": {
            "title": "Total Users",
            "type": "integer"
          }
        },
        "required": [
          "total_users",
          "active_users",
          "total_projects",
          "projects_in_progress",
          "projects_completed",
          "projects_pending_review",
          "projects_archived",
          "total_tasks",
          "total_annotations",
          "ml_backends_total",
          "ml_backends_connected",
          "role_distribution"
        ],
        "title": "AdminDashboardStats",
        "type": "object"
      },
      "AdminLockRequest": {
        "properties": {
          "reason": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "reason"
        ],
        "title": "AdminLockRequest",
        "type": "object"
      },
      "AdminPeopleList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AdminPersonItem"
            },
            "title": "Items",
            "type": "array"
          },
          "period": {
            "title": "Period",
            "type": "string"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "period"
        ],
        "title": "AdminPeopleList",
        "type": "object"
      },
      "AdminPersonDetail": {
        "properties": {
          "active_minutes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active Minutes"
          },
          "composite_score": {
            "title": "Composite Score",
            "type": "integer"
          },
          "duration_histogram": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Duration Histogram",
            "type": "array"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "p50_duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "P50 Duration Ms"
          },
          "p95_duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "P95 Duration Ms"
          },
          "project_count": {
            "title": "Project Count",
            "type": "integer"
          },
          "project_distribution": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Project Distribution",
            "type": "array"
          },
          "quality_score": {
            "title": "Quality Score",
            "type": "integer"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "throughput": {
            "title": "Throughput",
            "type": "integer"
          },
          "timeline": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Timeline",
            "type": "array"
          },
          "trend_quality": {
            "items": {
              "type": "integer"
            },
            "title": "Trend Quality",
            "type": "array"
          },
          "trend_throughput": {
            "items": {
              "type": "integer"
            },
            "title": "Trend Throughput",
            "type": "array"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          },
          "weekly_compare_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weekly Compare Pct"
          }
        },
        "required": [
          "user_id",
          "name",
          "email",
          "role",
          "project_count",
          "throughput",
          "quality_score",
          "active_minutes",
          "composite_score",
          "weekly_compare_pct",
          "trend_throughput",
          "trend_quality",
          "project_distribution",
          "duration_histogram",
          "p50_duration_ms",
          "p95_duration_ms",
          "timeline"
        ],
        "title": "AdminPersonDetail",
        "type": "object"
      },
      "AdminPersonItem": {
        "description": "v0.8.4 · AdminPeoplePage 卡片项。",
        "properties": {
          "activity_score": {
            "title": "Activity Score",
            "type": "integer"
          },
          "alerts": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Alerts",
            "type": "array"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "main_metric": {
            "title": "Main Metric",
            "type": "integer"
          },
          "main_metric_label": {
            "title": "Main Metric Label",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_count": {
            "title": "Project Count",
            "type": "integer"
          },
          "quality_score": {
            "title": "Quality Score",
            "type": "integer"
          },
          "rejected_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rejected Rate"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "sparkline_7d": {
            "items": {
              "type": "integer"
            },
            "title": "Sparkline 7D",
            "type": "array"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "throughput_score": {
            "title": "Throughput Score",
            "type": "integer"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          },
          "weekly_compare_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weekly Compare Pct"
          }
        },
        "required": [
          "user_id",
          "name",
          "email",
          "role",
          "status",
          "project_count",
          "main_metric",
          "main_metric_label",
          "throughput_score",
          "quality_score",
          "activity_score",
          "sparkline_7d"
        ],
        "title": "AdminPersonItem",
        "type": "object"
      },
      "AdminResetPasswordResponse": {
        "properties": {
          "message": {
            "title": "Message",
            "type": "string"
          },
          "target_email": {
            "title": "Target Email",
            "type": "string"
          },
          "temp_password": {
            "title": "Temp Password",
            "type": "string"
          }
        },
        "required": [
          "temp_password",
          "message",
          "target_email"
        ],
        "title": "AdminResetPasswordResponse",
        "type": "object"
      },
      "AliasFrequencyResponse": {
        "properties": {
          "frequency": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "Frequency",
            "type": "object"
          },
          "last_computed_at": {
            "format": "date-time",
            "title": "Last Computed At",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "total_predictions": {
            "title": "Total Predictions",
            "type": "integer"
          }
        },
        "required": [
          "project_id",
          "total_predictions",
          "frequency",
          "last_computed_at"
        ],
        "title": "AliasFrequencyResponse",
        "type": "object"
      },
      "AnnotationBulkPatch": {
        "description": "I12 · 批量更新的字段子集.\n\n不允许 bulk 改 geometry (语义模糊;同一 geometry 应用到 N 个不同 shape 无意义),\n也不允许 bulk 改 tool_unit_id (会导致 class_name 校验失败).\ngroup_id=None 表示从原 group 移除.",
        "properties": {
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "class_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Class Name"
          },
          "group_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "group_id_explicit_clear": {
            "default": false,
            "title": "Group Id Explicit Clear",
            "type": "boolean"
          },
          "is_hidden": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Hidden"
          },
          "is_locked": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Locked"
          },
          "is_occluded": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Occluded"
          },
          "z_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Z Order"
          }
        },
        "title": "AnnotationBulkPatch",
        "type": "object"
      },
      "AnnotationBulkUpdateRequest": {
        "properties": {
          "ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          },
          "patch": {
            "$ref": "#/components/schemas/AnnotationBulkPatch"
          }
        },
        "required": [
          "ids",
          "patch"
        ],
        "title": "AnnotationBulkUpdateRequest",
        "type": "object"
      },
      "AnnotationBulkUpdateResponse": {
        "properties": {
          "updated_count": {
            "title": "Updated Count",
            "type": "integer"
          },
          "updated_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Updated Ids",
            "type": "array"
          }
        },
        "required": [
          "updated_ids",
          "updated_count"
        ],
        "title": "AnnotationBulkUpdateResponse",
        "type": "object"
      },
      "AnnotationCommentCreate": {
        "properties": {
          "anchor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CommentAnchor"
              },
              {
                "type": "null"
              }
            ]
          },
          "attachments": {
            "items": {
              "$ref": "#/components/schemas/Attachment"
            },
            "title": "Attachments",
            "type": "array"
          },
          "body": {
            "maxLength": 4000,
            "minLength": 1,
            "title": "Body",
            "type": "string"
          },
          "canvas_drawing": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CanvasDrawing"
              },
              {
                "type": "null"
              }
            ]
          },
          "mentions": {
            "items": {
              "$ref": "#/components/schemas/Mention"
            },
            "title": "Mentions",
            "type": "array"
          }
        },
        "required": [
          "body"
        ],
        "title": "AnnotationCommentCreate",
        "type": "object"
      },
      "AnnotationCommentListPage": {
        "description": "v0.8.8 · keyset 分页响应。\n\ncursor 编码 ``<created_at_iso>__<id>``；前端按返回的 ``next_cursor``\n继续拉「更早评论」。空数组 + ``next_cursor=None`` 即末尾。",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AnnotationCommentOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "AnnotationCommentListPage",
        "type": "object"
      },
      "AnnotationCommentOut": {
        "properties": {
          "anchor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CommentAnchor"
              },
              {
                "type": "null"
              }
            ]
          },
          "annotation_id": {
            "format": "uuid",
            "title": "Annotation Id",
            "type": "string"
          },
          "attachments": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Attachment"
            },
            "title": "Attachments",
            "type": "array"
          },
          "author_id": {
            "format": "uuid",
            "title": "Author Id",
            "type": "string"
          },
          "author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Name"
          },
          "body": {
            "title": "Body",
            "type": "string"
          },
          "canvas_drawing": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CanvasDrawing"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "is_resolved": {
            "title": "Is Resolved",
            "type": "boolean"
          },
          "mentions": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Mention"
            },
            "title": "Mentions",
            "type": "array"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "annotation_id",
          "author_id",
          "body",
          "is_resolved",
          "is_active",
          "created_at"
        ],
        "title": "AnnotationCommentOut",
        "type": "object"
      },
      "AnnotationCommentUpdate": {
        "properties": {
          "body": {
            "anyOf": [
              {
                "maxLength": 4000,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Body"
          },
          "is_resolved": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Resolved"
          }
        },
        "title": "AnnotationCommentUpdate",
        "type": "object"
      },
      "AnnotationCreate": {
        "properties": {
          "annotation_type": {
            "default": "bbox",
            "title": "Annotation Type",
            "type": "string"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "class_name": {
            "title": "Class Name",
            "type": "string"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "geometry": {
            "discriminator": {
              "mapping": {
                "bbox": "#/components/schemas/BboxGeometry",
                "multi_polygon": "#/components/schemas/MultiPolygonGeometry",
                "polygon": "#/components/schemas/PolygonGeometry",
                "video_bbox": "#/components/schemas/VideoBboxGeometry",
                "video_track": "#/components/schemas/VideoTrackGeometry"
              },
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/BboxGeometry"
              },
              {
                "$ref": "#/components/schemas/VideoBboxGeometry"
              },
              {
                "$ref": "#/components/schemas/VideoTrackGeometry"
              },
              {
                "$ref": "#/components/schemas/PolygonGeometry"
              },
              {
                "$ref": "#/components/schemas/MultiPolygonGeometry"
              }
            ],
            "title": "Geometry"
          },
          "lead_time": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time"
          },
          "parent_prediction_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Prediction Id"
          },
          "tool_unit_id": {
            "default": "bbox",
            "enum": [
              "bbox",
              "polyline",
              "region",
              "ai_interactive",
              "lidar_box_3d"
            ],
            "title": "Tool Unit Id",
            "type": "string"
          }
        },
        "required": [
          "class_name",
          "geometry"
        ],
        "title": "AnnotationCreate",
        "type": "object"
      },
      "AnnotationFeedbackCreate": {
        "properties": {
          "anchor_position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedbackAnchorPosition"
              },
              {
                "type": "null"
              }
            ]
          },
          "anchor_type": {
            "enum": [
              "project",
              "task",
              "annotation",
              "pixel"
            ],
            "title": "Anchor Type",
            "type": "string"
          },
          "annotation_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Id"
          },
          "attachments": {
            "default": [],
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Attachments",
            "type": "array"
          },
          "body": {
            "title": "Body",
            "type": "string"
          },
          "kind": {
            "enum": [
              "issue",
              "comment",
              "reject",
              "bug"
            ],
            "title": "Kind",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "severity": {
            "anyOf": [
              {
                "enum": [
                  "info",
                  "warn",
                  "blocker"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Severity"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "thread_parent_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thread Parent Id"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "required": [
          "kind",
          "anchor_type",
          "project_id",
          "body"
        ],
        "title": "AnnotationFeedbackCreate",
        "type": "object"
      },
      "AnnotationFeedbackListPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AnnotationFeedbackOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "AnnotationFeedbackListPage",
        "type": "object"
      },
      "AnnotationFeedbackOut": {
        "properties": {
          "anchor_position": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Anchor Position"
          },
          "anchor_type": {
            "enum": [
              "project",
              "task",
              "annotation",
              "pixel"
            ],
            "title": "Anchor Type",
            "type": "string"
          },
          "annotation_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Id"
          },
          "attachments": {
            "default": [],
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Attachments",
            "type": "array"
          },
          "author_id": {
            "format": "uuid",
            "title": "Author Id",
            "type": "string"
          },
          "author_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Author Name"
          },
          "body": {
            "title": "Body",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "kind": {
            "enum": [
              "issue",
              "comment",
              "reject",
              "bug"
            ],
            "title": "Kind",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "resolved_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolved At"
          },
          "resolved_by_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolved By Id"
          },
          "severity": {
            "anyOf": [
              {
                "enum": [
                  "info",
                  "warn",
                  "blocker"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Severity"
          },
          "status": {
            "enum": [
              "open",
              "resolved",
              "wont_fix"
            ],
            "title": "Status",
            "type": "string"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "thread_parent_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thread Parent Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "kind",
          "anchor_type",
          "project_id",
          "status",
          "body",
          "author_id",
          "is_active",
          "created_at"
        ],
        "title": "AnnotationFeedbackOut",
        "type": "object"
      },
      "AnnotationFeedbackPatch": {
        "properties": {
          "body": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Body"
          },
          "severity": {
            "anyOf": [
              {
                "enum": [
                  "info",
                  "warn",
                  "blocker"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Severity"
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "open",
                  "resolved",
                  "wont_fix"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "AnnotationFeedbackPatch",
        "type": "object"
      },
      "AnnotationFeedbackReply": {
        "properties": {
          "attachments": {
            "default": [],
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Attachments",
            "type": "array"
          },
          "body": {
            "title": "Body",
            "type": "string"
          }
        },
        "required": [
          "body"
        ],
        "title": "AnnotationFeedbackReply",
        "type": "object"
      },
      "AnnotationGroupRequest": {
        "description": "I12 · 创建/合入分组. ids 必须属于同一 task.",
        "properties": {
          "ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "ids",
          "task_id"
        ],
        "title": "AnnotationGroupRequest",
        "type": "object"
      },
      "AnnotationGroupResponse": {
        "properties": {
          "affected_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Affected Ids",
            "type": "array"
          },
          "group_id": {
            "title": "Group Id",
            "type": "integer"
          }
        },
        "required": [
          "group_id",
          "affected_ids"
        ],
        "title": "AnnotationGroupResponse",
        "type": "object"
      },
      "AnnotationHistoryResponse": {
        "properties": {
          "annotation_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Id"
          },
          "entries": {
            "items": {
              "$ref": "#/components/schemas/HistoryEntry"
            },
            "title": "Entries",
            "type": "array"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "entries"
        ],
        "title": "AnnotationHistoryResponse",
        "type": "object"
      },
      "AnnotationListPage": {
        "description": "v0.7.6 · keyset cursor 分页响应。next_cursor=None 表示已是末页。",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AnnotationOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "AnnotationListPage",
        "type": "object"
      },
      "AnnotationOut": {
        "properties": {
          "annotation_type": {
            "title": "Annotation Type",
            "type": "string"
          },
          "attributes": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ]
            },
            "default": {},
            "title": "Attributes",
            "type": "object"
          },
          "class_name": {
            "title": "Class Name",
            "type": "string"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "geometry": {
            "discriminator": {
              "mapping": {
                "bbox": "#/components/schemas/BboxGeometry",
                "multi_polygon": "#/components/schemas/MultiPolygonGeometry",
                "polygon": "#/components/schemas/PolygonGeometry",
                "video_bbox": "#/components/schemas/VideoBboxGeometry",
                "video_track": "#/components/schemas/VideoTrackGeometry"
              },
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/BboxGeometry"
              },
              {
                "$ref": "#/components/schemas/VideoBboxGeometry"
              },
              {
                "$ref": "#/components/schemas/VideoTrackGeometry"
              },
              {
                "$ref": "#/components/schemas/PolygonGeometry"
              },
              {
                "$ref": "#/components/schemas/MultiPolygonGeometry"
              }
            ],
            "title": "Geometry"
          },
          "ground_truth": {
            "default": false,
            "title": "Ground Truth",
            "type": "boolean"
          },
          "group_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "is_hidden": {
            "default": false,
            "title": "Is Hidden",
            "type": "boolean"
          },
          "is_locked": {
            "default": false,
            "title": "Is Locked",
            "type": "boolean"
          },
          "is_occluded": {
            "default": false,
            "title": "Is Occluded",
            "type": "boolean"
          },
          "lead_time": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time"
          },
          "parent_annotation_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Annotation Id"
          },
          "parent_prediction_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Prediction Id"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "source": {
            "title": "Source",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "tool_unit_id": {
            "default": "bbox",
            "enum": [
              "bbox",
              "polyline",
              "region",
              "ai_interactive",
              "lidar_box_3d"
            ],
            "title": "Tool Unit Id",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          },
          "version": {
            "default": 1,
            "title": "Version",
            "type": "integer"
          },
          "z_order": {
            "default": 0,
            "title": "Z Order",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "task_id",
          "source",
          "annotation_type",
          "class_name",
          "geometry",
          "is_active",
          "created_at"
        ],
        "title": "AnnotationOut",
        "type": "object"
      },
      "AnnotationUngroupRequest": {
        "properties": {
          "ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          }
        },
        "required": [
          "ids"
        ],
        "title": "AnnotationUngroupRequest",
        "type": "object"
      },
      "AnnotationUngroupResponse": {
        "properties": {
          "auto_cleared_orphans": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Auto Cleared Orphans",
            "type": "array"
          },
          "cleared_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Cleared Ids",
            "type": "array"
          }
        },
        "required": [
          "cleared_ids"
        ],
        "title": "AnnotationUngroupResponse",
        "type": "object"
      },
      "AnnotationUpdate": {
        "properties": {
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    },
                    {
                      "type": "number"
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "class_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Class Name"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "geometry": {
            "anyOf": [
              {
                "discriminator": {
                  "mapping": {
                    "bbox": "#/components/schemas/BboxGeometry",
                    "multi_polygon": "#/components/schemas/MultiPolygonGeometry",
                    "polygon": "#/components/schemas/PolygonGeometry",
                    "video_bbox": "#/components/schemas/VideoBboxGeometry",
                    "video_track": "#/components/schemas/VideoTrackGeometry"
                  },
                  "propertyName": "type"
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/BboxGeometry"
                  },
                  {
                    "$ref": "#/components/schemas/VideoBboxGeometry"
                  },
                  {
                    "$ref": "#/components/schemas/VideoTrackGeometry"
                  },
                  {
                    "$ref": "#/components/schemas/PolygonGeometry"
                  },
                  {
                    "$ref": "#/components/schemas/MultiPolygonGeometry"
                  }
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Geometry"
          },
          "is_hidden": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Hidden"
          },
          "is_locked": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Locked"
          },
          "is_occluded": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Occluded"
          },
          "z_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Z Order"
          }
        },
        "title": "AnnotationUpdate",
        "type": "object"
      },
      "AnnotatorDashboardStats": {
        "properties": {
          "active_minutes_today": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Active Minutes Today"
          },
          "assigned_tasks": {
            "title": "Assigned Tasks",
            "type": "integer"
          },
          "daily_counts": {
            "items": {
              "type": "integer"
            },
            "title": "Daily Counts",
            "type": "array"
          },
          "hour_buckets": {
            "default": [],
            "items": {
              "type": "integer"
            },
            "title": "Hour Buckets",
            "type": "array"
          },
          "median_duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Median Duration Ms"
          },
          "personal_accuracy": {
            "title": "Personal Accuracy",
            "type": "number"
          },
          "rejected_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rejected Rate"
          },
          "rejected_tasks_count": {
            "default": 0,
            "title": "Rejected Tasks Count",
            "type": "integer"
          },
          "reopened_avg": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reopened Avg"
          },
          "streak_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Streak Days"
          },
          "today_completed": {
            "title": "Today Completed",
            "type": "integer"
          },
          "total_completed": {
            "title": "Total Completed",
            "type": "integer"
          },
          "weekly_compare_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weekly Compare Pct"
          },
          "weekly_completed": {
            "title": "Weekly Completed",
            "type": "integer"
          },
          "weekly_target": {
            "default": 200,
            "title": "Weekly Target",
            "type": "integer"
          }
        },
        "required": [
          "assigned_tasks",
          "today_completed",
          "weekly_completed",
          "total_completed",
          "personal_accuracy",
          "daily_counts"
        ],
        "title": "AnnotatorDashboardStats",
        "type": "object"
      },
      "ApiKeyCreate": {
        "properties": {
          "name": {
            "maxLength": 60,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          }
        },
        "required": [
          "name"
        ],
        "title": "ApiKeyCreate",
        "type": "object"
      },
      "ApiKeyCreated": {
        "description": "创建响应：附带一次性 plaintext token。关闭弹窗后无法再次查看。",
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "key_prefix": {
            "title": "Key Prefix",
            "type": "string"
          },
          "last_used_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "plaintext": {
            "title": "Plaintext",
            "type": "string"
          },
          "revoked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "key_prefix",
          "scopes",
          "last_used_at",
          "revoked_at",
          "created_at",
          "plaintext"
        ],
        "title": "ApiKeyCreated",
        "type": "object"
      },
      "ApiKeyOut": {
        "description": "列表 / 详情用。永远不含 plaintext / hash。",
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "key_prefix": {
            "title": "Key Prefix",
            "type": "string"
          },
          "last_used_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "revoked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "key_prefix",
          "scopes",
          "last_used_at",
          "revoked_at",
          "created_at"
        ],
        "title": "ApiKeyOut",
        "type": "object"
      },
      "AsyncJobListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AsyncJobOut"
            },
            "title": "Items",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "title": "AsyncJobListResponse",
        "type": "object"
      },
      "AsyncJobOut": {
        "description": "v0.10.16 · 异步任务行 schema（前端铃铛 + 详情页消费）。",
        "properties": {
          "celery_task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Celery Task Id"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "title": "Kind",
            "type": "string"
          },
          "payload": {
            "additionalProperties": true,
            "title": "Payload",
            "type": "object"
          },
          "progress_pct": {
            "title": "Progress Pct",
            "type": "integer"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "result": {
            "additionalProperties": true,
            "title": "Result",
            "type": "object"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "enum": [
              "pending",
              "running",
              "completed",
              "failed",
              "cancelled"
            ],
            "title": "Status",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          }
        },
        "required": [
          "id",
          "kind",
          "project_id",
          "user_id",
          "status",
          "progress_pct",
          "payload",
          "result",
          "error_message",
          "celery_task_id",
          "started_at",
          "completed_at",
          "created_at",
          "updated_at"
        ],
        "title": "AsyncJobOut",
        "type": "object"
      },
      "Attachment": {
        "properties": {
          "fileName": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Filename",
            "type": "string"
          },
          "mimeType": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Mimetype",
            "type": "string"
          },
          "size": {
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          },
          "storageKey": {
            "maxLength": 512,
            "minLength": 1,
            "title": "Storagekey",
            "type": "string"
          }
        },
        "required": [
          "storageKey",
          "fileName",
          "mimeType",
          "size"
        ],
        "title": "Attachment",
        "type": "object"
      },
      "AttributeField": {
        "additionalProperties": false,
        "properties": {
          "applies_to": {
            "anyOf": [
              {
                "const": "*",
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Applies To"
          },
          "default": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Default"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "hotkey": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hotkey"
          },
          "key": {
            "minLength": 1,
            "title": "Key",
            "type": "string"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max"
          },
          "min": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min"
          },
          "mutable": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mutable"
          },
          "options": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/AttributeFieldOption"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Options"
          },
          "regex": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regex"
          },
          "required": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Required"
          },
          "type": {
            "enum": [
              "text",
              "number",
              "boolean",
              "select",
              "multiselect",
              "range"
            ],
            "title": "Type",
            "type": "string"
          },
          "visible_if": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VisibleIfRule"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "key",
          "label",
          "type"
        ],
        "title": "AttributeField",
        "type": "object"
      },
      "AttributeFieldOption": {
        "additionalProperties": false,
        "properties": {
          "label": {
            "title": "Label",
            "type": "string"
          },
          "value": {
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "value",
          "label"
        ],
        "title": "AttributeFieldOption",
        "type": "object"
      },
      "AttributeSchema": {
        "additionalProperties": false,
        "properties": {
          "fields": {
            "items": {
              "$ref": "#/components/schemas/AttributeField"
            },
            "title": "Fields",
            "type": "array"
          }
        },
        "title": "AttributeSchema",
        "type": "object"
      },
      "AuditDetail": {
        "additionalProperties": true,
        "description": "通用审计 detail：所有 23 种 action 的 detail_json shape。\n\ncommon：所有写请求都带 request_id（middleware 注入）\n业务字段：随 action 不同而不同；用 extra=\"allow\" 容纳，\n几个高频字段单列出来好让 codegen 生成强类型 hint。\n\n后续按需要把高频 action 拆成自己的 BaseModel + discriminated union。",
        "properties": {
          "after": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "After"
          },
          "before": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Before"
          },
          "field_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field Key"
          },
          "new_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "New Name"
          },
          "old_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Old Name"
          },
          "request_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Request Id"
          },
          "task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "title": "AuditDetail",
        "type": "object"
      },
      "AuditLogList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AuditLogOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "AuditLogList",
        "type": "object"
      },
      "AuditLogOut": {
        "properties": {
          "action": {
            "title": "Action",
            "type": "string"
          },
          "actor_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Email"
          },
          "actor_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Id"
          },
          "actor_role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Role"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "detail_json": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AuditDetail"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "ip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ip"
          },
          "method": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Method"
          },
          "path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Path"
          },
          "request_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Request Id"
          },
          "status_code": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Code"
          },
          "target_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Id"
          },
          "target_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Type"
          }
        },
        "required": [
          "id",
          "actor_id",
          "actor_email",
          "actor_role",
          "action",
          "target_type",
          "target_id",
          "method",
          "path",
          "status_code",
          "ip",
          "detail_json",
          "created_at"
        ],
        "title": "AuditLogOut",
        "type": "object"
      },
      "BackendCostBreakdown": {
        "properties": {
          "avg_inference_time_ms": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Inference Time Ms"
          },
          "backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Backend Id"
          },
          "backend_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Backend Name"
          },
          "failures": {
            "default": 0,
            "title": "Failures",
            "type": "integer"
          },
          "predictions": {
            "default": 0,
            "title": "Predictions",
            "type": "integer"
          },
          "total_cost": {
            "default": 0.0,
            "title": "Total Cost",
            "type": "number"
          }
        },
        "title": "BackendCostBreakdown",
        "type": "object"
      },
      "BatchCreate": {
        "properties": {
          "annotator_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotator Id"
          },
          "dataset_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset Id"
          },
          "deadline": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deadline"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "name": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "priority": {
            "default": 50,
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Priority",
            "type": "integer"
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          }
        },
        "required": [
          "name"
        ],
        "title": "BatchCreate",
        "type": "object"
      },
      "BatchDistributeResult": {
        "properties": {
          "annotator_per_batch": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "default": {},
            "title": "Annotator Per Batch",
            "type": "object"
          },
          "distributed_batches": {
            "title": "Distributed Batches",
            "type": "integer"
          },
          "reviewer_per_batch": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "default": {},
            "title": "Reviewer Per Batch",
            "type": "object"
          }
        },
        "required": [
          "distributed_batches"
        ],
        "title": "BatchDistributeResult",
        "type": "object"
      },
      "BatchOut": {
        "properties": {
          "admin_lock_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Admin Lock Reason"
          },
          "admin_locked": {
            "default": false,
            "title": "Admin Locked",
            "type": "boolean"
          },
          "admin_locked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Admin Locked At"
          },
          "admin_locked_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Admin Locked By"
          },
          "annotator": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "annotator_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotator Id"
          },
          "approved_tasks": {
            "default": 0,
            "title": "Approved Tasks",
            "type": "integer"
          },
          "assigned_user_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Assigned User Ids",
            "type": "array"
          },
          "completed_tasks": {
            "default": 0,
            "title": "Completed Tasks",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "dataset_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset Id"
          },
          "deadline": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deadline"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "priority": {
            "default": 50,
            "title": "Priority",
            "type": "integer"
          },
          "progress_pct": {
            "default": 0.0,
            "title": "Progress Pct",
            "type": "number"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "rejected_tasks": {
            "default": 0,
            "title": "Rejected Tasks",
            "type": "integer"
          },
          "review_feedback": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Feedback"
          },
          "review_tasks": {
            "default": 0,
            "title": "Review Tasks",
            "type": "integer"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "reviewed_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed By"
          },
          "reviewer": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "total_tasks": {
            "default": 0,
            "title": "Total Tasks",
            "type": "integer"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "project_id",
          "display_id",
          "name",
          "status",
          "created_at"
        ],
        "title": "BatchOut",
        "type": "object"
      },
      "BatchReject": {
        "properties": {
          "feedback": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Feedback",
            "type": "string"
          }
        },
        "required": [
          "feedback"
        ],
        "title": "BatchReject",
        "type": "object"
      },
      "BatchReset": {
        "description": "v0.7.6 · 终极重置到 draft。reason 至少 10 字以避免误操作；写入 audit.detail.reason。",
        "properties": {
          "reason": {
            "maxLength": 500,
            "minLength": 10,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "reason"
        ],
        "title": "BatchReset",
        "type": "object"
      },
      "BatchSplitRequest": {
        "properties": {
          "annotator_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotator Id"
          },
          "deadline": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deadline"
          },
          "item_ids": {
            "anyOf": [
              {
                "items": {
                  "format": "uuid",
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Ids"
          },
          "metadata_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata Key"
          },
          "metadata_value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata Value"
          },
          "n_batches": {
            "anyOf": [
              {
                "maximum": 100.0,
                "minimum": 2.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "N Batches"
          },
          "name_prefix": {
            "default": "Batch",
            "title": "Name Prefix",
            "type": "string"
          },
          "priority": {
            "default": 50,
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Priority",
            "type": "integer"
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          },
          "strategy": {
            "enum": [
              "metadata",
              "id_range",
              "random"
            ],
            "title": "Strategy",
            "type": "string"
          }
        },
        "required": [
          "strategy"
        ],
        "title": "BatchSplitRequest",
        "type": "object"
      },
      "BatchTransition": {
        "properties": {
          "reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "target_status": {
            "title": "Target Status",
            "type": "string"
          }
        },
        "required": [
          "target_status"
        ],
        "title": "BatchTransition",
        "type": "object"
      },
      "BatchUpdate": {
        "properties": {
          "annotator_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotator Id"
          },
          "deadline": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deadline"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "priority": {
            "anyOf": [
              {
                "maximum": 100.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Priority"
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          }
        },
        "title": "BatchUpdate",
        "type": "object"
      },
      "BboxGeometry": {
        "additionalProperties": true,
        "properties": {
          "h": {
            "title": "H",
            "type": "number"
          },
          "type": {
            "const": "bbox",
            "default": "bbox",
            "title": "Type",
            "type": "string"
          },
          "w": {
            "title": "W",
            "type": "number"
          },
          "x": {
            "title": "X",
            "type": "number"
          },
          "y": {
            "title": "Y",
            "type": "number"
          }
        },
        "required": [
          "x",
          "y",
          "w",
          "h"
        ],
        "title": "BboxGeometry",
        "type": "object"
      },
      "Body_import_predictions_api_v1_projects__project_id__predictions_import_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          },
          "overwrite_existing": {
            "default": false,
            "title": "Overwrite Existing",
            "type": "boolean"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_import_predictions_api_v1_projects__project_id__predictions_import_post",
        "type": "object"
      },
      "Body_upload_zip_api_v1_datasets__dataset_id__items_upload_zip_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_zip_api_v1_datasets__dataset_id__items_upload_zip_post",
        "type": "object"
      },
      "BucketSummary": {
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "object_count": {
            "default": 0,
            "title": "Object Count",
            "type": "integer"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "total_size_bytes": {
            "default": 0,
            "title": "Total Size Bytes",
            "type": "integer"
          }
        },
        "required": [
          "name",
          "status",
          "role"
        ],
        "title": "BucketSummary",
        "type": "object"
      },
      "BucketsResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/BucketSummary"
            },
            "title": "Items",
            "type": "array"
          },
          "total_object_count": {
            "title": "Total Object Count",
            "type": "integer"
          },
          "total_size_bytes": {
            "title": "Total Size Bytes",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total_object_count",
          "total_size_bytes"
        ],
        "title": "BucketsResponse",
        "type": "object"
      },
      "BugAttachment": {
        "properties": {
          "fileName": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Filename",
            "type": "string"
          },
          "mimeType": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Mimetype",
            "type": "string"
          },
          "size": {
            "maximum": 10485760.0,
            "minimum": 0.0,
            "title": "Size",
            "type": "integer"
          },
          "storageKey": {
            "maxLength": 512,
            "minLength": 1,
            "title": "Storagekey",
            "type": "string"
          }
        },
        "required": [
          "storageKey",
          "fileName",
          "mimeType",
          "size"
        ],
        "title": "BugAttachment",
        "type": "object"
      },
      "BugCommentCreate": {
        "properties": {
          "body": {
            "maxLength": 10000,
            "minLength": 1,
            "title": "Body",
            "type": "string"
          }
        },
        "required": [
          "body"
        ],
        "title": "BugCommentCreate",
        "type": "object"
      },
      "BugCommentOut": {
        "properties": {
          "author_id": {
            "format": "uuid",
            "title": "Author Id",
            "type": "string"
          },
          "author_name": {
            "default": "",
            "title": "Author Name",
            "type": "string"
          },
          "author_role": {
            "default": "",
            "title": "Author Role",
            "type": "string"
          },
          "body": {
            "title": "Body",
            "type": "string"
          },
          "bug_report_id": {
            "format": "uuid",
            "title": "Bug Report Id",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "bug_report_id",
          "author_id",
          "body",
          "created_at"
        ],
        "title": "BugCommentOut",
        "type": "object"
      },
      "BugReportCreate": {
        "properties": {
          "attachments": {
            "items": {
              "$ref": "#/components/schemas/BugAttachment"
            },
            "maxItems": 5,
            "title": "Attachments",
            "type": "array"
          },
          "browser_ua": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Browser Ua"
          },
          "description": {
            "maxLength": 20000,
            "minLength": 1,
            "title": "Description",
            "type": "string"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "recent_api_calls": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "maxItems": 100,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Api Calls"
          },
          "recent_console_errors": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "maxItems": 100,
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Console Errors"
          },
          "route": {
            "default": "",
            "title": "Route",
            "type": "string"
          },
          "screenshot_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Screenshot Url"
          },
          "severity": {
            "default": "medium",
            "pattern": "^(low|medium|high|critical)$",
            "title": "Severity",
            "type": "string"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          },
          "viewport": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Viewport"
          }
        },
        "required": [
          "title",
          "description"
        ],
        "title": "BugReportCreate",
        "type": "object"
      },
      "BugReportDetail": {
        "properties": {
          "assigned_to_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned To Id"
          },
          "attachments": {
            "items": {
              "$ref": "#/components/schemas/BugAttachment"
            },
            "title": "Attachments",
            "type": "array"
          },
          "browser_ua": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Browser Ua"
          },
          "comments": {
            "items": {
              "$ref": "#/components/schemas/BugCommentOut"
            },
            "title": "Comments",
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "duplicate_of_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duplicate Of Id"
          },
          "fixed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed At"
          },
          "fixed_in_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed In Version"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "last_reopened_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Reopened At"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "recent_api_calls": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Api Calls"
          },
          "recent_console_errors": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Console Errors"
          },
          "reopen_count": {
            "default": 0,
            "title": "Reopen Count",
            "type": "integer"
          },
          "reporter_id": {
            "format": "uuid",
            "title": "Reporter Id",
            "type": "string"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolution"
          },
          "route": {
            "title": "Route",
            "type": "string"
          },
          "screenshot_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Screenshot Url"
          },
          "severity": {
            "title": "Severity",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "triaged_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Triaged At"
          },
          "user_role": {
            "title": "User Role",
            "type": "string"
          },
          "viewport": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Viewport"
          }
        },
        "required": [
          "id",
          "display_id",
          "reporter_id",
          "route",
          "user_role",
          "title",
          "description",
          "severity",
          "status",
          "created_at"
        ],
        "title": "BugReportDetail",
        "type": "object"
      },
      "BugReportList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/BugReportOut"
            },
            "title": "Items",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "title": "BugReportList",
        "type": "object"
      },
      "BugReportOut": {
        "properties": {
          "assigned_to_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned To Id"
          },
          "attachments": {
            "items": {
              "$ref": "#/components/schemas/BugAttachment"
            },
            "title": "Attachments",
            "type": "array"
          },
          "browser_ua": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Browser Ua"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "duplicate_of_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duplicate Of Id"
          },
          "fixed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed At"
          },
          "fixed_in_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed In Version"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "last_reopened_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Reopened At"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "recent_api_calls": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Api Calls"
          },
          "recent_console_errors": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recent Console Errors"
          },
          "reopen_count": {
            "default": 0,
            "title": "Reopen Count",
            "type": "integer"
          },
          "reporter_id": {
            "format": "uuid",
            "title": "Reporter Id",
            "type": "string"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolution"
          },
          "route": {
            "title": "Route",
            "type": "string"
          },
          "screenshot_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Screenshot Url"
          },
          "severity": {
            "title": "Severity",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "triaged_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Triaged At"
          },
          "user_role": {
            "title": "User Role",
            "type": "string"
          },
          "viewport": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Viewport"
          }
        },
        "required": [
          "id",
          "display_id",
          "reporter_id",
          "route",
          "user_role",
          "title",
          "description",
          "severity",
          "status",
          "created_at"
        ],
        "title": "BugReportOut",
        "type": "object"
      },
      "BugReportUpdate": {
        "properties": {
          "assigned_to_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned To Id"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 20000,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "duplicate_of_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duplicate Of Id"
          },
          "fixed_in_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fixed In Version"
          },
          "resolution": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolution"
          },
          "severity": {
            "anyOf": [
              {
                "pattern": "^(low|medium|high|critical)$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Severity"
          },
          "status": {
            "anyOf": [
              {
                "pattern": "^(new|triaged|in_progress|fixed|wont_fix|duplicate)$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "BugReportUpdate",
        "type": "object"
      },
      "BulkBatchActionItem": {
        "properties": {
          "batch_id": {
            "format": "uuid",
            "title": "Batch Id",
            "type": "string"
          },
          "reason": {
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "batch_id",
          "reason"
        ],
        "title": "BulkBatchActionItem",
        "type": "object"
      },
      "BulkBatchActionResponse": {
        "properties": {
          "failed": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BulkBatchActionItem"
            },
            "title": "Failed",
            "type": "array"
          },
          "skipped": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BulkBatchActionItem"
            },
            "title": "Skipped",
            "type": "array"
          },
          "succeeded": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Succeeded",
            "type": "array"
          }
        },
        "title": "BulkBatchActionResponse",
        "type": "object"
      },
      "BulkBatchApprove": {
        "properties": {
          "batch_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Batch Ids",
            "type": "array"
          }
        },
        "required": [
          "batch_ids"
        ],
        "title": "BulkBatchApprove",
        "type": "object"
      },
      "BulkBatchIds": {
        "properties": {
          "batch_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Batch Ids",
            "type": "array"
          }
        },
        "required": [
          "batch_ids"
        ],
        "title": "BulkBatchIds",
        "type": "object"
      },
      "BulkBatchReassign": {
        "properties": {
          "annotator_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotator Id"
          },
          "batch_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Batch Ids",
            "type": "array"
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          }
        },
        "required": [
          "batch_ids"
        ],
        "title": "BulkBatchReassign",
        "type": "object"
      },
      "BulkBatchReject": {
        "properties": {
          "batch_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Batch Ids",
            "type": "array"
          },
          "feedback": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Feedback",
            "type": "string"
          }
        },
        "required": [
          "batch_ids",
          "feedback"
        ],
        "title": "BulkBatchReject",
        "type": "object"
      },
      "BulkClearItem": {
        "properties": {
          "batch_id": {
            "format": "uuid",
            "title": "Batch Id",
            "type": "string"
          },
          "reason": {
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "batch_id",
          "reason"
        ],
        "title": "BulkClearItem",
        "type": "object"
      },
      "BulkClearRequest": {
        "properties": {
          "batch_ids": {
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 1,
            "title": "Batch Ids",
            "type": "array"
          },
          "mode": {
            "default": "predictions_only",
            "enum": [
              "predictions_only",
              "reset_to_draft"
            ],
            "title": "Mode",
            "type": "string"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 10,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "batch_ids",
          "reason"
        ],
        "title": "BulkClearRequest",
        "type": "object"
      },
      "BulkClearResponse": {
        "properties": {
          "failed": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BulkClearItem"
            },
            "title": "Failed",
            "type": "array"
          },
          "skipped": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BulkClearItem"
            },
            "title": "Skipped",
            "type": "array"
          },
          "succeeded": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Succeeded",
            "type": "array"
          }
        },
        "title": "BulkClearResponse",
        "type": "object"
      },
      "CacheStats": {
        "additionalProperties": true,
        "properties": {
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity"
          },
          "hit_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hit Rate"
          },
          "hits": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hits"
          },
          "misses": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Misses"
          },
          "size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size"
          }
        },
        "title": "CacheStats",
        "type": "object"
      },
      "CanvasDrawing": {
        "additionalProperties": false,
        "description": "Reviewer 端 Konva overlay 序列化的批注笔触集合（归一化坐标 [0,1]）。",
        "properties": {
          "shapes": {
            "items": {
              "$ref": "#/components/schemas/CanvasShape"
            },
            "title": "Shapes",
            "type": "array"
          }
        },
        "title": "CanvasDrawing",
        "type": "object"
      },
      "CanvasShape": {
        "additionalProperties": false,
        "properties": {
          "ended_at": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ended At"
          },
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "points": {
            "items": {
              "type": "number"
            },
            "minItems": 2,
            "title": "Points",
            "type": "array"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "stroke": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stroke"
          },
          "type": {
            "enum": [
              "line",
              "arrow",
              "rect",
              "ellipse"
            ],
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "points"
        ],
        "title": "CanvasShape",
        "type": "object"
      },
      "ClassConfigEntry": {
        "additionalProperties": false,
        "properties": {
          "alias": {
            "anyOf": [
              {
                "maxLength": 50,
                "pattern": "^[a-zA-Z0-9 ,_\\-]+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "color": {
            "anyOf": [
              {
                "pattern": "^#[0-9a-fA-F]{6}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "order": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Order"
          }
        },
        "title": "ClassConfigEntry",
        "type": "object"
      },
      "ClassRenameRequest": {
        "properties": {
          "new_name": {
            "title": "New Name",
            "type": "string"
          },
          "old_name": {
            "title": "Old Name",
            "type": "string"
          },
          "tool_unit_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Unit Id"
          }
        },
        "required": [
          "old_name",
          "new_name"
        ],
        "title": "ClassRenameRequest",
        "type": "object"
      },
      "CommentAnchor": {
        "additionalProperties": false,
        "description": "评论锚点。v0.9.35 起用于视频 review 的帧级定位。",
        "properties": {
          "frameIndex": {
            "minimum": 0.0,
            "title": "Frameindex",
            "type": "integer"
          },
          "kind": {
            "const": "video_frame",
            "title": "Kind",
            "type": "string"
          },
          "source": {
            "anyOf": [
              {
                "enum": [
                  "manual",
                  "prediction",
                  "interpolated",
                  "legacy"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "trackId": {
            "anyOf": [
              {
                "maxLength": 120,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trackid"
          }
        },
        "required": [
          "kind",
          "frameIndex"
        ],
        "title": "CommentAnchor",
        "type": "object"
      },
      "CommentAttachmentUploadInitRequest": {
        "properties": {
          "content_type": {
            "default": "application/octet-stream",
            "maxLength": 128,
            "minLength": 1,
            "title": "Content Type",
            "type": "string"
          },
          "file_name": {
            "maxLength": 255,
            "minLength": 1,
            "title": "File Name",
            "type": "string"
          }
        },
        "required": [
          "file_name"
        ],
        "title": "CommentAttachmentUploadInitRequest",
        "type": "object"
      },
      "CommentAttachmentUploadInitResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "storage_key": {
            "title": "Storage Key",
            "type": "string"
          },
          "upload_url": {
            "title": "Upload Url",
            "type": "string"
          }
        },
        "required": [
          "storage_key",
          "upload_url",
          "expires_in"
        ],
        "title": "CommentAttachmentUploadInitResponse",
        "type": "object"
      },
      "DatasetCreate": {
        "properties": {
          "data_type": {
            "default": "image",
            "title": "Data Type",
            "type": "string"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "DatasetCreate",
        "type": "object"
      },
      "DatasetItemListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DatasetItemOut"
            },
            "title": "Items",
            "type": "array"
          },
          "limit": {
            "title": "Limit",
            "type": "integer"
          },
          "offset": {
            "title": "Offset",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "limit",
          "offset"
        ],
        "title": "DatasetItemListResponse",
        "type": "object"
      },
      "DatasetItemOut": {
        "properties": {
          "blurhash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blurhash"
          },
          "content_hash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content Hash"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "dataset_id": {
            "format": "uuid",
            "title": "Dataset Id",
            "type": "string"
          },
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "file_path": {
            "title": "File Path",
            "type": "string"
          },
          "file_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Size"
          },
          "file_type": {
            "title": "File Type",
            "type": "string"
          },
          "file_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Url"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "default": {},
            "title": "Metadata",
            "type": "object"
          },
          "thumbnail_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail Url"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "required": [
          "id",
          "dataset_id",
          "file_name",
          "file_path",
          "file_type",
          "created_at"
        ],
        "title": "DatasetItemOut",
        "type": "object"
      },
      "DatasetLinkRequest": {
        "properties": {
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "title": "DatasetLinkRequest",
        "type": "object"
      },
      "DatasetListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DatasetOut"
            },
            "title": "Items",
            "type": "array"
          },
          "limit": {
            "title": "Limit",
            "type": "integer"
          },
          "offset": {
            "title": "Offset",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "limit",
          "offset"
        ],
        "title": "DatasetListResponse",
        "type": "object"
      },
      "DatasetOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "title": "Created By",
            "type": "string"
          },
          "data_type": {
            "title": "Data Type",
            "type": "string"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "file_count": {
            "title": "File Count",
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_count": {
            "default": 0,
            "title": "Project Count",
            "type": "integer"
          },
          "total_size": {
            "default": 0,
            "title": "Total Size",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "display_id",
          "name",
          "description",
          "data_type",
          "file_count",
          "created_by",
          "created_at",
          "updated_at"
        ],
        "title": "DatasetOut",
        "type": "object"
      },
      "DatasetUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "DatasetUpdate",
        "type": "object"
      },
      "DatasetUploadInitRequest": {
        "properties": {
          "content_type": {
            "default": "image/jpeg",
            "title": "Content Type",
            "type": "string"
          },
          "file_name": {
            "title": "File Name",
            "type": "string"
          }
        },
        "required": [
          "file_name"
        ],
        "title": "DatasetUploadInitRequest",
        "type": "object"
      },
      "DatasetUploadInitResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "item_id": {
            "format": "uuid",
            "title": "Item Id",
            "type": "string"
          },
          "upload_url": {
            "title": "Upload Url",
            "type": "string"
          }
        },
        "required": [
          "item_id",
          "upload_url",
          "expires_in"
        ],
        "title": "DatasetUploadInitResponse",
        "type": "object"
      },
      "DeactivationRequest": {
        "description": "v0.8.1 · 自助注销申请：可附原因（≤500 字符）。",
        "properties": {
          "reason": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "title": "DeactivationRequest",
        "type": "object"
      },
      "DeleteUserPayload": {
        "description": "可选转交目标 —— 当 target 仍持有未完成任务时必填。",
        "properties": {
          "transfer_to_user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transfer To User Id"
          }
        },
        "title": "DeleteUserPayload",
        "type": "object"
      },
      "DismissResponse": {
        "properties": {
          "dismissed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dismissed At"
          },
          "failed_id": {
            "format": "uuid",
            "title": "Failed Id",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status",
          "failed_id"
        ],
        "title": "DismissResponse",
        "type": "object"
      },
      "FailedPredictionItem": {
        "properties": {
          "backend_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Backend Name"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "dismissed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dismissed At"
          },
          "error_type": {
            "title": "Error Type",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "last_retry_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Retry At"
          },
          "message": {
            "title": "Message",
            "type": "string"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Name"
          },
          "retry_count": {
            "title": "Retry Count",
            "type": "integer"
          },
          "task_display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Display Id"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "required": [
          "id",
          "task_id",
          "project_id",
          "ml_backend_id",
          "model_version",
          "error_type",
          "message",
          "retry_count",
          "last_retry_at",
          "created_at"
        ],
        "title": "FailedPredictionItem",
        "type": "object"
      },
      "FailedPredictionList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/FailedPredictionItem"
            },
            "title": "Items",
            "type": "array"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "FailedPredictionList",
        "type": "object"
      },
      "FeedbackAnchorPosition": {
        "description": "pixel anchor 携带的坐标 (相对 0-1 与 geometry 同语义); frame 视频时可选.",
        "properties": {
          "frame": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame"
          },
          "x": {
            "title": "X",
            "type": "number"
          },
          "y": {
            "title": "Y",
            "type": "number"
          }
        },
        "required": [
          "x",
          "y"
        ],
        "title": "FeedbackAnchorPosition",
        "type": "object"
      },
      "ForgotPasswordRequest": {
        "properties": {
          "captcha_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Captcha Token"
          },
          "email": {
            "maxLength": 255,
            "minLength": 3,
            "title": "Email",
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "title": "ForgotPasswordRequest",
        "type": "object"
      },
      "GlobalBackendItem": {
        "description": "v0.9.7 · CreateProjectWizard step 4 dropdown 用的 backend 概要项.",
        "properties": {
          "auth_method": {
            "title": "Auth Method",
            "type": "string"
          },
          "health_meta": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Health Meta"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "is_interactive": {
            "title": "Is Interactive",
            "type": "boolean"
          },
          "last_checked_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Checked At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "source_project_id": {
            "title": "Source Project Id",
            "type": "string"
          },
          "source_project_name": {
            "title": "Source Project Name",
            "type": "string"
          },
          "state": {
            "title": "State",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "url",
          "state",
          "is_interactive",
          "auth_method",
          "source_project_id",
          "source_project_name"
        ],
        "title": "GlobalBackendItem",
        "type": "object"
      },
      "GlobalBackendListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/GlobalBackendItem"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "title": "GlobalBackendListResponse",
        "type": "object"
      },
      "GpuInfo": {
        "properties": {
          "device_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device Name"
          },
          "gpu_power_watts": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gpu Power Watts"
          },
          "gpu_temperature_celsius": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gpu Temperature Celsius"
          },
          "gpu_utilization_percent": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gpu Utilization Percent"
          },
          "memory_free_mb": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Memory Free Mb"
          },
          "memory_total_mb": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Memory Total Mb"
          },
          "memory_used_mb": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Memory Used Mb"
          }
        },
        "title": "GpuInfo",
        "type": "object"
      },
      "GroupAssignPayload": {
        "properties": {
          "group_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          }
        },
        "title": "GroupAssignPayload",
        "type": "object"
      },
      "GroupCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "GroupCreate",
        "type": "object"
      },
      "GroupOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "member_count": {
            "default": 0,
            "title": "Member Count",
            "type": "integer"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "created_at"
        ],
        "title": "GroupOut",
        "type": "object"
      },
      "GroupUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "GroupUpdate",
        "type": "object"
      },
      "GuideAssetEntry": {
        "properties": {
          "content_type": {
            "title": "Content Type",
            "type": "string"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "original_name": {
            "title": "Original Name",
            "type": "string"
          },
          "size": {
            "title": "Size",
            "type": "integer"
          },
          "uploaded_at": {
            "format": "date-time",
            "title": "Uploaded At",
            "type": "string"
          }
        },
        "required": [
          "key",
          "original_name",
          "content_type",
          "size",
          "uploaded_at"
        ],
        "title": "GuideAssetEntry",
        "type": "object"
      },
      "GuideAssetSignedUrlResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url",
          "expires_in"
        ],
        "title": "GuideAssetSignedUrlResponse",
        "type": "object"
      },
      "GuideAssetUploadInitRequest": {
        "properties": {
          "content_type": {
            "title": "Content Type",
            "type": "string"
          },
          "filename": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Filename",
            "type": "string"
          },
          "size": {
            "maximum": 5242880.0,
            "minimum": 1.0,
            "title": "Size",
            "type": "integer"
          }
        },
        "required": [
          "filename",
          "content_type",
          "size"
        ],
        "title": "GuideAssetUploadInitRequest",
        "type": "object"
      },
      "GuideAssetUploadInitResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "upload_url": {
            "title": "Upload Url",
            "type": "string"
          }
        },
        "required": [
          "key",
          "upload_url",
          "expires_in"
        ],
        "title": "GuideAssetUploadInitResponse",
        "type": "object"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "title": "Detail",
            "type": "array"
          }
        },
        "title": "HTTPValidationError",
        "type": "object"
      },
      "HealthMeta": {
        "additionalProperties": true,
        "description": "v0.9.11 · backend `/health` 深度指标缓存. 由 services/ml_backend.check_health 写入,\n`/admin/ml-integrations/overview` + PerfHud WS 消费.",
        "properties": {
          "cache": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CacheStats"
              },
              {
                "type": "null"
              }
            ]
          },
          "gpu_info": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GpuInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "host": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HostInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          }
        },
        "title": "HealthMeta",
        "type": "object"
      },
      "HistoryEntry": {
        "description": "一条历史事件 — audit 或 comment 统一外形。\n\nkind ∈ { audit, comment }；audit 含 action + detail；comment 含 body + comment_id。\n所有事件按 timestamp 升序合并。",
        "properties": {
          "action": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Action"
          },
          "actor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "body": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Body"
          },
          "comment_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment Id"
          },
          "detail": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          },
          "kind": {
            "title": "Kind",
            "type": "string"
          },
          "timestamp": {
            "format": "date-time",
            "title": "Timestamp",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "timestamp"
        ],
        "title": "HistoryEntry",
        "type": "object"
      },
      "HostInfo": {
        "properties": {
          "container_cpu_percent": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Cpu Percent"
          },
          "container_memory_percent": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Memory Percent"
          }
        },
        "title": "HostInfo",
        "type": "object"
      },
      "InteractiveRequest": {
        "description": "工作台「AI 助手」单次推理请求。`context` 透传至 backend，平台不做 schema 校验。\n\n`context.type` 协商枚举（详见 `docs-site/dev/ml-backend-protocol.md` §2.2）：\n- ``point``：``{\"type\":\"point\",\"points\":[[x,y],...],\"labels\":[1,0,...]}``\n- ``bbox``：``{\"type\":\"bbox\",\"bbox\":[x1,y1,x2,y2]}``\n- ``polygon``：``{\"type\":\"polygon\",\"points\":[[x,y],...]}``\n- ``text``：``{\"type\":\"text\",\"text\":\"ripe apples\"}``（v0.9.x Grounded-SAM-2）\n- ``exemplar``：留给 v0.10.x SAM 3。",
        "properties": {
          "context": {
            "additionalProperties": true,
            "description": "开放 dict；type 字段见 schema docstring 与协议文档 §2.2。",
            "title": "Context",
            "type": "object"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "task_id"
        ],
        "title": "InteractiveRequest",
        "type": "object"
      },
      "InvitationCreate": {
        "properties": {
          "email": {
            "title": "Email",
            "type": "string"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "role": {
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "email",
          "role"
        ],
        "title": "InvitationCreate",
        "type": "object"
      },
      "InvitationCreated": {
        "properties": {
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "invite_url": {
            "title": "Invite Url",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "invite_url",
          "token",
          "expires_at"
        ],
        "title": "InvitationCreated",
        "type": "object"
      },
      "InvitationOut": {
        "properties": {
          "accepted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "invited_by": {
            "format": "uuid",
            "title": "Invited By",
            "type": "string"
          },
          "invited_by_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By Name"
          },
          "revoked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "email",
          "role",
          "group_name",
          "status",
          "expires_at",
          "invited_by",
          "created_at"
        ],
        "title": "InvitationOut",
        "type": "object"
      },
      "InvitationResendResponse": {
        "properties": {
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "invite_url": {
            "title": "Invite Url",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "invite_url",
          "token",
          "expires_at"
        ],
        "title": "InvitationResendResponse",
        "type": "object"
      },
      "InvitationResolve": {
        "properties": {
          "email": {
            "title": "Email",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "invited_by_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invited By Name"
          },
          "role": {
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "email",
          "role",
          "group_name",
          "expires_at"
        ],
        "title": "InvitationResolve",
        "type": "object"
      },
      "LoginRequest": {
        "properties": {
          "captcha_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Captcha Token"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "password": {
            "title": "Password",
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest",
        "type": "object"
      },
      "MLBackendCreate": {
        "properties": {
          "auth_method": {
            "default": "none",
            "title": "Auth Method",
            "type": "string"
          },
          "auth_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Token"
          },
          "extra_params": {
            "additionalProperties": true,
            "default": {},
            "title": "Extra Params",
            "type": "object"
          },
          "is_interactive": {
            "default": false,
            "title": "Is Interactive",
            "type": "boolean"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "name",
          "url"
        ],
        "title": "MLBackendCreate",
        "type": "object"
      },
      "MLBackendHealthResponse": {
        "properties": {
          "backend_id": {
            "format": "uuid",
            "title": "Backend Id",
            "type": "string"
          },
          "backend_name": {
            "title": "Backend Name",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status",
          "backend_id",
          "backend_name"
        ],
        "title": "MLBackendHealthResponse",
        "type": "object"
      },
      "MLBackendOut": {
        "properties": {
          "auth_method": {
            "title": "Auth Method",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "extra_params": {
            "additionalProperties": true,
            "title": "Extra Params",
            "type": "object"
          },
          "health_meta": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/HealthMeta"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "is_interactive": {
            "title": "Is Interactive",
            "type": "boolean"
          },
          "last_checked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Checked At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "state": {
            "title": "State",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "project_id",
          "name",
          "url",
          "state",
          "is_interactive",
          "auth_method",
          "extra_params",
          "error_message",
          "created_at",
          "updated_at"
        ],
        "title": "MLBackendOut",
        "type": "object"
      },
      "MLBackendUpdate": {
        "properties": {
          "auth_method": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Method"
          },
          "auth_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Token"
          },
          "extra_params": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Extra Params"
          },
          "is_interactive": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Interactive"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "title": "MLBackendUpdate",
        "type": "object"
      },
      "MLIntegrationsOverview": {
        "properties": {
          "connected_backends": {
            "title": "Connected Backends",
            "type": "integer"
          },
          "projects": {
            "items": {
              "$ref": "#/components/schemas/ProjectMLBackendsGroup"
            },
            "title": "Projects",
            "type": "array"
          },
          "storage": {
            "$ref": "#/components/schemas/StorageOverview"
          },
          "total_backends": {
            "title": "Total Backends",
            "type": "integer"
          }
        },
        "required": [
          "storage",
          "projects",
          "total_backends",
          "connected_backends"
        ],
        "title": "MLIntegrationsOverview",
        "type": "object"
      },
      "Mention": {
        "properties": {
          "displayName": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Displayname",
            "type": "string"
          },
          "length": {
            "minimum": 1.0,
            "title": "Length",
            "type": "integer"
          },
          "offset": {
            "minimum": 0.0,
            "title": "Offset",
            "type": "integer"
          },
          "userId": {
            "format": "uuid",
            "title": "Userid",
            "type": "string"
          }
        },
        "required": [
          "userId",
          "displayName",
          "offset",
          "length"
        ],
        "title": "Mention",
        "type": "object"
      },
      "MultiPolygonGeometry": {
        "additionalProperties": false,
        "description": "多连通域 polygon 集合。每个 polygons[i] 内部仍是带 hole 的单连通 PolygonGeometry。\n\nv0.9.14 · 配合 mask_to_multi_polygon (apps/_shared/mask_utils) 输出。Predictor 在\n单连通无 hole 时仍输出 PolygonGeometry 兼容老前端; 多连通或带 hole 才走本分支。",
        "properties": {
          "polygons": {
            "items": {
              "$ref": "#/components/schemas/PolygonGeometry"
            },
            "minItems": 1,
            "title": "Polygons",
            "type": "array"
          },
          "type": {
            "const": "multi_polygon",
            "default": "multi_polygon",
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "polygons"
        ],
        "title": "MultiPolygonGeometry",
        "type": "object"
      },
      "MyBatchItem": {
        "description": "v0.7.1 B-17 · 标注员视角的批次卡片：自己被分派的、状态为\nactive / annotating / rejected / reviewing 的批次。",
        "properties": {
          "approved_tasks": {
            "title": "Approved Tasks",
            "type": "integer"
          },
          "batch_display_id": {
            "title": "Batch Display Id",
            "type": "string"
          },
          "batch_id": {
            "title": "Batch Id",
            "type": "string"
          },
          "batch_name": {
            "title": "Batch Name",
            "type": "string"
          },
          "completed_tasks": {
            "title": "Completed Tasks",
            "type": "integer"
          },
          "in_progress_tasks": {
            "default": 0,
            "title": "In Progress Tasks",
            "type": "integer"
          },
          "progress_pct": {
            "title": "Progress Pct",
            "type": "number"
          },
          "project_id": {
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "rejected_tasks": {
            "title": "Rejected Tasks",
            "type": "integer"
          },
          "review_feedback": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Feedback"
          },
          "review_tasks": {
            "title": "Review Tasks",
            "type": "integer"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "reviewer": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          }
        },
        "required": [
          "batch_id",
          "batch_display_id",
          "batch_name",
          "project_id",
          "project_name",
          "status",
          "total_tasks",
          "completed_tasks",
          "review_tasks",
          "approved_tasks",
          "rejected_tasks",
          "progress_pct"
        ],
        "title": "MyBatchItem",
        "type": "object"
      },
      "NotificationList": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/NotificationOut"
            },
            "title": "Items",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          },
          "unread": {
            "title": "Unread",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "unread"
        ],
        "title": "NotificationList",
        "type": "object"
      },
      "NotificationOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "payload": {
            "additionalProperties": true,
            "default": {},
            "title": "Payload",
            "type": "object"
          },
          "read_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Read At"
          },
          "target_id": {
            "format": "uuid",
            "title": "Target Id",
            "type": "string"
          },
          "target_type": {
            "title": "Target Type",
            "type": "string"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "target_type",
          "target_id",
          "created_at"
        ],
        "title": "NotificationOut",
        "type": "object"
      },
      "NotificationPreferenceItem": {
        "properties": {
          "email": {
            "default": false,
            "title": "Email",
            "type": "boolean"
          },
          "in_app": {
            "default": true,
            "title": "In App",
            "type": "boolean"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "title": "NotificationPreferenceItem",
        "type": "object"
      },
      "NotificationPreferenceUpdate": {
        "properties": {
          "in_app": {
            "title": "In App",
            "type": "boolean"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "in_app"
        ],
        "title": "NotificationPreferenceUpdate",
        "type": "object"
      },
      "NotificationPreferencesOut": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/NotificationPreferenceItem"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "title": "NotificationPreferencesOut",
        "type": "object"
      },
      "OpenRegisterRequest": {
        "properties": {
          "captcha_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Captcha Token"
          },
          "email": {
            "maxLength": 255,
            "minLength": 3,
            "title": "Email",
            "type": "string"
          },
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "password": {
            "maxLength": 128,
            "minLength": 8,
            "title": "Password",
            "type": "string"
          }
        },
        "required": [
          "email",
          "name",
          "password"
        ],
        "title": "OpenRegisterRequest",
        "type": "object"
      },
      "PasswordChange": {
        "properties": {
          "new_password": {
            "maxLength": 128,
            "minLength": 8,
            "title": "New Password",
            "type": "string"
          },
          "old_password": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Old Password",
            "type": "string"
          }
        },
        "required": [
          "old_password",
          "new_password"
        ],
        "title": "PasswordChange",
        "type": "object"
      },
      "PolygonGeometry": {
        "additionalProperties": false,
        "description": "单连通域 polygon。\n\nv0.9.14 · holes 字段新增, 默认 [] 向后兼容。老存量 / 老前端写入仍走 type=polygon\n+ 仅 points 路径; 新 prediction 在有 hole 时把 hole 顶点列表填进 holes, 多连通域\n走 MultiPolygonGeometry 分支。",
        "properties": {
          "holes": {
            "items": {
              "items": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "type": "array"
            },
            "title": "Holes",
            "type": "array"
          },
          "points": {
            "items": {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            "minItems": 3,
            "title": "Points",
            "type": "array"
          },
          "type": {
            "const": "polygon",
            "default": "polygon",
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "points"
        ],
        "title": "PolygonGeometry",
        "type": "object"
      },
      "PreannotateProjectSummary": {
        "properties": {
          "active_batches": {
            "default": 0,
            "title": "Active Batches",
            "type": "integer"
          },
          "last_job_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Job At"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "ml_backend_max_concurrency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Max Concurrency"
          },
          "ml_backend_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Name"
          },
          "ml_backend_state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend State"
          },
          "project_display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Display Id"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "ready_batches": {
            "default": 0,
            "title": "Ready Batches",
            "type": "integer"
          },
          "recent_failures": {
            "default": 0,
            "title": "Recent Failures",
            "type": "integer"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "project_name",
          "type_key"
        ],
        "title": "PreannotateProjectSummary",
        "type": "object"
      },
      "PreannotateProjectSummaryResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PreannotateProjectSummary"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "title": "PreannotateProjectSummaryResponse",
        "type": "object"
      },
      "PreannotateQueueItem": {
        "properties": {
          "batch_id": {
            "format": "uuid",
            "title": "Batch Id",
            "type": "string"
          },
          "batch_name": {
            "title": "Batch Name",
            "type": "string"
          },
          "batch_status": {
            "title": "Batch Status",
            "type": "string"
          },
          "can_retry": {
            "title": "Can Retry",
            "type": "boolean"
          },
          "failed_count": {
            "title": "Failed Count",
            "type": "integer"
          },
          "last_run_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run At"
          },
          "prediction_count": {
            "title": "Prediction Count",
            "type": "integer"
          },
          "project_display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Display Id"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          }
        },
        "required": [
          "batch_id",
          "batch_name",
          "batch_status",
          "project_id",
          "project_name",
          "total_tasks",
          "prediction_count",
          "failed_count",
          "can_retry"
        ],
        "title": "PreannotateQueueItem",
        "type": "object"
      },
      "PreannotateQueueResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PreannotateQueueItem"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "title": "PreannotateQueueResponse",
        "type": "object"
      },
      "PreannotateRequest": {
        "properties": {
          "batch_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Id"
          },
          "ml_backend_id": {
            "format": "uuid",
            "title": "Ml Backend Id",
            "type": "string"
          },
          "output_mode": {
            "default": "mask",
            "enum": [
              "box",
              "mask",
              "both"
            ],
            "title": "Output Mode",
            "type": "string"
          },
          "prompt": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Prompt"
          },
          "task_ids": {
            "anyOf": [
              {
                "items": {
                  "format": "uuid",
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Ids"
          }
        },
        "required": [
          "ml_backend_id"
        ],
        "title": "PreannotateRequest",
        "type": "object"
      },
      "PredictionCostStats": {
        "description": "AdminDashboard 预测成本卡片数据结构。",
        "properties": {
          "avg_inference_time_ms": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Inference Time Ms"
          },
          "by_backend": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BackendCostBreakdown"
            },
            "title": "By Backend",
            "type": "array"
          },
          "failed_predictions": {
            "default": 0,
            "title": "Failed Predictions",
            "type": "integer"
          },
          "failure_rate": {
            "default": 0.0,
            "title": "Failure Rate",
            "type": "number"
          },
          "p50_inference_time_ms": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "P50 Inference Time Ms"
          },
          "p95_inference_time_ms": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "P95 Inference Time Ms"
          },
          "p99_inference_time_ms": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "P99 Inference Time Ms"
          },
          "range": {
            "enum": [
              "7d",
              "30d"
            ],
            "title": "Range",
            "type": "string"
          },
          "total_cost": {
            "default": 0.0,
            "title": "Total Cost",
            "type": "number"
          },
          "total_predictions": {
            "default": 0,
            "title": "Total Predictions",
            "type": "integer"
          },
          "total_tokens": {
            "default": 0,
            "title": "Total Tokens",
            "type": "integer"
          }
        },
        "required": [
          "range"
        ],
        "title": "PredictionCostStats",
        "type": "object"
      },
      "PredictionJobOut": {
        "properties": {
          "batch_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Id"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Ms"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "failed_count": {
            "title": "Failed Count",
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "output_mode": {
            "title": "Output Mode",
            "type": "string"
          },
          "project_display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Display Id"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Name"
          },
          "prompt": {
            "title": "Prompt",
            "type": "string"
          },
          "started_at": {
            "format": "date-time",
            "title": "Started At",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "success_count": {
            "title": "Success Count",
            "type": "integer"
          },
          "total_cost": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Cost"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "project_id",
          "prompt",
          "output_mode",
          "status",
          "total_tasks",
          "success_count",
          "failed_count",
          "started_at"
        ],
        "title": "PredictionJobOut",
        "type": "object"
      },
      "PredictionJobsResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PredictionJobOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "PredictionJobsResponse",
        "type": "object"
      },
      "PredictionOut": {
        "properties": {
          "cluster": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cluster"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "inference_time_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inference Time Ms"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "result": {
            "items": {
              "$ref": "#/components/schemas/PredictionShape"
            },
            "title": "Result",
            "type": "array"
          },
          "score": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "tool_unit_id": {
            "default": "bbox",
            "enum": [
              "bbox",
              "polyline",
              "region",
              "ai_interactive",
              "lidar_box_3d"
            ],
            "title": "Tool Unit Id",
            "type": "string"
          },
          "total_cost": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Cost"
          }
        },
        "required": [
          "id",
          "task_id",
          "project_id",
          "result",
          "created_at"
        ],
        "title": "PredictionOut",
        "type": "object"
      },
      "PredictionShape": {
        "properties": {
          "class_name": {
            "title": "Class Name",
            "type": "string"
          },
          "confidence": {
            "title": "Confidence",
            "type": "number"
          },
          "geometry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BboxGeometry"
              },
              {
                "$ref": "#/components/schemas/PolygonGeometry"
              },
              {
                "$ref": "#/components/schemas/MultiPolygonGeometry"
              },
              {
                "additionalProperties": true,
                "type": "object"
              }
            ],
            "title": "Geometry"
          },
          "shape_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shape Index"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "class_name",
          "geometry",
          "confidence"
        ],
        "title": "PredictionShape",
        "type": "object"
      },
      "ProbeRequest": {
        "properties": {
          "auth_method": {
            "default": "none",
            "enum": [
              "none",
              "token"
            ],
            "title": "Auth Method",
            "type": "string"
          },
          "auth_token": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Token"
          },
          "url": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "title": "ProbeRequest",
        "type": "object"
      },
      "ProbeResponse": {
        "description": "v0.9.6 · 无 DB 副作用的 health check.\n前端注册 modal 在保存前可调本端点验证连通性, 避免「先存再 health 失败 / DB 留无效行」摩擦.",
        "properties": {
          "cache": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cache"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "gpu_info": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gpu Info"
          },
          "latency_ms": {
            "title": "Latency Ms",
            "type": "integer"
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          },
          "ok": {
            "title": "Ok",
            "type": "boolean"
          },
          "status_code": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Code"
          }
        },
        "required": [
          "ok",
          "latency_ms"
        ],
        "title": "ProbeResponse",
        "type": "object"
      },
      "ProfileUpdate": {
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "ProfileUpdate",
        "type": "object"
      },
      "ProjectBatchSummary": {
        "properties": {
          "assigned": {
            "default": 0,
            "title": "Assigned",
            "type": "integer"
          },
          "in_review": {
            "default": 0,
            "title": "In Review",
            "type": "integer"
          },
          "total": {
            "default": 0,
            "title": "Total",
            "type": "integer"
          }
        },
        "title": "ProjectBatchSummary",
        "type": "object"
      },
      "ProjectCreate": {
        "properties": {
          "ai_enabled": {
            "default": false,
            "title": "Ai Enabled",
            "type": "boolean"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "attribute_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttributeSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "box_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Box Threshold"
          },
          "classes": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Classes",
            "type": "array"
          },
          "classes_config": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ClassConfigEntry"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes Config"
          },
          "copy_annotation_guide": {
            "default": false,
            "title": "Copy Annotation Guide",
            "type": "boolean"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "ml_backend_source_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Source Id"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "source_project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Project Id"
          },
          "template_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Template Id"
          },
          "text_output_default": {
            "anyOf": [
              {
                "enum": [
                  "box",
                  "mask",
                  "both"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Threshold"
          },
          "tool_bindings": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolBinding"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Bindings"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          },
          "type_label": {
            "title": "Type Label",
            "type": "string"
          }
        },
        "required": [
          "name",
          "type_label",
          "type_key"
        ],
        "title": "ProjectCreate",
        "type": "object"
      },
      "ProjectDistributeBatches": {
        "description": "v0.7.2 · 项目级 batch 分派：在所选 annotator / reviewer 间圆周分派 batch。\n每个 batch 落到 1 个 annotator + 1 个 reviewer。",
        "properties": {
          "annotator_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Annotator Ids",
            "type": "array"
          },
          "only_unassigned": {
            "default": true,
            "title": "Only Unassigned",
            "type": "boolean"
          },
          "reviewer_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Reviewer Ids",
            "type": "array"
          }
        },
        "title": "ProjectDistributeBatches",
        "type": "object"
      },
      "ProjectMLBackendsGroup": {
        "properties": {
          "backends": {
            "items": {
              "$ref": "#/components/schemas/MLBackendOut"
            },
            "title": "Backends",
            "type": "array"
          },
          "project_id": {
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "project_name",
          "backends"
        ],
        "title": "ProjectMLBackendsGroup",
        "type": "object"
      },
      "ProjectMemberCreate": {
        "properties": {
          "role": {
            "enum": [
              "annotator",
              "reviewer"
            ],
            "title": "Role",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "role"
        ],
        "title": "ProjectMemberCreate",
        "type": "object"
      },
      "ProjectMemberOut": {
        "properties": {
          "assigned_at": {
            "format": "date-time",
            "title": "Assigned At",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "user_email": {
            "title": "User Email",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "title": "User Id",
            "type": "string"
          },
          "user_name": {
            "title": "User Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "user_id",
          "user_name",
          "user_email",
          "role",
          "assigned_at"
        ],
        "title": "ProjectMemberOut",
        "type": "object"
      },
      "ProjectOut": {
        "properties": {
          "ai_completed_tasks": {
            "default": 0,
            "title": "Ai Completed Tasks",
            "type": "integer"
          },
          "ai_enabled": {
            "title": "Ai Enabled",
            "type": "boolean"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "annotation_guide": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Guide"
          },
          "attribute_schema": {
            "$ref": "#/components/schemas/AttributeSchema",
            "default": {
              "fields": []
            }
          },
          "batch_summary": {
            "$ref": "#/components/schemas/ProjectBatchSummary",
            "default": {
              "assigned": 0,
              "in_review": 0,
              "total": 0
            }
          },
          "box_threshold": {
            "default": 0.35,
            "title": "Box Threshold",
            "type": "number"
          },
          "classes": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Classes",
            "type": "array"
          },
          "classes_config": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ClassConfigEntry"
            },
            "default": {},
            "title": "Classes Config",
            "type": "object"
          },
          "completed_tasks": {
            "title": "Completed Tasks",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "guide_assets": {
            "default": [],
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Guide Assets",
            "type": "array"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "in_progress_tasks": {
            "default": 0,
            "title": "In Progress Tasks",
            "type": "integer"
          },
          "iou_dedup_threshold": {
            "default": 0.7,
            "title": "Iou Dedup Threshold",
            "type": "number"
          },
          "label_config": {
            "additionalProperties": true,
            "default": {},
            "title": "Label Config",
            "type": "object"
          },
          "maximum_annotations": {
            "default": 1,
            "title": "Maximum Annotations",
            "type": "integer"
          },
          "member_count": {
            "default": 0,
            "title": "Member Count",
            "type": "integer"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "ml_backend_limit": {
            "default": 1,
            "title": "Ml Backend Limit",
            "type": "integer"
          },
          "model_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model Version"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "organization_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Id"
          },
          "owner_id": {
            "format": "uuid",
            "title": "Owner Id",
            "type": "string"
          },
          "owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Name"
          },
          "rendering_config": {
            "$ref": "#/components/schemas/ProjectRenderingConfig",
            "default": {}
          },
          "review_tasks": {
            "title": "Review Tasks",
            "type": "integer"
          },
          "sampling": {
            "default": "sequence",
            "title": "Sampling",
            "type": "string"
          },
          "show_overlap_first": {
            "default": false,
            "title": "Show Overlap First",
            "type": "boolean"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "task_lock_ttl_seconds": {
            "default": 300,
            "title": "Task Lock Ttl Seconds",
            "type": "integer"
          },
          "text_output_default": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "default": 0.25,
            "title": "Text Threshold",
            "type": "number"
          },
          "tool_bindings": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolBinding"
            },
            "default": {},
            "title": "Tool Bindings",
            "type": "object"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          },
          "type_label": {
            "title": "Type Label",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "display_id",
          "name",
          "type_label",
          "type_key",
          "owner_id",
          "status",
          "ai_enabled",
          "ai_model",
          "total_tasks",
          "completed_tasks",
          "review_tasks",
          "due_date",
          "created_at",
          "updated_at"
        ],
        "title": "ProjectOut",
        "type": "object"
      },
      "ProjectRenderingConfig": {
        "additionalProperties": false,
        "properties": {
          "controlPointsSize": {
            "anyOf": [
              {
                "maximum": 20.0,
                "minimum": 2.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Controlpointssize"
          },
          "cssImageFilter": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cssimagefilter"
          },
          "smoothImage": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smoothimage"
          },
          "snapToGrid": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snaptogrid"
          }
        },
        "title": "ProjectRenderingConfig",
        "type": "object"
      },
      "ProjectStats": {
        "properties": {
          "ai_derived_annotations": {
            "default": 0,
            "title": "Ai Derived Annotations",
            "type": "integer"
          },
          "ai_rate": {
            "title": "Ai Rate",
            "type": "number"
          },
          "completed": {
            "title": "Completed",
            "type": "integer"
          },
          "pending_review": {
            "title": "Pending Review",
            "type": "integer"
          },
          "total_annotations": {
            "default": 0,
            "title": "Total Annotations",
            "type": "integer"
          },
          "total_data": {
            "title": "Total Data",
            "type": "integer"
          }
        },
        "required": [
          "total_data",
          "completed",
          "ai_rate",
          "pending_review"
        ],
        "title": "ProjectStats",
        "type": "object"
      },
      "ProjectTemplateCreate": {
        "description": "新建模板.\n\n给定 ``source_project_id`` 时, service 层会自动从源项目 dump\n_CLONEABLE_PROJECT_FIELDS 进模板 (caller 传入的同字段值优先);\n``annotation_guide`` 始终走 caller 传入或源项目兜底.",
        "properties": {
          "ai_enabled": {
            "default": false,
            "title": "Ai Enabled",
            "type": "boolean"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "annotation_guide": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Guide"
          },
          "attribute_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttributeSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "box_threshold": {
            "default": 0.35,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Box Threshold",
            "type": "number"
          },
          "classes": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Classes",
            "type": "array"
          },
          "classes_config": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ClassConfigEntry"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes Config"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "iou_dedup_threshold": {
            "default": 0.7,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Iou Dedup Threshold",
            "type": "number"
          },
          "label_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label Config"
          },
          "maximum_annotations": {
            "default": 1,
            "title": "Maximum Annotations",
            "type": "integer"
          },
          "name": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "organization_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Id"
          },
          "rendering_config": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRenderingConfig"
              },
              {
                "type": "null"
              }
            ]
          },
          "sampling": {
            "default": "sequence",
            "title": "Sampling",
            "type": "string"
          },
          "scope": {
            "default": "private",
            "enum": [
              "private",
              "organization",
              "public"
            ],
            "title": "Scope",
            "type": "string"
          },
          "show_overlap_first": {
            "default": false,
            "title": "Show Overlap First",
            "type": "boolean"
          },
          "source_project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Project Id"
          },
          "text_output_default": {
            "anyOf": [
              {
                "enum": [
                  "box",
                  "mask",
                  "both"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "default": 0.25,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Text Threshold",
            "type": "number"
          },
          "tool_bindings": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolBinding"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Bindings"
          },
          "type_key": {
            "maxLength": 30,
            "minLength": 1,
            "title": "Type Key",
            "type": "string"
          },
          "type_label": {
            "maxLength": 50,
            "minLength": 1,
            "title": "Type Label",
            "type": "string"
          }
        },
        "required": [
          "name",
          "type_label",
          "type_key"
        ],
        "title": "ProjectTemplateCreate",
        "type": "object"
      },
      "ProjectTemplateOut": {
        "properties": {
          "ai_enabled": {
            "default": false,
            "title": "Ai Enabled",
            "type": "boolean"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "annotation_guide": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Guide"
          },
          "attribute_schema": {
            "$ref": "#/components/schemas/AttributeSchema",
            "default": {
              "fields": []
            }
          },
          "box_threshold": {
            "default": 0.35,
            "title": "Box Threshold",
            "type": "number"
          },
          "classes": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Classes",
            "type": "array"
          },
          "classes_config": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ClassConfigEntry"
            },
            "default": {},
            "title": "Classes Config",
            "type": "object"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "format": "uuid",
            "title": "Created By",
            "type": "string"
          },
          "created_by_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "iou_dedup_threshold": {
            "default": 0.7,
            "title": "Iou Dedup Threshold",
            "type": "number"
          },
          "label_config": {
            "additionalProperties": true,
            "default": {},
            "title": "Label Config",
            "type": "object"
          },
          "maximum_annotations": {
            "default": 1,
            "title": "Maximum Annotations",
            "type": "integer"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "organization_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Id"
          },
          "rendering_config": {
            "$ref": "#/components/schemas/ProjectRenderingConfig",
            "default": {}
          },
          "sampling": {
            "default": "sequence",
            "title": "Sampling",
            "type": "string"
          },
          "scope": {
            "default": "private",
            "enum": [
              "private",
              "organization",
              "public"
            ],
            "title": "Scope",
            "type": "string"
          },
          "show_overlap_first": {
            "default": false,
            "title": "Show Overlap First",
            "type": "boolean"
          },
          "source_project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Project Id"
          },
          "text_output_default": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "default": 0.25,
            "title": "Text Threshold",
            "type": "number"
          },
          "tool_bindings": {
            "additionalProperties": {
              "$ref": "#/components/schemas/ToolBinding"
            },
            "default": {},
            "title": "Tool Bindings",
            "type": "object"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          },
          "type_label": {
            "title": "Type Label",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "usage_count": {
            "default": 0,
            "title": "Usage Count",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "display_id",
          "name",
          "type_label",
          "type_key",
          "created_by",
          "created_at",
          "updated_at"
        ],
        "title": "ProjectTemplateOut",
        "type": "object"
      },
      "ProjectTemplateUpdate": {
        "properties": {
          "ai_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Enabled"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "annotation_guide": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Guide"
          },
          "attribute_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttributeSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "box_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Box Threshold"
          },
          "classes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes"
          },
          "classes_config": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ClassConfigEntry"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes Config"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "iou_dedup_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Iou Dedup Threshold"
          },
          "label_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label Config"
          },
          "maximum_annotations": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Maximum Annotations"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "organization_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Id"
          },
          "rendering_config": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRenderingConfig"
              },
              {
                "type": "null"
              }
            ]
          },
          "sampling": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sampling"
          },
          "scope": {
            "anyOf": [
              {
                "enum": [
                  "private",
                  "organization",
                  "public"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope"
          },
          "show_overlap_first": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Show Overlap First"
          },
          "text_output_default": {
            "anyOf": [
              {
                "enum": [
                  "box",
                  "mask",
                  "both"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Threshold"
          },
          "tool_bindings": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolBinding"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Bindings"
          },
          "type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Key"
          },
          "type_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Label"
          }
        },
        "title": "ProjectTemplateUpdate",
        "type": "object"
      },
      "ProjectTransferRequest": {
        "properties": {
          "new_owner_id": {
            "format": "uuid",
            "title": "New Owner Id",
            "type": "string"
          }
        },
        "required": [
          "new_owner_id"
        ],
        "title": "ProjectTransferRequest",
        "type": "object"
      },
      "ProjectUpdate": {
        "properties": {
          "ai_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Enabled"
          },
          "ai_model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ai Model"
          },
          "annotation_guide": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Annotation Guide"
          },
          "attribute_schema": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttributeSchema"
              },
              {
                "type": "null"
              }
            ]
          },
          "box_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Box Threshold"
          },
          "classes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes"
          },
          "classes_config": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ClassConfigEntry"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Classes Config"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "guide_assets": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Guide Assets"
          },
          "iou_dedup_threshold": {
            "anyOf": [
              {
                "maximum": 0.95,
                "minimum": 0.3,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Iou Dedup Threshold"
          },
          "maximum_annotations": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Maximum Annotations"
          },
          "ml_backend_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "rendering_config": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectRenderingConfig"
              },
              {
                "type": "null"
              }
            ]
          },
          "sampling": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sampling"
          },
          "show_overlap_first": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Show Overlap First"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "text_output_default": {
            "anyOf": [
              {
                "enum": [
                  "box",
                  "mask",
                  "both"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Output Default"
          },
          "text_threshold": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Text Threshold"
          },
          "tool_bindings": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolBinding"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Bindings"
          },
          "type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Key"
          },
          "type_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type Label"
          }
        },
        "title": "ProjectUpdate",
        "type": "object"
      },
      "RecentReviewItem": {
        "properties": {
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "project_id": {
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "task_display_id": {
            "title": "Task Display Id",
            "type": "string"
          },
          "task_id": {
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "task_display_id",
          "file_name",
          "project_id",
          "project_name",
          "status",
          "reviewed_at"
        ],
        "title": "RecentReviewItem",
        "type": "object"
      },
      "RegisterRequest": {
        "properties": {
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "password": {
            "maxLength": 128,
            "minLength": 8,
            "title": "Password",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token",
          "name",
          "password"
        ],
        "title": "RegisterRequest",
        "type": "object"
      },
      "RegisterResponse": {
        "properties": {
          "access_token": {
            "title": "Access Token",
            "type": "string"
          },
          "token_type": {
            "default": "bearer",
            "title": "Token Type",
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/UserOut"
          }
        },
        "required": [
          "access_token",
          "user"
        ],
        "title": "RegisterResponse",
        "type": "object"
      },
      "RegistrationDayPoint": {
        "description": "v0.8.1 · 注册来源按日聚合：邀请 vs 开放注册。",
        "properties": {
          "date": {
            "title": "Date",
            "type": "string"
          },
          "invite_count": {
            "title": "Invite Count",
            "type": "integer"
          },
          "open_count": {
            "title": "Open Count",
            "type": "integer"
          }
        },
        "required": [
          "date",
          "invite_count",
          "open_count"
        ],
        "title": "RegistrationDayPoint",
        "type": "object"
      },
      "ResetPasswordRequest": {
        "properties": {
          "new_password": {
            "maxLength": 128,
            "minLength": 8,
            "title": "New Password",
            "type": "string"
          },
          "token": {
            "minLength": 1,
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token",
          "new_password"
        ],
        "title": "ResetPasswordRequest",
        "type": "object"
      },
      "RetryResponse": {
        "properties": {
          "failed_id": {
            "format": "uuid",
            "title": "Failed Id",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status",
          "failed_id"
        ],
        "title": "RetryResponse",
        "type": "object"
      },
      "ReviewAction": {
        "description": "v0.10.16 · reviewer 驳回 payload。`reason_type` 自 v0.10.16 起必填，\n`reason` 仍为可空自由文本补充。",
        "properties": {
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "reason_type": {
            "anyOf": [
              {
                "enum": [
                  "missing",
                  "extra",
                  "wrong_label",
                  "wrong_geometry"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason Type"
          }
        },
        "title": "ReviewAction",
        "type": "object"
      },
      "ReviewClaimResponse": {
        "properties": {
          "is_self": {
            "title": "Is Self",
            "type": "boolean"
          },
          "reviewer_claimed_at": {
            "format": "date-time",
            "title": "Reviewer Claimed At",
            "type": "string"
          },
          "reviewer_id": {
            "format": "uuid",
            "title": "Reviewer Id",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "reviewer_id",
          "reviewer_claimed_at",
          "is_self"
        ],
        "title": "ReviewClaimResponse",
        "type": "object"
      },
      "ReviewTaskItem": {
        "properties": {
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "project_id": {
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "task_display_id": {
            "title": "Task Display Id",
            "type": "string"
          },
          "task_id": {
            "title": "Task Id",
            "type": "string"
          },
          "total_annotations": {
            "title": "Total Annotations",
            "type": "integer"
          },
          "total_predictions": {
            "title": "Total Predictions",
            "type": "integer"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "task_id",
          "task_display_id",
          "file_name",
          "project_id",
          "project_name",
          "total_annotations",
          "total_predictions",
          "updated_at"
        ],
        "title": "ReviewTaskItem",
        "type": "object"
      },
      "ReviewerDashboardStats": {
        "properties": {
          "approval_rate": {
            "title": "Approval Rate",
            "type": "number"
          },
          "approval_rate_24h": {
            "title": "Approval Rate 24H",
            "type": "number"
          },
          "daily_review_counts": {
            "default": [],
            "items": {
              "type": "integer"
            },
            "title": "Daily Review Counts",
            "type": "array"
          },
          "median_review_duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Median Review Duration Ms"
          },
          "pending_review_count": {
            "title": "Pending Review Count",
            "type": "integer"
          },
          "pending_tasks": {
            "items": {
              "$ref": "#/components/schemas/ReviewTaskItem"
            },
            "title": "Pending Tasks",
            "type": "array"
          },
          "reopen_after_approve_rate": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reopen After Approve Rate"
          },
          "reviewing_batches": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ReviewingBatchItem"
            },
            "title": "Reviewing Batches",
            "type": "array"
          },
          "today_reviewed": {
            "title": "Today Reviewed",
            "type": "integer"
          },
          "total_reviewed": {
            "title": "Total Reviewed",
            "type": "integer"
          },
          "weekly_compare_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weekly Compare Pct"
          }
        },
        "required": [
          "pending_review_count",
          "today_reviewed",
          "approval_rate",
          "approval_rate_24h",
          "total_reviewed",
          "pending_tasks"
        ],
        "title": "ReviewerDashboardStats",
        "type": "object"
      },
      "ReviewerMiniStats": {
        "description": "v0.8.7 F5.3 · ReviewWorkbench 右侧栏 mini 仪表（当日通过/退回/平均耗时）。",
        "properties": {
          "approved_today": {
            "default": 0,
            "title": "Approved Today",
            "type": "integer"
          },
          "avg_review_seconds": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Review Seconds"
          },
          "rejected_today": {
            "default": 0,
            "title": "Rejected Today",
            "type": "integer"
          }
        },
        "title": "ReviewerMiniStats",
        "type": "object"
      },
      "ReviewingBatchItem": {
        "properties": {
          "annotator": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "batch_display_id": {
            "title": "Batch Display Id",
            "type": "string"
          },
          "batch_id": {
            "title": "Batch Id",
            "type": "string"
          },
          "batch_name": {
            "title": "Batch Name",
            "type": "string"
          },
          "completed_tasks": {
            "title": "Completed Tasks",
            "type": "integer"
          },
          "project_id": {
            "title": "Project Id",
            "type": "string"
          },
          "project_name": {
            "title": "Project Name",
            "type": "string"
          },
          "review_tasks": {
            "title": "Review Tasks",
            "type": "integer"
          },
          "total_tasks": {
            "title": "Total Tasks",
            "type": "integer"
          }
        },
        "required": [
          "batch_id",
          "batch_display_id",
          "batch_name",
          "project_id",
          "project_name",
          "total_tasks",
          "review_tasks",
          "completed_tasks"
        ],
        "title": "ReviewingBatchItem",
        "type": "object"
      },
      "RoleChangePayload": {
        "properties": {
          "role": {
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "role"
        ],
        "title": "RoleChangePayload",
        "type": "object"
      },
      "RuntimeHints": {
        "description": "v0.9.6 · 前端 modal 启动时一次性查; 提供注册 form 的 placeholder hint.",
        "properties": {
          "ml_backend_default_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ml Backend Default Url"
          }
        },
        "title": "RuntimeHints",
        "type": "object"
      },
      "ScreenshotInitRequest": {
        "properties": {
          "content_type": {
            "default": "image/png",
            "maxLength": 100,
            "minLength": 1,
            "title": "Content Type",
            "type": "string"
          },
          "file_name": {
            "default": "screenshot.png",
            "maxLength": 200,
            "minLength": 1,
            "title": "File Name",
            "type": "string"
          }
        },
        "title": "ScreenshotInitRequest",
        "type": "object"
      },
      "ScreenshotInitResponse": {
        "properties": {
          "expires_in": {
            "default": 900,
            "title": "Expires In",
            "type": "integer"
          },
          "storage_key": {
            "title": "Storage Key",
            "type": "string"
          },
          "upload_url": {
            "title": "Upload Url",
            "type": "string"
          }
        },
        "required": [
          "storage_key",
          "upload_url"
        ],
        "title": "ScreenshotInitResponse",
        "type": "object"
      },
      "SkipTaskRequest": {
        "properties": {
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "reason": {
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "reason"
        ],
        "title": "SkipTaskRequest",
        "type": "object"
      },
      "SmtpStatus": {
        "properties": {
          "configured": {
            "title": "Configured",
            "type": "boolean"
          },
          "from_address": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "From Address"
          },
          "host": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Host"
          },
          "password_set": {
            "default": false,
            "title": "Password Set",
            "type": "boolean"
          },
          "port": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Port"
          },
          "user": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User"
          }
        },
        "required": [
          "host",
          "port",
          "user",
          "from_address",
          "configured"
        ],
        "title": "SmtpStatus",
        "type": "object"
      },
      "StorageOverview": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/BucketSummary"
            },
            "title": "Items",
            "type": "array"
          },
          "total_object_count": {
            "title": "Total Object Count",
            "type": "integer"
          },
          "total_size_bytes": {
            "title": "Total Size Bytes",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total_object_count",
          "total_size_bytes"
        ],
        "title": "StorageOverview",
        "type": "object"
      },
      "SystemSettingsOut": {
        "properties": {
          "allow_open_registration": {
            "title": "Allow Open Registration",
            "type": "boolean"
          },
          "environment": {
            "title": "Environment",
            "type": "string"
          },
          "frontend_base_url": {
            "title": "Frontend Base Url",
            "type": "string"
          },
          "invitation_ttl_days": {
            "title": "Invitation Ttl Days",
            "type": "integer"
          },
          "smtp": {
            "$ref": "#/components/schemas/SmtpStatus"
          }
        },
        "required": [
          "environment",
          "invitation_ttl_days",
          "frontend_base_url",
          "smtp",
          "allow_open_registration"
        ],
        "title": "SystemSettingsOut",
        "type": "object"
      },
      "SystemSettingsUpdate": {
        "description": "v0.8.1 · admin UI PATCH 入参，全部 Optional：未提供字段不变更。\nsmtp_password 传空串视为清除；未提供则不动现有值。",
        "properties": {
          "allow_open_registration": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allow Open Registration"
          },
          "frontend_base_url": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frontend Base Url"
          },
          "invitation_ttl_days": {
            "anyOf": [
              {
                "maximum": 90.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invitation Ttl Days"
          },
          "smtp_from": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smtp From"
          },
          "smtp_host": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smtp Host"
          },
          "smtp_password": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smtp Password"
          },
          "smtp_port": {
            "anyOf": [
              {
                "maximum": 65535.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smtp Port"
          },
          "smtp_user": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smtp User"
          }
        },
        "title": "SystemSettingsUpdate",
        "type": "object"
      },
      "TaskEventBatchIn": {
        "properties": {
          "events": {
            "items": {
              "$ref": "#/components/schemas/TaskEventIn"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Events",
            "type": "array"
          }
        },
        "required": [
          "events"
        ],
        "title": "TaskEventBatchIn",
        "type": "object"
      },
      "TaskEventBatchOut": {
        "properties": {
          "accepted": {
            "title": "Accepted",
            "type": "integer"
          },
          "queued_async": {
            "title": "Queued Async",
            "type": "boolean"
          }
        },
        "required": [
          "accepted",
          "queued_async"
        ],
        "title": "TaskEventBatchOut",
        "type": "object"
      },
      "TaskEventIn": {
        "description": "单条事件 payload。client_id 可选；若未传，后端用 uuid4 生成。",
        "properties": {
          "annotation_count": {
            "default": 0,
            "minimum": 0.0,
            "title": "Annotation Count",
            "type": "integer"
          },
          "client_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id"
          },
          "duration_ms": {
            "maximum": 14400000.0,
            "minimum": 0.0,
            "title": "Duration Ms",
            "type": "integer"
          },
          "ended_at": {
            "format": "date-time",
            "title": "Ended At",
            "type": "string"
          },
          "kind": {
            "enum": [
              "annotate",
              "review"
            ],
            "title": "Kind",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "started_at": {
            "format": "date-time",
            "title": "Started At",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "was_rejected": {
            "default": false,
            "title": "Was Rejected",
            "type": "boolean"
          }
        },
        "required": [
          "task_id",
          "project_id",
          "kind",
          "started_at",
          "ended_at",
          "duration_ms"
        ],
        "title": "TaskEventIn",
        "type": "object"
      },
      "TaskFileUrlResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url",
          "expires_in"
        ],
        "title": "TaskFileUrlResponse",
        "type": "object"
      },
      "TaskListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/TaskOut"
            },
            "title": "Items",
            "type": "array"
          },
          "limit": {
            "title": "Limit",
            "type": "integer"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          },
          "offset": {
            "title": "Offset",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "limit",
          "offset"
        ],
        "title": "TaskListResponse",
        "type": "object"
      },
      "TaskLockResponse": {
        "properties": {
          "expire_at": {
            "format": "date-time",
            "title": "Expire At",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "unique_id": {
            "format": "uuid",
            "title": "Unique Id",
            "type": "string"
          },
          "user_id": {
            "format": "uuid",
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "user_id",
          "expire_at",
          "unique_id"
        ],
        "title": "TaskLockResponse",
        "type": "object"
      },
      "TaskOut": {
        "properties": {
          "assignee": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "assignee_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "batch_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Id"
          },
          "blurhash": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blurhash"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "display_id": {
            "title": "Display Id",
            "type": "string"
          },
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "file_type": {
            "title": "File Type",
            "type": "string"
          },
          "file_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Url"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "image_height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Height"
          },
          "image_width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Width"
          },
          "is_labeled": {
            "default": false,
            "title": "Is Labeled",
            "type": "boolean"
          },
          "last_reopened_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Reopened At"
          },
          "overlap": {
            "default": 1,
            "title": "Overlap",
            "type": "integer"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          },
          "reject_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reject Reason"
          },
          "reject_reason_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reject Reason Type"
          },
          "reopened_count": {
            "default": 0,
            "title": "Reopened Count",
            "type": "integer"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "reviewer": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserBrief"
              },
              {
                "type": "null"
              }
            ]
          },
          "reviewer_claimed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Claimed At"
          },
          "reviewer_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Id"
          },
          "sequence_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sequence Order"
          },
          "skip_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Skip Reason"
          },
          "skipped_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Skipped At"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "submitted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Submitted At"
          },
          "tags": {
            "default": [],
            "items": {},
            "title": "Tags",
            "type": "array"
          },
          "thumbnail_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail Url"
          },
          "total_annotations": {
            "default": 0,
            "title": "Total Annotations",
            "type": "integer"
          },
          "total_predictions": {
            "default": 0,
            "title": "Total Predictions",
            "type": "integer"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "video_metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VideoMetadata"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "project_id",
          "display_id",
          "file_name",
          "file_type",
          "status",
          "created_at"
        ],
        "title": "TaskOut",
        "type": "object"
      },
      "TaskVideoFrameTimetableResponse": {
        "properties": {
          "fps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps"
          },
          "frame_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Count"
          },
          "frames": {
            "items": {
              "$ref": "#/components/schemas/VideoFrameTimetableEntry"
            },
            "title": "Frames",
            "type": "array"
          },
          "source": {
            "enum": [
              "ffprobe",
              "estimated"
            ],
            "title": "Source",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "source",
          "frames"
        ],
        "title": "TaskVideoFrameTimetableResponse",
        "type": "object"
      },
      "TaskVideoManifestResponse": {
        "properties": {
          "dataset_item_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dataset Item Id"
          },
          "expires_in": {
            "default": 3600,
            "title": "Expires In",
            "type": "integer"
          },
          "metadata": {
            "$ref": "#/components/schemas/VideoMetadata"
          },
          "poster_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poster Url"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "video_url": {
            "title": "Video Url",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "video_url",
          "metadata"
        ],
        "title": "TaskVideoManifestResponse",
        "type": "object"
      },
      "Token": {
        "properties": {
          "access_token": {
            "title": "Access Token",
            "type": "string"
          },
          "token_type": {
            "default": "bearer",
            "title": "Token Type",
            "type": "string"
          }
        },
        "required": [
          "access_token"
        ],
        "title": "Token",
        "type": "object"
      },
      "ToolBinding": {
        "additionalProperties": false,
        "description": "单一工具单位下的 enable 状态 + 类别集合 + 属性 schema.",
        "properties": {
          "attribute_schema": {
            "$ref": "#/components/schemas/AttributeSchema"
          },
          "classes": {
            "items": {
              "$ref": "#/components/schemas/ToolClassEntry"
            },
            "title": "Classes",
            "type": "array"
          },
          "enabled": {
            "default": false,
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "title": "ToolBinding",
        "type": "object"
      },
      "ToolClassEntry": {
        "additionalProperties": false,
        "description": "工具单位下的一条类别. name 必填且工具内唯一; color / alias 语义同 ClassConfigEntry.",
        "properties": {
          "alias": {
            "anyOf": [
              {
                "maxLength": 50,
                "pattern": "^[a-zA-Z0-9 ,_\\-]+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "color": {
            "anyOf": [
              {
                "pattern": "^#[0-9a-fA-F]{6}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "order": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Order"
          }
        },
        "required": [
          "name"
        ],
        "title": "ToolClassEntry",
        "type": "object"
      },
      "UnreadCount": {
        "properties": {
          "unread": {
            "title": "Unread",
            "type": "integer"
          }
        },
        "required": [
          "unread"
        ],
        "title": "UnreadCount",
        "type": "object"
      },
      "UploadInitRequest": {
        "properties": {
          "content_type": {
            "default": "image/jpeg",
            "title": "Content Type",
            "type": "string"
          },
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "project_id": {
            "format": "uuid",
            "title": "Project Id",
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "file_name"
        ],
        "title": "UploadInitRequest",
        "type": "object"
      },
      "UploadInitResponse": {
        "properties": {
          "expires_in": {
            "title": "Expires In",
            "type": "integer"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "upload_url": {
            "title": "Upload Url",
            "type": "string"
          }
        },
        "required": [
          "task_id",
          "upload_url",
          "expires_in"
        ],
        "title": "UploadInitResponse",
        "type": "object"
      },
      "UserBrief": {
        "description": "v0.7.2 · 责任人可视化用：列表 / 卡片侧 inline 渲染头像 + 名字 + 角色。",
        "properties": {
          "avatar_initial": {
            "title": "Avatar Initial",
            "type": "string"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role"
          }
        },
        "required": [
          "id",
          "name",
          "email",
          "avatar_initial"
        ],
        "title": "UserBrief",
        "type": "object"
      },
      "UserOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "deactivation_requested_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deactivation Requested At"
          },
          "deactivation_scheduled_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Deactivation Scheduled At"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "default": true,
            "title": "Is Active",
            "type": "boolean"
          },
          "last_login_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Login At"
          },
          "last_seen_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Seen At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "password_admin_reset_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Password Admin Reset At"
          },
          "preferences": {
            "additionalProperties": true,
            "title": "Preferences",
            "type": "object"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "email",
          "name",
          "role",
          "group_name",
          "status",
          "created_at"
        ],
        "title": "UserOut",
        "type": "object"
      },
      "UserPreferences": {
        "additionalProperties": false,
        "description": "User.preferences JSONB root. 仅声明已知子树；未来按 epic 追加。",
        "properties": {
          "workbench": {
            "$ref": "#/components/schemas/WorkbenchPreferences"
          }
        },
        "title": "UserPreferences",
        "type": "object"
      },
      "UsersStats": {
        "properties": {
          "online": {
            "title": "Online",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          },
          "weekly_active": {
            "title": "Weekly Active",
            "type": "integer"
          }
        },
        "required": [
          "total",
          "online",
          "weekly_active"
        ],
        "title": "UsersStats",
        "type": "object"
      },
      "ValidationError": {
        "properties": {
          "ctx": {
            "title": "Context",
            "type": "object"
          },
          "input": {
            "title": "Input"
          },
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Location",
            "type": "array"
          },
          "msg": {
            "title": "Message",
            "type": "string"
          },
          "type": {
            "title": "Error Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "type": "object"
      },
      "VideoAssetFailureItem": {
        "properties": {
          "asset_key": {
            "title": "Asset Key",
            "type": "string"
          },
          "asset_type": {
            "enum": [
              "probe",
              "poster",
              "frame_timetable",
              "chunk",
              "frame"
            ],
            "title": "Asset Type",
            "type": "string"
          },
          "chunk_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chunk Id"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "error": {
            "title": "Error",
            "type": "string"
          },
          "file_name": {
            "title": "File Name",
            "type": "string"
          },
          "format": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Format"
          },
          "frame_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Index"
          },
          "project_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Id"
          },
          "project_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project Name"
          },
          "task_display_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Display Id"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "required": [
          "asset_key",
          "asset_type",
          "dataset_item_id",
          "file_name",
          "error"
        ],
        "title": "VideoAssetFailureItem",
        "type": "object"
      },
      "VideoAssetFailuresResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/VideoAssetFailureItem"
            },
            "title": "Items",
            "type": "array"
          },
          "limit": {
            "title": "Limit",
            "type": "integer"
          },
          "offset": {
            "title": "Offset",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "limit",
          "offset"
        ],
        "title": "VideoAssetFailuresResponse",
        "type": "object"
      },
      "VideoAssetRetryRequest": {
        "properties": {
          "asset_type": {
            "enum": [
              "probe",
              "poster",
              "frame_timetable",
              "chunk",
              "frame"
            ],
            "title": "Asset Type",
            "type": "string"
          },
          "chunk_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Chunk Id"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "format": {
            "anyOf": [
              {
                "enum": [
                  "webp",
                  "jpeg"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Format"
          },
          "frame_index": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Index"
          },
          "width": {
            "anyOf": [
              {
                "maximum": 4096.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "required": [
          "asset_type",
          "dataset_item_id"
        ],
        "title": "VideoAssetRetryRequest",
        "type": "object"
      },
      "VideoAssetRetryResponse": {
        "properties": {
          "asset_type": {
            "enum": [
              "probe",
              "poster",
              "frame_timetable",
              "chunk",
              "frame"
            ],
            "title": "Asset Type",
            "type": "string"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "status": {
            "const": "queued",
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status",
          "asset_type",
          "dataset_item_id"
        ],
        "title": "VideoAssetRetryResponse",
        "type": "object"
      },
      "VideoBboxGeometry": {
        "additionalProperties": false,
        "description": "v0.9.16 · 视频单帧 bbox。\n\n首版视频工作台只保存逐帧框，不表达 track/keyframe/interpolation。`frame_index`\n是唯一时间轴定位字段，展示层可自行换算 timecode。",
        "properties": {
          "frame_index": {
            "minimum": 0.0,
            "title": "Frame Index",
            "type": "integer"
          },
          "h": {
            "title": "H",
            "type": "number"
          },
          "type": {
            "const": "video_bbox",
            "default": "video_bbox",
            "title": "Type",
            "type": "string"
          },
          "w": {
            "title": "W",
            "type": "number"
          },
          "x": {
            "title": "X",
            "type": "number"
          },
          "y": {
            "title": "Y",
            "type": "number"
          }
        },
        "required": [
          "frame_index",
          "x",
          "y",
          "w",
          "h"
        ],
        "title": "VideoBboxGeometry",
        "type": "object"
      },
      "VideoChapterCreate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "maxLength": 40,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "end_frame": {
            "minimum": 0.0,
            "title": "End Frame",
            "type": "integer"
          },
          "metadata": {
            "additionalProperties": true,
            "title": "Metadata",
            "type": "object"
          },
          "start_frame": {
            "minimum": 0.0,
            "title": "Start Frame",
            "type": "integer"
          },
          "title": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "start_frame",
          "end_frame",
          "title"
        ],
        "title": "VideoChapterCreate",
        "type": "object"
      },
      "VideoChapterList": {
        "properties": {
          "chapters": {
            "items": {
              "$ref": "#/components/schemas/VideoChapterOut"
            },
            "title": "Chapters",
            "type": "array"
          }
        },
        "title": "VideoChapterList",
        "type": "object"
      },
      "VideoChapterOut": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "end_frame": {
            "title": "End Frame",
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "title": "Metadata",
            "type": "object"
          },
          "start_frame": {
            "title": "Start Frame",
            "type": "integer"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "dataset_item_id",
          "start_frame",
          "end_frame",
          "title",
          "created_at"
        ],
        "title": "VideoChapterOut",
        "type": "object"
      },
      "VideoChapterUpdate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "maxLength": 40,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "end_frame": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Frame"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          },
          "start_frame": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Frame"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 200,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "VideoChapterUpdate",
        "type": "object"
      },
      "VideoChunkDiagnostics": {
        "properties": {
          "end_byte_offset": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Byte Offset"
          },
          "fallback_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fallback Reason"
          },
          "keyframe_aligned": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Keyframe Aligned"
          },
          "output_codec": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Codec"
          },
          "smart_copy_eligible": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Smart Copy Eligible"
          },
          "source_codec": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Codec"
          },
          "start_byte_offset": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Byte Offset"
          }
        },
        "title": "VideoChunkDiagnostics",
        "type": "object"
      },
      "VideoChunkOut": {
        "properties": {
          "byte_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Byte Size"
          },
          "chunk_id": {
            "title": "Chunk Id",
            "type": "integer"
          },
          "diagnostics": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VideoChunkDiagnostics"
              },
              {
                "type": "null"
              }
            ]
          },
          "end_frame": {
            "title": "End Frame",
            "type": "integer"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "generation_mode": {
            "anyOf": [
              {
                "enum": [
                  "smart_copy",
                  "transcode"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generation Mode"
          },
          "retry_after": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry After"
          },
          "start_frame": {
            "title": "Start Frame",
            "type": "integer"
          },
          "status": {
            "enum": [
              "pending",
              "ready",
              "failed"
            ],
            "title": "Status",
            "type": "string"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "required": [
          "chunk_id",
          "start_frame",
          "end_frame",
          "status"
        ],
        "title": "VideoChunkOut",
        "type": "object"
      },
      "VideoChunksResponse": {
        "properties": {
          "chunk_size_frames": {
            "title": "Chunk Size Frames",
            "type": "integer"
          },
          "chunks": {
            "items": {
              "$ref": "#/components/schemas/VideoChunkOut"
            },
            "title": "Chunks",
            "type": "array"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "fallback_video_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fallback Video Url"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "required": [
          "dataset_item_id",
          "chunk_size_frames",
          "chunks"
        ],
        "title": "VideoChunksResponse",
        "type": "object"
      },
      "VideoFrameOut": {
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "format": {
            "enum": [
              "webp",
              "jpeg"
            ],
            "title": "Format",
            "type": "string"
          },
          "frame_index": {
            "title": "Frame Index",
            "type": "integer"
          },
          "retry_after": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Retry After"
          },
          "status": {
            "enum": [
              "pending",
              "ready",
              "failed"
            ],
            "title": "Status",
            "type": "string"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "width": {
            "title": "Width",
            "type": "integer"
          }
        },
        "required": [
          "frame_index",
          "width",
          "format",
          "status"
        ],
        "title": "VideoFrameOut",
        "type": "object"
      },
      "VideoFramePrefetchRequest": {
        "properties": {
          "format": {
            "default": "webp",
            "enum": [
              "webp",
              "jpeg"
            ],
            "title": "Format",
            "type": "string"
          },
          "frame_indices": {
            "items": {
              "type": "integer"
            },
            "maxItems": 500,
            "minItems": 1,
            "title": "Frame Indices",
            "type": "array"
          },
          "width": {
            "default": 512,
            "maximum": 4096.0,
            "minimum": 1.0,
            "title": "Width",
            "type": "integer"
          }
        },
        "title": "VideoFramePrefetchRequest",
        "type": "object"
      },
      "VideoFramePrefetchResponse": {
        "properties": {
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "frames": {
            "items": {
              "$ref": "#/components/schemas/VideoFrameOut"
            },
            "title": "Frames",
            "type": "array"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "required": [
          "dataset_item_id",
          "frames"
        ],
        "title": "VideoFramePrefetchResponse",
        "type": "object"
      },
      "VideoFrameRetryRequest": {
        "properties": {
          "force": {
            "default": false,
            "title": "Force",
            "type": "boolean"
          },
          "format": {
            "default": "webp",
            "enum": [
              "webp",
              "jpeg"
            ],
            "title": "Format",
            "type": "string"
          },
          "frame_indices": {
            "items": {
              "type": "integer"
            },
            "maxItems": 500,
            "title": "Frame Indices",
            "type": "array"
          },
          "width": {
            "default": 512,
            "maximum": 4096.0,
            "minimum": 1.0,
            "title": "Width",
            "type": "integer"
          }
        },
        "title": "VideoFrameRetryRequest",
        "type": "object"
      },
      "VideoFrameTimetableEntry": {
        "properties": {
          "byte_offset": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Byte Offset"
          },
          "frame_index": {
            "title": "Frame Index",
            "type": "integer"
          },
          "is_keyframe": {
            "title": "Is Keyframe",
            "type": "boolean"
          },
          "pict_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pict Type"
          },
          "pts_ms": {
            "title": "Pts Ms",
            "type": "integer"
          }
        },
        "required": [
          "frame_index",
          "pts_ms",
          "is_keyframe"
        ],
        "title": "VideoFrameTimetableEntry",
        "type": "object"
      },
      "VideoManifestV2Response": {
        "properties": {
          "chunk_size_frames": {
            "title": "Chunk Size Frames",
            "type": "integer"
          },
          "chunks_manifest_url": {
            "title": "Chunks Manifest Url",
            "type": "string"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Ms"
          },
          "expires_in": {
            "default": 3600,
            "title": "Expires In",
            "type": "integer"
          },
          "fps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps"
          },
          "frame_cache_formats": {
            "default": [
              "webp",
              "jpeg"
            ],
            "items": {
              "enum": [
                "webp",
                "jpeg"
              ],
              "type": "string"
            },
            "title": "Frame Cache Formats",
            "type": "array"
          },
          "frame_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Count"
          },
          "frame_service_base": {
            "title": "Frame Service Base",
            "type": "string"
          },
          "frame_timetable_url": {
            "title": "Frame Timetable Url",
            "type": "string"
          },
          "poster_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poster Url"
          },
          "segments": {
            "items": {
              "$ref": "#/components/schemas/VideoSegmentOut"
            },
            "title": "Segments",
            "type": "array"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          },
          "video_url": {
            "title": "Video Url",
            "type": "string"
          }
        },
        "required": [
          "dataset_item_id",
          "video_url",
          "chunks_manifest_url",
          "frame_timetable_url",
          "frame_service_base",
          "chunk_size_frames"
        ],
        "title": "VideoManifestV2Response",
        "type": "object"
      },
      "VideoMetadata": {
        "properties": {
          "codec": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Codec"
          },
          "duration_ms": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Ms"
          },
          "fps": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fps"
          },
          "frame_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Count"
          },
          "frame_timetable_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Timetable Error"
          },
          "frame_timetable_frame_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Timetable Frame Count"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "playback_codec": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Playback Codec"
          },
          "playback_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Playback Error"
          },
          "playback_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Playback Path"
          },
          "poster_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poster Error"
          },
          "poster_frame_path": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Poster Frame Path"
          },
          "probe_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Probe Error"
          },
          "width": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          }
        },
        "title": "VideoMetadata",
        "type": "object"
      },
      "VideoSegmentOut": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "end_frame": {
            "title": "End Frame",
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "lock_expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lock Expires At"
          },
          "locked_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Locked At"
          },
          "locked_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Locked By"
          },
          "segment_index": {
            "title": "Segment Index",
            "type": "integer"
          },
          "start_frame": {
            "title": "Start Frame",
            "type": "integer"
          },
          "status": {
            "enum": [
              "open",
              "assigned",
              "locked",
              "completed"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "segment_index",
          "start_frame",
          "end_frame",
          "status"
        ],
        "title": "VideoSegmentOut",
        "type": "object"
      },
      "VideoSegmentsResponse": {
        "properties": {
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "segment_size_frames": {
            "title": "Segment Size Frames",
            "type": "integer"
          },
          "segments": {
            "items": {
              "$ref": "#/components/schemas/VideoSegmentOut"
            },
            "title": "Segments",
            "type": "array"
          },
          "task_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Task Id"
          }
        },
        "required": [
          "dataset_item_id",
          "segment_size_frames",
          "segments"
        ],
        "title": "VideoSegmentsResponse",
        "type": "object"
      },
      "VideoTrackBbox": {
        "additionalProperties": false,
        "properties": {
          "h": {
            "title": "H",
            "type": "number"
          },
          "w": {
            "title": "W",
            "type": "number"
          },
          "x": {
            "title": "X",
            "type": "number"
          },
          "y": {
            "title": "Y",
            "type": "number"
          }
        },
        "required": [
          "x",
          "y",
          "w",
          "h"
        ],
        "title": "VideoTrackBbox",
        "type": "object"
      },
      "VideoTrackCompositionRequest": {
        "properties": {
          "annotation_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Annotation Ids",
            "type": "array"
          },
          "delete_sources": {
            "default": true,
            "title": "Delete Sources",
            "type": "boolean"
          },
          "frame_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Index"
          },
          "operation": {
            "enum": [
              "aggregate_bboxes",
              "split_track",
              "merge_tracks"
            ],
            "title": "Operation",
            "type": "string"
          }
        },
        "required": [
          "operation"
        ],
        "title": "VideoTrackCompositionRequest",
        "type": "object"
      },
      "VideoTrackCompositionResponse": {
        "properties": {
          "created_annotations": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AnnotationOut"
            },
            "title": "Created Annotations",
            "type": "array"
          },
          "deleted_annotation_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Deleted Annotation Ids",
            "type": "array"
          },
          "operation": {
            "enum": [
              "aggregate_bboxes",
              "split_track",
              "merge_tracks"
            ],
            "title": "Operation",
            "type": "string"
          },
          "updated_annotations": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AnnotationOut"
            },
            "title": "Updated Annotations",
            "type": "array"
          }
        },
        "required": [
          "operation"
        ],
        "title": "VideoTrackCompositionResponse",
        "type": "object"
      },
      "VideoTrackConvertToBboxesRequest": {
        "properties": {
          "frame_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Frame Index"
          },
          "frame_mode": {
            "default": "keyframes",
            "enum": [
              "keyframes",
              "all_frames"
            ],
            "title": "Frame Mode",
            "type": "string"
          },
          "operation": {
            "default": "copy",
            "enum": [
              "copy",
              "split"
            ],
            "title": "Operation",
            "type": "string"
          },
          "scope": {
            "default": "frame",
            "enum": [
              "frame",
              "track"
            ],
            "title": "Scope",
            "type": "string"
          }
        },
        "title": "VideoTrackConvertToBboxesRequest",
        "type": "object"
      },
      "VideoTrackConvertToBboxesResponse": {
        "properties": {
          "created_annotations": {
            "items": {
              "$ref": "#/components/schemas/AnnotationOut"
            },
            "title": "Created Annotations",
            "type": "array"
          },
          "deleted_source": {
            "title": "Deleted Source",
            "type": "boolean"
          },
          "removed_frame_indexes": {
            "default": [],
            "items": {
              "type": "integer"
            },
            "title": "Removed Frame Indexes",
            "type": "array"
          },
          "source_annotation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnnotationOut"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "source_annotation",
          "created_annotations",
          "deleted_source"
        ],
        "title": "VideoTrackConvertToBboxesResponse",
        "type": "object"
      },
      "VideoTrackGeometry": {
        "additionalProperties": false,
        "description": "v0.9.17 · 视频对象轨迹。\n\n轨迹以 compact JSON 保存，不逐帧展开写库。`track_id` 在一个 annotation 内稳定；\n`keyframes` 保存手工 / 预测关键帧，插值结果由前端按需计算。",
        "properties": {
          "keyframes": {
            "items": {
              "$ref": "#/components/schemas/VideoTrackKeyframe"
            },
            "minItems": 1,
            "title": "Keyframes",
            "type": "array"
          },
          "outside": {
            "items": {
              "$ref": "#/components/schemas/VideoTrackOutsideRange"
            },
            "title": "Outside",
            "type": "array"
          },
          "track_id": {
            "minLength": 1,
            "title": "Track Id",
            "type": "string"
          },
          "type": {
            "const": "video_track",
            "default": "video_track",
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "track_id",
          "keyframes"
        ],
        "title": "VideoTrackGeometry",
        "type": "object"
      },
      "VideoTrackKeyframe": {
        "additionalProperties": false,
        "properties": {
          "absent": {
            "default": false,
            "title": "Absent",
            "type": "boolean"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "bbox": {
            "$ref": "#/components/schemas/VideoTrackBbox"
          },
          "frame_index": {
            "minimum": 0.0,
            "title": "Frame Index",
            "type": "integer"
          },
          "occluded": {
            "default": false,
            "title": "Occluded",
            "type": "boolean"
          },
          "source": {
            "default": "manual",
            "enum": [
              "manual",
              "interpolated",
              "prediction"
            ],
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "frame_index",
          "bbox"
        ],
        "title": "VideoTrackKeyframe",
        "type": "object"
      },
      "VideoTrackOutsideRange": {
        "additionalProperties": false,
        "properties": {
          "from": {
            "minimum": 0.0,
            "title": "From",
            "type": "integer"
          },
          "source": {
            "default": "manual",
            "enum": [
              "manual",
              "prediction"
            ],
            "title": "Source",
            "type": "string"
          },
          "to": {
            "minimum": 0.0,
            "title": "To",
            "type": "integer"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "title": "VideoTrackOutsideRange",
        "type": "object"
      },
      "VideoTrackerJobOut": {
        "properties": {
          "annotation_id": {
            "format": "uuid",
            "title": "Annotation Id",
            "type": "string"
          },
          "cancel_requested_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancel Requested At"
          },
          "celery_task_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Celery Task Id"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "dataset_item_id": {
            "format": "uuid",
            "title": "Dataset Item Id",
            "type": "string"
          },
          "direction": {
            "enum": [
              "forward",
              "backward",
              "bidirectional"
            ],
            "title": "Direction",
            "type": "string"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "event_channel": {
            "title": "Event Channel",
            "type": "string"
          },
          "from_frame": {
            "title": "From Frame",
            "type": "integer"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "model_key": {
            "title": "Model Key",
            "type": "string"
          },
          "prompt": {
            "additionalProperties": true,
            "title": "Prompt",
            "type": "object"
          },
          "segment_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Id"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "completed",
              "failed",
              "cancelled"
            ],
            "title": "Status",
            "type": "string"
          },
          "task_id": {
            "format": "uuid",
            "title": "Task Id",
            "type": "string"
          },
          "to_frame": {
            "title": "To Frame",
            "type": "integer"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "task_id",
          "dataset_item_id",
          "annotation_id",
          "status",
          "model_key",
          "direction",
          "from_frame",
          "to_frame",
          "event_channel",
          "created_at"
        ],
        "title": "VideoTrackerJobOut",
        "type": "object"
      },
      "VideoTrackerPropagateRequest": {
        "properties": {
          "direction": {
            "default": "forward",
            "enum": [
              "forward",
              "backward",
              "bidirectional"
            ],
            "title": "Direction",
            "type": "string"
          },
          "from_frame": {
            "minimum": 0.0,
            "title": "From Frame",
            "type": "integer"
          },
          "model_key": {
            "default": "mock_bbox",
            "maxLength": 80,
            "minLength": 1,
            "title": "Model Key",
            "type": "string"
          },
          "prompt": {
            "additionalProperties": true,
            "title": "Prompt",
            "type": "object"
          },
          "segment_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Segment Id"
          },
          "to_frame": {
            "minimum": 0.0,
            "title": "To Frame",
            "type": "integer"
          }
        },
        "required": [
          "from_frame",
          "to_frame"
        ],
        "title": "VideoTrackerPropagateRequest",
        "type": "object"
      },
      "VisibleIfRule": {
        "additionalProperties": false,
        "description": "attribute field 的简单条件级联：当 other_key 等于 equals 时该字段才显示。",
        "properties": {
          "equals": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Equals"
          },
          "key": {
            "minLength": 1,
            "title": "Key",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "title": "VisibleIfRule",
        "type": "object"
      },
      "WorkbenchPreferences": {
        "additionalProperties": false,
        "description": "v0.9.41 · 标注工作台渲染偏好（I17 Configuration）。\n所有字段都有默认值，前端缺省可直接落库；schema 用严格 forbid 防脏写入。",
        "properties": {
          "controlPointsSize": {
            "default": 6,
            "maximum": 20.0,
            "minimum": 2.0,
            "title": "Controlpointssize",
            "type": "integer"
          },
          "cssImageFilter": {
            "default": "",
            "maxLength": 255,
            "title": "Cssimagefilter",
            "type": "string"
          },
          "longTaskSampleRate": {
            "default": 0.05,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Longtasksamplerate",
            "type": "number"
          },
          "smoothImage": {
            "default": true,
            "title": "Smoothimage",
            "type": "boolean"
          },
          "snapToGrid": {
            "default": false,
            "title": "Snaptogrid",
            "type": "boolean"
          }
        },
        "title": "WorkbenchPreferences",
        "type": "object"
      }
    },
    "securitySchemes": {
      "HTTPBearer": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "title": "AI 标注平台 API",
    "version": "0.8.8"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/admin/analytics/{panel_name}": {
      "get": {
        "description": "v0.10.16 · 取一个面板的数据。\n\nDuckDB 文件由 Celery beat (sync_to_duckdb) 每日更新；如果首次同步尚未跑过\n返回 503，让前端展示「数据初始化中」。",
        "operationId": "get_analytics_panel_api_v1_admin_analytics__panel_name__get",
        "parameters": [
          {
            "in": "path",
            "name": "panel_name",
            "required": true,
            "schema": {
              "enum": [
                "throughput_daily",
                "reject_rate_by_type",
                "duration_dist"
              ],
              "title": "Panel Name",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "days",
            "required": false,
            "schema": {
              "default": 30,
              "maximum": 365,
              "minimum": 1,
              "title": "Days",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Get Analytics Panel Api V1 Admin Analytics  Panel Name  Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Analytics Panel",
        "tags": [
          "admin-analytics"
        ]
      }
    },
    "/api/v1/admin/failed-predictions": {
      "get": {
        "operationId": "list_failed_predictions_api_v1_admin_failed_predictions_get",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "description": "v0.8.8 · true 时同时返回已 dismiss 的失败预测；默认隐藏",
            "in": "query",
            "name": "include_dismissed",
            "required": false,
            "schema": {
              "default": false,
              "description": "v0.8.8 · true 时同时返回已 dismiss 的失败预测；默认隐藏",
              "title": "Include Dismissed",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedPredictionList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Failed Predictions",
        "tags": [
          "predictions"
        ]
      }
    },
    "/api/v1/admin/failed-predictions/{failed_id}/dismiss": {
      "post": {
        "description": "v0.8.8 · 永久放弃失败预测（soft-delete）。\n\n审计：``failed_prediction.dismissed``。重复调用幂等——已 dismiss 的行\n不更新 dismissed_at。",
        "operationId": "dismiss_failed_prediction_api_v1_admin_failed_predictions__failed_id__dismiss_post",
        "parameters": [
          {
            "in": "path",
            "name": "failed_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Failed Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DismissResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Dismiss Failed Prediction",
        "tags": [
          "predictions"
        ]
      }
    },
    "/api/v1/admin/failed-predictions/{failed_id}/restore": {
      "post": {
        "description": "v0.8.8 · 误操作恢复：清空 ``dismissed_at``，让该行重回默认列表。",
        "operationId": "restore_failed_prediction_api_v1_admin_failed_predictions__failed_id__restore_post",
        "parameters": [
          {
            "in": "path",
            "name": "failed_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Failed Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DismissResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Restore Failed Prediction",
        "tags": [
          "predictions"
        ]
      }
    },
    "/api/v1/admin/failed-predictions/{failed_id}/retry": {
      "post": {
        "operationId": "retry_failed_prediction_api_v1_admin_failed_predictions__failed_id__retry_post",
        "parameters": [
          {
            "in": "path",
            "name": "failed_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Failed Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RetryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Retry Failed Prediction",
        "tags": [
          "predictions"
        ]
      }
    },
    "/api/v1/admin/ml-integrations/all": {
      "get": {
        "description": "列系统内所有 ml_backends, 含 source project name 作为来源标签.\n\n用于 CreateProjectWizard step 4 让用户选「复用一个已注册 backend」, 复用时\ncreate_project 端点会复制 row 入新项目 (保留 url/auth/extra_params, 重置 state).",
        "operationId": "list_all_backends_api_v1_admin_ml_integrations_all_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GlobalBackendListResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List All Backends",
        "tags": [
          "admin-ml-integrations"
        ]
      }
    },
    "/api/v1/admin/ml-integrations/overview": {
      "get": {
        "operationId": "get_overview_api_v1_admin_ml_integrations_overview_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MLIntegrationsOverview"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Overview",
        "tags": [
          "admin-ml-integrations"
        ]
      }
    },
    "/api/v1/admin/ml-integrations/probe": {
      "post": {
        "description": "探测一个 ML backend URL 的 /health 端点; 不写 DB.",
        "operationId": "probe_backend_api_v1_admin_ml_integrations_probe_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProbeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProbeResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Probe Backend",
        "tags": [
          "admin-ml-integrations"
        ]
      }
    },
    "/api/v1/admin/ml-integrations/runtime-hints": {
      "get": {
        "operationId": "runtime_hints_api_v1_admin_ml_integrations_runtime_hints_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuntimeHints"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Runtime Hints",
        "tags": [
          "admin-ml-integrations"
        ]
      }
    },
    "/api/v1/admin/preannotate-jobs": {
      "get": {
        "description": "列 prediction_jobs 时间线, started_at DESC + cursor 分页.",
        "operationId": "list_preannotate_jobs_api_v1_admin_preannotate_jobs_get",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project Id"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "running",
                    "completed",
                    "failed"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PredictionJobsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Preannotate Jobs",
        "tags": [
          "admin-preannotate-jobs"
        ]
      }
    },
    "/api/v1/admin/preannotate-queue": {
      "get": {
        "description": "列出已预标 (pre_annotated 状态) 的批次, 按最近一次预标时间倒序.\n\n含 prediction / failed 计数 + 项目元数据, 供 AIPreAnnotatePage 历史表渲染.",
        "operationId": "list_preannotate_queue_api_v1_admin_preannotate_queue_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreannotateQueueResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Preannotate Queue",
        "tags": [
          "admin-preannotate"
        ]
      }
    },
    "/api/v1/admin/preannotate-queue/bulk-clear": {
      "post": {
        "description": "v0.9.12 B-16 · 批量清理 /ai-pre 已就绪卡片.\n\n- predictions_only: 仅清 prediction / failed_prediction / prediction_jobs / prediction_metas;\n  batch.status 从 PRE_ANNOTATED 回 ACTIVE (避免 \"状态 PRE_ANNOTATED 但 prediction 已空\" 矛盾态).\n- reset_to_draft: 复用 BatchService.reset_to_draft, 全量重置 + 级联清理 (Phase 1 落地).\n\nproject_admin 只能处理自己 owned 项目下的 batch; 跨项目越权进 skipped.",
        "operationId": "bulk_clear_preannotate_api_v1_admin_preannotate_queue_bulk_clear_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkClearRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkClearResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Clear Preannotate",
        "tags": [
          "admin-preannotate"
        ]
      }
    },
    "/api/v1/admin/preannotate-summary": {
      "get": {
        "description": "v0.9.12 B-17 · 给 ProjectCardGrid 提供 per-project 聚合.\n\n仅返回有 ml_backend 注册的项目 (EXISTS ml_backends WHERE project_id=...).",
        "operationId": "list_preannotate_project_summary_api_v1_admin_preannotate_summary_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreannotateProjectSummaryResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Preannotate Project Summary",
        "tags": [
          "admin-preannotate"
        ]
      }
    },
    "/api/v1/admin/projects/{project_id}/alias-frequency": {
      "get": {
        "description": "统计本项目 predictions 中各 detected label 出现次数, 按 count desc 排.",
        "operationId": "get_alias_frequency_api_v1_admin_projects__project_id__alias_frequency_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AliasFrequencyResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Alias Frequency",
        "tags": [
          "admin-alias-freq"
        ]
      }
    },
    "/api/v1/annotations/bulk-update": {
      "post": {
        "description": "I12 · 批量更新 N 个标注. 失败整体回滚 (单事务).\n\n设计取舍:\n- 不允许 bulk 改 geometry (同一 geometry 应用到 N 个 shape 无意义)\n- 不允许 bulk 改 tool_unit_id (会破坏 class_name 校验链)\n- group_id 通过 explicit_clear 字段区分 \"未提供\" vs \"显式清空\"",
        "operationId": "bulk_update_annotations_api_v1_annotations_bulk_update_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationBulkUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationBulkUpdateResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Update Annotations",
        "tags": [
          "annotations"
        ]
      }
    },
    "/api/v1/annotations/group": {
      "post": {
        "description": "I12 · 把 ids 合到新 group; 走 tasks.next_group_seq +1 RETURNING.",
        "operationId": "group_annotations_api_v1_annotations_group_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationGroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationGroupResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Group Annotations",
        "tags": [
          "annotations"
        ]
      }
    },
    "/api/v1/annotations/ungroup": {
      "post": {
        "description": "I12 · 把 ids 的 group_id 置 null; orphan group (仅剩 1 个) 自动级联清理.",
        "operationId": "ungroup_annotations_api_v1_annotations_ungroup_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationUngroupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationUngroupResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Ungroup Annotations",
        "tags": [
          "annotations"
        ]
      }
    },
    "/api/v1/annotations/{annotation_id}/comment-attachments/download": {
      "get": {
        "description": "v0.6.3 P0：评论附件下载。校验 key 前缀防越权 + 项目可见性，302 跳转预签名 URL。",
        "operationId": "comment_attachment_download_api_v1_annotations__annotation_id__comment_attachments_download_get",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Comment Attachment Download",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/annotations/{annotation_id}/comment-attachments/upload-init": {
      "post": {
        "description": "v0.6.2：评论附件签发预签名 PUT URL。\n\nstorage_key 形如 `comment-attachments/{aid}/{uuid}-{filename}`，固定前缀使得后端可\n校验 attachments[].storageKey；同时让 MinIO 桶层级清晰。",
        "operationId": "comment_attachment_upload_init_api_v1_annotations__annotation_id__comment_attachments_upload_init_post",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentAttachmentUploadInitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentAttachmentUploadInitResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Comment Attachment Upload Init",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/annotations/{annotation_id}/comments": {
      "get": {
        "description": "v0.8.8 · 旧端点保留作向后兼容；新调用方走 ``/comments/page`` keyset 分页。",
        "operationId": "list_comments_api_v1_annotations__annotation_id__comments_get",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AnnotationCommentOut"
                  },
                  "title": "Response List Comments Api V1 Annotations  Annotation Id  Comments Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Comments",
        "tags": [
          "annotation-comments"
        ]
      },
      "post": {
        "operationId": "create_comment_api_v1_annotations__annotation_id__comments_post",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationCommentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationCommentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Comment",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/annotations/{annotation_id}/comments/page": {
      "get": {
        "description": "v0.8.8 · keyset 分页：DESC(created_at, id)。\n\n单条标注 100+ 评论时初始化卡顿明显（CommentsPanel 全量拉），改为「最新 50\n+ 加载更早」按需拉取。返回 ``next_cursor=None`` 即末尾。",
        "operationId": "list_comments_paged_api_v1_annotations__annotation_id__comments_page_get",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationCommentListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Comments Paged",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/annotations/{annotation_id}/history": {
      "get": {
        "operationId": "get_annotation_history_api_v1_annotations__annotation_id__history_get",
        "parameters": [
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationHistoryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Annotation History",
        "tags": [
          "annotation-history"
        ]
      }
    },
    "/api/v1/async-jobs": {
      "get": {
        "description": "v0.10.16 · 当前用户可见 async_jobs 列表（super_admin 可见全部）。\n\n顺序：created_at DESC。前端铃铛走 polling，默认拉最近 50 行。",
        "operationId": "list_async_jobs_api_v1_async_jobs_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "pending",
                    "running",
                    "completed",
                    "failed",
                    "cancelled"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncJobListResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Async Jobs",
        "tags": [
          "async-jobs"
        ]
      }
    },
    "/api/v1/async-jobs/{job_id}": {
      "get": {
        "operationId": "get_async_job_api_v1_async_jobs__job_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Job Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsyncJobOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Async Job",
        "tags": [
          "async-jobs"
        ]
      }
    },
    "/api/v1/async-jobs/{job_id}/cancel": {
      "post": {
        "description": "v0.10.16 · 软取消。MVP 仅支持 predictions_import / audit_archive。\n\nbatch_predict / video_tracker 走 domain 真值表（PredictionJob / VideoTrackerJob）\n自己的取消机制；本端点不动 Celery revoke。",
        "operationId": "cancel_async_job_api_v1_async_jobs__job_id__cancel_post",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Job Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Cancel Async Job",
        "tags": [
          "async-jobs"
        ]
      }
    },
    "/api/v1/audit-logs": {
      "get": {
        "operationId": "list_audit_logs_api_v1_audit_logs_get",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "target_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Target Type"
            }
          },
          {
            "in": "query",
            "name": "target_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Target Id"
            }
          },
          {
            "in": "query",
            "name": "actor_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Actor Id"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          },
          {
            "description": "A.3：detail_json 字段级过滤——键名",
            "in": "query",
            "name": "detail_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "A.3：detail_json 字段级过滤——键名",
              "title": "Detail Key"
            }
          },
          {
            "description": "A.3：detail_json 字段级过滤——键值",
            "in": "query",
            "name": "detail_value",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "A.3：detail_json 字段级过滤——键值",
              "title": "Detail Value"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditLogList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Audit Logs",
        "tags": [
          "audit"
        ]
      }
    },
    "/api/v1/audit-logs/export": {
      "get": {
        "operationId": "export_audit_logs_api_v1_audit_logs_export_get",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "csv",
              "enum": [
                "csv",
                "json"
              ],
              "title": "Format",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "target_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Target Type"
            }
          },
          {
            "in": "query",
            "name": "target_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Target Id"
            }
          },
          {
            "in": "query",
            "name": "actor_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Actor Id"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          },
          {
            "in": "query",
            "name": "detail_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Detail Key"
            }
          },
          {
            "in": "query",
            "name": "detail_value",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Detail Value"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Export Audit Logs",
        "tags": [
          "audit"
        ]
      }
    },
    "/api/v1/auth/forgot-password": {
      "post": {
        "operationId": "forgot_password_api_v1_auth_forgot_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Forgot Password",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/invitations/{token}": {
      "get": {
        "operationId": "resolve_invitation_api_v1_auth_invitations__token__get",
        "parameters": [
          {
            "in": "path",
            "name": "token",
            "required": true,
            "schema": {
              "title": "Token",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationResolve"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resolve Invitation",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "operationId": "login_api_v1_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Token"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Login",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "operationId": "logout_api_v1_auth_logout_post",
        "responses": {
          "204": {
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Logout",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/logout-all": {
      "post": {
        "operationId": "logout_all_api_v1_auth_logout_all_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Token"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Logout All",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/me": {
      "get": {
        "operationId": "get_me_api_v1_auth_me_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Me",
        "tags": [
          "auth"
        ]
      },
      "patch": {
        "operationId": "update_profile_api_v1_auth_me_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Profile",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/me/deactivation-request": {
      "delete": {
        "description": "v0.8.1 · 冷静期内撤销自助注销申请。",
        "operationId": "cancel_self_deactivation_api_v1_auth_me_deactivation_request_delete",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Cancel Self Deactivation",
        "tags": [
          "me"
        ]
      },
      "post": {
        "description": "v0.8.1 · 自助注销申请。7 天冷静期，期间可撤销。",
        "operationId": "request_self_deactivation_api_v1_auth_me_deactivation_request_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeactivationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Request Self Deactivation",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/me/heartbeat": {
      "post": {
        "description": "v0.8.3 · 在线状态心跳。\n\n前端每 30s 调一次（document.visibilityState === 'visible' 时），刷新\nlast_seen_at 与 status='online'。Celery beat `mark_inactive_offline` 任务\n据 last_seen_at 把超 OFFLINE_THRESHOLD_MINUTES 的用户置 offline。",
        "operationId": "heartbeat_api_v1_auth_me_heartbeat_post",
        "responses": {
          "204": {
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Heartbeat",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/me/password": {
      "post": {
        "operationId": "change_password_api_v1_auth_me_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PasswordChange"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Change Password",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/me/preferences": {
      "get": {
        "description": "v0.9.41 · 读取当前用户的标注偏好。空字段走 schema 默认值。",
        "operationId": "get_preferences_api_v1_auth_me_preferences_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPreferences"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Preferences",
        "tags": [
          "me"
        ]
      },
      "patch": {
        "description": "v0.9.41 · 整体替换 preferences（含默认值填充）。pydantic forbid extra 防脏写入。",
        "operationId": "update_preferences_api_v1_auth_me_preferences_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPreferences"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPreferences"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Preferences",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/me/task-events:batch": {
      "post": {
        "description": "v0.8.4 · 工作台 useSessionStats 每 N 条 flush 此端点。\nuser_id 强制设为当前登录用户（即使前端误传也覆盖）。",
        "operationId": "submit_task_events_api_v1_auth_me_task_events_batch_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskEventBatchIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskEventBatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Submit Task Events",
        "tags": [
          "me"
        ]
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "description": "v0.8.8 · 用即将 / 已过期的 token 换新 token（grace 7 天）。\n\n返回 401 时前端应跳转登录页（grace 已过、被 logout、被 deactivate）。",
        "operationId": "refresh_token_api_v1_auth_refresh_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Token"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Refresh Token",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/register": {
      "post": {
        "operationId": "register_via_invitation_api_v1_auth_register_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Register Via Invitation",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/register-open": {
      "post": {
        "operationId": "register_open_api_v1_auth_register_open_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenRegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Register Open",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/registration-status": {
      "get": {
        "operationId": "registration_status_api_v1_auth_registration_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Registration Status",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/reset-password": {
      "post": {
        "operationId": "reset_password_api_v1_auth_reset_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Reset Password",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/bug_reports": {
      "get": {
        "operationId": "list_bug_reports_api_v1_bug_reports_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "severity",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Severity"
            }
          },
          {
            "in": "query",
            "name": "route",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Route"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Format"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugReportList"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Bug Reports",
        "tags": [
          "bug-reports"
        ]
      },
      "post": {
        "operationId": "create_bug_report_api_v1_bug_reports_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BugReportCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugReportOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Bug Report",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/cluster": {
      "post": {
        "operationId": "cluster_bug_reports_api_v1_bug_reports_cluster_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Cluster Bug Reports",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/mine": {
      "get": {
        "operationId": "list_my_bug_reports_api_v1_bug_reports_mine_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugReportList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List My Bug Reports",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/screenshot/upload-init": {
      "post": {
        "description": "v0.6.6 · 给 BugReportDrawer 截图签发 PUT 预签名 URL。\n\nstorage_key 形如 `bug-report-attachments/{user_id}/{uuid}.png`；MinIO bucket lifecycle\n180 天过期（见 storage_service._ensure_lifecycle）。",
        "operationId": "init_bug_screenshot_upload_api_v1_bug_reports_screenshot_upload_init_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScreenshotInitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScreenshotInitResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Init Bug Screenshot Upload",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/{report_id}": {
      "delete": {
        "operationId": "delete_bug_report_api_v1_bug_reports__report_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Bug Report",
        "tags": [
          "bug-reports"
        ]
      },
      "get": {
        "operationId": "get_bug_report_api_v1_bug_reports__report_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugReportDetail"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Bug Report",
        "tags": [
          "bug-reports"
        ]
      },
      "patch": {
        "operationId": "update_bug_report_api_v1_bug_reports__report_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BugReportUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugReportOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Bug Report",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/{report_id}/attachments/download": {
      "get": {
        "operationId": "download_bug_attachment_api_v1_bug_reports__report_id__attachments_download_get",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Report Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Download Bug Attachment",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/bug_reports/{report_id}/comments": {
      "post": {
        "operationId": "add_bug_comment_api_v1_bug_reports__report_id__comments_post",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BugCommentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BugCommentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Add Bug Comment",
        "tags": [
          "bug-reports"
        ]
      }
    },
    "/api/v1/comments/{comment_id}": {
      "delete": {
        "operationId": "delete_comment_api_v1_comments__comment_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Comment",
        "tags": [
          "annotation-comments"
        ]
      },
      "patch": {
        "operationId": "patch_comment_api_v1_comments__comment_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationCommentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationCommentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Patch Comment",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/dashboard/admin": {
      "get": {
        "operationId": "admin_dashboard_api_v1_dashboard_admin_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminDashboardStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin Dashboard",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/admin/people": {
      "get": {
        "description": "v0.8.4 · 全员效率卡片网格数据。\n\nrole 过滤：annotator / reviewer / both（默认 both）\nperiod: today / 7d / 4w / 1m\nsort: throughput / quality / activity / weekly_compare",
        "operationId": "admin_people_list_api_v1_dashboard_admin_people_get",
        "parameters": [
          {
            "in": "query",
            "name": "role",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Role"
            }
          },
          {
            "in": "query",
            "name": "project",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Project"
            }
          },
          {
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "default": "7d",
              "title": "Period",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "default": "throughput",
              "title": "Sort",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminPeopleList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin People List",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/admin/people/{user_id}": {
      "get": {
        "description": "v0.8.4 · 个人详情：4 周趋势、耗时直方图、项目分布、timeline。",
        "operationId": "admin_person_detail_api_v1_dashboard_admin_people__user_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "period",
            "required": false,
            "schema": {
              "default": "4w",
              "title": "Period",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminPersonDetail"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin Person Detail",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/admin/prediction-cost-stats": {
      "get": {
        "description": "v0.8.6 F4 · 过去 N 天预测调用数 / 平均耗时 / 失败率 / 总成本。\n\n数据来源：predictions × prediction_metas × failed_predictions × ml_backends。\n异常时降级返回零，避免 Dashboard 因聚合失败黑屏。",
        "operationId": "prediction_cost_stats_api_v1_dashboard_admin_prediction_cost_stats_get",
        "parameters": [
          {
            "in": "query",
            "name": "range",
            "required": false,
            "schema": {
              "default": "30d",
              "pattern": "^(7d|30d)$",
              "title": "Range",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PredictionCostStats"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Prediction Cost Stats",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/annotator": {
      "get": {
        "operationId": "annotator_dashboard_api_v1_dashboard_annotator_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotatorDashboardStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Annotator Dashboard",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/annotator/batches": {
      "get": {
        "description": "v0.7.1 B-17 · 标注员视角的「我的批次」：仅返回当前用户被分派、且处于\nactive / annotating / rejected / reviewing 的批次。让标注员从 dashboard\n一眼看到自己手里的批次进度，并直接「提交质检」/ 查看 reviewer 留言。\n\nsuper_admin 看到所有同状态批次（便于演示 / 调试）；其他角色按 annotator_id 过滤（v0.7.2 单值）。",
        "operationId": "my_batches_api_v1_dashboard_annotator_batches_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MyBatchItem"
                  },
                  "title": "Response My Batches Api V1 Dashboard Annotator Batches Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "My Batches",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/me/recent-reviews": {
      "get": {
        "description": "v0.6.6 · 当前 reviewer 最近审核过的任务（已 approve / reject 落定的）。\n\n依据 Task.reviewer_id + Task.reviewed_at（v0.6.5 状态机字段）。",
        "operationId": "my_recent_reviews_api_v1_dashboard_me_recent_reviews_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RecentReviewItem"
                  },
                  "title": "Response My Recent Reviews Api V1 Dashboard Me Recent Reviews Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "My Recent Reviews",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/reviewer": {
      "get": {
        "operationId": "reviewer_dashboard_api_v1_dashboard_reviewer_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewerDashboardStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reviewer Dashboard",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/dashboard/reviewer/today-mini": {
      "get": {
        "description": "v0.8.7 F5.3 · ReviewWorkbench 右侧栏 mini 仪表轻量端点。\n\n- approved_today / rejected_today: 自己当日 approve/reject 的次数（基于 Task.reviewer_id）\n- avg_review_seconds: 自己当日审过的任务（reviewer_claimed_at → reviewed_at）平均耗时秒数\n20s 自动 refetch（前端 query staleTime）。",
        "operationId": "reviewer_today_mini_api_v1_dashboard_reviewer_today_mini_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewerMiniStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reviewer Today Mini",
        "tags": [
          "dashboard"
        ]
      }
    },
    "/api/v1/datasets": {
      "get": {
        "operationId": "list_datasets_api_v1_datasets_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "data_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Data Type"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetListResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Datasets",
        "tags": [
          "datasets"
        ]
      },
      "post": {
        "operationId": "create_dataset_api_v1_datasets_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Dataset",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}": {
      "delete": {
        "operationId": "delete_dataset_api_v1_datasets__dataset_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Dataset",
        "tags": [
          "datasets"
        ]
      },
      "get": {
        "operationId": "get_dataset_api_v1_datasets__dataset_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Dataset",
        "tags": [
          "datasets"
        ]
      },
      "put": {
        "operationId": "update_dataset_api_v1_datasets__dataset_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Dataset",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/backfill-dimensions": {
      "post": {
        "description": "为存量 image 类型 dataset_items 回填 width/height。\n\n一次最多处理 batch 条（默认 50），多次调用直到 processed == 0 视为完成。",
        "operationId": "backfill_dimensions_api_v1_datasets__dataset_id__backfill_dimensions_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "batch",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Batch",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Backfill Dimensions",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/backfill-media": {
      "post": {
        "description": "异步触发存量图像缩略图 / 视频元数据与 poster 回填。",
        "operationId": "backfill_media_endpoint_api_v1_datasets__dataset_id__backfill_media_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Backfill Media Endpoint",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items": {
      "get": {
        "operationId": "list_dataset_items_api_v1_datasets__dataset_id__items_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetItemListResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Dataset Items",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items/scan": {
      "post": {
        "operationId": "scan_items_api_v1_datasets__dataset_id__items_scan_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Scan Items",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items/upload-complete/{item_id}": {
      "post": {
        "operationId": "upload_complete_api_v1_datasets__dataset_id__items_upload_complete__item_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Item Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Upload Complete",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items/upload-init": {
      "post": {
        "operationId": "upload_init_api_v1_datasets__dataset_id__items_upload_init_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetUploadInitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetUploadInitResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Upload Init",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items/upload-zip": {
      "post": {
        "description": "前端 multipart 上传单个 ZIP 包，由后端解压并把每个文件入库 + 上传到 MinIO。\n\n限制：≤ 200MB 整包、≤ 5000 文件、单文件 ≤ 100MB；自动跳过 macOS 元数据（__MACOSX/）\n与隐藏文件（.DS_Store 等）；同名文件以路径 hash 后缀去重。",
        "operationId": "upload_zip_api_v1_datasets__dataset_id__items_upload_zip_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_zip_api_v1_datasets__dataset_id__items_upload_zip_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Upload Zip",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/items/{item_id}": {
      "delete": {
        "operationId": "delete_item_api_v1_datasets__dataset_id__items__item_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Item Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Item",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/link": {
      "post": {
        "operationId": "link_project_api_v1_datasets__dataset_id__link_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DatasetLinkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Link Project",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/link/{project_id}": {
      "delete": {
        "operationId": "unlink_project_api_v1_datasets__dataset_id__link__project_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Unlink Project",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/link/{project_id}/preview-unlink": {
      "get": {
        "description": "v0.6.7 B-10 v2：取消关联前的预览数字（will be deleted）。前端拿来做二次确认文案。\nv0.7.3：补 will_delete_batches —— 与 service 层一致：失去 task 后变空壳的 batch（B-DEFAULT 除外）。",
        "operationId": "preview_unlink_project_api_v1_datasets__dataset_id__link__project_id__preview_unlink_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Preview Unlink Project",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/datasets/{dataset_id}/projects": {
      "get": {
        "operationId": "get_linked_projects_api_v1_datasets__dataset_id__projects_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectOut"
                  },
                  "title": "Response Get Linked Projects Api V1 Datasets  Dataset Id  Projects Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Linked Projects",
        "tags": [
          "datasets"
        ]
      }
    },
    "/api/v1/feedbacks": {
      "get": {
        "operationId": "list_feedbacks_api_v1_feedbacks_get",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "task_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Task Id"
            }
          },
          {
            "in": "query",
            "name": "annotation_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Annotation Id"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "anchor_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Anchor Type"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationFeedbackListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Feedbacks",
        "tags": [
          "annotation-feedbacks"
        ]
      },
      "post": {
        "operationId": "create_feedback_api_v1_feedbacks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationFeedbackCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationFeedbackOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Feedback",
        "tags": [
          "annotation-feedbacks"
        ]
      }
    },
    "/api/v1/feedbacks/{feedback_id}": {
      "delete": {
        "operationId": "delete_feedback_api_v1_feedbacks__feedback_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "feedback_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Feedback Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Feedback",
        "tags": [
          "annotation-feedbacks"
        ]
      },
      "patch": {
        "operationId": "patch_feedback_api_v1_feedbacks__feedback_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "feedback_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Feedback Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationFeedbackPatch"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationFeedbackOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Patch Feedback",
        "tags": [
          "annotation-feedbacks"
        ]
      }
    },
    "/api/v1/feedbacks/{feedback_id}/replies": {
      "post": {
        "operationId": "reply_feedback_api_v1_feedbacks__feedback_id__replies_post",
        "parameters": [
          {
            "in": "path",
            "name": "feedback_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Feedback Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationFeedbackReply"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationFeedbackOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reply Feedback",
        "tags": [
          "annotation-feedbacks"
        ]
      }
    },
    "/api/v1/files/projects/{project_id}/backfill-thumbnails": {
      "post": {
        "operationId": "backfill_project_thumbnails_api_v1_files_projects__project_id__backfill_thumbnails_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Backfill Project Thumbnails",
        "tags": [
          "files"
        ]
      }
    },
    "/api/v1/files/tasks/{task_id}/file-url": {
      "get": {
        "operationId": "get_file_url_api_v1_files_tasks__task_id__file_url_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskFileUrlResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get File Url",
        "tags": [
          "files"
        ]
      }
    },
    "/api/v1/files/upload-complete/{task_id}": {
      "post": {
        "operationId": "upload_complete_api_v1_files_upload_complete__task_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Upload Complete",
        "tags": [
          "files"
        ]
      }
    },
    "/api/v1/files/upload-init": {
      "post": {
        "operationId": "upload_init_api_v1_files_upload_init_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadInitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadInitResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Upload Init",
        "tags": [
          "files"
        ]
      }
    },
    "/api/v1/groups": {
      "get": {
        "operationId": "list_groups_api_v1_groups_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/GroupOut"
                  },
                  "title": "Response List Groups Api V1 Groups Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Groups",
        "tags": [
          "groups"
        ]
      },
      "post": {
        "operationId": "create_group_api_v1_groups_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Group",
        "tags": [
          "groups"
        ]
      }
    },
    "/api/v1/groups/{group_id}": {
      "delete": {
        "operationId": "delete_group_api_v1_groups__group_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Group",
        "tags": [
          "groups"
        ]
      },
      "patch": {
        "operationId": "update_group_api_v1_groups__group_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Group",
        "tags": [
          "groups"
        ]
      }
    },
    "/api/v1/invitations": {
      "get": {
        "operationId": "list_invitations_api_v1_invitations_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "default": "all",
              "enum": [
                "pending",
                "accepted",
                "expired",
                "revoked",
                "all"
              ],
              "title": "Status",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "default": "me",
              "enum": [
                "me",
                "all"
              ],
              "title": "Scope",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/InvitationOut"
                  },
                  "title": "Response List Invitations Api V1 Invitations Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Invitations",
        "tags": [
          "invitations"
        ]
      }
    },
    "/api/v1/invitations/{invitation_id}": {
      "delete": {
        "operationId": "revoke_invitation_api_v1_invitations__invitation_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "invitation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Invitation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Revoke Invitation",
        "tags": [
          "invitations"
        ]
      }
    },
    "/api/v1/invitations/{invitation_id}/resend": {
      "post": {
        "operationId": "resend_invitation_api_v1_invitations__invitation_id__resend_post",
        "parameters": [
          {
            "in": "path",
            "name": "invitation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Invitation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationResendResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Resend Invitation",
        "tags": [
          "invitations"
        ]
      }
    },
    "/api/v1/me/api-keys": {
      "get": {
        "operationId": "list_my_keys_api_v1_me_api_keys_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ApiKeyOut"
                  },
                  "title": "Response List My Keys Api V1 Me Api Keys Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List My Keys",
        "tags": [
          "api-keys"
        ]
      },
      "post": {
        "operationId": "create_my_key_api_v1_me_api_keys_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiKeyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKeyCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create My Key",
        "tags": [
          "api-keys"
        ]
      }
    },
    "/api/v1/me/api-keys/{key_id}": {
      "delete": {
        "operationId": "revoke_my_key_api_v1_me_api_keys__key_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "key_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Key Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Revoke My Key",
        "tags": [
          "api-keys"
        ]
      }
    },
    "/api/v1/notification-preferences": {
      "get": {
        "description": "v0.7.0：返回所有已知 type 的偏好；无记录默认 in_app=True / email=False。",
        "operationId": "get_preferences_api_v1_notification_preferences_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreferencesOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Preferences",
        "tags": [
          "notifications"
        ]
      },
      "put": {
        "description": "v0.7.0：upsert 单条偏好。channels.email 字段保留但 v0.7.0 不消费。",
        "operationId": "update_preference_api_v1_notification_preferences_put",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationPreferenceUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Preference",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications": {
      "get": {
        "operationId": "list_notifications_api_v1_notifications_get",
        "parameters": [
          {
            "in": "query",
            "name": "unread_only",
            "required": false,
            "schema": {
              "default": false,
              "title": "Unread Only",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 30,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Notifications",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/mark-all-read": {
      "post": {
        "operationId": "mark_all_read_api_v1_notifications_mark_all_read_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Mark All Read",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/unread-count": {
      "get": {
        "operationId": "unread_count_api_v1_notifications_unread_count_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnreadCount"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Unread Count",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/{notification_id}/read": {
      "post": {
        "operationId": "mark_read_api_v1_notifications__notification_id__read_post",
        "parameters": [
          {
            "in": "path",
            "name": "notification_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Notification Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Mark Read",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/project-templates": {
      "get": {
        "operationId": "list_templates_api_v1_project_templates_get",
        "parameters": [
          {
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^(private|organization|public)$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Scope"
            }
          },
          {
            "in": "query",
            "name": "type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type Key"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectTemplateOut"
                  },
                  "title": "Response List Templates Api V1 Project Templates Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Templates",
        "tags": [
          "project-templates"
        ]
      },
      "post": {
        "operationId": "create_template_api_v1_project_templates_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTemplateCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTemplateOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Template",
        "tags": [
          "project-templates"
        ]
      }
    },
    "/api/v1/project-templates/{template_id}": {
      "delete": {
        "operationId": "delete_template_api_v1_project_templates__template_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Template",
        "tags": [
          "project-templates"
        ]
      },
      "get": {
        "operationId": "get_template_api_v1_project_templates__template_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTemplateOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Template",
        "tags": [
          "project-templates"
        ]
      },
      "patch": {
        "operationId": "update_template_api_v1_project_templates__template_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTemplateUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTemplateOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Template",
        "tags": [
          "project-templates"
        ]
      }
    },
    "/api/v1/project-templates/{template_id}/duplicate": {
      "post": {
        "description": "克隆任意可见模板为当前用户私有模板.",
        "operationId": "duplicate_template_api_v1_project_templates__template_id__duplicate_post",
        "parameters": [
          {
            "in": "path",
            "name": "template_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Template Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectTemplateOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Duplicate Template",
        "tags": [
          "project-templates"
        ]
      }
    },
    "/api/v1/projects": {
      "get": {
        "operationId": "list_projects_api_v1_projects_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type Key"
            }
          },
          {
            "in": "query",
            "name": "member_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Member Id"
            }
          },
          {
            "in": "query",
            "name": "created_from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created From"
            }
          },
          {
            "in": "query",
            "name": "created_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created To"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectOut"
                  },
                  "title": "Response List Projects Api V1 Projects Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Projects",
        "tags": [
          "projects"
        ]
      },
      "post": {
        "operationId": "create_project_api_v1_projects_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Project",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/stats": {
      "get": {
        "operationId": "get_stats_api_v1_projects_stats_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Stats",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}": {
      "delete": {
        "operationId": "delete_project_api_v1_projects__project_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Project",
        "tags": [
          "projects"
        ]
      },
      "get": {
        "operationId": "get_project_api_v1_projects__project_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Project",
        "tags": [
          "projects"
        ]
      },
      "patch": {
        "operationId": "update_project_api_v1_projects__project_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Project",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches": {
      "get": {
        "operationId": "list_batches_api_v1_projects__project_id__batches_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Batches",
        "tags": [
          "batches"
        ]
      },
      "post": {
        "operationId": "create_batch_api_v1_projects__project_id__batches_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-activate": {
      "post": {
        "operationId": "bulk_activate_batches_api_v1_projects__project_id__batches_bulk_activate_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchIds"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Activate Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-approve": {
      "post": {
        "operationId": "bulk_approve_batches_api_v1_projects__project_id__batches_bulk_approve_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchApprove"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Approve Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-archive": {
      "post": {
        "operationId": "bulk_archive_batches_api_v1_projects__project_id__batches_bulk_archive_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchIds"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Archive Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-delete": {
      "post": {
        "operationId": "bulk_delete_batches_api_v1_projects__project_id__batches_bulk_delete_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchIds"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Delete Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-reassign": {
      "post": {
        "operationId": "bulk_reassign_batches_api_v1_projects__project_id__batches_bulk_reassign_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchReassign"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Reassign Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/bulk-reject": {
      "post": {
        "operationId": "bulk_reject_batches_api_v1_projects__project_id__batches_bulk_reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkBatchReject"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkBatchActionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Bulk Reject Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/distribute-batches": {
      "post": {
        "description": "v0.7.2：项目级 batch 分派 — 把项目下未分派/全部 batch 圆周分配给所选 annotator/reviewer。\n每 batch 落到 1 个 annotator + 1 个 reviewer；同步回填该 batch 下所有 task 的 assignee_id/reviewer_id。",
        "operationId": "distribute_batches_in_project_api_v1_projects__project_id__batches_distribute_batches_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectDistributeBatches"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchDistributeResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Distribute Batches In Project",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/split": {
      "post": {
        "operationId": "split_batches_api_v1_projects__project_id__batches_split_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchSplitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Split Batches",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/unclassified-count": {
      "get": {
        "description": "v0.7.3：项目下未归类（batch_id IS NULL）任务数。\n给 BatchesSection 顶部横带「未归类 N 条 · 去分包」用。",
        "operationId": "get_unclassified_task_count_api_v1_projects__project_id__batches_unclassified_count_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Unclassified Task Count",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}": {
      "delete": {
        "operationId": "delete_batch_api_v1_projects__project_id__batches__batch_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Batch",
        "tags": [
          "batches"
        ]
      },
      "get": {
        "operationId": "get_batch_api_v1_projects__project_id__batches__batch_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Batch",
        "tags": [
          "batches"
        ]
      },
      "patch": {
        "operationId": "update_batch_api_v1_projects__project_id__batches__batch_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/admin-lock": {
      "post": {
        "operationId": "admin_lock_batch_api_v1_projects__project_id__batches__batch_id__admin_lock_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminLockRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin Lock Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/admin-unlock": {
      "post": {
        "operationId": "admin_unlock_batch_api_v1_projects__project_id__batches__batch_id__admin_unlock_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin Unlock Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/audit-logs": {
      "get": {
        "description": "v0.7.3：批次操作历史抽屉数据源。\n返回该批次相关的 audit_log，按时间倒序，包含：\n- 直接 target=batch 的事件（创建/状态迁移/驳回/删除）\n- bulk 类操作中提及到该批次的项目级事件（detail_json.batch_ids 包含此 id）",
        "operationId": "list_batch_audit_logs_api_v1_projects__project_id__batches__batch_id__audit_logs_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Batch Audit Logs",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/export": {
      "get": {
        "operationId": "export_batch_api_v1_projects__project_id__batches__batch_id__export_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "coco",
              "pattern": "^(coco|voc|yolo|aap_json)$",
              "title": "Format",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_attributes",
            "required": false,
            "schema": {
              "default": true,
              "title": "Include Attributes",
              "type": "boolean"
            }
          },
          {
            "description": "video-track 导出帧模式：keyframes 仅关键帧，all_frames 展开逐帧插值；图片项目忽略",
            "in": "query",
            "name": "video_frame_mode",
            "required": false,
            "schema": {
              "default": "keyframes",
              "description": "video-track 导出帧模式：keyframes 仅关键帧，all_frames 展开逐帧插值；图片项目忽略",
              "pattern": "^(keyframes|all_frames)$",
              "title": "Video Frame Mode",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Export Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/reject": {
      "post": {
        "operationId": "reject_batch_api_v1_projects__project_id__batches__batch_id__reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchReject"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reject Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/reset": {
      "post": {
        "description": "v0.7.6 · owner 兜底：把任意状态批次回退到 draft。\n\n- task 全部回 pending（保留 annotation 记录与 is_active）\n- 删除 task_locks 释放标注员锁\n- 清 review_feedback / reviewed_at / reviewed_by\n- 强制 reason ≥ 10 字（schema 层校验），写入 audit.detail.reason",
        "operationId": "reset_batch_to_draft_api_v1_projects__project_id__batches__batch_id__reset_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchReset"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reset Batch To Draft",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/batches/{batch_id}/transition": {
      "post": {
        "operationId": "transition_batch_api_v1_projects__project_id__batches__batch_id__transition_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchTransition"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Transition Batch",
        "tags": [
          "batches"
        ]
      }
    },
    "/api/v1/projects/{project_id}/classes/rename": {
      "post": {
        "description": "B-13 · 原子地把类别 old_name 重命名为 new_name:\n- 更新 tool_bindings 中对应 unit (或所有 unit) 的 classes[].name (强隔离 · 仅本 unit)\n- 同步更新 classes 数组与 classes_config 字典 key 派生 (保留 color/order/alias)\n- **始终跨 unit** 改全项目内同名 annotations.class_name (避免历史 magic-box /\n  region / 旧 schema 残留留下\"孤儿\"标注: binding 已无该类, 但 annotation 仍引用)\n- 不动 predictions.result (alias 不变)",
        "operationId": "rename_class_api_v1_projects__project_id__classes_rename_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClassRenameRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Rename Class",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/datasets": {
      "get": {
        "description": "列出本项目已关联的所有数据集（含基础元数据 + task 数）。",
        "operationId": "list_project_datasets_api_v1_projects__project_id__datasets_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Project Datasets",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/export": {
      "get": {
        "operationId": "export_project_api_v1_projects__project_id__export_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "coco",
              "pattern": "^(coco|voc|yolo|aap_json)$",
              "title": "Format",
              "type": "string"
            }
          },
          {
            "description": "是否在导出包中携带 annotation.attributes 与 project.attribute_schema",
            "in": "query",
            "name": "include_attributes",
            "required": false,
            "schema": {
              "default": true,
              "description": "是否在导出包中携带 annotation.attributes 与 project.attribute_schema",
              "title": "Include Attributes",
              "type": "boolean"
            }
          },
          {
            "description": "video-track 导出帧模式：keyframes 仅关键帧，all_frames 展开逐帧插值；图片项目忽略",
            "in": "query",
            "name": "video_frame_mode",
            "required": false,
            "schema": {
              "default": "keyframes",
              "description": "video-track 导出帧模式：keyframes 仅关键帧，all_frames 展开逐帧插值；图片项目忽略",
              "pattern": "^(keyframes|all_frames)$",
              "title": "Video Frame Mode",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Export Project",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/guide-assets": {
      "delete": {
        "operationId": "guide_asset_delete_api_v1_projects__project_id__guide_assets_delete",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Guide Asset Delete",
        "tags": [
          "guide-assets"
        ]
      }
    },
    "/api/v1/projects/{project_id}/guide-assets/sign-url": {
      "get": {
        "operationId": "guide_asset_sign_url_api_v1_projects__project_id__guide_assets_sign_url_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideAssetSignedUrlResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Guide Asset Sign Url",
        "tags": [
          "guide-assets"
        ]
      }
    },
    "/api/v1/projects/{project_id}/guide-assets/upload-complete": {
      "post": {
        "operationId": "guide_asset_upload_complete_api_v1_projects__project_id__guide_assets_upload_complete_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Payload",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideAssetEntry"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Guide Asset Upload Complete",
        "tags": [
          "guide-assets"
        ]
      }
    },
    "/api/v1/projects/{project_id}/guide-assets/upload-init": {
      "post": {
        "operationId": "guide_asset_upload_init_api_v1_projects__project_id__guide_assets_upload_init_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GuideAssetUploadInitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuideAssetUploadInitResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Guide Asset Upload Init",
        "tags": [
          "guide-assets"
        ]
      }
    },
    "/api/v1/projects/{project_id}/members": {
      "get": {
        "operationId": "list_members_api_v1_projects__project_id__members_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectMemberOut"
                  },
                  "title": "Response List Members Api V1 Projects  Project Id  Members Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Members",
        "tags": [
          "projects"
        ]
      },
      "post": {
        "operationId": "add_member_api_v1_projects__project_id__members_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectMemberCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectMemberOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Add Member",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/members/{member_id}": {
      "delete": {
        "operationId": "remove_member_api_v1_projects__project_id__members__member_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "member_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Member Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Remove Member",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends": {
      "get": {
        "operationId": "list_ml_backends_api_v1_projects__project_id__ml_backends_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MLBackendOut"
                  },
                  "title": "Response List Ml Backends Api V1 Projects  Project Id  Ml Backends Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Ml Backends",
        "tags": [
          "ml-backends"
        ]
      },
      "post": {
        "operationId": "create_ml_backend_api_v1_projects__project_id__ml_backends_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MLBackendCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MLBackendOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Ml Backend",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}": {
      "delete": {
        "operationId": "delete_ml_backend_api_v1_projects__project_id__ml_backends__backend_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Ml Backend",
        "tags": [
          "ml-backends"
        ]
      },
      "get": {
        "operationId": "get_ml_backend_api_v1_projects__project_id__ml_backends__backend_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MLBackendOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Ml Backend",
        "tags": [
          "ml-backends"
        ]
      },
      "put": {
        "operationId": "update_ml_backend_api_v1_projects__project_id__ml_backends__backend_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MLBackendUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MLBackendOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Ml Backend",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/health": {
      "post": {
        "operationId": "check_health_api_v1_projects__project_id__ml_backends__backend_id__health_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MLBackendHealthResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Check Health",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/interactive-annotating": {
      "post": {
        "operationId": "interactive_annotating_api_v1_projects__project_id__ml_backends__backend_id__interactive_annotating_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InteractiveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Interactive Annotating",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/predict-test": {
      "post": {
        "operationId": "predict_test_api_v1_projects__project_id__ml_backends__backend_id__predict_test_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Predict Test",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/reload": {
      "post": {
        "description": "B-28+ · 触发 backend 重新加载模型. 已加载则 noop.",
        "operationId": "reload_ml_backend_api_v1_projects__project_id__ml_backends__backend_id__reload_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reload Ml Backend",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/setup": {
      "get": {
        "description": "v0.10.1 · 代理 backend /setup, 返回 JSON Schema 自描述能力 (供前端 useMLCapabilities).\n\n30s TTL 进程内缓存; backend 升级/重启后最坏延迟 30s. 删除/更新 backend 时 invalidate.",
        "operationId": "get_ml_backend_setup_api_v1_projects__project_id__ml_backends__backend_id__setup_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Ml Backend Setup",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/ml-backends/{backend_id}/unload": {
      "post": {
        "description": "B-28+ · 触发 backend 卸载模型释放显存. backend 未实现 /unload 时返回 502.",
        "operationId": "unload_ml_backend_api_v1_projects__project_id__ml_backends__backend_id__unload_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "backend_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Backend Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Unload Ml Backend",
        "tags": [
          "ml-backends"
        ]
      }
    },
    "/api/v1/projects/{project_id}/orphan-tasks/cleanup": {
      "post": {
        "description": "v0.6.7 二修 B-10：删除本项目所有「无源 task」（含 annotations / locks / comments），重算 counters。\n\n适用场景：v0.6.0~v0.6.6 期间 link_project 写 dataset_item_id 但未持久化 batch 关系，\n后续数据集被 unlink / 删除留下的孤儿 task。",
        "operationId": "cleanup_orphan_tasks_api_v1_projects__project_id__orphan_tasks_cleanup_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Cleanup Orphan Tasks",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/orphan-tasks/preview": {
      "get": {
        "description": "v0.6.7 二修 B-10：预览本项目中「无源 task」（dataset_item_id 为空 / 指向已 unlink 的数据集 / 指向已删除 dataset_item）。",
        "operationId": "preview_orphan_tasks_api_v1_projects__project_id__orphan_tasks_preview_get",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Preview Orphan Tasks",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/preannotate": {
      "post": {
        "operationId": "trigger_preannotation_api_v1_projects__project_id__preannotate_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreannotateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Trigger Preannotation",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/projects/{project_id}/predictions/import": {
      "post": {
        "description": "外部模型预测结果导入端点 (v0.10.15).\n\n支持 COCO Detection 与平台原生 AAP JSON v1.0 两种 input format. 写入的\nPrediction 行 source='external_import', ml_backend_id=NULL.",
        "operationId": "import_predictions_api_v1_projects__project_id__predictions_import_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "aap_json",
              "pattern": "^(aap_json|coco)$",
              "title": "Format",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "dry_run",
            "required": false,
            "schema": {
              "default": false,
              "title": "Dry Run",
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_import_predictions_api_v1_projects__project_id__predictions_import_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AAPImportResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Import Predictions",
        "tags": [
          "predictions"
        ]
      }
    },
    "/api/v1/projects/{project_id}/transfer": {
      "post": {
        "operationId": "transfer_owner_api_v1_projects__project_id__transfer_post",
        "parameters": [
          {
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectTransferRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Transfer Owner",
        "tags": [
          "projects"
        ]
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "global_search_api_v1_search_get",
        "parameters": [
          {
            "in": "query",
            "name": "q",
            "required": true,
            "schema": {
              "maxLength": 64,
              "minLength": 1,
              "title": "Q",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 5,
              "maximum": 20,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "items": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "title": "Response Global Search Api V1 Search Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Global Search",
        "tags": [
          "search"
        ]
      }
    },
    "/api/v1/settings/system": {
      "get": {
        "operationId": "get_system_settings_api_v1_settings_system_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemSettingsOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get System Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "operationId": "update_system_settings_api_v1_settings_system_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SystemSettingsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemSettingsOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update System Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/system/test-smtp": {
      "post": {
        "description": "用当前 DB override 的 SMTP 配置发一封测试邮件到 actor.email。",
        "operationId": "test_smtp_api_v1_settings_system_test_smtp_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Test Smtp",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/storage/buckets": {
      "get": {
        "operationId": "storage_buckets_api_v1_storage_buckets_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BucketsResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Storage Buckets",
        "tags": [
          "storage"
        ]
      }
    },
    "/api/v1/storage/health": {
      "get": {
        "operationId": "storage_health_api_v1_storage_health_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Storage Health",
        "tags": [
          "storage"
        ]
      }
    },
    "/api/v1/storage/video-assets/failures": {
      "get": {
        "operationId": "list_video_asset_failures_api_v1_storage_video_assets_failures_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoAssetFailuresResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Video Asset Failures",
        "tags": [
          "storage"
        ]
      }
    },
    "/api/v1/storage/video-assets/retry": {
      "post": {
        "operationId": "retry_video_asset_api_v1_storage_video_assets_retry_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoAssetRetryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoAssetRetryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Retry Video Asset",
        "tags": [
          "storage"
        ]
      }
    },
    "/api/v1/tasks": {
      "get": {
        "operationId": "list_tasks_api_v1_tasks_get",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "assignee_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Assignee Id"
            }
          },
          {
            "in": "query",
            "name": "batch_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Batch Id"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskListResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Tasks",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/next": {
      "get": {
        "operationId": "next_task_api_v1_tasks_next_get",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Project Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "batch_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Batch Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/TaskOut"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "title": "Response Next Task Api V1 Tasks Next Get"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Next Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}": {
      "get": {
        "operationId": "get_task_api_v1_tasks__task_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/accept-rejection": {
      "post": {
        "description": "M1 · 标注员接受退回，将 task 从 rejected 转回 in_progress 开始重做。\n不清空 reject_reason（保留审核员退回原因，前端可降级为\"重做中\"提示）。",
        "operationId": "accept_rejection_api_v1_tasks__task_id__accept_rejection_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Accept Rejection",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/annotations": {
      "get": {
        "operationId": "get_annotations_api_v1_tasks__task_id__annotations_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AnnotationOut"
                  },
                  "title": "Response Get Annotations Api V1 Tasks  Task Id  Annotations Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Annotations",
        "tags": [
          "tasks"
        ]
      },
      "post": {
        "operationId": "create_annotation_api_v1_tasks__task_id__annotations_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Annotation",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/annotations/page": {
      "get": {
        "description": "v0.7.6 · keyset 分页变体。单 task 1000+ 框场景下避免一次性大列表阻塞。\n\ncursor 编码：base64(`{ts_isoformat}|{annotation_id}`)，与 audit_logs 端点一致。",
        "operationId": "get_annotations_paged_api_v1_tasks__task_id__annotations_page_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 200,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Annotations Paged",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/annotations/video/track-compositions": {
      "post": {
        "operationId": "compose_video_tracks_api_v1_tasks__task_id__annotations_video_track_compositions_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoTrackCompositionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoTrackCompositionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Compose Video Tracks",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/annotations/{annotation_id}": {
      "delete": {
        "operationId": "delete_annotation_api_v1_tasks__task_id__annotations__annotation_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Annotation",
        "tags": [
          "tasks"
        ]
      },
      "patch": {
        "operationId": "update_annotation_api_v1_tasks__task_id__annotations__annotation_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnotationUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Annotation",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/annotations/{annotation_id}/video/convert-to-bboxes": {
      "post": {
        "operationId": "convert_video_track_to_bboxes_api_v1_tasks__task_id__annotations__annotation_id__video_convert_to_bboxes_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoTrackConvertToBboxesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoTrackConvertToBboxesResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Convert Video Track To Bboxes",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/audit-history": {
      "get": {
        "description": "I4 · 任务级时间线 — DiscussionPanel 在未选中标注时降级展示.\n\n合并 2 类事件:\n1. audit_logs.target_type='task' AND target_id=:task_id (含 _RELEVANT_TASK_ACTIONS + bulk_update + group/ungroup)\n2. task 下所有 annotation 的 annotation 级 audit (压平 + 排序; 单题量大时仍可读).",
        "operationId": "get_task_audit_history_api_v1_tasks__task_id__audit_history_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationHistoryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Task Audit History",
        "tags": [
          "annotation-history"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/comments/page": {
      "get": {
        "description": "I4 · 任务级评论 — DiscussionPanel 在未选中标注时降级展示.\n\n聚合该 task 下所有 annotation 的 active 评论, DESC(created_at, id) keyset 分页.",
        "operationId": "list_task_comments_paged_api_v1_tasks__task_id__comments_page_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnotationCommentListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Task Comments Paged",
        "tags": [
          "annotation-comments"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/lock": {
      "delete": {
        "operationId": "release_lock_api_v1_tasks__task_id__lock_delete",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Release Lock",
        "tags": [
          "tasks"
        ]
      },
      "post": {
        "operationId": "acquire_lock_api_v1_tasks__task_id__lock_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskLockResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Acquire Lock",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/lock/heartbeat": {
      "post": {
        "operationId": "heartbeat_lock_api_v1_tasks__task_id__lock_heartbeat_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Heartbeat Lock",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/predictions": {
      "get": {
        "description": "返回该任务的预测。每个 Prediction.result 内含多个 shape；当 limit 设定时，\n按 shape 置信度 desc 跨 Prediction 排序、截取 [offset, offset+limit]，再回到原 Prediction 容器。",
        "operationId": "get_predictions_api_v1_tasks__task_id__predictions_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "model_version",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Model Version"
            }
          },
          {
            "in": "query",
            "name": "min_confidence",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maximum": 1.0,
                  "minimum": 0.0,
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Min Confidence"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maximum": 2000,
                  "minimum": 1,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Limit"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PredictionOut"
                  },
                  "title": "Response Get Predictions Api V1 Tasks  Task Id  Predictions Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Predictions",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/predictions/{prediction_id}/accept": {
      "post": {
        "operationId": "accept_prediction_api_v1_tasks__task_id__predictions__prediction_id__accept_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "prediction_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Prediction Id",
              "type": "string"
            }
          },
          {
            "description": "可选: 仅采纳指定下标的 shape (一个 prediction 可含多个 shape).",
            "in": "query",
            "name": "shape_index",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "可选: 仅采纳指定下标的 shape (一个 prediction 可含多个 shape).",
              "title": "Shape Index"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/AnnotationOut"
                  },
                  "title": "Response Accept Prediction Api V1 Tasks  Task Id  Predictions  Prediction Id  Accept Post",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Accept Prediction",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/predictions/{prediction_id}/reject": {
      "post": {
        "description": "B-37 · 驳回 AI 预测候选 shape, 持久化到 predictions.rejected_shape_indexes.\n\n后续 GET /tasks/{id}/predictions 会跳过这些下标, 刷新页面后 AI 待审框不会重现.\n驳回是软操作: prediction 行仍在库中, 仅在该数组追加被拒下标 (去重).",
        "operationId": "reject_prediction_api_v1_tasks__task_id__predictions__prediction_id__reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "prediction_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Prediction Id",
              "type": "string"
            }
          },
          {
            "description": "可选: 仅驳回指定下标的 shape; 不传则驳回该 Prediction 全部 shape.",
            "in": "query",
            "name": "shape_index",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "可选: 仅驳回指定下标的 shape; 不传则驳回该 Prediction 全部 shape.",
              "title": "Shape Index"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reject Prediction",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/reopen": {
      "post": {
        "description": "v0.6.5: 标注员对已通过任务单方面重开编辑。\n前提：status=completed 且 assignee == 当前用户（admin 兜底）。\n清空 reviewer_* 但 detail 留 original_reviewer_id 用于通知；\nannotations 原地保留可继续改，依赖 audit_logs 回溯历史。",
        "operationId": "reopen_task_api_v1_tasks__task_id__reopen_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reopen Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/review/approve": {
      "post": {
        "operationId": "approve_task_api_v1_tasks__task_id__review_approve_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Approve Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/review/claim": {
      "post": {
        "description": "v0.6.5: 审核员进入审核页时调用（幂等）。\n第一个调用者写 reviewer_id + reviewer_claimed_at；\n后续调用者读取已存在的认领信息（不覆盖）。\n`reviewer_claimed_at` 一经设置即冻结标注员的 withdraw 入口。",
        "operationId": "claim_review_api_v1_tasks__task_id__review_claim_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReviewClaimResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Claim Review",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/review/reject": {
      "post": {
        "operationId": "reject_task_api_v1_tasks__task_id__review_reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ReviewAction"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Reject Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/skip": {
      "post": {
        "description": "v0.8.7 F7 · 标注员跳过任务并附原因，自动转 reviewer 复核。\n\n状态机：\n  - pending / in_progress → review（与 submit 行为一致，但不要求有标注）\n  - 其他状态 → 409\n业务约束：\n  - reason ∈ {image_corrupt, no_target, unclear, other}；其他 422\n  - reason=\"other\" 时建议带 note，但 note 可空（前端兜底）",
        "operationId": "skip_task_api_v1_tasks__task_id__skip_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkipTaskRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Skip Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/submit": {
      "post": {
        "operationId": "submit_task_api_v1_tasks__task_id__submit_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Submit Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/chunks": {
      "get": {
        "operationId": "get_video_chunks_api_v1_tasks__task_id__video_chunks_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from_frame",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From Frame"
            }
          },
          {
            "in": "query",
            "name": "to_frame",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To Frame"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChunksResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Chunks",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/chunks/{chunk_id}": {
      "get": {
        "operationId": "get_video_chunk_api_v1_tasks__task_id__video_chunks__chunk_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "chunk_id",
            "required": true,
            "schema": {
              "title": "Chunk Id",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChunkOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Chunk",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/frame-timetable": {
      "get": {
        "operationId": "get_video_frame_timetable_api_v1_tasks__task_id__video_frame_timetable_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskVideoFrameTimetableResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Frame Timetable",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/frames/{frame_index}": {
      "get": {
        "operationId": "get_video_frame_api_v1_tasks__task_id__video_frames__frame_index__get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "frame_index",
            "required": true,
            "schema": {
              "title": "Frame Index",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "webp",
              "enum": [
                "webp",
                "jpeg"
              ],
              "title": "Format",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "w",
            "required": false,
            "schema": {
              "default": 512,
              "maximum": 4096,
              "minimum": 1,
              "title": "W",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFrameOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Frame",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/frames:prefetch": {
      "post": {
        "operationId": "prefetch_video_frame_assets_api_v1_tasks__task_id__video_frames_prefetch_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoFramePrefetchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFramePrefetchResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Prefetch Video Frame Assets",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/frames:retry": {
      "post": {
        "operationId": "retry_video_frame_assets_api_v1_tasks__task_id__video_frames_retry_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoFrameRetryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFramePrefetchResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Retry Video Frame Assets",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/manifest": {
      "get": {
        "operationId": "get_video_manifest_api_v1_tasks__task_id__video_manifest_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskVideoManifestResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Manifest",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/manifest-v2": {
      "get": {
        "operationId": "get_video_manifest_v2_api_v1_tasks__task_id__video_manifest_v2_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoManifestV2Response"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Manifest V2",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/segments": {
      "get": {
        "operationId": "get_video_segments_api_v1_tasks__task_id__video_segments_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoSegmentsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Segments",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/segments/{segment_id}:claim": {
      "post": {
        "operationId": "claim_video_segment_api_v1_tasks__task_id__video_segments__segment_id__claim_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Segment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoSegmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Claim Video Segment",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/segments/{segment_id}:heartbeat": {
      "post": {
        "operationId": "heartbeat_video_segment_api_v1_tasks__task_id__video_segments__segment_id__heartbeat_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Segment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoSegmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Heartbeat Video Segment",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/segments/{segment_id}:release": {
      "post": {
        "operationId": "release_video_segment_api_v1_tasks__task_id__video_segments__segment_id__release_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "segment_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Segment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoSegmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Release Video Segment",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/video/tracks/{annotation_id}:propagate": {
      "post": {
        "operationId": "propagate_video_track_api_v1_tasks__task_id__video_tracks__annotation_id__propagate_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "annotation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Annotation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoTrackerPropagateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoTrackerJobOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Propagate Video Track",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/tasks/{task_id}/withdraw": {
      "post": {
        "description": "v0.6.5: 标注员撤回质检提交。\n前提：status=review、assignee == 当前用户、reviewer_claimed_at IS NULL。\n审核员一旦 claim 就锁死撤回入口，避免与审核动作打架。",
        "operationId": "withdraw_task_api_v1_tasks__task_id__withdraw_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Withdraw Task",
        "tags": [
          "tasks"
        ]
      }
    },
    "/api/v1/users": {
      "get": {
        "description": "用户列表。\n- super_admin：默认全量；可选 `project_id` 过滤到该项目成员。\n- project_admin：\n  * `role=annotator|reviewer`：放开限制返回全量候选（用于指派 modal 选人）。\n  * 其他场景：限定到 `Project.owner_id == actor.id` 的项目成员（actor 自身始终可见）。",
        "operationId": "list_users_api_v1_users_get",
        "parameters": [
          {
            "in": "query",
            "name": "role",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Role"
            }
          },
          {
            "description": "可选项目过滤；project_admin 入参被忽略，强制限定到其管理项目",
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "可选项目过滤；project_admin 入参被忽略，强制限定到其管理项目",
              "title": "Project Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UserOut"
                  },
                  "title": "Response List Users Api V1 Users Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Users",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/export": {
      "get": {
        "operationId": "export_users_api_v1_users_export_get",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "csv",
              "enum": [
                "csv",
                "json"
              ],
              "title": "Format",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Export Users",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/invite": {
      "post": {
        "operationId": "invite_user_api_v1_users_invite_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvitationCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvitationCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Invite User",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/stats": {
      "get": {
        "description": "v0.8.3 · UsersPage 顶部 4 卡之「本周活跃」与状态聚合。\n\nweekly_active 基于 last_seen_at >= now-7d，比旧的 status==online 更准确\n（旧逻辑只反映瞬时在线状态）。",
        "operationId": "users_stats_api_v1_users_stats_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersStats"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Users Stats",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}": {
      "delete": {
        "description": "软删除（is_active=False）。super_admin 可删任意（除自己/最后一名超管）；\nproject_admin 仅可删其项目内、且仅在其项目里出现的 annotator / reviewer / viewer。\n\n若 target 仍持有未完成任务（assignee_id + status in pending/in_progress/review）或 task_lock，\n返回 409，要求传入 `transfer_to_user_id`；前端弹\"先转交\"二次 Modal。",
        "operationId": "delete_user_api_v1_users__user_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/DeleteUserPayload"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete User",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}/admin-reset-password": {
      "post": {
        "operationId": "admin_reset_password_api_v1_users__user_id__admin_reset_password_post",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdminResetPasswordResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Admin Reset Password",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}/deactivate": {
      "post": {
        "operationId": "deactivate_user_api_v1_users__user_id__deactivate_post",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Deactivate User",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}/group": {
      "patch": {
        "operationId": "assign_user_group_api_v1_users__user_id__group_patch",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupAssignPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Assign User Group",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}/role": {
      "patch": {
        "operationId": "change_user_role_api_v1_users__user_id__role_patch",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleChangePayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Change User Role",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/video-tracker-jobs/{job_id}": {
      "delete": {
        "operationId": "cancel_video_tracker_job_api_v1_video_tracker_jobs__job_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Job Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoTrackerJobOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Cancel Video Tracker Job",
        "tags": [
          "video-tracker-jobs"
        ]
      },
      "get": {
        "operationId": "get_video_tracker_job_api_v1_video_tracker_jobs__job_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Job Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoTrackerJobOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Tracker Job",
        "tags": [
          "video-tracker-jobs"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/chapters": {
      "get": {
        "operationId": "list_video_chapters_api_v1_videos__dataset_item_id__chapters_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChapterList"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List Video Chapters",
        "tags": [
          "videos"
        ]
      },
      "post": {
        "operationId": "create_video_chapter_api_v1_videos__dataset_item_id__chapters_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoChapterCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChapterOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Video Chapter",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/chapters/{chapter_id}": {
      "delete": {
        "operationId": "delete_video_chapter_api_v1_videos__dataset_item_id__chapters__chapter_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "chapter_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Chapter Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Delete Video Chapter",
        "tags": [
          "videos"
        ]
      },
      "patch": {
        "operationId": "update_video_chapter_api_v1_videos__dataset_item_id__chapters__chapter_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "chapter_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Chapter Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoChapterUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChapterOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Video Chapter",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/chunks": {
      "get": {
        "operationId": "get_video_chunks_api_v1_videos__dataset_item_id__chunks_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from_frame",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From Frame"
            }
          },
          {
            "in": "query",
            "name": "to_frame",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To Frame"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChunksResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Chunks",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/chunks/{chunk_id}": {
      "get": {
        "operationId": "get_video_chunk_api_v1_videos__dataset_item_id__chunks__chunk_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "chunk_id",
            "required": true,
            "schema": {
              "title": "Chunk Id",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoChunkOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Chunk",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/frame-timetable": {
      "get": {
        "operationId": "get_video_frame_timetable_api_v1_videos__dataset_item_id__frame_timetable_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "minimum": 0,
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskVideoFrameTimetableResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Frame Timetable",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/frames/{frame_index}": {
      "get": {
        "operationId": "get_video_frame_api_v1_videos__dataset_item_id__frames__frame_index__get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "frame_index",
            "required": true,
            "schema": {
              "title": "Frame Index",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "default": "webp",
              "enum": [
                "webp",
                "jpeg"
              ],
              "title": "Format",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "w",
            "required": false,
            "schema": {
              "default": 512,
              "maximum": 4096,
              "minimum": 1,
              "title": "W",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFrameOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Frame",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/frames:prefetch": {
      "post": {
        "operationId": "prefetch_video_frame_assets_api_v1_videos__dataset_item_id__frames_prefetch_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoFramePrefetchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFramePrefetchResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Prefetch Video Frame Assets",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/frames:retry": {
      "post": {
        "operationId": "retry_video_frame_assets_api_v1_videos__dataset_item_id__frames_retry_post",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoFrameRetryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoFramePrefetchResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Retry Video Frame Assets",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/manifest": {
      "get": {
        "operationId": "get_video_manifest_api_v1_videos__dataset_item_id__manifest_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoManifestV2Response"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Manifest",
        "tags": [
          "videos"
        ]
      }
    },
    "/api/v1/videos/{dataset_item_id}/segments": {
      "get": {
        "operationId": "get_video_segments_api_v1_videos__dataset_item_id__segments_get",
        "parameters": [
          {
            "in": "path",
            "name": "dataset_item_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Dataset Item Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoSegmentsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Video Segments",
        "tags": [
          "videos"
        ]
      }
    },
    "/health": {
      "get": {
        "operationId": "health_all_health_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health All",
        "tags": [
          "health"
        ]
      }
    },
    "/health/celery": {
      "get": {
        "operationId": "health_celery_health_celery_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health Celery",
        "tags": [
          "health"
        ]
      }
    },
    "/health/db": {
      "get": {
        "operationId": "health_db_health_db_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health Db",
        "tags": [
          "health"
        ]
      }
    },
    "/health/minio": {
      "get": {
        "operationId": "health_minio_health_minio_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health Minio",
        "tags": [
          "health"
        ]
      }
    },
    "/health/redis": {
      "get": {
        "operationId": "health_redis_health_redis_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health Redis",
        "tags": [
          "health"
        ]
      }
    }
  }
}
