{
  "components": {
    "schemas": {
      "AddBranchTagDto": {
        "properties": {
          "tag": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BranchTagInputDto"
              }
            ],
            "description": "Assign an existing tag by text, or create and assign a new tag by also providing a fixed colour and symbol."
          }
        },
        "required": [
          "tag"
        ],
        "type": "object"
      },
      "AddCrosslinkDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "crosslinkId": {
            "description": "Id of the entity to cross-link the path entity with.",
            "type": "string"
          }
        },
        "required": [
          "crosslinkId"
        ],
        "type": "object"
      },
      "AddLinkDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "destinationId": {
            "type": "string"
          }
        },
        "required": [
          "destinationId"
        ],
        "type": "object"
      },
      "AddRequiredReviewerDto": {
        "properties": {},
        "type": "object"
      },
      "AddRequiredReviewerGroupDto": {
        "properties": {},
        "type": "object"
      },
      "AgentPlanItemDto": {
        "properties": {
          "conclusion": {
            "enum": [
              "pass",
              "fail",
              "warning",
              "skipped"
            ],
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "in_progress",
              "done"
            ],
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "status"
        ],
        "type": "object"
      },
      "AutomationRunStatusItemDto": {
        "properties": {
          "agent_id": {
            "type": "string"
          },
          "automation_id": {
            "nullable": true,
            "type": "string"
          },
          "automation_name": {
            "nullable": true,
            "type": "string"
          },
          "branches": {
            "default": [],
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "conclusion": {
            "enum": [
              "pass",
              "fail",
              "warning",
              "skipped"
            ],
            "nullable": true,
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "integration_grade": {
            "nullable": true,
            "type": "string"
          },
          "integration_response": {
            "nullable": true,
            "type": "string"
          },
          "project_id": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "enum": [
              "running",
              "completed",
              "failed"
            ],
            "type": "string"
          },
          "steps": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AgentPlanItemDto"
            },
            "type": "array"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "required": [
          "agent_id",
          "status",
          "automation_id",
          "automation_name",
          "integration_response",
          "integration_grade",
          "branches",
          "project_id",
          "error",
          "conclusion",
          "steps",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "AutomationRunStatusResponseDto": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AutomationRunStatusItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "type": "object"
      },
      "BatchAddLinkItemDto": {
        "properties": {
          "destinationId": {
            "type": "string"
          },
          "sourceId": {
            "type": "string"
          }
        },
        "required": [
          "sourceId",
          "destinationId"
        ],
        "type": "object"
      },
      "BatchAddLinksDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "links": {
            "items": {
              "$ref": "#/components/schemas/BatchAddLinkItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "links"
        ],
        "type": "object"
      },
      "BatchCreateEntitiesDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "entities": {
            "items": {
              "$ref": "#/components/schemas/BatchCreateEntityItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "entities"
        ],
        "type": "object"
      },
      "BatchCreateEntityItemDto": {
        "properties": {
          "entityType": {
            "description": "Entity type (e.g. \"task\", \"bug\")",
            "type": "string"
          },
          "id": {
            "description": "Entity ID (UUID). Auto-generated if omitted.",
            "type": "string"
          },
          "name": {
            "description": "Entity name",
            "type": "string"
          }
        },
        "required": [
          "entityType",
          "name"
        ],
        "type": "object"
      },
      "BatchDeleteEntitiesDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "entityIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "entityIds"
        ],
        "type": "object"
      },
      "BatchFileUploadResponseDto": {
        "properties": {
          "files": {
            "items": {
              "$ref": "#/components/schemas/FileUploadResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "files"
        ],
        "type": "object"
      },
      "BatchFileUrlsRequestDto": {
        "properties": {
          "ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "ids"
        ],
        "type": "object"
      },
      "BatchFileUrlsResponseDto": {
        "properties": {
          "urls": {
            "additionalProperties": {
              "properties": {
                "expires_in": {
                  "type": "number"
                },
                "original_name": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "object"
          }
        },
        "required": [
          "urls"
        ],
        "type": "object"
      },
      "BatchMarkdownToRichTextDto": {
        "properties": {
          "markdown": {
            "description": "Markdown strings to convert. Order is preserved in the response.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "markdown"
        ],
        "type": "object"
      },
      "BatchRemoveLinkItemDto": {
        "properties": {
          "destinationId": {
            "type": "string"
          },
          "sourceId": {
            "type": "string"
          }
        },
        "required": [
          "sourceId",
          "destinationId"
        ],
        "type": "object"
      },
      "BatchRemoveLinksDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "links": {
            "items": {
              "$ref": "#/components/schemas/BatchRemoveLinkItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "links"
        ],
        "type": "object"
      },
      "BatchReorderChildrenDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "ops": {
            "items": {
              "$ref": "#/components/schemas/BatchReorderChildrenItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "ops"
        ],
        "type": "object"
      },
      "BatchReorderChildrenItemDto": {
        "properties": {
          "childIds": {
            "description": "Ordered downstream child IDs",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "parentId": {
            "description": "Parent entity ID whose children are reordered",
            "type": "string"
          }
        },
        "required": [
          "parentId",
          "childIds"
        ],
        "type": "object"
      },
      "BatchRequestUploadDto": {
        "properties": {
          "files": {
            "items": {
              "$ref": "#/components/schemas/CreateFileDto"
            },
            "type": "array"
          }
        },
        "required": [
          "files"
        ],
        "type": "object"
      },
      "BatchSetValueItemDto": {
        "properties": {
          "entityId": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "value": {
            "type": "object"
          }
        },
        "required": [
          "entityId",
          "key",
          "value"
        ],
        "type": "object"
      },
      "BatchSetValuesDto": {
        "properties": {
          "branchId": {
            "description": "Branch ID; applies to the entire batch",
            "type": "string"
          },
          "updates": {
            "items": {
              "$ref": "#/components/schemas/BatchSetValueItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "updates"
        ],
        "type": "object"
      },
      "BranchCheckItemDto": {
        "properties": {
          "automation_id": {
            "type": "string"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "output": {
            "nullable": true,
            "type": "string"
          },
          "ran_at": {
            "nullable": true,
            "type": "string"
          },
          "run_id": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "enum": [
              "passed",
              "failed",
              "stale",
              "not_run"
            ],
            "type": "string"
          }
        },
        "required": [
          "automation_id",
          "name",
          "status",
          "output",
          "error",
          "run_id",
          "ran_at"
        ],
        "type": "object"
      },
      "BranchChecksResponseDto": {
        "properties": {
          "checks": {
            "items": {
              "$ref": "#/components/schemas/BranchCheckItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "checks"
        ],
        "type": "object"
      },
      "BranchCreatedDto": {
        "properties": {
          "id": {
            "type": "string"
          },
          "number": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "number"
        ],
        "type": "object"
      },
      "BranchExtractionBranchDto": {
        "properties": {
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "parent_id": {
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "parent_seq_id": {
            "description": "Bigint-safe fork sequence.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "parent_id",
          "parent_seq_id"
        ],
        "type": "object"
      },
      "BranchExtractionPlanCountsDto": {
        "properties": {
          "additionally_affected": {
            "type": "number"
          },
          "diffs": {
            "description": "Bigint-safe ordered source row count.",
            "type": "string"
          },
          "required": {
            "type": "number"
          },
          "selected": {
            "type": "number"
          }
        },
        "required": [
          "selected",
          "required",
          "additionally_affected",
          "diffs"
        ],
        "type": "object"
      },
      "BranchExtractionPlanMembershipDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "reason_entity_id": {
            "nullable": true,
            "type": "string"
          },
          "role": {
            "enum": [
              "selected",
              "required",
              "additionally_affected"
            ],
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "role",
          "reason_entity_id"
        ],
        "type": "object"
      },
      "BranchExtractionPlanResponseDto": {
        "properties": {
          "counts": {
            "$ref": "#/components/schemas/BranchExtractionPlanCountsDto"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entities": {
            "items": {
              "$ref": "#/components/schemas/BranchExtractionPlanMembershipDto"
            },
            "type": "array"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "proposed_destination_name": {
            "type": "string"
          },
          "selector": {
            "enum": [
              "entities",
              "non_variant"
            ],
            "type": "string"
          },
          "source_branch_id": {
            "type": "string"
          },
          "source_snapshot_seq_id": {
            "description": "Frozen global diff watermark.",
            "type": "string"
          },
          "status": {
            "enum": [
              "ready",
              "stale",
              "expired",
              "consumed"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "project_id",
          "source_branch_id",
          "selector",
          "status",
          "proposed_destination_name",
          "counts",
          "entities",
          "source_snapshot_seq_id",
          "created_at",
          "expires_at"
        ],
        "type": "object"
      },
      "BranchExtractionResponseDto": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "destination": {
            "$ref": "#/components/schemas/BranchExtractionBranchDto"
          },
          "diff_count": {
            "type": "number"
          },
          "entity_count": {
            "type": "number"
          },
          "id": {
            "format": "uuid",
            "type": "string"
          },
          "reverted_at": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/BranchExtractionBranchDto"
          },
          "status": {
            "enum": [
              "completed",
              "reverted"
            ],
            "type": "string"
          },
          "undo": {
            "$ref": "#/components/schemas/BranchExtractionUndoEligibilityDto"
          }
        },
        "required": [
          "id",
          "status",
          "source",
          "destination",
          "entity_count",
          "diff_count",
          "created_at",
          "reverted_at",
          "undo"
        ],
        "type": "object"
      },
      "BranchExtractionUndoEligibilityDto": {
        "properties": {
          "eligible": {
            "type": "boolean"
          },
          "reason": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "eligible",
          "reason"
        ],
        "type": "object"
      },
      "BranchLabelDto": {
        "properties": {
          "color": {
            "example": "#dbeafe",
            "type": "string"
          },
          "symbol": {
            "description": "Stored symbol. New tags use a fixed Lucide icon name, but reads can include legacy symbols.",
            "maxLength": 32,
            "type": "string"
          },
          "text": {
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "text",
          "color",
          "symbol"
        ],
        "type": "object"
      },
      "BranchMergeJobResponseDto": {
        "properties": {
          "attempts": {
            "type": "number"
          },
          "branch_id": {
            "type": "string"
          },
          "completed_at": {
            "type": "string"
          },
          "enqueued_at": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "last_error": {
            "type": "string"
          },
          "last_error_reference": {
            "type": "string"
          },
          "progress_percent": {
            "type": "number"
          },
          "project_id": {
            "type": "string"
          },
          "replayed_diff_count": {
            "type": "number"
          },
          "started_at": {
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "succeeded",
              "failed"
            ],
            "type": "string"
          },
          "total_diff_count": {
            "type": "number"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "branch_id",
          "project_id",
          "status",
          "attempts",
          "replayed_diff_count",
          "total_diff_count",
          "progress_percent",
          "enqueued_at",
          "updated_at"
        ],
        "type": "object"
      },
      "BranchNameSuggestionDto": {
        "properties": {
          "name": {
            "type": "string"
          },
          "number": {
            "type": "number"
          },
          "reservation": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "name",
          "number",
          "reservation"
        ],
        "type": "object"
      },
      "BranchResponseDto": {
        "properties": {
          "baseline_id": {
            "nullable": true,
            "type": "string"
          },
          "branch_extraction_enabled": {
            "type": "boolean"
          },
          "change_request_diff_summary": {
            "$ref": "#/components/schemas/ChangeRequestDiffSummaryDto"
          },
          "change_request_title": {
            "nullable": true,
            "type": "string"
          },
          "comment_count": {
            "type": "number"
          },
          "created_at": {
            "type": "string"
          },
          "created_by_id": {
            "nullable": true,
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "designated_reviewer_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "editor_group_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "has_children": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "is_deleted": {
            "type": "boolean"
          },
          "is_iteration": {
            "type": "boolean"
          },
          "is_protected": {
            "type": "boolean"
          },
          "is_variant": {
            "type": "boolean"
          },
          "labels": {
            "items": {
              "$ref": "#/components/schemas/BranchLabelDto"
            },
            "type": "array"
          },
          "last_rebased_at": {
            "nullable": true,
            "type": "string"
          },
          "last_touched_at": {
            "nullable": true,
            "type": "string"
          },
          "merged_at": {
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "number": {
            "type": "number"
          },
          "owner_id": {
            "nullable": true,
            "type": "string"
          },
          "parent": {
            "nullable": true,
            "type": "string"
          },
          "parent_name": {
            "nullable": true,
            "type": "string"
          },
          "ready_for_review": {
            "type": "boolean"
          },
          "require_review": {
            "type": "boolean"
          },
          "required_reviewer_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "reviews": {
            "items": {
              "$ref": "#/components/schemas/BranchReviewResponseDto"
            },
            "type": "array"
          },
          "updated_at": {
            "type": "string"
          },
          "updated_by_id": {
            "nullable": true,
            "type": "string"
          },
          "upstream_branch_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "number",
          "is_iteration",
          "description",
          "is_variant",
          "parent_name",
          "created_at",
          "updated_at",
          "is_protected",
          "require_review",
          "ready_for_review",
          "owner_id",
          "created_by_id",
          "updated_by_id",
          "last_touched_at",
          "last_rebased_at",
          "required_reviewer_ids",
          "editor_group_ids",
          "labels",
          "upstream_branch_ids",
          "merged_at",
          "is_deleted",
          "has_children"
        ],
        "type": "object"
      },
      "BranchRestorePreviewDto": {
        "properties": {
          "chain": {
            "items": {
              "$ref": "#/components/schemas/RestoreChainMemberDto"
            },
            "type": "array"
          }
        },
        "required": [
          "chain"
        ],
        "type": "object"
      },
      "BranchReviewResponseDto": {
        "properties": {
          "branch_id": {
            "type": "string"
          },
          "comment_id": {
            "nullable": true,
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "dismissed_at": {
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "status": {
            "enum": [
              "Approved",
              "Rejected"
            ],
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "branch_id",
          "user_id",
          "status",
          "comment_id",
          "created_at",
          "updated_at",
          "dismissed_at"
        ],
        "type": "object"
      },
      "BranchReviewStatusItemDto": {
        "properties": {
          "agent_id": {
            "nullable": true,
            "type": "string"
          },
          "automation_id": {
            "type": "string"
          },
          "automation_name": {
            "type": "string"
          },
          "has_changes_since_run": {
            "type": "boolean"
          },
          "last_run_at": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "automation_id",
          "automation_name",
          "agent_id",
          "last_run_at",
          "has_changes_since_run"
        ],
        "type": "object"
      },
      "BranchReviewStatusResponseDto": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/BranchReviewStatusItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "type": "object"
      },
      "BranchTagInputDto": {
        "properties": {
          "color": {
            "description": "Required only when creating a new project tag; omitted when assigning an existing tag by text.",
            "enum": [
              "#f5f5f4",
              "#fee2e2",
              "#ffedd5",
              "#fef3c7",
              "#fef9c3",
              "#ecfccb",
              "#dcfce7",
              "#d1fae5",
              "#ccfbf1",
              "#cffafe",
              "#e0f2fe",
              "#dbeafe",
              "#e0e7ff",
              "#ede9fe",
              "#f3e8ff",
              "#fae8ff",
              "#fce7f3",
              "#ffe4e6"
            ],
            "example": "#dbeafe",
            "type": "string"
          },
          "symbol": {
            "description": "Required only when creating a new project tag. Use an empty string for no icon.",
            "enum": [
              "",
              "CircleSmallIcon",
              "CircleIcon",
              "CircleDotIcon",
              "CircleCheckIcon",
              "CircleXIcon",
              "CircleAlertIcon",
              "CircleQuestionMarkIcon",
              "CircleMinusIcon",
              "CircleDashedIcon",
              "CheckIcon",
              "XIcon",
              "AlertTriangleIcon",
              "InfoIcon",
              "BanIcon",
              "FlameIcon",
              "ZapIcon",
              "StarIcon",
              "HeartIcon",
              "ThumbsUpIcon",
              "ThumbsDownIcon",
              "ArrowUpIcon",
              "ArrowDownIcon",
              "FlagIcon",
              "FlagTriangleLeftIcon",
              "BookmarkIcon",
              "BookmarkCheckIcon",
              "DiamondIcon",
              "HexagonIcon",
              "PlayIcon",
              "PauseIcon",
              "ClockIcon",
              "LockIcon",
              "EyeIcon",
              "ShieldCheckIcon",
              "ShieldAlertIcon",
              "TagIcon",
              "TicketIcon",
              "ClipboardCheckIcon",
              "FileTextIcon",
              "UserIcon"
            ],
            "type": "string"
          },
          "text": {
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "type": "object"
      },
      "BranchTagMutationResponseDto": {
        "properties": {
          "affected_branches": {
            "description": "Number of branches updated, including Base when applicable.",
            "type": "number"
          }
        },
        "required": [
          "affected_branches"
        ],
        "type": "object"
      },
      "BulkInviteDetailedDto": {
        "properties": {
          "customer": {
            "type": "string"
          },
          "suppress_notification": {
            "default": false,
            "type": "boolean"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/BulkInviteUserEntryDto"
            },
            "maxItems": 200,
            "type": "array"
          }
        },
        "required": [
          "customer",
          "users"
        ],
        "type": "object"
      },
      "BulkInviteFailureDto": {
        "properties": {
          "email": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "message"
        ],
        "type": "object"
      },
      "BulkInviteResultDto": {
        "properties": {
          "failed": {
            "items": {
              "$ref": "#/components/schemas/BulkInviteFailureDto"
            },
            "type": "array"
          },
          "invited": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "invited",
          "failed"
        ],
        "type": "object"
      },
      "BulkInviteUserDto": {
        "properties": {
          "all_projects": {
            "default": true,
            "type": "boolean"
          },
          "customer": {
            "type": "string"
          },
          "emails": {
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "type": "array"
          },
          "project_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Role"
              }
            ],
            "default": "editor"
          },
          "suppress_notification": {
            "default": false,
            "type": "boolean"
          }
        },
        "required": [
          "customer",
          "emails"
        ],
        "type": "object"
      },
      "BulkInviteUserEntryDto": {
        "properties": {
          "all_projects": {
            "default": true,
            "type": "boolean"
          },
          "email": {
            "type": "string"
          },
          "family_name": {
            "type": "string"
          },
          "given_name": {
            "type": "string"
          },
          "project_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Role"
              }
            ],
            "default": "editor"
          }
        },
        "required": [
          "email"
        ],
        "type": "object"
      },
      "ChangeRequestDiffSummaryDto": {
        "properties": {
          "added": {
            "type": "number"
          },
          "pending": {
            "type": "number"
          },
          "removed": {
            "type": "number"
          },
          "updated": {
            "type": "number"
          }
        },
        "required": [
          "added",
          "updated",
          "removed",
          "pending"
        ],
        "type": "object"
      },
      "ChunkAnalysisDto": {
        "properties": {
          "entities": {
            "items": {
              "$ref": "#/components/schemas/PageEntityDto"
            },
            "type": "array"
          },
          "notes": {
            "items": {
              "$ref": "#/components/schemas/PageNoteDto"
            },
            "type": "array"
          },
          "relationships": {
            "items": {
              "$ref": "#/components/schemas/PageRelationshipDto"
            },
            "type": "array"
          }
        },
        "required": [
          "entities",
          "relationships",
          "notes"
        ],
        "type": "object"
      },
      "CommitReqifImportDto": {
        "properties": {
          "base_branch_id": {
            "description": "Base branch to fork the import branch from. Omit or \"master\" for the base branch.",
            "type": "string"
          },
          "branch_name": {
            "description": "Name for the branch the import lands on.",
            "type": "string"
          },
          "clauses": {
            "description": "The mapping clauses the wizard configured, in precedence order (the first clause matching an object wins). Each clause names the target Flow category, the ReqIF value that becomes the Source ID, the Flow field the object is matched against, the per-attribute field mappings, the enum-option mappings, and an optional disambiguation filter. ReqIF types with no clause are skipped.",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "link_direction_by_type": {
            "description": "Per-ReqIF-link-type direction choice. Absent link types default to downstream.",
            "type": "object"
          },
          "parent_id": {
            "description": "Optional Flow parent entity to nest imported roots under.",
            "type": "string"
          }
        },
        "required": [
          "clauses",
          "branch_name"
        ],
        "type": "object"
      },
      "CreateBranchDto": {
        "properties": {
          "branch_number": {
            "minimum": 1,
            "type": "number"
          },
          "branch_number_reservation": {
            "format": "uuid",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "is_variant": {
            "type": "boolean"
          },
          "labels": {
            "description": "Branch tags to assign when the branch is created. Existing project tag names reuse their fixed casing, colour, and symbol.",
            "items": {
              "$ref": "#/components/schemas/BranchTagInputDto"
            },
            "maxItems": 20,
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "parent_id": {
            "type": "string"
          },
          "ready_for_review": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "CreateBranchExtractionPlanDto": {
        "properties": {
          "entity_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "minItems": 1,
            "type": "array"
          },
          "selector": {
            "enum": [
              "non_variant"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "CreateDiagramDto": {
        "properties": {
          "annotations": {
            "description": "Freestanding text annotations (titles, section labels)",
            "items": {
              "$ref": "#/components/schemas/DiagramAnnotationItemDto"
            },
            "type": "array"
          },
          "branchId": {
            "description": "Branch to write to. Omit or pass \"master\" for the base branch.",
            "type": "string"
          },
          "connections": {
            "description": "Directed arrows between entity/node IDs",
            "items": {
              "$ref": "#/components/schemas/DiagramConnectionItemDto"
            },
            "type": "array"
          },
          "entities": {
            "description": "Flow platform entities to render as data-shape cards (entity relationship diagrams). For generic shapes use `nodes` instead.",
            "items": {
              "$ref": "#/components/schemas/DiagramEntityItemDto"
            },
            "type": "array"
          },
          "hostEntityId": {
            "description": "Entity to link the diagram to. The diagram appears in this entity's Diagrams section, and rich-text embeds ({\"type\": \"tldraw\", ...} nodes) only resolve diagrams linked to the entity that owns the field — pass this whenever the diagram should be visible from an existing entity.",
            "type": "string"
          },
          "id": {
            "description": "Diagram entity ID (UUID). Auto-generated if omitted. If an existing diagram entity has this ID, its name and snapshot are replaced (upsert); if a non-diagram entity has this ID the request fails with 409.",
            "type": "string"
          },
          "name": {
            "description": "Diagram title",
            "type": "string"
          },
          "nodes": {
            "description": "Standalone geometric nodes not backed by Flow entities (state machines, flowcharts). Provide x/y on every node for a controlled layout.",
            "items": {
              "$ref": "#/components/schemas/DiagramNodeItemDto"
            },
            "type": "array"
          },
          "snapshot": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DiagramSnapshotDto"
              }
            ],
            "description": "Pre-built tldraw snapshot to persist verbatim — exactly the `snapshot` object returned by POST /convert/drawio-to-tldraw. Mutually exclusive with entities/nodes/connections/annotations."
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CreateEntityDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "entityType": {
            "description": "Entity type (e.g. \"task\", \"bug\")",
            "type": "string"
          },
          "id": {
            "description": "Entity ID (UUID). Auto-generated if omitted.",
            "type": "string"
          },
          "name": {
            "description": "Entity name",
            "type": "string"
          }
        },
        "required": [
          "entityType",
          "name"
        ],
        "type": "object"
      },
      "CreateFileDto": {
        "properties": {
          "mime_type": {
            "type": "string"
          },
          "original_name": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        },
        "required": [
          "original_name",
          "size",
          "mime_type"
        ],
        "type": "object"
      },
      "CreateProjectDto": {
        "properties": {
          "copyAutomations": {
            "description": "Copy the source project automations. Defaults to true.",
            "type": "boolean"
          },
          "copyDataModel": {
            "description": "Copy the source project data model (categories, fields, tag options). Defaults to true.",
            "type": "boolean"
          },
          "copyFromProjectId": {
            "description": "When provided, copies structure from the specified project into the new one. Which parts are copied is controlled by the copy* flags below (all default to true, so omitting them copies everything, as before). Takes precedence over seedFromTemplate.",
            "type": "string"
          },
          "copySkills": {
            "description": "Copy the source project skills (and skill folders). Defaults to true.",
            "type": "boolean"
          },
          "copyViews": {
            "description": "Copy the source project saved views. Requires copyDataModel. Defaults to true.",
            "type": "boolean"
          },
          "name": {
            "description": "Display name for the new project",
            "type": "string"
          },
          "seedFromTemplate": {
            "description": "Seed the new project from the workspace default-template project (data model, saved views, and dashboards). Ignored when copyFromProjectId is set. Defaults to false — an omitted flag yields a blank project.",
            "type": "boolean"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CreateReqifImportUploadDto": {
        "properties": {
          "file_name": {
            "description": "Original archive filename (.reqif or .reqifz).",
            "type": "string"
          },
          "mime_type": {
            "description": "Archive MIME type.",
            "type": "string"
          },
          "size": {
            "description": "Archive size in bytes.",
            "type": "number"
          }
        },
        "required": [
          "file_name",
          "size",
          "mime_type"
        ],
        "type": "object"
      },
      "CreateSharedAccessGrantDto": {
        "properties": {
          "access_level": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedAccessLevel"
              }
            ],
            "default": "viewer",
            "description": "Capability for this shared scope. Existing share behavior is viewer."
          },
          "branch_id": {
            "description": "Branch the grant unlocks. Use \"master\" for the base branch.",
            "type": "string"
          },
          "branch_scope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedBranchScope"
              }
            ],
            "default": "branch",
            "description": "How far the grant reaches from branch_id: that branch alone, it plus every branch descended from it, or every branch in the project."
          },
          "expires_at": {
            "description": "ISO8601 expiry. Omit for a permanent grant.",
            "nullable": true,
            "type": "string"
          },
          "project_id": {
            "description": "Project the grant is scoped to",
            "type": "string"
          },
          "starting_entity_id": {
            "description": "Entity the view should anchor to for the recipient",
            "type": "string"
          },
          "user_group_id": {
            "description": "User group receiving the grant",
            "type": "string"
          },
          "user_id": {
            "description": "External user receiving the grant",
            "type": "string"
          },
          "view_id": {
            "description": "CustomView.id from the project-scoped custom-views-2 registry",
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "branch_id",
          "view_id",
          "starting_entity_id"
        ],
        "type": "object"
      },
      "CreateSubscriptionDto": {
        "properties": {
          "branch_id": {
            "type": "string"
          },
          "entity_id": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "branch_id",
          "project_id"
        ],
        "type": "object"
      },
      "CreateUserGroupDto": {
        "properties": {
          "external_provider": {
            "type": "string"
          },
          "external_role": {
            "type": "string"
          },
          "member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CustomerAddTagOptionsDto": {
        "properties": {
          "tags": {
            "description": "Option names to ensure on an existing plain tag field. Existing names are treated idempotently; only new names append new tag options, and omitted options are preserved.",
            "example": [
              {
                "name": "Medium"
              },
              {
                "name": "Urgent"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/CustomerTagInputDto"
            },
            "type": "array"
          }
        },
        "required": [
          "tags"
        ],
        "type": "object"
      },
      "CustomerCategoryResponseDto": {
        "properties": {
          "builtin": {
            "type": "boolean"
          },
          "categoryType": {
            "enum": [
              "folder",
              "item"
            ],
            "type": "string"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/CustomerFieldResponseDto"
            },
            "type": "array"
          },
          "humanIdPrefix": {
            "type": "string"
          },
          "humanIdPrefixLocked": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "categoryType",
          "builtin",
          "fields",
          "humanIdPrefix",
          "humanIdPrefixLocked"
        ],
        "type": "object"
      },
      "CustomerChangedEntityDto": {
        "properties": {
          "change_type": {
            "enum": [
              "CREATED",
              "UPDATED"
            ],
            "type": "string"
          },
          "entity_id": {
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "change_type"
        ],
        "type": "object"
      },
      "CustomerCommentResponseDto": {
        "properties": {
          "author_id": {
            "description": "ID of the user who authored the comment.",
            "type": "string"
          },
          "branch_id": {
            "description": "Branch the comment was posted on; absent for the main line.",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "entity_id": {
            "description": "Entity the comment is attached to.",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "resolved": {
            "description": "Whether the comment thread has been resolved.",
            "type": "boolean"
          },
          "text": {
            "description": "Plain-text body of the comment.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "entity_id",
          "author_id",
          "text",
          "resolved",
          "created_at"
        ],
        "type": "object"
      },
      "CustomerCreateCategoryDto": {
        "properties": {
          "categoryType": {
            "enum": [
              "folder",
              "item"
            ],
            "type": "string"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/CustomerFieldInputDto"
            },
            "type": "array"
          },
          "humanIdPrefix": {
            "maxLength": 32,
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "categoryType"
        ],
        "type": "object"
      },
      "CustomerCreateCommentDto": {
        "properties": {
          "branch_id": {
            "description": "Branch to post the comment on. Omit (or pass \"master\") to post on the main line.",
            "type": "string"
          },
          "text": {
            "description": "Plain-text body of the comment.",
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "type": "object"
      },
      "CustomerDefaultFormulaChangedReasonDto": {
        "properties": {
          "field_name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "default_formula_changed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "field_name"
        ],
        "type": "object"
      },
      "CustomerDefaultFormulaReappliedReasonDto": {
        "properties": {
          "field_name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "default_formula_reapplied"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "field_name"
        ],
        "type": "object"
      },
      "CustomerEntityChildReorderedChangeDto": {
        "properties": {
          "child_entity_id": {
            "type": "string"
          },
          "parent_entity_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "child_reordered"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "parent_entity_id",
          "child_entity_id"
        ],
        "type": "object"
      },
      "CustomerEntityCreatedChangeDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "entity_type": {
            "type": "string"
          },
          "type": {
            "enum": [
              "entity_created"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_id",
          "entity_type"
        ],
        "type": "object"
      },
      "CustomerEntityCrosslinkAddedChangeDto": {
        "properties": {
          "entity_ids": {
            "description": "The two peer entity IDs for this unordered cross-link.",
            "items": {
              "type": "string"
            },
            "maxItems": 2,
            "minItems": 2,
            "type": "array"
          },
          "type": {
            "enum": [
              "crosslink_added"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_ids"
        ],
        "type": "object"
      },
      "CustomerEntityCrosslinkRemovedChangeDto": {
        "properties": {
          "entity_ids": {
            "description": "The two peer entity IDs for this unordered cross-link.",
            "items": {
              "type": "string"
            },
            "maxItems": 2,
            "minItems": 2,
            "type": "array"
          },
          "type": {
            "enum": [
              "crosslink_removed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_ids"
        ],
        "type": "object"
      },
      "CustomerEntityDeletedChangeDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "entity_deleted"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_id"
        ],
        "type": "object"
      },
      "CustomerEntityFormulaChangedChangeDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "field_key": {
            "type": "string"
          },
          "formula": {
            "nullable": true,
            "type": "string"
          },
          "type": {
            "enum": [
              "formula_changed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_id",
          "field_key",
          "formula"
        ],
        "type": "object"
      },
      "CustomerEntityHistoryActorDto": {
        "properties": {
          "id": {
            "description": "User or agent ID. Omitted for system and unknown actors.",
            "type": "string"
          },
          "type": {
            "enum": [
              "user",
              "agent",
              "system",
              "unknown"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "CustomerEntityHistoryEntryDto": {
        "properties": {
          "actor": {
            "$ref": "#/components/schemas/CustomerEntityHistoryActorDto"
          },
          "branch_id": {
            "description": "Branch that authored this event; \"master\" means Base.",
            "type": "string"
          },
          "change": {
            "discriminator": {
              "mapping": {
                "child_reordered": "#/components/schemas/CustomerEntityChildReorderedChangeDto",
                "crosslink_added": "#/components/schemas/CustomerEntityCrosslinkAddedChangeDto",
                "crosslink_removed": "#/components/schemas/CustomerEntityCrosslinkRemovedChangeDto",
                "entity_created": "#/components/schemas/CustomerEntityCreatedChangeDto",
                "entity_deleted": "#/components/schemas/CustomerEntityDeletedChangeDto",
                "entity_restored": "#/components/schemas/CustomerEntityRestoredChangeDto",
                "formula_changed": "#/components/schemas/CustomerEntityFormulaChangedChangeDto",
                "link_added": "#/components/schemas/CustomerEntityLinkAddedChangeDto",
                "link_removed": "#/components/schemas/CustomerEntityLinkRemovedChangeDto",
                "migration_note": "#/components/schemas/CustomerEntityMigrationNoteChangeDto",
                "value_changed": "#/components/schemas/CustomerEntityValueChangedChangeDto"
              },
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/CustomerEntityCreatedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityValueChangedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityFormulaChangedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityLinkAddedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityLinkRemovedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityCrosslinkAddedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityCrosslinkRemovedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityDeletedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityRestoredChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityChildReorderedChangeDto"
              },
              {
                "$ref": "#/components/schemas/CustomerEntityMigrationNoteChangeDto"
              }
            ]
          },
          "id": {
            "description": "Stable event ID for deduplication.",
            "type": "string"
          },
          "reason": {
            "discriminator": {
              "mapping": {
                "default_formula_changed": "#/components/schemas/CustomerDefaultFormulaChangedReasonDto",
                "default_formula_reapplied": "#/components/schemas/CustomerDefaultFormulaReappliedReasonDto",
                "field_type_changed": "#/components/schemas/CustomerFieldTypeChangedReasonDto",
                "formula_recomputed": "#/components/schemas/CustomerFormulaRecomputedReasonDto"
              },
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/CustomerFormulaRecomputedReasonDto"
              },
              {
                "$ref": "#/components/schemas/CustomerFieldTypeChangedReasonDto"
              },
              {
                "$ref": "#/components/schemas/CustomerDefaultFormulaChangedReasonDto"
              },
              {
                "$ref": "#/components/schemas/CustomerDefaultFormulaReappliedReasonDto"
              }
            ]
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "timestamp",
          "branch_id",
          "actor",
          "change"
        ],
        "type": "object"
      },
      "CustomerEntityHistoryPageDto": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/CustomerEntityHistoryEntryDto"
            },
            "type": "array"
          },
          "next_cursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "items",
          "next_cursor"
        ],
        "type": "object"
      },
      "CustomerEntityHistoryQueryDto": {
        "properties": {
          "branch_id": {
            "description": "Branch whose history should be read. Omit or pass \"master\" for Base.",
            "type": "string"
          },
          "cursor": {
            "description": "Opaque cursor returned by the preceding page. It is valid only for the same project, branch, and entity ID set.",
            "type": "string"
          },
          "entity_ids": {
            "description": "Entity IDs whose history should be included in this page.",
            "items": {
              "type": "string"
            },
            "maxItems": 500,
            "minItems": 1,
            "type": "array"
          },
          "limit": {
            "default": 100,
            "maximum": 100,
            "minimum": 1,
            "type": "number"
          }
        },
        "required": [
          "entity_ids"
        ],
        "type": "object"
      },
      "CustomerEntityLinkAddedChangeDto": {
        "properties": {
          "child_entity_id": {
            "type": "string"
          },
          "parent_entity_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "link_added"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "parent_entity_id",
          "child_entity_id"
        ],
        "type": "object"
      },
      "CustomerEntityLinkRemovedChangeDto": {
        "properties": {
          "child_entity_id": {
            "type": "string"
          },
          "parent_entity_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "link_removed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "parent_entity_id",
          "child_entity_id"
        ],
        "type": "object"
      },
      "CustomerEntityMigrationNoteChangeDto": {
        "properties": {
          "action": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "source_entity_id": {
            "type": "string"
          },
          "source_name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "migration_note"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "CustomerEntityRestoredChangeDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "entity_restored"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "entity_id"
        ],
        "type": "object"
      },
      "CustomerEntityValueChangedChangeDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "field_key": {
            "type": "string"
          },
          "type": {
            "enum": [
              "value_changed"
            ],
            "type": "string"
          },
          "value": {
            "nullable": true,
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "items": {},
                "type": "array"
              }
            ]
          }
        },
        "required": [
          "type",
          "entity_id",
          "field_key",
          "value"
        ],
        "type": "object"
      },
      "CustomerFieldInputDto": {
        "properties": {
          "key": {
            "type": "string"
          },
          "multi": {
            "description": "Whether a tag field accepts multiple simultaneous values. Only meaningful for tag fields.",
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "tags": {
            "description": "Plain tag options for this field. On normal category update this is the full replacement list; with addOnly it is treated as options to ensure exist.",
            "items": {
              "$ref": "#/components/schemas/CustomerTagInputDto"
            },
            "type": "array"
          },
          "type": {
            "enum": [
              "text",
              "richText",
              "number",
              "tag",
              "date",
              "toggle",
              "user",
              "verificationResult",
              "diagram",
              "jira",
              "linear",
              "googleDoc",
              "googleSheet",
              "aodocsDoc",
              "cadFile",
              "file",
              "stage"
            ],
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "type"
        ],
        "type": "object"
      },
      "CustomerFieldResponseDto": {
        "properties": {
          "key": {
            "type": "string"
          },
          "multi": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/CustomerTagResponseDto"
            },
            "type": "array"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "type"
        ],
        "type": "object"
      },
      "CustomerFieldTypeChangedReasonDto": {
        "properties": {
          "field_name": {
            "type": "string"
          },
          "next_type": {
            "type": "string"
          },
          "previous_type": {
            "type": "string"
          },
          "type": {
            "enum": [
              "field_type_changed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "field_name",
          "previous_type",
          "next_type"
        ],
        "type": "object"
      },
      "CustomerFormulaRecomputedReasonDto": {
        "properties": {
          "source_entity_id": {
            "type": "string"
          },
          "source_field_key": {
            "type": "string"
          },
          "type": {
            "enum": [
              "formula_recomputed"
            ],
            "type": "string"
          }
        },
        "required": [
          "type"
        ],
        "type": "object"
      },
      "CustomerTagInputDto": {
        "properties": {
          "name": {
            "description": "Display name of the tag option. Customer API writes refer to plain tag options by name; Flow stores and preserves the internal option id.",
            "example": "Medium",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CustomerTagResponseDto": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CustomerUpdateCategoryDto": {
        "properties": {
          "addOnly": {
            "default": false,
            "description": "When true, fields becomes an additive \"ensure this schema exists\" list: omitted fields are preserved, existing fields keep their current name/type/settings, and only missing fields or missing plain-tag options are added. If an existing field key is sent with a different type, the request is rejected instead of converting the field. Without addOnly, fields keeps its normal replacement semantics.",
            "example": true,
            "type": "boolean"
          },
          "categoryType": {
            "enum": [
              "folder",
              "item"
            ],
            "type": "string"
          },
          "fields": {
            "description": "Custom fields for this category. By default, sending this list replaces the customer-managed field list, so omitted fields are removed. Set addOnly=true to preserve existing fields and only add missing fields/tag options.",
            "items": {
              "$ref": "#/components/schemas/CustomerFieldInputDto"
            },
            "type": "array"
          },
          "humanIdPrefix": {
            "maxLength": 32,
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "CustomerUpdateCommentDto": {
        "properties": {
          "resolved": {
            "description": "Mark the comment thread as resolved (true) or reopen it (false).",
            "type": "boolean"
          },
          "text": {
            "description": "New plain-text body for the comment.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "DeletedBranchListRowDto": {
        "properties": {
          "cursor": {
            "description": "Pass as `before` to fetch the page after this row. Opaque; valid only as handed out.",
            "type": "string"
          },
          "deleted_at": {
            "description": "When the branch was archived: the merge time for a merged branch, the delete time for a discarded one.",
            "type": "string"
          },
          "deleted_by_id": {
            "description": "Who deleted a discarded branch. Null for a merged branch: the merge does not record its actor on the row.",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "merged_at": {
            "description": "Set when a merge archived the branch; null when it was discarded through the delete endpoint.",
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "number": {
            "description": "Project-scoped branch number.",
            "type": "number"
          },
          "parent_id": {
            "nullable": true,
            "type": "string"
          },
          "parent_name": {
            "description": "Name of the parent branch; null when the parent is Base.",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "number",
          "name",
          "parent_id",
          "parent_name",
          "merged_at",
          "deleted_at",
          "deleted_by_id",
          "cursor"
        ],
        "type": "object"
      },
      "DiagramAnnotationItemDto": {
        "properties": {
          "color": {
            "description": "Text color — defaults to \"black\"",
            "type": "string"
          },
          "id": {
            "description": "Unique ID (used only for de-duplication)",
            "type": "string"
          },
          "size": {
            "description": "Font size style — defaults to \"l\"",
            "enum": [
              "s",
              "m",
              "l",
              "xl"
            ],
            "type": "string"
          },
          "text": {
            "description": "Annotation text",
            "type": "string"
          },
          "x": {
            "description": "Canvas x position — auto-placed above the diagram if omitted",
            "type": "number"
          },
          "y": {
            "description": "Canvas y position — auto-placed above the diagram if omitted",
            "type": "number"
          }
        },
        "required": [
          "id",
          "text"
        ],
        "type": "object"
      },
      "DiagramConnectionItemDto": {
        "properties": {
          "color": {
            "description": "Arrow color (e.g. \"black\", \"blue\") — defaults to \"black\"",
            "type": "string"
          },
          "dash": {
            "description": "Arrow dash style — defaults to \"draw\"",
            "enum": [
              "draw",
              "solid",
              "dashed",
              "dotted"
            ],
            "type": "string"
          },
          "from": {
            "description": "Source entity or node ID",
            "type": "string"
          },
          "kind": {
            "description": "Arrow routing style: \"elbow\" (default) uses right-angle corners, \"arc\" a smooth curve",
            "enum": [
              "arc",
              "elbow"
            ],
            "type": "string"
          },
          "label": {
            "description": "Short label shown at the midpoint of the arrow",
            "type": "string"
          },
          "to": {
            "description": "Target entity or node ID",
            "type": "string"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "type": "object"
      },
      "DiagramEntityItemDto": {
        "properties": {
          "childColumns": {
            "description": "When this entity is a container (other items name it as their parentId), the fixed number of columns to arrange its children into (≥ 1). Omit for an automatic ≈√n grid.",
            "type": "number"
          },
          "geo": {
            "description": "Visual treatment of the card. 'pill' renders a compact single-row oval (the clean affordance for interfaces and other entities mounted on a connection); omit or 'card' for the default header + body card.",
            "enum": [
              "card",
              "pill"
            ],
            "type": "string"
          },
          "id": {
            "description": "Platform entity ID of the Flow entity to render",
            "type": "string"
          },
          "name": {
            "description": "Display name shown on the card",
            "type": "string"
          },
          "parentId": {
            "description": "Id of another entity/node in this payload that should contain this card. When set, the card is nested inside that container and auto-placed in its grid. Omit for a top-level card.",
            "type": "string"
          },
          "type": {
            "description": "Entity type label (e.g. \"Requirement\")",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type"
        ],
        "type": "object"
      },
      "DiagramNodeItemDto": {
        "properties": {
          "childColumns": {
            "description": "When this node is a container, the fixed number of columns to arrange its children into (≥ 1). Omit for an automatic ≈√n grid.",
            "type": "number"
          },
          "color": {
            "description": "tldraw color style (e.g. \"black\", \"blue\", \"red\", \"green\", \"orange\", \"violet\") — defaults to \"black\"",
            "type": "string"
          },
          "dash": {
            "description": "Border dash style — defaults to \"draw\"",
            "enum": [
              "draw",
              "solid",
              "dashed",
              "dotted"
            ],
            "type": "string"
          },
          "fill": {
            "description": "Fill style — defaults to \"none\"",
            "enum": [
              "none",
              "semi",
              "solid",
              "pattern"
            ],
            "type": "string"
          },
          "h": {
            "description": "Height override in pixels (≥ 1)",
            "type": "number"
          },
          "id": {
            "description": "Unique ID for this node — referenced by connections",
            "type": "string"
          },
          "name": {
            "description": "Label displayed inside the shape",
            "type": "string"
          },
          "parentId": {
            "description": "Id of another node/entity in this payload that should contain this node. When set, x/y are ignored and the node is auto-placed inside the container.",
            "type": "string"
          },
          "shape": {
            "description": "Geometric shape type — defaults to \"rectangle\"",
            "enum": [
              "rectangle",
              "ellipse",
              "diamond",
              "triangle",
              "star",
              "cloud"
            ],
            "type": "string"
          },
          "size": {
            "description": "Size style controlling font/stroke scale — defaults to \"m\"",
            "enum": [
              "s",
              "m",
              "l",
              "xl"
            ],
            "type": "string"
          },
          "w": {
            "description": "Width override in pixels (≥ 1)",
            "type": "number"
          },
          "x": {
            "description": "Canvas x position — auto-placed in a grid when omitted",
            "type": "number"
          },
          "y": {
            "description": "Canvas y position — auto-placed in a grid when omitted",
            "type": "number"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "DiagramSnapshotDto": {
        "properties": {
          "schema": {
            "description": "Serialized tldraw schema (versioning metadata)",
            "type": "object"
          },
          "store": {
            "description": "tldraw store records keyed by record ID",
            "type": "object"
          }
        },
        "required": [
          "store",
          "schema"
        ],
        "type": "object"
      },
      "DrawioToTldrawDto": {
        "properties": {
          "xml": {
            "description": "Diagram XML in either supported format — the endpoint detects which:\n- draw.io: a raw <mxGraphModel>, an <mxfile> wrapper with an inline <mxGraphModel>, or an <mxfile> whose <diagram> body is the draw.io compressed form (base64 + raw-deflate + URI-encoded XML).\n- Flow: a <diagram> document as produced by /convert/tldraw-to-xml.",
            "type": "string"
          }
        },
        "required": [
          "xml"
        ],
        "type": "object"
      },
      "EntityCrosslinksResponseDto": {
        "properties": {
          "crosslinks": {
            "description": "Ids of entities cross-linked to this one that are not deleted on the requested branch. Unordered — cross-links are peer relationships and carry no sort key.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "entityId": {
            "type": "string"
          }
        },
        "required": [
          "entityId",
          "crosslinks"
        ],
        "type": "object"
      },
      "EntityLinksDto": {
        "properties": {
          "crosslinks": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "inbound": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "inboundOrder": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "inboundTypes": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "outbound": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "outboundOrder": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "outboundTypes": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "rootPlaced": {
            "type": "boolean"
          }
        },
        "required": [
          "inbound",
          "outbound",
          "crosslinks",
          "inboundOrder"
        ],
        "type": "object"
      },
      "EntityListResponseDto": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/EntityStateResponseDto"
            },
            "type": "array"
          },
          "moreAvailable": {
            "description": "Whether more pages may exist (keyset mode only). Keep paginating while true.",
            "type": "boolean"
          },
          "nextPageStart": {
            "description": "Cursor to pass as `starting_after` for the next page (keyset mode only). Opaque; compare only for equality.",
            "type": "string"
          }
        },
        "required": [
          "items"
        ],
        "type": "object"
      },
      "EntityStateResponseDto": {
        "properties": {
          "branchesChangedIn": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "branchesCreatedIn": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "defaultSortKey": {
            "type": "string"
          },
          "deleted": {
            "type": "boolean"
          },
          "formulaTemplates": {
            "type": "object"
          },
          "formulas": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "id": {
            "type": "string"
          },
          "links": {
            "$ref": "#/components/schemas/EntityLinksDto"
          },
          "type": {
            "type": "string"
          },
          "uniqueEntityNumber": {
            "type": "number"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "values": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "values",
          "formulas",
          "formulaTemplates",
          "links"
        ],
        "type": "object"
      },
      "ExecuteBranchExtractionDto": {
        "properties": {
          "destination_name": {
            "type": "string"
          },
          "plan_id": {
            "format": "uuid",
            "type": "string"
          }
        },
        "required": [
          "plan_id"
        ],
        "type": "object"
      },
      "FileRecordResponseDto": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "original_name": {
            "type": "string"
          },
          "size": {
            "type": "number"
          }
        },
        "required": [
          "id",
          "original_name",
          "size",
          "mime_type",
          "created_by",
          "created_at"
        ],
        "type": "object"
      },
      "FileUploadResponseDto": {
        "properties": {
          "id": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "original_name": {
            "type": "string"
          },
          "size": {
            "type": "number"
          },
          "upload_headers": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Headers the client MUST send on the PUT to upload_url. Empty for S3; { \"x-ms-blob-type\": \"BlockBlob\" } for Azure Blob. Apply them all.",
            "type": "object"
          },
          "upload_url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "upload_url",
          "upload_headers",
          "original_name",
          "size",
          "mime_type"
        ],
        "type": "object"
      },
      "FileUrlResponseDto": {
        "properties": {
          "expires_in": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "mime_type": {
            "description": "Stored content type. The preview picks its renderer from this rather than guessing at the filename extension.",
            "type": "string"
          },
          "original_name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "url",
          "expires_in",
          "original_name",
          "mime_type"
        ],
        "type": "object"
      },
      "FlowMdResponseDto": {
        "properties": {
          "content": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "ImportCandidateEntityDto": {
        "properties": {
          "details": {
            "description": "Everything the pages said this is — a requirement's statement, a design value's quantity.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "mentions": {
            "items": {
              "$ref": "#/components/schemas/ImportProvenanceDto"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "types": {
            "description": "Every type the run called this name, in the source's words.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "name",
          "types",
          "details",
          "mentions"
        ],
        "type": "object"
      },
      "ImportCandidateRelationshipDto": {
        "properties": {
          "evidence": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "from": {
            "type": "string"
          },
          "implied": {
            "description": "True when every sighting read it off layout, not words.",
            "type": "boolean"
          },
          "mentions": {
            "items": {
              "$ref": "#/components/schemas/ImportProvenanceDto"
            },
            "type": "array"
          },
          "to": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "from",
          "to",
          "type",
          "implied",
          "evidence",
          "mentions"
        ],
        "type": "object"
      },
      "ImportChunkResultDto": {
        "properties": {
          "analysis": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ChunkAnalysisDto"
              }
            ],
            "nullable": true,
            "type": "object"
          },
          "chunkId": {
            "type": "string"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "fileId": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "inputTokens": {
            "type": "number"
          },
          "kind": {
            "enum": [
              "pdf_page",
              "image"
            ],
            "type": "string"
          },
          "outputTokens": {
            "type": "number"
          },
          "page": {
            "nullable": true,
            "type": "number"
          },
          "status": {
            "enum": [
              "pending",
              "running",
              "done",
              "failed"
            ],
            "type": "string"
          }
        },
        "required": [
          "chunkId",
          "fileId",
          "filename",
          "kind",
          "page",
          "status",
          "analysis",
          "inputTokens",
          "outputTokens",
          "error"
        ],
        "type": "object"
      },
      "ImportProvenanceDto": {
        "properties": {
          "boxes": {
            "items": {
              "$ref": "#/components/schemas/PageBoxDto"
            },
            "type": "array"
          },
          "chunkId": {
            "type": "string"
          },
          "fileId": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "page": {
            "description": "1-based page for a PDF chunk, null for a whole image.",
            "nullable": true,
            "type": "number"
          }
        },
        "required": [
          "chunkId",
          "fileId",
          "filename",
          "page",
          "boxes"
        ],
        "type": "object"
      },
      "ImportRunDetailDto": {
        "properties": {
          "chunks": {
            "items": {
              "$ref": "#/components/schemas/ImportChunkResultDto"
            },
            "type": "array"
          },
          "progress": {
            "$ref": "#/components/schemas/ImportRunProgressDto"
          }
        },
        "required": [
          "progress",
          "chunks"
        ],
        "type": "object"
      },
      "ImportRunFileProgressDto": {
        "properties": {
          "chunksDone": {
            "type": "number"
          },
          "chunksFailed": {
            "type": "number"
          },
          "chunksTotal": {
            "type": "number"
          },
          "fileId": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "kind": {
            "enum": [
              "pdf_page",
              "image"
            ],
            "type": "string"
          }
        },
        "required": [
          "fileId",
          "filename",
          "kind",
          "chunksTotal",
          "chunksDone",
          "chunksFailed"
        ],
        "type": "object"
      },
      "ImportRunListDto": {
        "properties": {
          "runs": {
            "items": {
              "$ref": "#/components/schemas/ImportRunProgressDto"
            },
            "type": "array"
          }
        },
        "required": [
          "runs"
        ],
        "type": "object"
      },
      "ImportRunNoteDto": {
        "properties": {
          "mention": {
            "$ref": "#/components/schemas/ImportProvenanceDto"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "text",
          "mention"
        ],
        "type": "object"
      },
      "ImportRunOutputDto": {
        "properties": {
          "entities": {
            "items": {
              "$ref": "#/components/schemas/ImportCandidateEntityDto"
            },
            "type": "array"
          },
          "notes": {
            "items": {
              "$ref": "#/components/schemas/ImportRunNoteDto"
            },
            "type": "array"
          },
          "relationships": {
            "items": {
              "$ref": "#/components/schemas/ImportCandidateRelationshipDto"
            },
            "type": "array"
          },
          "runId": {
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "planning",
              "running",
              "succeeded",
              "failed",
              "cancelled"
            ],
            "type": "string"
          }
        },
        "required": [
          "runId",
          "status",
          "entities",
          "relationships",
          "notes"
        ],
        "type": "object"
      },
      "ImportRunProgressDto": {
        "properties": {
          "chunksDone": {
            "type": "number"
          },
          "chunksFailed": {
            "type": "number"
          },
          "chunksRunning": {
            "type": "number"
          },
          "chunksTotal": {
            "description": "Null until planning has opened every file.",
            "nullable": true,
            "type": "number"
          },
          "completedAt": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          },
          "entityCount": {
            "type": "number"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "fileIds": {
            "description": "Files the run was asked for, known before anything is opened.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/ImportRunFileProgressDto"
            },
            "type": "array"
          },
          "inputTokens": {
            "type": "number"
          },
          "noteCount": {
            "type": "number"
          },
          "outputTokens": {
            "type": "number"
          },
          "relationshipCount": {
            "type": "number"
          },
          "runId": {
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "planning",
              "running",
              "succeeded",
              "failed",
              "cancelled"
            ],
            "type": "string"
          }
        },
        "required": [
          "runId",
          "status",
          "fileIds",
          "chunksTotal",
          "chunksDone",
          "chunksRunning",
          "chunksFailed",
          "entityCount",
          "relationshipCount",
          "noteCount",
          "inputTokens",
          "outputTokens",
          "files",
          "error",
          "createdAt",
          "completedAt"
        ],
        "type": "object"
      },
      "ItemReviewerDto": {
        "properties": {
          "group_id": {
            "type": "string"
          },
          "is_available": {
            "type": "boolean"
          },
          "is_designated": {
            "type": "boolean"
          },
          "is_optional": {
            "type": "boolean"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/ItemReviewerSourceDto"
            },
            "type": "array"
          },
          "sources_truncated": {
            "type": "boolean"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "is_designated"
        ],
        "type": "object"
      },
      "ItemReviewerGroupDto": {
        "properties": {
          "available_member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "group_id": {
            "type": "string"
          },
          "is_optional": {
            "type": "boolean"
          },
          "member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/ItemReviewerSourceDto"
            },
            "type": "array"
          },
          "sources_truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "group_id",
          "member_ids",
          "available_member_ids"
        ],
        "type": "object"
      },
      "ItemReviewerSourceDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "entity_name": {
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "entity_name"
        ],
        "type": "object"
      },
      "MarkdownToRichTextDto": {
        "properties": {
          "markdown": {
            "description": "Markdown string to convert to rich text JSON",
            "type": "string"
          }
        },
        "required": [
          "markdown"
        ],
        "type": "object"
      },
      "MergeBranchDto": {
        "properties": {
          "bypass_review": {
            "default": false,
            "description": "Admin-only force merge. Overrides known review, stage-policy, editor-group, and merge-conflict blockers once, while preserving structural, branch-check, and incomplete-check protections. Requires review_bypass_reason.",
            "type": "boolean"
          },
          "review_bypass_reason": {
            "description": "Required when bypass_review is true. The justification and execution-time blocker snapshot are preserved as an immutable review event on the merge baseline.",
            "maxLength": 1000,
            "type": "string"
          }
        },
        "type": "object"
      },
      "NotificationFeedItemDto": {
        "properties": {
          "created_at": {
            "type": "string"
          },
          "event_type": {
            "enum": [
              "UserInvited",
              "ReviewAssigned",
              "ReviewSubmitted",
              "ReviewStale",
              "RequirementBroken",
              "CommentMention",
              "EntityChanged",
              "CommentReply",
              "CommentResolved",
              "BranchReadyForReview",
              "BranchMerged",
              "BranchOwnerChanged",
              "ShareViewOpened"
            ],
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "payload": {
            "additionalProperties": true,
            "type": "object"
          },
          "read": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "event_type",
          "payload",
          "created_at",
          "read"
        ],
        "type": "object"
      },
      "NotificationFeedPageDto": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/NotificationFeedItemDto"
            },
            "type": "array"
          },
          "total": {
            "description": "Total matching rows across all pages",
            "type": "number"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "type": "object"
      },
      "NotificationPreferenceDto": {
        "properties": {
          "email_enabled": {
            "type": "boolean"
          },
          "event_type": {
            "enum": [
              "UserInvited",
              "ReviewAssigned",
              "ReviewSubmitted",
              "ReviewStale",
              "RequirementBroken",
              "CommentMention",
              "EntityChanged",
              "CommentReply",
              "CommentResolved",
              "BranchReadyForReview",
              "BranchMerged",
              "BranchOwnerChanged",
              "ShareViewOpened"
            ],
            "type": "string"
          },
          "in_app_enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "event_type",
          "email_enabled",
          "in_app_enabled"
        ],
        "type": "object"
      },
      "PageBoxDto": {
        "properties": {
          "height": {
            "description": "Height as a fraction of page height.",
            "type": "number"
          },
          "width": {
            "description": "Width as a fraction of page width.",
            "type": "number"
          },
          "x": {
            "description": "Left edge as a fraction of page width.",
            "type": "number"
          },
          "y": {
            "description": "Top edge as a fraction of page height.",
            "type": "number"
          }
        },
        "required": [
          "x",
          "y",
          "width",
          "height"
        ],
        "type": "object"
      },
      "PageEntityDto": {
        "properties": {
          "boxes": {
            "items": {
              "$ref": "#/components/schemas/PageBoxDto"
            },
            "type": "array"
          },
          "detail": {
            "description": "What the page says this is — a requirement's statement.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type",
          "detail",
          "boxes"
        ],
        "type": "object"
      },
      "PageNoteDto": {
        "properties": {
          "boxes": {
            "description": "Where the difficulty arises.",
            "items": {
              "$ref": "#/components/schemas/PageBoxDto"
            },
            "type": "array"
          },
          "text": {
            "description": "What this page raises but cannot settle.",
            "type": "string"
          }
        },
        "required": [
          "text",
          "boxes"
        ],
        "type": "object"
      },
      "PageProvenanceDto": {
        "properties": {
          "boxes": {
            "description": "Where that evidence sits.",
            "items": {
              "$ref": "#/components/schemas/PageBoxDto"
            },
            "type": "array"
          },
          "text": {
            "description": "The words or visual feature evidencing the link.",
            "type": "string"
          }
        },
        "required": [
          "text",
          "boxes"
        ],
        "type": "object"
      },
      "PageRelationshipDto": {
        "properties": {
          "from": {
            "type": "string"
          },
          "implied": {
            "description": "False when the page states the relationship outright.",
            "type": "boolean"
          },
          "provenance": {
            "$ref": "#/components/schemas/PageProvenanceDto"
          },
          "to": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "from",
          "to",
          "type",
          "provenance",
          "implied"
        ],
        "type": "object"
      },
      "PaginatedBranchesDto": {
        "properties": {
          "branches": {
            "items": {
              "$ref": "#/components/schemas/BranchResponseDto"
            },
            "type": "array"
          },
          "has_more": {
            "type": "boolean"
          },
          "total": {
            "type": "number"
          }
        },
        "required": [
          "branches",
          "total",
          "has_more"
        ],
        "type": "object"
      },
      "ParseReqifDto": {
        "properties": {
          "mapping": {
            "description": "Optional import mapping that renames reqif types/fields to flow names and configures per-field behaviour (extract_string, multiple_choice, convert_to, enum tag renames). Omit to use the reqif names verbatim (equivalent to the file-derived default schema).",
            "type": "object"
          },
          "reqif": {
            "description": "The ReqIF document XML to parse. Either the raw contents of a .reqif file or the body of its CORE-CONTENT — the parser reads DATATYPES, SPEC-TYPES, SPEC-OBJECTS, SPECIFICATIONS and SPEC-RELATIONS.",
            "type": "string"
          }
        },
        "required": [
          "reqif"
        ],
        "type": "object"
      },
      "PdfPageImageRequestDto": {
        "properties": {
          "fileId": {
            "description": "Id of the uploaded PDF.",
            "type": "string"
          },
          "page": {
            "description": "Physical page number, 1-based.",
            "type": "number"
          }
        },
        "required": [
          "fileId",
          "page"
        ],
        "type": "object"
      },
      "PdfPageImageResponseDto": {
        "properties": {
          "heightPx": {
            "description": "Rendered height in pixels.",
            "type": "number"
          },
          "page": {
            "type": "number"
          },
          "pageCount": {
            "description": "Pages in the document, so a viewer can page through it without a second round trip to learn where it ends.",
            "type": "number"
          },
          "pngBase64": {
            "description": "The rendered page as base64 PNG. Inlined rather than served as a URL so the browser needs no separately authenticated image request.",
            "type": "string"
          },
          "widthPx": {
            "description": "Rendered width in pixels.",
            "type": "number"
          }
        },
        "required": [
          "page",
          "widthPx",
          "heightPx",
          "pageCount",
          "pngBase64"
        ],
        "type": "object"
      },
      "ProfilePictureUrlDto": {
        "properties": {
          "expires_in": {
            "type": "number"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "expires_in"
        ],
        "type": "object"
      },
      "ProjectAccessProjectDto": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "slug"
        ],
        "type": "object"
      },
      "ProjectAccessSummaryDto": {
        "properties": {
          "all_projects": {
            "type": "boolean"
          },
          "project_count": {
            "type": "number"
          },
          "projects": {
            "items": {
              "$ref": "#/components/schemas/ProjectAccessProjectDto"
            },
            "type": "array"
          },
          "total_project_count": {
            "type": "number"
          }
        },
        "required": [
          "all_projects",
          "project_count",
          "total_project_count",
          "projects"
        ],
        "type": "object"
      },
      "ProjectResponseDto": {
        "properties": {
          "ai_model": {
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "created_at",
          "ai_model"
        ],
        "type": "object"
      },
      "RebaseOntoBranchDto": {
        "properties": {
          "name": {
            "description": "Name for the new branch. Defaults to \"<source name> (rebased)\".",
            "type": "string"
          },
          "newParentId": {
            "description": "Branch id to replay this branch onto. null (or \"master\") = the project Base.",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "newParentId"
        ],
        "type": "object"
      },
      "RemoveLinkDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "destinationId": {
            "type": "string"
          }
        },
        "required": [
          "destinationId"
        ],
        "type": "object"
      },
      "RenameBranchTagDto": {
        "properties": {
          "current_text": {
            "maxLength": 64,
            "type": "string"
          },
          "new_text": {
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "current_text",
          "new_text"
        ],
        "type": "object"
      },
      "ReorderChildrenDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "childIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "childIds"
        ],
        "type": "object"
      },
      "ReplaceCrosslinksDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "crosslinkIds": {
            "description": "The complete set of entities this entity should be cross-linked to. Peers not listed are unlinked; pass an empty array to clear every cross-link.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "type": "array"
          }
        },
        "required": [
          "crosslinkIds"
        ],
        "type": "object"
      },
      "ReqifImportJobResponseDto": {
        "properties": {
          "branch_id": {
            "nullable": true,
            "type": "string"
          },
          "branch_name": {
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "items_done": {
            "type": "number"
          },
          "items_total": {
            "nullable": true,
            "type": "number"
          },
          "last_error": {
            "nullable": true,
            "type": "string"
          },
          "last_error_reference": {
            "nullable": true,
            "type": "string"
          },
          "phase": {
            "type": "string"
          },
          "schema": {
            "description": "File-derived schema for the mapping wizard (once parsed).",
            "nullable": true,
            "type": "object"
          },
          "status": {
            "enum": [
              "awaiting_upload",
              "parsing",
              "parsed",
              "importing",
              "succeeded",
              "failed",
              "cancelled"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "status",
          "phase",
          "items_done"
        ],
        "type": "object"
      },
      "ReqifImportUploadResponseDto": {
        "properties": {
          "job_id": {
            "type": "string"
          },
          "upload_headers": {
            "description": "HTTP headers the client must send with the PUT.",
            "type": "object"
          },
          "upload_url": {
            "description": "Presigned URL to PUT the archive bytes to.",
            "type": "string"
          }
        },
        "required": [
          "job_id",
          "upload_url",
          "upload_headers"
        ],
        "type": "object"
      },
      "RestoreBranchDto": {
        "properties": {
          "expected_chain_ids": {
            "description": "The ids of the chain a restore preview showed, in its order. When present, the restore refuses with 409 if the chain it would restore now differs, so what was confirmed is what happens. Omit to restore whatever the chain is now.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "expected_rebase_ids": {
            "description": "The ids of the chain members the preview said would be rebased as part of the restore. When present alongside expected_chain_ids, the restore refuses with 409 if a different set would be rebased now, so a rebase is never performed unseen.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "RestoreChainMemberDto": {
        "properties": {
          "deleted_at": {
            "description": "When the branch was archived: the merge time for a merged branch, the delete time for a discarded one.",
            "type": "string"
          },
          "deleted_by_id": {
            "description": "Who deleted a discarded branch. Null for a merged branch: the merge does not record its actor on the row.",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "merged_at": {
            "description": "Set when a merge archived the branch; null when it was discarded through the delete endpoint.",
            "nullable": true,
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "number": {
            "description": "Project-scoped branch number.",
            "type": "number"
          },
          "parent_id": {
            "nullable": true,
            "type": "string"
          },
          "parent_name": {
            "description": "Name of the parent branch; null when the parent is Base.",
            "nullable": true,
            "type": "string"
          },
          "rebase": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RestoreRebaseStepDto"
              }
            ],
            "description": "Set when restoring this branch rebases it onto its parent's current history because the parent was rebased after the branch was deleted; null when its fork pointer is intact.",
            "nullable": true,
            "type": "object"
          }
        },
        "required": [
          "id",
          "number",
          "name",
          "parent_id",
          "parent_name",
          "merged_at",
          "deleted_at",
          "deleted_by_id",
          "rebase"
        ],
        "type": "object"
      },
      "RestoreRebaseStepDto": {
        "properties": {
          "description": {
            "description": "The step in words, naming both branches by number, as the restore will perform it.",
            "type": "string"
          },
          "parent_id": {
            "description": "The parent whose current history the branch is rebased onto.",
            "type": "string"
          },
          "parent_name": {
            "type": "string"
          },
          "parent_number": {
            "type": "number"
          },
          "parent_rebased_at": {
            "description": "When the parent was rebased: after this branch was deleted, which is why the branch was not carried along then.",
            "type": "string"
          }
        },
        "required": [
          "parent_id",
          "parent_name",
          "parent_number",
          "parent_rebased_at",
          "description"
        ],
        "type": "object"
      },
      "ReuploadFileDto": {
        "properties": {
          "size": {
            "description": "Size in bytes of the replacement content. Overwrites the stored size, which was declared when the record was first minted.",
            "type": "number"
          }
        },
        "required": [
          "size"
        ],
        "type": "object"
      },
      "RevertBaselineDto": {
        "properties": {
          "entity_id": {
            "description": "Narrow the revert to one item the baseline changed. The proposed branch then undoes only that item's part of the merge — its fields, its links at either end, and its child order. Omit to revert the whole baseline. The id must be one the baseline actually changed; any other id is rejected.",
            "maxLength": 255,
            "type": "string"
          }
        },
        "type": "object"
      },
      "RichTextToMarkdownDto": {
        "properties": {
          "richText": {
            "description": "Rich text JSON array to convert to markdown",
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "richText"
        ],
        "type": "object"
      },
      "Role": {
        "enum": [
          "admin",
          "editor",
          "read_only",
          "external"
        ],
        "type": "string"
      },
      "SetBranchOwnerDto": {
        "properties": {
          "user_id": {
            "description": "User to make the branch owner. Omit to take ownership as the caller; naming another user requires project admin.",
            "format": "uuid",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SetChangeRequestTitleDto": {
        "properties": {
          "title": {
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "SetEditorGroupsDto": {
        "properties": {},
        "type": "object"
      },
      "SetFormulaDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "formula": {
            "description": "Formula source in the formula DSL (e.g. `self.qty > 4`). Pass `null` to clear an existing formula on the field.",
            "nullable": true,
            "type": "string"
          },
          "key": {
            "description": "Field key to author the formula on — the same key used in the entity's `values`/`formulas` maps (not the field's display name).",
            "type": "string"
          }
        },
        "required": [
          "key",
          "formula"
        ],
        "type": "object"
      },
      "SetReadyForReviewDto": {
        "properties": {},
        "type": "object"
      },
      "SetRequireReviewDto": {
        "properties": {},
        "type": "object"
      },
      "SetValueDto": {
        "properties": {
          "branchId": {
            "type": "string"
          },
          "key": {
            "type": "string"
          },
          "value": {
            "type": "object"
          }
        },
        "required": [
          "key",
          "value"
        ],
        "type": "object"
      },
      "ShareViewBatchDto": {
        "properties": {
          "access_level": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedAccessLevel"
              }
            ],
            "default": "viewer",
            "description": "Capability granted for this scope. Viewer preserves v1 read-only sharing."
          },
          "branch_id": {
            "description": "Branch the grant unlocks. Use \"master\" for the base branch.",
            "type": "string"
          },
          "branch_scope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedBranchScope"
              }
            ],
            "default": "branch",
            "description": "How far the grants reach from branch_id: that branch alone, it plus every branch descended from it, or every branch in the project."
          },
          "expires_at": {
            "description": "ISO8601 expiry. Omit for permanent grants.",
            "nullable": true,
            "type": "string"
          },
          "project_id": {
            "description": "Project the grant is scoped to",
            "type": "string"
          },
          "recipients": {
            "description": "Recipients of the grant. Each entry is an existing user_id, an existing user_group_id, or an email; emails for unknown users trigger an external-role invite.",
            "items": {
              "$ref": "#/components/schemas/ShareViewRecipientDto"
            },
            "type": "array"
          },
          "starting_entity_id": {
            "description": "Entity the view should anchor to for the recipient",
            "type": "string"
          },
          "suppress_notification": {
            "default": false,
            "type": "boolean"
          },
          "view_id": {
            "description": "CustomView.id from the project-scoped custom-views-2 registry",
            "type": "string"
          }
        },
        "required": [
          "recipients",
          "project_id",
          "branch_id",
          "view_id",
          "starting_entity_id"
        ],
        "type": "object"
      },
      "ShareViewBatchResponseDto": {
        "properties": {
          "grants": {
            "description": "Grants created — one per unique recipient.",
            "items": {
              "$ref": "#/components/schemas/SharedAccessGrantResponseDto"
            },
            "type": "array"
          },
          "invited_user_ids": {
            "description": "Subset of recipient user ids whose User row was created by this call (i.e. the email was previously unknown).",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "grants",
          "invited_user_ids"
        ],
        "type": "object"
      },
      "ShareViewRecipientDto": {
        "properties": {
          "email": {
            "description": "Recipient email. Existing users are looked up; unknown emails are invited as Role.external in the same transaction. Mutually exclusive with user_id.",
            "type": "string"
          },
          "user_group_id": {
            "description": "Existing workspace user group receiving the grant. Mutually exclusive with user_id and email.",
            "type": "string"
          },
          "user_id": {
            "description": "Existing workspace user receiving the grant. Mutually exclusive with email.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SharedAccessGrantRecipientType": {
        "enum": [
          "user",
          "user_group"
        ],
        "type": "string"
      },
      "SharedAccessGrantResponseDto": {
        "properties": {
          "access_level": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedAccessLevel"
              }
            ]
          },
          "branch_id": {
            "type": "string"
          },
          "branch_scope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedBranchScope"
              }
            ]
          },
          "created_at": {
            "type": "string"
          },
          "created_by_id": {
            "nullable": true,
            "type": "string"
          },
          "expires_at": {
            "nullable": true,
            "type": "string"
          },
          "first_viewed_at": {
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "preparing": {
            "type": "boolean"
          },
          "project_id": {
            "type": "string"
          },
          "recipient_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SharedAccessGrantRecipientType"
              }
            ]
          },
          "starting_entity_id": {
            "type": "string"
          },
          "user_email": {
            "nullable": true,
            "type": "string"
          },
          "user_group_id": {
            "nullable": true,
            "type": "string"
          },
          "user_group_name": {
            "nullable": true,
            "type": "string"
          },
          "user_id": {
            "nullable": true,
            "type": "string"
          },
          "view_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "recipient_type",
          "user_id",
          "user_email",
          "user_group_id",
          "user_group_name",
          "project_id",
          "branch_id",
          "view_id",
          "starting_entity_id",
          "access_level",
          "branch_scope",
          "expires_at",
          "created_at",
          "created_by_id",
          "first_viewed_at",
          "preparing"
        ],
        "type": "object"
      },
      "SharedAccessLevel": {
        "enum": [
          "viewer",
          "writer"
        ],
        "type": "string"
      },
      "SharedBranchScope": {
        "enum": [
          "branch",
          "branch_and_children",
          "all_branches"
        ],
        "type": "string"
      },
      "SharedGrantWriteAccessResponseDto": {
        "properties": {
          "can_write": {
            "type": "boolean"
          }
        },
        "required": [
          "can_write"
        ],
        "type": "object"
      },
      "SidebarNotificationsEnabledResponseDto": {
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "StageGateStatusResponseDto": {
        "properties": {
          "evaluated_entity_count": {
            "type": "number"
          },
          "evaluation_complete": {
            "type": "boolean"
          },
          "item_reviewer_groups": {
            "items": {
              "$ref": "#/components/schemas/ItemReviewerGroupDto"
            },
            "type": "array"
          },
          "item_reviewers": {
            "items": {
              "$ref": "#/components/schemas/ItemReviewerDto"
            },
            "type": "array"
          },
          "not_ready_reason": {
            "enum": [
              "projection_warming"
            ],
            "type": "string"
          },
          "progress_percent": {
            "type": "number"
          },
          "reviewer_groups": {
            "items": {
              "$ref": "#/components/schemas/StageReviewerGroupDto"
            },
            "type": "array"
          },
          "stage_reviewers": {
            "items": {
              "$ref": "#/components/schemas/StageReviewerDto"
            },
            "type": "array"
          },
          "total_entity_count": {
            "type": "number"
          },
          "violations": {
            "items": {
              "$ref": "#/components/schemas/StageGateViolationDto"
            },
            "type": "array"
          },
          "violations_truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "violations",
          "violations_truncated",
          "item_reviewers",
          "stage_reviewers",
          "reviewer_groups",
          "item_reviewer_groups",
          "evaluation_complete",
          "progress_percent",
          "evaluated_entity_count",
          "total_entity_count"
        ],
        "type": "object"
      },
      "StageGateViolationDto": {
        "properties": {
          "approvals_needed": {
            "type": "number"
          },
          "entity_id": {
            "type": "string"
          },
          "entity_name": {
            "type": "string"
          },
          "from_stage": {
            "type": "string"
          },
          "gate_direction": {
            "enum": [
              "in",
              "out"
            ],
            "type": "string"
          },
          "gate_stage": {
            "type": "string"
          },
          "has_reviewer_groups": {
            "type": "boolean"
          },
          "kind": {
            "enum": [
              "multi_step",
              "no_reviewers",
              "missing_approvals",
              "forbidden_transition",
              "locked"
            ],
            "type": "string"
          },
          "pending_reviewer_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "to_stage": {
            "type": "string"
          },
          "unavailable_reviewer_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "entity_id",
          "entity_name",
          "kind",
          "from_stage",
          "to_stage",
          "pending_reviewer_ids",
          "unavailable_reviewer_ids",
          "approvals_needed"
        ],
        "type": "object"
      },
      "StageReviewerDto": {
        "properties": {
          "is_available": {
            "type": "boolean"
          },
          "is_designated": {
            "type": "boolean"
          },
          "is_individual": {
            "type": "boolean"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/StageReviewerSourceDto"
            },
            "type": "array"
          },
          "sources_truncated": {
            "type": "boolean"
          },
          "user_id": {
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "is_designated"
        ],
        "type": "object"
      },
      "StageReviewerGroupDto": {
        "properties": {
          "available_member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "gate_rigour": {
            "enum": [
              "any",
              "all"
            ],
            "type": "string"
          },
          "group_id": {
            "type": "string"
          },
          "member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/StageReviewerSourceDto"
            },
            "type": "array"
          },
          "sources_truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "group_id",
          "member_ids",
          "available_member_ids",
          "gate_rigour"
        ],
        "type": "object"
      },
      "StageReviewerSourceDto": {
        "properties": {
          "entity_id": {
            "type": "string"
          },
          "entity_name": {
            "type": "string"
          },
          "from_stage": {
            "type": "string"
          },
          "to_stage": {
            "type": "string"
          }
        },
        "required": [
          "entity_id",
          "entity_name",
          "from_stage",
          "to_stage"
        ],
        "type": "object"
      },
      "StartImportRunDto": {
        "properties": {
          "fileIds": {
            "description": "Ids of the uploaded files to read. PDFs are split page by page, images are read whole; any other file type is refused.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "fileIds"
        ],
        "type": "object"
      },
      "SubmitReviewDto": {
        "properties": {
          "comment": {
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "status": {
            "enum": [
              "Approved",
              "Rejected"
            ],
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "SubscribersDto": {
        "properties": {
          "user_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "user_ids"
        ],
        "type": "object"
      },
      "SubscriptionStatusDto": {
        "properties": {
          "subscribed": {
            "type": "boolean"
          }
        },
        "required": [
          "subscribed"
        ],
        "type": "object"
      },
      "TldrawSnapshotToXmlDto": {
        "properties": {
          "name": {
            "description": "Optional diagram name used as the root <diagram name=\"...\"> attribute.",
            "type": "string"
          },
          "snapshot": {
            "additionalProperties": true,
            "description": "A tldraw StoreSnapshot JSON object (`{ store, schema }`) as returned by `editor.store.getStoreSnapshot()` or the `/convert/drawio-to-tldraw` endpoint.",
            "type": "object"
          }
        },
        "required": [
          "snapshot"
        ],
        "type": "object"
      },
      "TriggerBranchDto": {
        "properties": {
          "branch_id": {
            "type": "string"
          },
          "checks_only": {
            "type": "boolean"
          },
          "project_id": {
            "type": "string"
          }
        },
        "required": [
          "branch_id"
        ],
        "type": "object"
      },
      "TriggerBranchRerunDto": {
        "properties": {
          "automation_id": {
            "type": "string"
          },
          "branch_id": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          }
        },
        "required": [
          "branch_id"
        ],
        "type": "object"
      },
      "TriggerGenericDto": {
        "properties": {
          "context": {
            "type": "object"
          },
          "project_id": {
            "type": "string"
          },
          "source": {
            "description": "The automation trigger source to fire. One of the built-in sources (branch, endpoint, import, schedule, slack, github, gitlab, onshape), or the name given to an automation's custom webhook trigger.",
            "type": "string"
          },
          "wait": {
            "default": false,
            "description": "Whether to hold the request open until every matched automation has finished running. Defaults to false: the runs start, the response is 202 with one run id each, and you read results from GET /ai/trigger/runs. Pass true only when the caller genuinely cannot poll — it makes response time the sum of the runs, an agent run has no time bound, and the request dies on the shortest timeout between you and this API (our load balancer cuts an idle connection at 60s), which loses the response while the runs themselves carry on.",
            "type": "boolean"
          }
        },
        "required": [
          "source",
          "context"
        ],
        "type": "object"
      },
      "TriggerGitHubDto": {
        "properties": {
          "action": {
            "type": "string"
          },
          "base_branch": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "diff": {
            "type": "string"
          },
          "head_branch": {
            "type": "string"
          },
          "pr_number": {
            "type": "number"
          },
          "project_id": {
            "type": "string"
          },
          "repo": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "wait": {
            "default": false,
            "description": "Whether to hold the request open until every matched automation has finished running. Defaults to false: the runs start, the response is 202 with one run id each, and you read results from GET /ai/trigger/runs. Pass true only when the caller genuinely cannot poll — it makes response time the sum of the runs, an agent run has no time bound, and the request dies on the shortest timeout between you and this API (our load balancer cuts an idle connection at 60s), which loses the response while the runs themselves carry on.",
            "type": "boolean"
          }
        },
        "required": [
          "repo",
          "pr_number",
          "title",
          "action",
          "diff"
        ],
        "type": "object"
      },
      "TriggerResponseDto": {
        "properties": {
          "results": {
            "items": {
              "$ref": "#/components/schemas/TriggerResultItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "results"
        ],
        "type": "object"
      },
      "TriggerResultItemDto": {
        "properties": {
          "agent_id": {
            "type": "string"
          },
          "automation_id": {
            "type": "string"
          },
          "automation_name": {
            "type": "string"
          },
          "branches": {
            "default": [],
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "error": {
            "nullable": true,
            "type": "string"
          },
          "integration_grade": {
            "nullable": true,
            "type": "string"
          },
          "integration_response": {
            "nullable": true,
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "project_slug": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "enum": [
              "running",
              "completed",
              "failed"
            ],
            "type": "string"
          }
        },
        "required": [
          "agent_id",
          "status",
          "automation_id",
          "automation_name",
          "integration_response",
          "integration_grade",
          "branches",
          "project_slug",
          "project_id",
          "error"
        ],
        "type": "object"
      },
      "UnreadCountDto": {
        "properties": {
          "count": {
            "description": "Unread count, capped at limit when requested",
            "type": "number"
          }
        },
        "required": [
          "count"
        ],
        "type": "object"
      },
      "UpdateBranchDescriptionDto": {
        "properties": {
          "content": {
            "items": {
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "UpdateFlowMdDto": {
        "properties": {
          "content": {
            "description": "The full Flow.md markdown content",
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "UpdateNotificationPreferenceItemDto": {
        "properties": {
          "email_enabled": {
            "type": "boolean"
          },
          "event_type": {
            "enum": [
              "UserInvited",
              "ReviewAssigned",
              "ReviewSubmitted",
              "ReviewStale",
              "RequirementBroken",
              "CommentMention",
              "EntityChanged",
              "CommentReply",
              "CommentResolved",
              "BranchReadyForReview",
              "BranchMerged",
              "BranchOwnerChanged",
              "ShareViewOpened"
            ],
            "type": "string"
          },
          "in_app_enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "event_type",
          "email_enabled"
        ],
        "type": "object"
      },
      "UpdateNotificationPreferencesDto": {
        "properties": {
          "preferences": {
            "items": {
              "$ref": "#/components/schemas/UpdateNotificationPreferenceItemDto"
            },
            "type": "array"
          }
        },
        "required": [
          "preferences"
        ],
        "type": "object"
      },
      "UpdateProjectDto": {
        "properties": {
          "ai_model": {
            "description": "Default AI model identifier for this project",
            "type": "string"
          },
          "name": {
            "description": "New display name for the project",
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateUserGroupDto": {
        "properties": {
          "external_provider": {
            "nullable": true,
            "type": "string"
          },
          "external_role": {
            "nullable": true,
            "type": "string"
          },
          "member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateVariantsEnabledDto": {
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "UpdatedVariantViewEnabledResponseDto": {
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "UpsertEntityDto": {
        "properties": {
          "entityType": {
            "description": "Entity type (e.g. \"task\", \"bug\"). Must match an existing type in the schema.",
            "type": "string"
          },
          "id": {
            "description": "Entity ID (UUID). Must be unique within the project.",
            "type": "string"
          },
          "idField": {
            "description": "Optional field key to match `id` against instead of treating `id` as the Flow entity id. When set, `id` is interpreted as an external identifier and matched against the current value of this field across existing entities on the branch: a match reuses that entity, a miss creates a new one with a freshly generated Flow id. This decouples the Flow entity id from any one external field (e.g. match on a custom \"ReqIF ID\" field). Omit (or leave the field empty) to keep the default behaviour where `id` is the Flow entity id verbatim.",
            "type": "string"
          },
          "parentIds": {
            "description": "Optional list of parent entity IDs. For each parent, a downstream link is created from that parent to this entity if one does not already exist. Existing upstream links that are not listed here are left untouched.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "values": {
            "description": "Key-value pairs to compare and write. Only keys whose values differ from the stored state will produce diffs.",
            "type": "object"
          }
        },
        "required": [
          "id",
          "entityType",
          "values"
        ],
        "type": "object"
      },
      "UserDto": {
        "properties": {
          "cognito_id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "family_name": {
            "type": "string"
          },
          "given_name": {
            "type": "string"
          },
          "has_profile_picture": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Role"
              }
            ]
          }
        },
        "required": [
          "id",
          "email",
          "given_name",
          "family_name"
        ],
        "type": "object"
      },
      "UserGroupResponseDto": {
        "properties": {
          "external_provider": {
            "nullable": true,
            "type": "string"
          },
          "external_role": {
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "member_ids": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "scim_managed": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "member_ids",
          "external_role",
          "external_provider",
          "scim_managed"
        ],
        "type": "object"
      },
      "UserPageDto": {
        "properties": {
          "has_more": {
            "type": "boolean"
          },
          "next_offset": {
            "type": "number"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/UserDto"
            },
            "type": "array"
          }
        },
        "required": [
          "users",
          "has_more",
          "next_offset"
        ],
        "type": "object"
      },
      "UserWithPermissionsDto": {
        "properties": {
          "deactivated_at": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "family_name": {
            "type": "string"
          },
          "given_name": {
            "type": "string"
          },
          "has_profile_picture": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "project_access": {
            "$ref": "#/components/schemas/ProjectAccessSummaryDto"
          },
          "provisioned_at": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "provisioned_via_provider": {
            "nullable": true,
            "type": "string"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Role"
              }
            ]
          }
        },
        "required": [
          "id",
          "email",
          "given_name",
          "family_name",
          "role",
          "provisioned_via_provider",
          "provisioned_at",
          "deactivated_at",
          "project_access"
        ],
        "type": "object"
      },
      "VariantsEnabledResponseDto": {
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "api-key": {
        "in": "header",
        "name": "X-API-Key",
        "type": "apiKey"
      },
      "bearer": {
        "bearerFormat": "JWT",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {},
    "description": "Flow customer API reference. Start with the [quickstart](/api/quickstart) and [authentication guide](/api/authentication).",
    "title": "Customer API",
    "version": "1.0.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/ai/trigger": {
      "post": {
        "operationId": "AutomationTriggerController_triggerGeneric",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerGenericDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": ""
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": "The matched automations were started, not awaited. Each result carries its run id and `status: \"running\"`; read the outcome from GET /ai/trigger/runs. A request sending `wait: true` instead responds once every run has finished, with the outcomes inline."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Trigger automation from any source",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-ai-trigger",
          "metadata": {
            "sidebarTitle": "Trigger automation from any source",
            "title": "Trigger automation from any source"
          }
        }
      }
    },
    "/ai/trigger/branch": {
      "post": {
        "operationId": "AutomationTriggerController_triggerBranch",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerBranchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Trigger branch-review automations when the review page opens",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-ai-trigger-branch",
          "metadata": {
            "sidebarTitle": "Trigger branch-review automations when the review page opens",
            "title": "Trigger branch-review automations when the review page opens"
          }
        }
      }
    },
    "/ai/trigger/branch/checks": {
      "get": {
        "operationId": "AutomationTriggerController_listBranchChecks",
        "parameters": [
          {
            "in": "query",
            "name": "branch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchChecksResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Branch checks — every script-mode branch automation, with the verdict of its latest run on this branch",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-ai-trigger-branch-checks",
          "metadata": {
            "sidebarTitle": "Get branch automation checks",
            "title": "Get branch automation checks"
          }
        }
      }
    },
    "/ai/trigger/branch/rerun": {
      "post": {
        "operationId": "AutomationTriggerController_triggerBranchRerun",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerBranchRerunDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Re-run branch-review automations (a single one, or all) on demand",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-ai-trigger-branch-rerun",
          "metadata": {
            "sidebarTitle": "Re-run branch-review automations (a single one, or all) on demand",
            "title": "Re-run branch-review automations (a single one, or all) on demand"
          }
        }
      }
    },
    "/ai/trigger/branch/status": {
      "get": {
        "operationId": "AutomationTriggerController_branchStatus",
        "parameters": [
          {
            "in": "query",
            "name": "branch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchReviewStatusResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Branch-review automation staleness — per-automation latest run and whether changes have landed since",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-ai-trigger-branch-status",
          "metadata": {
            "sidebarTitle": "Get branch automation status",
            "title": "Get branch automation status"
          }
        }
      }
    },
    "/ai/trigger/github": {
      "post": {
        "operationId": "AutomationTriggerController_triggerGitHub",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerGitHubDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": ""
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerResponseDto"
                }
              }
            },
            "description": "The matched automations were started, not awaited. Each result carries its run id and `status: \"running\"`; read the outcome from GET /ai/trigger/runs. A request sending `wait: true` instead responds once every run has finished, with the outcomes inline."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Trigger automation from GitHub",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-ai-trigger-github",
          "metadata": {
            "sidebarTitle": "Trigger automation from GitHub",
            "title": "Trigger automation from GitHub"
          }
        }
      }
    },
    "/ai/trigger/runs": {
      "get": {
        "operationId": "AutomationTriggerController_runStatus",
        "parameters": [
          {
            "description": "Comma-separated agent ids from a trigger response, at most 50 per request.",
            "in": "query",
            "name": "agent_ids",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AutomationRunStatusResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Poll automation runs by agent id — status, and the integration response once finished",
        "tags": [
          "Automations"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-ai-trigger-runs",
          "metadata": {
            "sidebarTitle": "Poll automation runs by agent id — status, and the integration response once finished",
            "title": "Poll automation runs by agent id — status, and the integration response once finished"
          }
        }
      }
    },
    "/convert/drawio-to-tldraw": {
      "post": {
        "description": "Accepts **either** format and auto-detects which one was sent:\n\n- **draw.io** — raw `<mxGraphModel>`, inline `<mxfile>`, or compressed `<mxfile>`/.drawio. Mapping is best-effort: shapes without a tldraw equivalent fall back to rectangles, and colors are quantized to the closest of tldraw's 13 default colors. Only the first page is converted. Arrow waypoints and external images are dropped.\n- **Flow's own `<diagram>` XML** — the output of `/convert/tldraw-to-xml`. `<entity>` becomes a data-shape card, `<group>` a frame, `<shape>` a geo shape, and `<connection>` a bound arrow. Connection endpoints resolve by id, falling back to the exported name for files produced before shapes carried ids; connections whose endpoints can't be resolved are dropped.\n\nReturns a tldraw StoreSnapshot JSON that can be loaded directly into the diagram editor via `loadSnapshot(editor.store, snapshot)`.",
        "operationId": "ConvertController_convertDrawioToTldraw",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DrawioToTldrawDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "snapshot": {
                      "properties": {
                        "schema": {
                          "type": "object"
                        },
                        "store": {
                          "additionalProperties": true,
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "tldraw StoreSnapshot — `{ store, schema }` consumable by loadSnapshot"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Convert a diagram XML document to a tldraw snapshot",
        "tags": [
          "Convert"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-convert-drawio-to-tldraw",
          "metadata": {
            "sidebarTitle": "Convert a diagram XML document to a tldraw snapshot",
            "title": "Convert a diagram XML document to a tldraw snapshot"
          }
        }
      }
    },
    "/convert/markdown-to-rich-text": {
      "post": {
        "description": "Converts a markdown string to rich text JSON for use in entity descriptions. Supports standard markdown (headings, bold, italic, lists, code blocks, links, etc.). \n\n**Embedding files:** Use `![alt text](flow-file:{fileId})` to embed uploaded files. The `fileId` is returned by `POST /files/upload`. Example: `\"# Report\\n\\n![diagram](flow-file:abc-123)\"` produces a heading and an embedded image.",
        "operationId": "ConvertController_markdownToRichText",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarkdownToRichTextDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "richText": {
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Rich text JSON array"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Convert markdown to rich text JSON",
        "tags": [
          "Convert"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-convert-markdown-to-rich-text",
          "metadata": {
            "sidebarTitle": "Convert markdown to rich text JSON",
            "title": "Convert markdown to rich text JSON"
          }
        }
      }
    },
    "/convert/markdown-to-rich-text/batch": {
      "post": {
        "description": "Batch variant of `/markdown-to-rich-text`. Accepts an array of markdown strings and returns their rich text JSON in the same order.",
        "operationId": "ConvertController_batchMarkdownToRichText",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchMarkdownToRichTextDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "richText": {
                      "items": {
                        "type": "array"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Array of rich text JSON arrays, one per input markdown string"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Convert multiple markdown strings to rich text JSON",
        "tags": [
          "Convert"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-convert-markdown-to-rich-text-batch",
          "metadata": {
            "sidebarTitle": "Convert multiple markdown strings to rich text JSON",
            "title": "Convert multiple markdown strings to rich text JSON"
          }
        }
      }
    },
    "/convert/rich-text-to-markdown": {
      "post": {
        "description": "Converts rich text JSON back to a markdown string. Embedded files are serialized using the `flow-file:` scheme: `![alt](flow-file:{fileId})`.",
        "operationId": "ConvertController_richTextToMarkdown",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RichTextToMarkdownDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "markdown": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Markdown string"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Convert rich text JSON to markdown",
        "tags": [
          "Convert"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-convert-rich-text-to-markdown",
          "metadata": {
            "sidebarTitle": "Convert rich text JSON to markdown",
            "title": "Convert rich text JSON to markdown"
          }
        }
      }
    },
    "/convert/tldraw-to-xml": {
      "post": {
        "description": "Converts a tldraw `StoreSnapshot` into an XML document that encodes the diagram hierarchy. Parent-child relationships are derived from tldraw's native `parentId` system: shapes inside a `data-shape` or `frame` container appear as nested child elements in the XML.\n\nEvery non-arrow element also carries its geometry (`x`/`y` parent-local coordinates plus `w`/`h`) so spatially-laid-out diagrams (e.g. flowcharts) keep their positions, not just nested ones.\n\nShape mapping:\n- `data-shape` → `<entity id name type x y w h>` (entity-backed node)\n- `frame` → `<group name x y w h>`\n- geo shapes → `<shape type label x y w h>`\n- arrows → omitted from tree, captured in `<connections>` with their own label (e.g. a flowchart `Yes`/`No` branch)\n\nThe snapshot is the object returned by `editor.store.getStoreSnapshot()` or by the `/convert/drawio-to-tldraw` endpoint.",
        "operationId": "ConvertController_tldrawToXml",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TldrawSnapshotToXmlDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "xml": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Hierarchical XML string representing the diagram structure"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Convert a tldraw snapshot to hierarchical XML",
        "tags": [
          "Convert"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-convert-tldraw-to-xml",
          "metadata": {
            "sidebarTitle": "Convert a tldraw snapshot to hierarchical XML",
            "title": "Convert a tldraw snapshot to hierarchical XML"
          }
        }
      }
    },
    "/notifications/feed": {
      "get": {
        "operationId": "NotificationsController_getFeed",
        "parameters": [
          {
            "description": "1-based page number (default 1)",
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size (1-100, default 20)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Project scope (REQUIRED). The feed is always mounted under a project, so it must be scoped to one — the @CustomerApi guard then authorises the caller against this project. An omitted scope must NOT fall back to an all-projects read: that would return historical rows (incl. EntityChanged structured diffs) from projects the caller has since lost access to.",
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch filter: 'master' for Base, a branch UUID, or omit for all",
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "When \"true\", only unread notifications",
            "in": "query",
            "name": "unread",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Type filter category: 'item' (entity updates), 'comments', 'reviews' (branch review lifecycle), or omit/'all' for every type",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationFeedPageDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-notifications-feed",
          "metadata": {
            "sidebarTitle": "List notifications",
            "title": "List notifications"
          }
        }
      }
    },
    "/notifications/feed/read-all": {
      "post": {
        "operationId": "NotificationsController_markAllRead",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-notifications-feed-read-all",
          "metadata": {
            "sidebarTitle": "Mark all notifications read",
            "title": "Mark all notifications read"
          }
        }
      }
    },
    "/notifications/feed/unread-count": {
      "get": {
        "operationId": "NotificationsController_getUnreadCount",
        "parameters": [
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Stop counting at this many unread notifications (1-100). Omit for an exact count.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnreadCountDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-notifications-feed-unread-count",
          "metadata": {
            "sidebarTitle": "Count unread notifications",
            "title": "Count unread notifications"
          }
        }
      }
    },
    "/notifications/feed/{id}/read": {
      "patch": {
        "operationId": "NotificationsController_markRead",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-notifications-feed-id-read",
          "metadata": {
            "sidebarTitle": "Mark a notification read",
            "title": "Mark a notification read"
          }
        }
      }
    },
    "/notifications/feed/{id}/unread": {
      "patch": {
        "operationId": "NotificationsController_markUnread",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-notifications-feed-id-unread",
          "metadata": {
            "sidebarTitle": "Mark a notification unread",
            "title": "Mark a notification unread"
          }
        }
      }
    },
    "/notifications/preferences": {
      "get": {
        "operationId": "NotificationsController_getPreferences",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/NotificationPreferenceDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-notifications-preferences",
          "metadata": {
            "sidebarTitle": "Get notification preferences",
            "title": "Get notification preferences"
          }
        }
      },
      "patch": {
        "operationId": "NotificationsController_updatePreferences",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateNotificationPreferencesDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/NotificationPreferenceDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-notifications-preferences",
          "metadata": {
            "sidebarTitle": "Update notification preferences",
            "title": "Update notification preferences"
          }
        }
      }
    },
    "/notifications/subscribers": {
      "get": {
        "operationId": "NotificationsController_subscribers",
        "parameters": [
          {
            "in": "query",
            "name": "entity_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "user_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscribersDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-notifications-subscribers",
          "metadata": {
            "sidebarTitle": "List subscribers",
            "title": "List subscribers"
          }
        }
      }
    },
    "/notifications/subscriptions": {
      "delete": {
        "operationId": "NotificationsController_unsubscribe",
        "parameters": [
          {
            "in": "query",
            "name": "entity_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "user_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-notifications-subscriptions",
          "metadata": {
            "sidebarTitle": "Remove a subscription",
            "title": "Remove a subscription"
          }
        }
      },
      "post": {
        "operationId": "NotificationsController_subscribe",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSubscriptionDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-notifications-subscriptions",
          "metadata": {
            "sidebarTitle": "Create a subscription",
            "title": "Create a subscription"
          }
        }
      }
    },
    "/notifications/subscriptions/status": {
      "get": {
        "operationId": "NotificationsController_subscriptionStatus",
        "parameters": [
          {
            "in": "query",
            "name": "entity_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "user_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionStatusDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Notifications"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-notifications-subscriptions-status",
          "metadata": {
            "sidebarTitle": "Get subscription status",
            "title": "Get subscription status"
          }
        }
      }
    },
    "/project": {
      "get": {
        "operationId": "ProjectController_findAll",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ProjectResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List all projects for the current workspace",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project",
          "metadata": {
            "sidebarTitle": "List all projects for the current workspace",
            "title": "List all projects for the current workspace"
          }
        }
      },
      "post": {
        "operationId": "ProjectController_create",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a new project",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project",
          "metadata": {
            "sidebarTitle": "Create a new project",
            "title": "Create a new project"
          }
        }
      }
    },
    "/project/slug/{slug}": {
      "get": {
        "operationId": "ProjectController_findBySlug",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a project by slug",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-slug-slug",
          "metadata": {
            "sidebarTitle": "Get a project by slug",
            "title": "Get a project by slug"
          }
        }
      }
    },
    "/project/{projectId}": {
      "delete": {
        "operationId": "ProjectController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Project deleted"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Soft-delete a project",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid",
          "metadata": {
            "sidebarTitle": "Soft-delete a project",
            "title": "Soft-delete a project"
          }
        }
      },
      "get": {
        "operationId": "ProjectController_findOne",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a project by ID",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid",
          "metadata": {
            "sidebarTitle": "Get a project by ID",
            "title": "Get a project by ID"
          }
        }
      },
      "patch": {
        "operationId": "ProjectController_update",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProjectDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update a project — slug is regenerated when name changes",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-project-projectid",
          "metadata": {
            "sidebarTitle": "Update a project — slug is regenerated when name changes",
            "title": "Update a project — slug is regenerated when name changes"
          }
        }
      }
    },
    "/project/{projectId}/branch": {
      "get": {
        "operationId": "BranchController_findAll",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List all branches",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch",
          "metadata": {
            "sidebarTitle": "List all branches",
            "title": "List all branches"
          }
        }
      },
      "post": {
        "operationId": "BranchController_create",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBranchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchCreatedDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a new branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch",
          "metadata": {
            "sidebarTitle": "Create a new branch",
            "title": "Create a new branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/archived": {
      "get": {
        "description": "One page of branches created after this update was deployed and then soft-deleted, whether discarded through the delete endpoint (merged_at null) or archived by a merge (merged_at set), newest archive first. A page holds at most 200 rows (pass a smaller limit to take fewer); to continue, pass the cursor of the last row shown as `before`. `search` keeps only names containing the text, ignoring case. Every merge archives its branch, so pass merged=false to list only discarded branches, or merged=true only merged ones. Each row is a candidate for the restore preview and the restore endpoint.",
        "operationId": "BranchController_findArchived",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "false lists only discarded branches, true only merged ones; omitted lists both.",
            "in": "query",
            "name": "merged",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Case-insensitive substring of the branch name; omitted or blank lists every deleted branch.",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "The `cursor` of the last row already shown; returns the page after it. Omit for the first page.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/DeletedBranchListRowDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List deleted branches",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-archived",
          "metadata": {
            "sidebarTitle": "List deleted branches",
            "title": "List deleted branches"
          }
        }
      }
    },
    "/project/{projectId}/branch/awaiting-review": {
      "get": {
        "operationId": "BranchController_getAwaitingReview",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List branches awaiting the current user’s review",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-awaiting-review",
          "metadata": {
            "sidebarTitle": "List branches awaiting the current user’s review",
            "title": "List branches awaiting the current user’s review"
          }
        }
      }
    },
    "/project/{projectId}/branch/baseline/{baselineId}/revert": {
      "post": {
        "description": "Creates a new branch off the baseline's target branch containing diffs that undo the baseline's changes when rolled up, and returns that branch. Review and merge it to apply the revert. Non-destructive: the original history is untouched, so any baseline can be reverted. Pass entity_id to undo only one item's part of the merge.",
        "operationId": "BranchController_revertBaseline",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "baselineId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RevertBaselineDto"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchCreatedDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revert a baseline by proposing an inverse-diff branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-baseline-baselineid-revert",
          "metadata": {
            "sidebarTitle": "Revert a baseline by proposing an inverse-diff branch",
            "title": "Revert a baseline by proposing an inverse-diff branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/change-requests": {
      "get": {
        "operationId": "BranchController_getChangeRequests",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 200,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List draft, open, and merged change requests",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-change-requests",
          "metadata": {
            "sidebarTitle": "List draft, open, and merged change requests",
            "title": "List draft, open, and merged change requests"
          }
        }
      }
    },
    "/project/{projectId}/branch/change-requests/{id}": {
      "get": {
        "operationId": "BranchController_getChangeRequest",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get one draft, open, or merged change request",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-change-requests-id",
          "metadata": {
            "sidebarTitle": "Get one draft, open, or merged change request",
            "title": "Get one draft, open, or merged change request"
          }
        }
      }
    },
    "/project/{projectId}/branch/children": {
      "get": {
        "operationId": "BranchController_getChildBranches",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sortDirection",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "BranchSort key (default \"modified\")",
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Parent branch id; \"master\" (default) for branches off Base",
            "in": "query",
            "name": "parentId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedBranchesDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List a branch’s direct child branches, paginated",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-children",
          "metadata": {
            "sidebarTitle": "List a branch’s direct child branches, paginated",
            "title": "List a branch’s direct child branches, paginated"
          }
        }
      }
    },
    "/project/{projectId}/branch/name-suggestion": {
      "post": {
        "operationId": "BranchController_suggestName",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchNameSuggestionDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Reserve a number and suggest a branch name",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-name-suggestion",
          "metadata": {
            "sidebarTitle": "Reserve a number and suggest a branch name",
            "title": "Reserve a number and suggest a branch name"
          }
        }
      }
    },
    "/project/{projectId}/branch/review-requests": {
      "get": {
        "operationId": "BranchController_getReviewRequests",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List review requests (open, merged, and closed branches)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-review-requests",
          "metadata": {
            "sidebarTitle": "List review requests (open, merged, and closed branches)",
            "title": "List review requests (open, merged, and closed branches)"
          }
        }
      }
    },
    "/project/{projectId}/branch/search": {
      "get": {
        "operationId": "BranchController_searchBranches",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "JSON-encoded BranchPageFilters",
            "in": "query",
            "name": "filters",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedBranchesDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Filter and sort branches server-side, paginated",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-search",
          "metadata": {
            "sidebarTitle": "Filter and sort branches server-side, paginated",
            "title": "Filter and sort branches server-side, paginated"
          }
        }
      }
    },
    "/project/{projectId}/branch/tags": {
      "delete": {
        "operationId": "BranchController_deleteBranchTag",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "text",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchTagMutationResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a branch tag from every branch in a project",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-branch-tags",
          "metadata": {
            "sidebarTitle": "Remove a branch tag from every branch in a project",
            "title": "Remove a branch tag from every branch in a project"
          }
        }
      },
      "get": {
        "operationId": "BranchController_getBranchTags",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchLabelDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List the project’s distinct branch tags",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-tags",
          "metadata": {
            "sidebarTitle": "List the project’s distinct branch tags",
            "title": "List the project’s distinct branch tags"
          }
        }
      },
      "patch": {
        "operationId": "BranchController_renameBranchTag",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameBranchTagDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchTagMutationResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Rename a branch tag across the project",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-project-projectid-branch-tags",
          "metadata": {
            "sidebarTitle": "Rename a branch tag across the project",
            "title": "Rename a branch tag across the project"
          }
        }
      }
    },
    "/project/{projectId}/branch/{branchId}/extraction-plans": {
      "post": {
        "description": "Persists a frozen server-derived plan. This endpoint does not create a branch or move changes.",
        "operationId": "BranchExtractionController_create",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBranchExtractionPlanDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchExtractionPlanResponseDto"
                }
              }
            },
            "description": ""
          },
          "400": {
            "description": "Exactly one supported selector is required, and every manually selected entity must be changed."
          },
          "401": {
            "description": ""
          },
          "404": {
            "description": "Source branch was not found."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Plan an entity-level extraction into a new sibling branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-branchid-extraction-plans",
          "metadata": {
            "sidebarTitle": "Plan an entity-level extraction into a new sibling branch",
            "title": "Plan an entity-level extraction into a new sibling branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{branchId}/extraction-plans/{planId}": {
      "get": {
        "operationId": "BranchExtractionController_findOne",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "planId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchExtractionPlanResponseDto"
                }
              }
            },
            "description": ""
          },
          "401": {
            "description": ""
          },
          "404": {
            "description": "Plan was not found."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Read a frozen extraction plan and current status",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-branchid-extraction-plans-planid",
          "metadata": {
            "sidebarTitle": "Read a frozen extraction plan and current status",
            "title": "Read a frozen extraction plan and current status"
          }
        }
      }
    },
    "/project/{projectId}/branch/{branchId}/extractions": {
      "post": {
        "operationId": "BranchExtractionMutationController_execute",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteBranchExtractionDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchExtractionResponseDto"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": ""
          },
          "409": {
            "description": "The frozen plan is stale or unsafe."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Execute a frozen entity extraction plan",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-branchid-extractions",
          "metadata": {
            "sidebarTitle": "Execute a frozen entity extraction plan",
            "title": "Execute a frozen entity extraction plan"
          }
        }
      }
    },
    "/project/{projectId}/branch/{branchId}/extractions/{extractionId}": {
      "get": {
        "operationId": "BranchExtractionMutationController_findOne",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "extractionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchExtractionResponseDto"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Read extraction audit and undo eligibility",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-branchid-extractions-extractionid",
          "metadata": {
            "sidebarTitle": "Read extraction audit and undo eligibility",
            "title": "Read extraction audit and undo eligibility"
          }
        }
      }
    },
    "/project/{projectId}/branch/{branchId}/extractions/{extractionId}/undo": {
      "post": {
        "operationId": "BranchExtractionMutationController_undo",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "extractionId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchExtractionResponseDto"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": ""
          },
          "409": {
            "description": "Exact undo is no longer safe."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Undo an exact, still-isolated extraction",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-branchid-extractions-extractionid-undo",
          "metadata": {
            "sidebarTitle": "Undo an exact, still-isolated extraction",
            "title": "Undo an exact, still-isolated extraction"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/ancestors": {
      "get": {
        "operationId": "BranchController_getBranchAncestors",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/BranchResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List a branch’s ancestors, root-first",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-ancestors",
          "metadata": {
            "sidebarTitle": "List a branch’s ancestors, root-first",
            "title": "List a branch’s ancestors, root-first"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/awaiting-my-review-entities": {
      "get": {
        "description": "Ids of this branch's changed entities that await the current user's review: entities whose firing stage gate lists them as a pending reviewer, PLUS entities whose reviewer fields/groups designate them (the latter works even without stage gates). Users who have already approved the branch are excluded; empty when nothing awaits the caller.",
        "operationId": "BranchController_stageGateAwaitingMe",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Changed entities on a branch awaiting the current user's review",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-awaiting-my-review-entities",
          "metadata": {
            "sidebarTitle": "Changed entities on a branch awaiting the current user's review",
            "title": "Changed entities on a branch awaiting the current user's review"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/change-request-title": {
      "post": {
        "operationId": "BranchController_setChangeRequestTitle",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetChangeRequestTitleDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set the change request's title",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-change-request-title",
          "metadata": {
            "sidebarTitle": "Set the change request's title",
            "title": "Set the change request's title"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/changed-entity-ids": {
      "get": {
        "description": "Returns each touched entity ID with CREATED when its entity was created on this branch, or UPDATED when an inherited entity was changed on this branch.",
        "operationId": "BranchController_getChangedEntityIds",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/CustomerChangedEntityDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List changed entities on a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-changed-entity-ids",
          "metadata": {
            "sidebarTitle": "List changed entities on a branch",
            "title": "List changed entities on a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/delete": {
      "post": {
        "description": "Soft-deletes a branch so it stops appearing in branch lists, letting callers clean up failed or abandoned branches instead of leaving permanent cruft. Refuses with 400 for the synthetic master branch or a malformed id, 404 when the branch does not exist in this project, 403 when the branch is protected, and 400 when it still has sub-branches.",
        "operationId": "BranchController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-delete",
          "metadata": {
            "sidebarTitle": "Delete a branch",
            "title": "Delete a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/description": {
      "post": {
        "operationId": "BranchController_setDescription",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBranchDescriptionDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set the branch's rich-text description",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-description",
          "metadata": {
            "sidebarTitle": "Set the branch's rich-text description",
            "title": "Set the branch's rich-text description"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/merge": {
      "post": {
        "description": "Enqueues a background merge that replays the branch onto its parent, creates a merge baseline, and deletes the branch. Project admins may set bypass_review with a review_bypass_reason to force past known policy blockers; the reason and blocker snapshot are preserved in merge history while structural and incomplete-check protections remain enforced. Poll the returned job until it succeeds or fails.",
        "operationId": "BranchController_merge",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeBranchDto"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchMergeJobResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Merge a branch into its parent",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-merge",
          "metadata": {
            "sidebarTitle": "Merge a branch into its parent",
            "title": "Merge a branch into its parent"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/merge-status": {
      "get": {
        "operationId": "BranchController_mergeStatus",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchMergeJobResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the current background merge job for a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-merge-status",
          "metadata": {
            "sidebarTitle": "Get the current background merge job for a branch",
            "title": "Get the current background merge job for a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/protect": {
      "post": {
        "operationId": "BranchController_protect",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-protect",
          "metadata": {
            "sidebarTitle": "Protect a branch",
            "title": "Protect a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/rebase-onto": {
      "post": {
        "description": "Replays this branch's changes onto a different base and returns the result as a NEW branch; the branch named in the path is not modified. The copy keeps this branch's value for every field it changed and resolves every field it did not from the new base. Its sub-branches, baselines, comments, and reviews are not copied. Refuses with 400 for the Base branch, a malformed id, a missing `newParentId`, or a target equal to the branch itself; 404 when either branch is not live in this project.",
        "operationId": "BranchController_rebaseOnto",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RebaseOntoBranchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchCreatedDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Rebase a branch onto a different parent branch (as a new branch)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-rebase-onto",
          "metadata": {
            "sidebarTitle": "Rebase a branch onto a different parent branch (as a new branch)",
            "title": "Rebase a branch onto a different parent branch (as a new branch)"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/reopen-as-draft": {
      "post": {
        "operationId": "BranchController_reopenAsDraft",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchCreatedDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Reopen a merged change request as a new draft",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-reopen-as-draft",
          "metadata": {
            "sidebarTitle": "Reopen a merged change request as a new draft",
            "title": "Reopen a merged change request as a new draft"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/required-reviewer-groups": {
      "post": {
        "operationId": "BranchController_addRequiredReviewerGroup",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRequiredReviewerGroupDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add a required reviewer group (admin, owner, or existing required reviewer)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-required-reviewer-groups",
          "metadata": {
            "sidebarTitle": "Add a required reviewer group (admin, owner, or existing required reviewer)",
            "title": "Add a required reviewer group (admin, owner, or existing required reviewer)"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/required-reviewer-groups/{groupId}/remove": {
      "post": {
        "operationId": "BranchController_removeRequiredReviewerGroup",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "groupId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a required reviewer group (owner or existing required reviewer)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-required-reviewer-groups-groupid-remove",
          "metadata": {
            "sidebarTitle": "Remove a required reviewer group (owner or existing required reviewer)",
            "title": "Remove a required reviewer group (owner or existing required reviewer)"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/required-reviewers": {
      "post": {
        "operationId": "BranchController_addRequiredReviewer",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRequiredReviewerDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add a required reviewer (admin, owner, or existing required reviewer)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-required-reviewers",
          "metadata": {
            "sidebarTitle": "Add a required reviewer (admin, owner, or existing required reviewer)",
            "title": "Add a required reviewer (admin, owner, or existing required reviewer)"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/required-reviewers/{userId}/remove": {
      "post": {
        "operationId": "BranchController_removeRequiredReviewer",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a required reviewer (owner or existing required reviewer)",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-required-reviewers-userid-remove",
          "metadata": {
            "sidebarTitle": "Remove a required reviewer (owner or existing required reviewer)",
            "title": "Remove a required reviewer (owner or existing required reviewer)"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/restore": {
      "post": {
        "description": "Reverses a delete of a branch created after this update was deployed: the branch reappears in branch lists and the branch selector with its changes intact, and a Reopened entry joins its review history. Every eligible deleted ancestor it depends on is restored with it, in one transaction, exactly the chain the restore preview lists (a merged ancestor comes back as an open branch that can be merged again; the reviews and description its merge moved onto the baseline stay there). A member whose parent was rebased after the member was deleted is rebased onto its parent's current history as part of the restore, the migration it missed while deleted; the preview names each such member and the restore performs them root-most first. Send the preview's ids as expected_chain_ids and expected_rebase_ids to be refused with 409 if either changed since. Refuses with 400 for the synthetic master branch or a malformed id, 404 when no eligible deleted branch with this id exists in this project, and 400, naming the branch, when the chain cannot be rebuilt: an ancestor row is gone, an ancestor predates restore support, or a member is the copy an extraction undo archived.",
        "operationId": "BranchController_restoreBranch",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreBranchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Restore a deleted branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-restore",
          "metadata": {
            "sidebarTitle": "Restore a deleted branch",
            "title": "Restore a deleted branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/restore-preview": {
      "get": {
        "description": "The deleted branches a restore of this branch would bring back, root-most ancestor first and this branch last: a branch is its own changes on top of its parent as of when it was created, so a branch whose eligible ancestors are deleted comes back together with them, and the preview shows that chain by name, number, parent and deletion time so same-named branches are told apart. Each row carries `rebase` when restoring it will rebase it onto its parent's current history because the parent was rebased after the row was deleted: the parent's id, name, number and rebase time, and a sentence saying so, so the user confirms that step with the chain. Answers the refusal the restore would answer (400 naming the branch and the reason) when the chain cannot be rebuilt: an ancestor row is gone, an ancestor predates restore support, or a member is the copy an extraction undo archived. 404 when no eligible deleted branch with this id exists in this project.",
        "operationId": "BranchController_previewRestoreBranch",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchRestorePreviewDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Preview a branch restore",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-restore-preview",
          "metadata": {
            "sidebarTitle": "Preview a branch restore",
            "title": "Preview a branch restore"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/reviewer-groups/{groupId}/remove": {
      "post": {
        "operationId": "BranchController_removeReviewerGroup",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "groupId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a reviewer group from this branch review",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-reviewer-groups-groupid-remove",
          "metadata": {
            "sidebarTitle": "Remove a reviewer group from this branch review",
            "title": "Remove a reviewer group from this branch review"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/reviewers/{userId}/remove": {
      "post": {
        "operationId": "BranchController_removeReviewer",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "userId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a reviewer from this branch review",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-reviewers-userid-remove",
          "metadata": {
            "sidebarTitle": "Remove a reviewer from this branch review",
            "title": "Remove a reviewer from this branch review"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/set-editor-groups": {
      "post": {
        "operationId": "BranchController_setEditorGroups",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetEditorGroupsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Assign or clear the user groups allowed to edit this branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-set-editor-groups",
          "metadata": {
            "sidebarTitle": "Assign or clear the user groups allowed to edit this branch",
            "title": "Assign or clear the user groups allowed to edit this branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/set-owner": {
      "post": {
        "description": "Omit user_id to take ownership as the calling user; naming another user requires project admin. Taking ownership is not open either: a branch whose author (its owner, or its creator for rows predating ownership) can still act on it changes hands only by admin assignment, while one whose author has been deactivated or has lost access to the project stays claimable by any editor. A non-admin outside a branch's editor groups cannot become its owner. An admin supersedes both rules. Base/master has no branch row and is rejected.",
        "operationId": "BranchController_setOwner",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetBranchOwnerDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Assign the owner of a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-set-owner",
          "metadata": {
            "sidebarTitle": "Assign the owner of a branch",
            "title": "Assign the owner of a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/set-ready-for-review": {
      "post": {
        "operationId": "BranchController_setReadyForReview",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetReadyForReviewDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Toggle the branch’s ready-for-review signal",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-set-ready-for-review",
          "metadata": {
            "sidebarTitle": "Toggle the branch’s ready-for-review signal",
            "title": "Toggle the branch’s ready-for-review signal"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/set-require-review": {
      "post": {
        "operationId": "BranchController_setRequireReview",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetRequireReviewDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-set-require-review",
          "metadata": {
            "sidebarTitle": "Set branch review requirements",
            "title": "Set branch review requirements"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/set-review": {
      "post": {
        "operationId": "BranchController_setReview",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitReviewDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Submit or update the current user's review",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-set-review",
          "metadata": {
            "sidebarTitle": "Submit or update the current user's review",
            "title": "Submit or update the current user's review"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/stage-gate-status": {
      "get": {
        "description": "Returns the per-entity stage-gate violations that would block merging this branch right now (multi-step promotions, missing reviewers, missing approvals). Empty list = stage gates satisfied.",
        "operationId": "BranchController_stageGateStatus",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StageGateStatusResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Evaluate entity stage gates for a branch merge",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-branch-id-stage-gate-status",
          "metadata": {
            "sidebarTitle": "Evaluate entity stage gates for a branch merge",
            "title": "Evaluate entity stage gates for a branch merge"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/tags": {
      "delete": {
        "operationId": "BranchController_removeBranchTag",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "text",
            "required": true,
            "schema": {
              "maxLength": 64,
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove one tag from a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-branch-id-tags",
          "metadata": {
            "sidebarTitle": "Remove one tag from a branch",
            "title": "Remove one tag from a branch"
          }
        }
      },
      "post": {
        "operationId": "BranchController_addBranchTag",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddBranchTagDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BranchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add one tag to a branch",
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-tags",
          "metadata": {
            "sidebarTitle": "Add one tag to a branch",
            "title": "Add one tag to a branch"
          }
        }
      }
    },
    "/project/{projectId}/branch/{id}/unprotect": {
      "post": {
        "operationId": "BranchController_unprotect",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "description": "Project UUID, not a slug. Resolve a slug with GET /project/slug/{slug} using the same workspace and credentials, then pass the returned id.",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Branches"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-branch-id-unprotect",
          "metadata": {
            "sidebarTitle": "Unprotect a branch",
            "title": "Unprotect a branch"
          }
        }
      }
    },
    "/project/{projectId}/data-model": {
      "get": {
        "operationId": "CustomerCategoriesController_findAll",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/CustomerCategoryResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List all categories",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-data-model",
          "metadata": {
            "sidebarTitle": "List all categories",
            "title": "List all categories"
          }
        }
      },
      "post": {
        "operationId": "CustomerCategoriesController_create",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateCategoryDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCategoryResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a category",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-data-model",
          "metadata": {
            "sidebarTitle": "Create a category",
            "title": "Create a category"
          }
        }
      }
    },
    "/project/{projectId}/data-model/{id}": {
      "delete": {
        "operationId": "CustomerCategoriesController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete a category",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-data-model-id",
          "metadata": {
            "sidebarTitle": "Delete a category",
            "title": "Delete a category"
          }
        }
      },
      "get": {
        "operationId": "CustomerCategoriesController_findOne",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCategoryResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a category by ID",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-data-model-id",
          "metadata": {
            "sidebarTitle": "Get a category by ID",
            "title": "Get a category by ID"
          }
        }
      },
      "put": {
        "description": "Updates category metadata and, when fields is supplied, the category custom fields. By default fields is replacement-style: omitted customer-managed fields are removed. Set addOnly=true to preserve existing fields and append only missing fields or missing plain-tag options.",
        "operationId": "CustomerCategoriesController_update",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "addOnly": {
                  "summary": "Additive field/tag-option ensure",
                  "value": {
                    "addOnly": true,
                    "fields": [
                      {
                        "key": "priority",
                        "name": "Priority",
                        "tags": [
                          {
                            "name": "Medium"
                          }
                        ],
                        "type": "tag"
                      }
                    ]
                  }
                },
                "replacement": {
                  "summary": "Replacement-style field update",
                  "value": {
                    "fields": [
                      {
                        "key": "priority",
                        "name": "Priority",
                        "tags": [
                          {
                            "name": "Low"
                          },
                          {
                            "name": "High"
                          }
                        ],
                        "type": "tag"
                      }
                    ]
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateCategoryDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCategoryResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update a category",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-data-model-id",
          "metadata": {
            "sidebarTitle": "Update a category",
            "title": "Update a category"
          }
        }
      }
    },
    "/project/{projectId}/data-model/{id}/fields/{fieldKey}/tag-options": {
      "post": {
        "description": "Ensures option names exist on an existing plain tag field. Existing options are preserved, repeated names are idempotent, and only genuinely new names are appended. This endpoint does not edit stage fields.",
        "operationId": "CustomerCategoriesController_addTagOptions",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "fieldKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "addOptions": {
                  "summary": "Append missing tag options",
                  "value": {
                    "tags": [
                      {
                        "name": "Medium"
                      },
                      {
                        "name": "Urgent"
                      }
                    ]
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CustomerAddTagOptionsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCategoryResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add tag options to a category field",
        "tags": [
          "Data Model"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-data-model-id-fields-fieldkey-tag-options",
          "metadata": {
            "sidebarTitle": "Add tag options to a category field",
            "title": "Add tag options to a category field"
          }
        }
      }
    },
    "/project/{projectId}/diagrams": {
      "post": {
        "description": "Creates a diagram entity from either a raw tldraw snapshot or structured input, and optionally links it to a host entity. Typical draw.io import flow: (1) convert XML via POST /convert/drawio-to-tldraw, (2) call this endpoint with the returned `snapshot` plus a `hostEntityId`, (3) optionally embed the diagram in the host's rich-text field (e.g. `description`) by appending a node of the form `{\"type\": \"tldraw\", \"diagramId\": \"<id>\", \"children\": [{\"text\": \"\"}]}` via PUT /project/{projectId}/entities/{entityId}/values — embeds only resolve diagrams linked to the entity that owns the field. Upsert semantics: re-POSTing with the same `id` replaces that diagram's name and snapshot in place (e.g. re-importing an updated source file); an `id` belonging to a non-diagram entity is rejected with 409.",
        "operationId": "DiagramsController_createDiagram",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDiagramDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create or update a diagram",
        "tags": [
          "Diagrams"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-diagrams",
          "metadata": {
            "sidebarTitle": "Create or update a diagram",
            "title": "Create or update a diagram"
          }
        }
      }
    },
    "/project/{projectId}/entities": {
      "get": {
        "operationId": "EntitiesController_listEntities",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "entity_type",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Keyset cursor. Start a walk with `starting_after=0`, then pass each response's `nextPageStart` for the next page, continuing while `moreAvailable` is true. This is the preferred way to walk entities — O(limit) per page at any depth and skip-free. When set, `offset` is ignored.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Legacy offset pagination, available only below 1000. Cost grows with the offset and, under heavy deletes, a page can come up short and skip entities — prefer `starting_after`.",
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Page size, at most 1000. Larger values receive a 400 Bad Request response.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityListResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List all entities with pagination",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-entities",
          "metadata": {
            "sidebarTitle": "List all entities with pagination",
            "title": "List all entities with pagination"
          }
        }
      },
      "post": {
        "operationId": "EntitiesController_createEntity",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Whether to assign a newly created entity to the authenticated user. Defaults to true.",
            "in": "query",
            "name": "auto_assign_owner",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateEntityDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities",
          "metadata": {
            "sidebarTitle": "Create an entity",
            "title": "Create an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/batch": {
      "post": {
        "operationId": "EntitiesController_batchCreateEntities",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchCreateEntitiesDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create multiple entities in one transaction",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-batch",
          "metadata": {
            "sidebarTitle": "Create multiple entities in one transaction",
            "title": "Create multiple entities in one transaction"
          }
        }
      }
    },
    "/project/{projectId}/entities/delete/batch": {
      "post": {
        "operationId": "EntitiesController_batchDeleteEntities",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchDeleteEntitiesDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Entities deleted"
          },
          "404": {
            "description": "One or more entities not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete multiple entities in one transaction",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-delete-batch",
          "metadata": {
            "sidebarTitle": "Delete multiple entities in one transaction",
            "title": "Delete multiple entities in one transaction"
          }
        }
      }
    },
    "/project/{projectId}/entities/history": {
      "post": {
        "operationId": "EntitiesController_getEntitiesHistory",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerEntityHistoryQueryDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerEntityHistoryPageDto"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "The history cursor expired because the branch was rebased."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a paginated change-history page for multiple entities",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-history",
          "metadata": {
            "sidebarTitle": "Get a paginated change-history page for multiple entities",
            "title": "Get a paginated change-history page for multiple entities"
          }
        }
      }
    },
    "/project/{projectId}/entities/links/batch": {
      "post": {
        "operationId": "EntitiesController_batchAddLinks",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchAddLinksDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add multiple links in one transaction",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-links-batch",
          "metadata": {
            "sidebarTitle": "Add multiple links in one transaction",
            "title": "Add multiple links in one transaction"
          }
        }
      }
    },
    "/project/{projectId}/entities/links/remove/batch": {
      "post": {
        "operationId": "EntitiesController_batchRemoveLinks",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchRemoveLinksDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove multiple links in one transaction",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-links-remove-batch",
          "metadata": {
            "sidebarTitle": "Remove multiple links in one transaction",
            "title": "Remove multiple links in one transaction"
          }
        }
      }
    },
    "/project/{projectId}/entities/reorder/batch": {
      "post": {
        "operationId": "EntitiesController_reorderChildrenBatch",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchReorderChildrenDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Downstream links reordered"
          },
          "400": {
            "description": "Invalid op — duplicate parents/children or unlinked child"
          },
          "404": {
            "description": "One or more parents not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Reorder downstream links of many parents in one request",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-reorder-batch",
          "metadata": {
            "sidebarTitle": "Reorder downstream links of many parents in one request",
            "title": "Reorder downstream links of many parents in one request"
          }
        }
      }
    },
    "/project/{projectId}/entities/upsert": {
      "post": {
        "description": "Accepts an array of entities. For each: creates it if it does not exist, then writes ValueDiffs only for keys whose values have changed. Optionally links each entity as a downstream child of a parent. New children append in input order, including across successive requests. All diffs are written in a single DB round-trip for efficiency. Concurrent upserts matching the same external identifier (`idField`) are serialized server-side, so they converge on one entity instead of creating duplicates. Parents and children may be created atomically in one batch when `parentIds` contains Flow entity UUIDs, including UUIDs assigned to parent rows in that batch. `parentIds` does not resolve `idField` aliases; resolve or create such a parent first if its Flow UUID is unknown. The operation is atomic and safe to retry with the same stable IDs. If Claude Desktop reports \"No result received ... after waiting 4 minutes\", first read those IDs because the approval/dispatch may have been lost before Flow received the call; never replace the IDs merely because the result was lost. Field definition validation is intentionally skipped — callers may write arbitrary key names without pre-defining them in the schema.",
        "operationId": "EntitiesController_upsertEntities",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Whether newly inserted entities in the upsert batch are assigned to the authenticated user. Defaults to true; existing entities are unaffected.",
            "in": "query",
            "name": "auto_assign_owner",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Branch to write all entities to. Omit or pass \"master\" for the base branch.",
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "$ref": "#/components/schemas/UpsertEntityDto"
                },
                "type": "array"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Bulk upsert entities by ID",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-upsert",
          "metadata": {
            "sidebarTitle": "Bulk upsert entities by ID",
            "title": "Bulk upsert entities by ID"
          }
        }
      }
    },
    "/project/{projectId}/entities/values/batch": {
      "put": {
        "operationId": "EntitiesController_batchSetValues",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchSetValuesDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set multiple values in one transaction",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-entities-values-batch",
          "metadata": {
            "sidebarTitle": "Set multiple values in one transaction",
            "title": "Set multiple values in one transaction"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}": {
      "delete": {
        "operationId": "EntitiesController_deleteEntity",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Entity deleted"
          },
          "404": {
            "description": "Entity not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-entities-entityid",
          "metadata": {
            "sidebarTitle": "Delete an entity",
            "title": "Delete an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/comments": {
      "get": {
        "operationId": "CustomerCommentsController_list",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_resolved",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/CustomerCommentResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List comments on an entity",
        "tags": [
          "Comments"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-entities-entityid-comments",
          "metadata": {
            "sidebarTitle": "List comments on an entity",
            "title": "List comments on an entity"
          }
        }
      },
      "post": {
        "operationId": "CustomerCommentsController_create",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateCommentDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCommentResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add a comment to an entity",
        "tags": [
          "Comments"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-entityid-comments",
          "metadata": {
            "sidebarTitle": "Add a comment to an entity",
            "title": "Add a comment to an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/comments/{commentId}": {
      "delete": {
        "operationId": "CustomerCommentsController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "409": {
            "description": "The comment is busy with another write or is an immutable review explanation."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete a comment",
        "tags": [
          "Comments"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-entities-entityid-comments-commentid",
          "metadata": {
            "sidebarTitle": "Delete a comment",
            "title": "Delete a comment"
          }
        }
      },
      "get": {
        "operationId": "CustomerCommentsController_getOne",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCommentResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a single comment on an entity",
        "tags": [
          "Comments"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-entities-entityid-comments-commentid",
          "metadata": {
            "sidebarTitle": "Get a single comment on an entity",
            "title": "Get a single comment on an entity"
          }
        }
      },
      "patch": {
        "operationId": "CustomerCommentsController_update",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "commentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateCommentDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCommentResponseDto"
                }
              }
            },
            "description": ""
          },
          "409": {
            "description": "The comment is busy with another write or is an immutable review explanation."
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update a comment (edit text and/or resolve)",
        "tags": [
          "Comments"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-project-projectid-entities-entityid-comments-commentid",
          "metadata": {
            "sidebarTitle": "Update a comment (edit text and/or resolve)",
            "title": "Update a comment (edit text and/or resolve)"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/crosslinks": {
      "get": {
        "operationId": "EntitiesController_getCrosslinks",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityCrosslinksResponseDto"
                }
              }
            },
            "description": ""
          },
          "404": {
            "description": "Entity not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List an entity's cross-linked peers",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-entities-entityid-crosslinks",
          "metadata": {
            "sidebarTitle": "List an entity's cross-linked peers",
            "title": "List an entity's cross-linked peers"
          }
        }
      },
      "post": {
        "operationId": "EntitiesController_addCrosslink",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCrosslinkDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityCrosslinksResponseDto"
                }
              }
            },
            "description": ""
          },
          "400": {
            "description": "Self cross-link, or unknown peer entity"
          },
          "403": {
            "description": "Cross-links are disabled for this organization"
          },
          "404": {
            "description": "Entity not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Cross-link an entity to a peer entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-entityid-crosslinks",
          "metadata": {
            "sidebarTitle": "Cross-link an entity to a peer entity",
            "title": "Cross-link an entity to a peer entity"
          }
        }
      },
      "put": {
        "operationId": "EntitiesController_replaceCrosslinks",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceCrosslinksDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityCrosslinksResponseDto"
                }
              }
            },
            "description": ""
          },
          "400": {
            "description": "Self cross-link, or unknown peer entity"
          },
          "403": {
            "description": "Cross-links are disabled for this organization"
          },
          "404": {
            "description": "Entity not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Replace an entity's entire cross-link set",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-entities-entityid-crosslinks",
          "metadata": {
            "sidebarTitle": "Replace an entity's entire cross-link set",
            "title": "Replace an entity's entire cross-link set"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/crosslinks/{crosslinkId}": {
      "delete": {
        "operationId": "EntitiesController_removeCrosslink",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "crosslinkId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Cross-link removed"
          },
          "404": {
            "description": "Entity or cross-link not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a cross-link between two entities",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-entities-entityid-crosslinks-crosslinkid",
          "metadata": {
            "sidebarTitle": "Remove a cross-link between two entities",
            "title": "Remove a cross-link between two entities"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/formulas": {
      "put": {
        "operationId": "EntitiesController_setFormula",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetFormulaDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Author (or clear) a formula on an entity field",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-entities-entityid-formulas",
          "metadata": {
            "sidebarTitle": "Author (or clear) a formula on an entity field",
            "title": "Author (or clear) a formula on an entity field"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/links": {
      "post": {
        "operationId": "EntitiesController_addLink",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddLinkDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add a link from an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-entityid-links",
          "metadata": {
            "sidebarTitle": "Add a link from an entity",
            "title": "Add a link from an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/links/remove": {
      "post": {
        "operationId": "EntitiesController_removeLink",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveLinkDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove a link from an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-entities-entityid-links-remove",
          "metadata": {
            "sidebarTitle": "Remove a link from an entity",
            "title": "Remove a link from an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entityId}/values": {
      "put": {
        "operationId": "EntitiesController_setValue",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetValueDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityStateResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set a value on an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-entities-entityid-values",
          "metadata": {
            "sidebarTitle": "Set a value on an entity",
            "title": "Set a value on an entity"
          }
        }
      }
    },
    "/project/{projectId}/entities/{entity_ids}": {
      "get": {
        "operationId": "EntitiesController_getEntities",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "entity_ids",
            "required": true,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "in": "query",
            "name": "branch_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EntityStateResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get current state of entities",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-entities-entity-ids",
          "metadata": {
            "sidebarTitle": "Get current state of entities",
            "title": "Get current state of entities"
          }
        }
      }
    },
    "/project/{projectId}/entities/{parentId}/children/reorder": {
      "put": {
        "operationId": "EntitiesController_reorderChildren",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "parentId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReorderChildrenDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Downstream links reordered"
          },
          "400": {
            "description": "Invalid downstream link IDs"
          },
          "404": {
            "description": "Upstream entity not found"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Reorder downstream links of an entity",
        "tags": [
          "Entities"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-entities-parentid-children-reorder",
          "metadata": {
            "sidebarTitle": "Reorder downstream links of an entity",
            "title": "Reorder downstream links of an entity"
          }
        }
      }
    },
    "/project/{projectId}/files": {
      "get": {
        "description": "Returns up to 500 of the project's most recently uploaded files, newest first.",
        "operationId": "FilesController_list",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/FileRecordResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List the files uploaded to a project",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-files",
          "metadata": {
            "sidebarTitle": "List the files uploaded to a project",
            "title": "List the files uploaded to a project"
          }
        }
      }
    },
    "/project/{projectId}/files/request-upload": {
      "post": {
        "description": "Returns a temporary upload URL. PUT the file directly to the returned URL. Use POST /files/upload instead if you prefer to send the file through the API.",
        "operationId": "FilesController_requestUpload",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFileDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileUploadResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Request a presigned upload URL",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-files-request-upload",
          "metadata": {
            "sidebarTitle": "Request a presigned upload URL",
            "title": "Request a presigned upload URL"
          }
        }
      }
    },
    "/project/{projectId}/files/request-uploads": {
      "post": {
        "description": "Batch version of POST /files/request-upload. Returns a presigned upload URL for each file in one round-trip; PUT each file directly to its returned URL. Results are in the same order as the request `files`.",
        "operationId": "FilesController_requestUploads",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchRequestUploadDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchFileUploadResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Request presigned upload URLs for multiple files",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-files-request-uploads",
          "metadata": {
            "sidebarTitle": "Request presigned upload URLs for multiple files",
            "title": "Request presigned upload URLs for multiple files"
          }
        }
      }
    },
    "/project/{projectId}/files/upload": {
      "post": {
        "description": "Uploads a file as multipart/form-data, proxying the bytes through the API. Maximum file size: 100 MB — for anything larger use POST /files/request-upload and PUT the bytes to the presigned URL (up to 512 MB). The returned `id` can be used to embed the file in descriptions using the `flow-file:` scheme: `![alt](flow-file:{id})`.",
        "operationId": "FilesController_upload",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "file": {
                    "description": "File to upload",
                    "format": "binary",
                    "type": "string"
                  }
                },
                "required": [
                  "file"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileRecordResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Upload a file",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-files-upload",
          "metadata": {
            "sidebarTitle": "Upload a file",
            "title": "Upload a file"
          }
        }
      }
    },
    "/project/{projectId}/files/urls": {
      "post": {
        "description": "Batch version of GET /files/:id/url. Returns time-limited URLs for up to 100 file IDs.",
        "operationId": "FilesController_getUrls",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchFileUrlsRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchFileUrlsResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get temporary download URLs for multiple files",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-files-urls",
          "metadata": {
            "sidebarTitle": "Get temporary download URLs for multiple files",
            "title": "Get temporary download URLs for multiple files"
          }
        }
      }
    },
    "/project/{projectId}/files/{id}": {
      "delete": {
        "description": "Permanently deletes a file. Only the user who uploaded the file can delete it.",
        "operationId": "FilesController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete a file",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-project-projectid-files-id",
          "metadata": {
            "sidebarTitle": "Delete a file",
            "title": "Delete a file"
          }
        }
      }
    },
    "/project/{projectId}/files/{id}/request-upload": {
      "post": {
        "description": "Returns a temporary upload URL that replaces an existing file's content in place, keeping its id. PUT the file directly to the returned URL. Use this when a reference to the file had to be written before its bytes were available. The stored name and mime type are reused; only the size is updated. Only the user who created the file can replace it.",
        "operationId": "FilesController_requestReupload",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReuploadFileDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileUploadResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Request a presigned upload URL for an existing file",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-files-id-request-upload",
          "metadata": {
            "sidebarTitle": "Request a presigned upload URL for an existing file",
            "title": "Request a presigned upload URL for an existing file"
          }
        }
      }
    },
    "/project/{projectId}/files/{id}/url": {
      "get": {
        "description": "Returns a time-limited URL for downloading or viewing the file. The URL can be used directly in img tags, download links, etc.",
        "operationId": "FilesController_getUrl",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch rendered by the shared Reader view.",
            "in": "query",
            "name": "branchId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Saved view that granted the external Reader access.",
            "in": "query",
            "name": "viewId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Reachable entity whose rich text or diagram references the file.",
            "in": "query",
            "name": "entityId",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileUrlResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a temporary download URL for a file",
        "tags": [
          "Files"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-files-id-url",
          "metadata": {
            "sidebarTitle": "Get a temporary download URL for a file",
            "title": "Get a temporary download URL for a file"
          }
        }
      }
    },
    "/project/{projectId}/flow-md": {
      "get": {
        "operationId": "ProjectController_getFlowMd",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Whose document: the project's shared one (default) or the requester's own.",
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "enum": [
                "project",
                "personal"
              ],
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowMdResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the project's or the requester's Flow.md",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-flow-md",
          "metadata": {
            "sidebarTitle": "Get the project's or the requester's Flow.md",
            "title": "Get the project's or the requester's Flow.md"
          }
        }
      },
      "put": {
        "operationId": "ProjectController_updateFlowMd",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Whose document: the project's shared one (default) or the requester's own.",
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "enum": [
                "project",
                "personal"
              ],
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFlowMdDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowMdResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Replace the project's or the requester's Flow.md",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-flow-md",
          "metadata": {
            "sidebarTitle": "Replace the project's or the requester's Flow.md",
            "title": "Replace the project's or the requester's Flow.md"
          }
        }
      }
    },
    "/project/{projectId}/import/pdf-page-image": {
      "post": {
        "description": "No model call. Returns base64 PNG plus the pixel dimensions, so a caller can overlay the normalised boxes an analysis reported.",
        "operationId": "ImportController_pdfPageImage",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PdfPageImageRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PdfPageImageResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Render one PDF page as an image",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-import-pdf-page-image",
          "metadata": {
            "sidebarTitle": "Render one PDF page as an image",
            "title": "Render one PDF page as an image"
          }
        }
      }
    },
    "/project/{projectId}/import/runs": {
      "get": {
        "operationId": "ImportController_listRuns",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRunListDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List this project's recent import runs",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-import-runs",
          "metadata": {
            "sidebarTitle": "List this project's recent import runs",
            "title": "List this project's recent import runs"
          }
        }
      },
      "post": {
        "description": "Returns as soon as the run is persisted. A leased backend worker cuts each file into chunks a model can read on its own — one per PDF page, one per image — and reads them off the request path. Poll the run for progress and read its output when it settles. Nothing here writes entity data.",
        "operationId": "ImportController_startRun",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartImportRunDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRunProgressDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Start an import run over a set of uploaded files",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-import-runs",
          "metadata": {
            "sidebarTitle": "Start an import run over a set of uploaded files",
            "title": "Start an import run over a set of uploaded files"
          }
        }
      }
    },
    "/project/{projectId}/import/runs/{runId}": {
      "get": {
        "description": "Chunks read so far out of the total, plus running counts of candidate entities, relationships and notes. `chunksTotal` is null until planning has opened every file and knows how many chunks there are.",
        "operationId": "ImportController_runProgress",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRunProgressDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Poll an import run",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-import-runs-runid",
          "metadata": {
            "sidebarTitle": "Poll an import run",
            "title": "Poll an import run"
          }
        }
      }
    },
    "/project/{projectId}/import/runs/{runId}/chunks": {
      "get": {
        "description": "Every chunk with the analysis it produced, provenance intact. This is the debug view; the rolled-up output is what an agent reads.",
        "operationId": "ImportController_runChunks",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRunDetailDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Read an import run chunk by chunk",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-import-runs-runid-chunks",
          "metadata": {
            "sidebarTitle": "Read an import run chunk by chunk",
            "title": "Read an import run chunk by chunk"
          }
        }
      }
    },
    "/project/{projectId}/import/runs/{runId}/output": {
      "get": {
        "description": "Candidate entities merged by name, carrying every type they were called and everything the pages said about them, relationships merged by their ends, and the notes each chunk left. Readable before the run settles; it then covers only the chunks read so far.",
        "operationId": "ImportController_runOutput",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "runId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportRunOutputDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Read an import run rolled up across its chunks",
        "tags": [
          "Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-import-runs-runid-output",
          "metadata": {
            "sidebarTitle": "Read an import run rolled up across its chunks",
            "title": "Read an import run rolled up across its chunks"
          }
        }
      }
    },
    "/project/{projectId}/reqif-import/upload": {
      "post": {
        "description": "Creates an import job and returns a presigned URL the client PUTs the .reqif/.reqifz bytes to directly. Call the parse endpoint once the PUT completes.",
        "operationId": "ReqifImportController_requestUpload",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReqifImportUploadDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReqifImportUploadResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Request a presigned URL to upload a ReqIF archive",
        "tags": [
          "ReqIF Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-reqif-import-upload",
          "metadata": {
            "sidebarTitle": "Request a presigned URL to upload a ReqIF archive",
            "title": "Request a presigned URL to upload a ReqIF archive"
          }
        }
      }
    },
    "/project/{projectId}/reqif-import/{jobId}": {
      "get": {
        "operationId": "ReqifImportController_find",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReqifImportJobResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Poll a ReqIF import job",
        "tags": [
          "ReqIF Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-reqif-import-jobid",
          "metadata": {
            "sidebarTitle": "Poll a ReqIF import job",
            "title": "Poll a ReqIF import job"
          }
        }
      }
    },
    "/project/{projectId}/reqif-import/{jobId}/commit": {
      "post": {
        "description": "Queues the durable write of the parsed document onto its reserved branch. Poll the job for progress and the branch id.",
        "operationId": "ReqifImportController_commit",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommitReqifImportDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReqifImportJobResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Commit a ReqIF import with the chosen mapping",
        "tags": [
          "ReqIF Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-reqif-import-jobid-commit",
          "metadata": {
            "sidebarTitle": "Commit a ReqIF import with the chosen mapping",
            "title": "Commit a ReqIF import with the chosen mapping"
          }
        }
      }
    },
    "/project/{projectId}/reqif-import/{jobId}/parse": {
      "post": {
        "description": "Queues the durable parse of an uploaded archive. Poll the job for the file-derived schema, then map and commit.",
        "operationId": "ReqifImportController_parse",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReqifImportJobResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Parse an uploaded ReqIF archive",
        "tags": [
          "ReqIF Import"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-project-projectid-reqif-import-jobid-parse",
          "metadata": {
            "sidebarTitle": "Parse an uploaded ReqIF archive",
            "title": "Parse an uploaded ReqIF archive"
          }
        }
      }
    },
    "/project/{projectId}/sidebar-notifications-enabled": {
      "get": {
        "operationId": "ProjectController_getSidebarNotificationsEnabled",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SidebarNotificationsEnabledResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the project's sidebar notifications toggle",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-sidebar-notifications-enabled",
          "metadata": {
            "sidebarTitle": "Get the project's sidebar notifications toggle",
            "title": "Get the project's sidebar notifications toggle"
          }
        }
      }
    },
    "/project/{projectId}/updated-variant-view-enabled": {
      "get": {
        "operationId": "ProjectController_getUpdatedVariantViewEnabled",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdatedVariantViewEnabledResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the workspace's updated variant-view toggle",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-updated-variant-view-enabled",
          "metadata": {
            "sidebarTitle": "Get the workspace's updated variant-view toggle",
            "title": "Get the workspace's updated variant-view toggle"
          }
        }
      }
    },
    "/project/{projectId}/variants-enabled": {
      "get": {
        "operationId": "ProjectController_getVariantsEnabled",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariantsEnabledResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the project's variants-prototype toggle",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-project-projectid-variants-enabled",
          "metadata": {
            "sidebarTitle": "Get the project's variants-prototype toggle",
            "title": "Get the project's variants-prototype toggle"
          }
        }
      },
      "put": {
        "operationId": "ProjectController_updateVariantsEnabled",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVariantsEnabledDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariantsEnabledResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set the project's variants-prototype toggle",
        "tags": [
          "Projects"
        ],
        "x-mint": {
          "href": "/api/endpoints/put-project-projectid-variants-enabled",
          "metadata": {
            "sidebarTitle": "Set the project's variants-prototype toggle",
            "title": "Set the project's variants-prototype toggle"
          }
        }
      }
    },
    "/reqif/parse": {
      "post": {
        "description": "Resolves a ReqIF document against an optional import mapping and returns the entities it describes (identifier, flow type, field values — with XHTML fields converted to rich-text JSON), the hierarchy/relation links, and the file-derived default schema. No entities are created; this is a read-only preview of what an import would produce.",
        "operationId": "ReqifController_parse",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParseReqifDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "defaultSchema": {
                      "type": "object"
                    },
                    "entities": {
                      "items": {
                        "properties": {
                          "identifier": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "values": {
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "links": {
                      "items": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Parsed entities, links and the file-derived default schema"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Parse a ReqIF document into a flow-shaped preview",
        "tags": [
          "ReqIF"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-reqif-parse",
          "metadata": {
            "sidebarTitle": "Parse a ReqIF document into a flow-shaped preview",
            "title": "Parse a ReqIF document into a flow-shaped preview"
          }
        }
      }
    },
    "/shared-grants": {
      "post": {
        "operationId": "SharedGrantsController_create",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSharedAccessGrantDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SharedAccessGrantResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a shared-access grant",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-shared-grants",
          "metadata": {
            "sidebarTitle": "Create a shared-access grant",
            "title": "Create a shared-access grant"
          }
        }
      }
    },
    "/shared-grants/project/{projectId}": {
      "get": {
        "operationId": "SharedGrantsController_findExpiredGrants",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SharedAccessGrantResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List every shared-access grant in a project, including expired ones",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-shared-grants-project-projectid",
          "metadata": {
            "sidebarTitle": "List every shared-access grant in a project, including expired ones",
            "title": "List every shared-access grant in a project, including expired ones"
          }
        }
      }
    },
    "/shared-grants/project/{projectId}/me": {
      "get": {
        "operationId": "SharedGrantsController_findCurrentUserGrants",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SharedAccessGrantResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List active shared-access grants held by the current user in this project",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-shared-grants-project-projectid-me",
          "metadata": {
            "sidebarTitle": "List active shared-access grants held by the current user in this project",
            "title": "List active shared-access grants held by the current user in this project"
          }
        }
      }
    },
    "/shared-grants/project/{projectId}/me/can-write": {
      "get": {
        "operationId": "SharedGrantsController_canCurrentUserWriteScope",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch the rendered share view is scoped to.",
            "in": "query",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "CustomView.id the rendered share view is scoped to.",
            "in": "query",
            "name": "viewId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Currently rendered entity id to test against reachable writer grants.",
            "in": "query",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SharedGrantWriteAccessResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Check whether the current external user can write the rendered share scope",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-shared-grants-project-projectid-me-can-write",
          "metadata": {
            "sidebarTitle": "Check whether the current external user can write the rendered share scope",
            "title": "Check whether the current external user can write the rendered share scope"
          }
        }
      }
    },
    "/shared-grants/project/{projectId}/scope": {
      "get": {
        "operationId": "SharedGrantsController_findByScope",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Branch the dialog is scoped to. \"master\" for the base branch.",
            "in": "query",
            "name": "branchId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "CustomView.id the dialog is scoped to.",
            "in": "query",
            "name": "viewId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Starting entity id the dialog is anchored to.",
            "in": "query",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SharedAccessGrantResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List active grants for the (project, branch, view, starting entity) scope",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-shared-grants-project-projectid-scope",
          "metadata": {
            "sidebarTitle": "List active grants for the (project, branch, view, starting entity) scope",
            "title": "List active grants for the (project, branch, view, starting entity) scope"
          }
        }
      }
    },
    "/shared-grants/project/{projectId}/{id}": {
      "delete": {
        "operationId": "SharedGrantsController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "projectId",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Grant deleted"
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revoke a shared-access grant",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-shared-grants-project-projectid-id",
          "metadata": {
            "sidebarTitle": "Revoke a shared-access grant",
            "title": "Revoke a shared-access grant"
          }
        }
      }
    },
    "/shared-grants/share-view": {
      "post": {
        "operationId": "SharedGrantsController_shareView",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShareViewBatchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShareViewBatchResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Issue one grant per recipient under a single scope. Atomic across the batch.",
        "tags": [
          "Shared Access Grants"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-shared-grants-share-view",
          "metadata": {
            "sidebarTitle": "Issue one grant per recipient under a single scope. Atomic across the batch.",
            "title": "Issue one grant per recipient under a single scope. Atomic across the batch."
          }
        }
      }
    },
    "/user-groups": {
      "get": {
        "operationId": "UserGroupsController_findAll",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UserGroupResponseDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List user groups in the workspace",
        "tags": [
          "User Groups"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-user-groups",
          "metadata": {
            "sidebarTitle": "List user groups in the workspace",
            "title": "List user groups in the workspace"
          }
        }
      },
      "post": {
        "operationId": "UserGroupsController_create",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserGroupDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserGroupResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a user group",
        "tags": [
          "User Groups"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-user-groups",
          "metadata": {
            "sidebarTitle": "Create a user group",
            "title": "Create a user group"
          }
        }
      }
    },
    "/user-groups/{id}": {
      "delete": {
        "description": "Stage gates referencing the deleted group lose those eligible reviewers (fail closed); edit the affected gates afterwards.",
        "operationId": "UserGroupsController_remove",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete a user group",
        "tags": [
          "User Groups"
        ],
        "x-mint": {
          "href": "/api/endpoints/delete-user-groups-id",
          "metadata": {
            "sidebarTitle": "Delete a user group",
            "title": "Delete a user group"
          }
        }
      },
      "patch": {
        "operationId": "UserGroupsController_update",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserGroupDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserGroupResponseDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Rename a user group or replace its members",
        "tags": [
          "User Groups"
        ],
        "x-mint": {
          "href": "/api/endpoints/patch-user-groups-id",
          "metadata": {
            "sidebarTitle": "Rename a user group or replace its members",
            "title": "Rename a user group or replace its members"
          }
        }
      }
    },
    "/users": {
      "get": {
        "operationId": "UsersController_findAll",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UserDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List all users",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users",
          "metadata": {
            "sidebarTitle": "List all users",
            "title": "List all users"
          }
        }
      }
    },
    "/users/by-ids": {
      "get": {
        "operationId": "UsersController_findByIds",
        "parameters": [
          {
            "in": "query",
            "name": "ids",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UserDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the users with the given ids. An id that is unknown, malformed, or outside the caller’s visible set is simply absent from the response.",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-by-ids",
          "metadata": {
            "sidebarTitle": "Get users by ID",
            "title": "Get users by ID"
          }
        }
      }
    },
    "/users/invite/bulk": {
      "post": {
        "operationId": "UsersController_inviteUsersBulk",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkInviteUserDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkInviteResultDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Invite many users at once. Names are unknown at invite time and stored empty until each user signs in.",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-users-invite-bulk",
          "metadata": {
            "sidebarTitle": "Invite users in bulk",
            "title": "Invite users in bulk"
          }
        }
      }
    },
    "/users/invite/bulk-detailed": {
      "post": {
        "operationId": "UsersController_inviteUsersBulkDetailed",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkInviteDetailedDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkInviteResultDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Invite many fully-specified users at once (per-user name, role, and project access). Used by the v2 -> v3 migration to provision users in one round-trip while preserving each source user’s name and scope.",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/post-users-invite-bulk-detailed",
          "metadata": {
            "sidebarTitle": "Invite users with roles and access",
            "title": "Invite users with roles and access"
          }
        }
      }
    },
    "/users/me": {
      "get": {
        "operationId": "UsersController_me",
        "parameters": [
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserWithPermissionsDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get the current authenticated user",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-me",
          "metadata": {
            "sidebarTitle": "Get the current authenticated user",
            "title": "Get the current authenticated user"
          }
        }
      }
    },
    "/users/page": {
      "get": {
        "operationId": "UsersController_findPage",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "project_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_ids",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPageDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List one page of users",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-page",
          "metadata": {
            "sidebarTitle": "List one page of users",
            "title": "List one page of users"
          }
        }
      }
    },
    "/users/with-permissions": {
      "get": {
        "operationId": "UsersController_findAllWithPermissions",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "role",
            "required": false,
            "schema": {
              "enum": [
                "admin",
                "editor",
                "read_only",
                "external"
              ],
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UserWithPermissionsDto"
                  },
                  "type": "array"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-with-permissions",
          "metadata": {
            "sidebarTitle": "List users with permissions",
            "title": "List users with permissions"
          }
        }
      }
    },
    "/users/{id}": {
      "get": {
        "operationId": "UsersController_findOne",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get a user by ID",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-id",
          "metadata": {
            "sidebarTitle": "Get a user by ID",
            "title": "Get a user by ID"
          }
        }
      }
    },
    "/users/{id}/profile-picture-url": {
      "get": {
        "operationId": "UsersController_getProfilePictureUrl",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace identifier",
            "in": "header",
            "name": "customer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfilePictureUrlDto"
                }
              }
            },
            "description": ""
          }
        },
        "security": [
          {
            "api-key": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get presigned URL for a user profile picture",
        "tags": [
          "Users"
        ],
        "x-mint": {
          "href": "/api/endpoints/get-users-id-profile-picture-url",
          "metadata": {
            "sidebarTitle": "Get presigned URL for a user profile picture",
            "title": "Get presigned URL for a user profile picture"
          }
        }
      }
    }
  },
  "servers": [
    {
      "description": "Flow API",
      "url": "https://backend.branch.flowengineering.com"
    }
  ],
  "tags": [
    {
      "name": "Automations"
    },
    {
      "name": "Branches"
    },
    {
      "name": "Comments"
    },
    {
      "name": "Convert"
    },
    {
      "name": "Data Model"
    },
    {
      "name": "Diagrams"
    },
    {
      "name": "Entities"
    },
    {
      "name": "Files"
    },
    {
      "name": "Import"
    },
    {
      "name": "Notifications"
    },
    {
      "name": "Projects"
    },
    {
      "name": "ReqIF"
    },
    {
      "name": "ReqIF Import"
    },
    {
      "name": "Shared Access Grants"
    },
    {
      "name": "User Groups"
    },
    {
      "name": "Users"
    }
  ]
}
