{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "Represents a message sent from the server to the client.\n\nThis class encapsulates the structure of a message that the server sends to\nthe client, providing metadata and payload for processing.\n\nAttributes:\n----------\n- request_id (UUID4): Unique identifier (UUID4) for the request, generated by\n  the server.\n- message_type (TechreadMessageType): The main message type indicating the\n  category of the message.\n- message_subtype (TechreadMessageSubtype): The subtype specifying additional\n  details about the message.\n- page_number (int): The page number the message corresponds to (starting from 0).\n- payload_dict (Optional[Any]): The structured payload data. Usually\n  deserialized into one of the known response models (or kept as a dict),\n  but payloads that cannot be deserialized (e.g., a non-mapping value)\n  are preserved unchanged.\n- payload_url (Optional[HttpUrl]): A URL for downloading binary data\n  (e.g., images or large files).\n- payload_bytes (Optional[bytes]): Binary content downloaded from the `payload_url`.\n  This wil initially be None, and will be populated when the client downloads the\n  content from the `payload_url`. If you implement your own client, you need to\n  download the content from the `payload_url` and set the `payload_bytes` attribute.",
  "properties": {
    "exceptions": {
      "default": [],
      "items": {
        "$ref": "#/$defs/TechreadException"
      },
      "title": "Exceptions",
      "type": "array"
    },
    "request_id": {
      "format": "uuid4",
      "title": "Request Id",
      "type": "string"
    },
    "message_type": {
      "$ref": "#/$defs/TechreadMessageType"
    },
    "message_subtype": {
      "anyOf": [
        {
          "$ref": "#/$defs/TechreadMessageSubtype"
        },
        {
          "$ref": "#/$defs/AskType"
        },
        {
          "$ref": "#/$defs/W24AskType"
        }
      ],
      "title": "Message Subtype"
    },
    "page_number": {
      "default": 0,
      "title": "Page Number",
      "type": "integer"
    },
    "payload_dict": {
      "oneOf": [
        {
          "$ref": "#/$defs/ResponseBalloons"
        },
        {
          "$ref": "#/$defs/ResponseCustom"
        },
        {
          "$ref": "#/$defs/ResponseDocumentProfile"
        },
        {
          "$ref": "#/$defs/ResponsePageAssessment"
        },
        {
          "$ref": "#/$defs/ResponseFeaturesComponentDrawing"
        },
        {
          "$ref": "#/$defs/ResponseInsightsComponentDrawing"
        },
        {
          "$ref": "#/$defs/ResponseMetaDataComponentDrawing"
        },
        {
          "$ref": "#/$defs/ResponseRedaction"
        },
        {
          "$ref": "#/$defs/ResponseReferencePositions"
        },
        {
          "$ref": "#/$defs/TechreadInitResponse"
        },
        {
          "$ref": "#/$defs/ImageReference"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The result of the ask: one of the v2 response models, chosen by `ask_type`. Null on progress messages. Beside a `payload_url`, either a response model (a redaction) or a small object naming the sheet or view the file shows."
    },
    "payload_url": {
      "anyOf": [
        {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Payload Url"
    },
    "payload_bytes": {
      "type": "null",
      "default": null,
      "description": "Always null on the wire."
    }
  },
  "required": [
    "request_id",
    "message_type",
    "message_subtype"
  ],
  "title": "TechreadMessage",
  "type": "object",
  "$defs": {
    "AskType": {
      "description": "The type of request to be sent to the server.",
      "enum": [
        "BALLOONS",
        "CUSTOM",
        "DOCUMENT_PROFILE",
        "FEATURES",
        "INSIGHTS",
        "META_DATA",
        "PAGE_ASSESSMENT",
        "REDACTION",
        "REFERENCE_POSITIONS",
        "SHEET_IMAGES",
        "VIEW_IMAGES"
      ],
      "title": "AskType",
      "type": "string"
    },
    "Balloon": {
      "description": "Represents a balloon annotation in a drawing or part diagram.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "center": {
          "description": "The (x, y) coordinates of the balloon's center on the diagram.",
          "examples": [
            [
              150,
              200
            ]
          ],
          "maxItems": 2,
          "minItems": 2,
          "prefixItems": [
            {
              "type": "integer"
            },
            {
              "type": "integer"
            }
          ],
          "title": "Center",
          "type": "array"
        }
      },
      "required": [
        "reference_id",
        "center"
      ],
      "title": "Balloon",
      "type": "object"
    },
    "BillOfMaterial": {
      "description": "Represents a bill of material (BOM) table in a technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "rows": {
          "description": "List of rows in the bill of material.",
          "items": {
            "$ref": "#/$defs/BillOfMaterialRow"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "reference_id",
        "rows"
      ],
      "title": "BillOfMaterial",
      "type": "object"
    },
    "BillOfMaterialRow": {
      "description": "Represents a single row in a bill of material (BOM) table.",
      "properties": {
        "position": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Position Number of the part on the assembly, defined using position bubbles.",
          "title": "Position"
        },
        "part_number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Part Number of the parts listed in the bill of material.",
          "title": "Part Number"
        },
        "designation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Designation/Title of the part listed in the bill of material.",
          "title": "Designation"
        },
        "material_options": {
          "description": "List of possible MaterialCombinations",
          "items": {
            "$ref": "#/$defs/MaterialCombination"
          },
          "title": "Material Options",
          "type": "array"
        },
        "quantity": {
          "anyOf": [
            {
              "$ref": "#/$defs/Quantity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Physical quantity in the string format of Pint."
        },
        "unit_weight": {
          "anyOf": [
            {
              "$ref": "#/$defs/Quantity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Unit Weight of the parts listed in the bill of material."
        },
        "fastener": {
          "anyOf": [
            {
              "$ref": "#/$defs/FastenerSpecification"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fastener the row lists (e.g. a press-in nut `PEM CLS-M4-2`, a weld nut `DIN 929 M12` or a screw `ISO 4762 M6x20`), when its designation, part number or standard reads as one. None for every other row."
        }
      },
      "title": "BillOfMaterialRow",
      "type": "object"
    },
    "Bore": {
      "description": "Represents a bore feature in an engineering or technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The number of bores or instances. Must be at least 1.",
          "examples": [
            2
          ],
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "counterbore": {
          "anyOf": [
            {
              "$ref": "#/$defs/Counterbore"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The counterbore feature, if present."
        },
        "countersink": {
          "anyOf": [
            {
              "$ref": "#/$defs/Countersink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The countersink feature, if present."
        },
        "counterdrill": {
          "anyOf": [
            {
              "$ref": "#/$defs/Counterdrill"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The counterdrill feature, if present."
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the bore.",
          "examples": [
            {
              "size_type": "DIAMETER",
              "tolerance": null,
              "unit": "millimeter",
              "value": "10"
            }
          ]
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "description": "The depth of the bore.",
          "examples": [
            {
              "depth_type": "SIZE",
              "size": {
                "size_type": "LINEAR",
                "tolerance": null,
                "unit": "millimeter",
                "value": "50"
              }
            }
          ]
        },
        "thread": {
          "anyOf": [
            {
              "$ref": "#/$defs/Reference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Reference to the reference_id of the associated thread."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "depth"
      ],
      "title": "Bore",
      "type": "object"
    },
    "BoundingDimensions": {
      "description": "Represents the bounding dimensions of a component.",
      "properties": {
        "enclosing_cuboid": {
          "anyOf": [
            {
              "$ref": "#/$defs/GeometryCuboid"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The enclosing cuboid of the component."
        },
        "enclosing_cylinder": {
          "anyOf": [
            {
              "$ref": "#/$defs/GeometryCylinder"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The enclosing cylinder of the component."
        },
        "annotations_complete": {
          "default": true,
          "description": "Whether the drawing dimensions the component's outermost geometry. False when features that extend the envelope carry no dimension of their own - tabs, winglets, lugs, standoffs, welded-on brackets - in which case the bounding dimensions are a lower bound on the true envelope rather than an exact figure. See `completeness_note` for the reason.",
          "examples": [
            true
          ],
          "title": "Annotations Complete",
          "type": "boolean"
        },
        "completeness_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Plain-language explanation of why the bounding dimensions are only a lower bound. Set together with `annotations_complete=False`, and null otherwise.",
          "examples": [
            "The winglets on the side panels carry no dimensions, so the depth is a lower bound and the true envelope is slightly larger."
          ],
          "title": "Completeness Note"
        }
      },
      "title": "BoundingDimensions",
      "type": "object"
    },
    "CenterHole": {
      "description": "Represents a center hole specified by a standard (e.g.\n`DIN 332-A 2,5x5,3`, `ISO 6411-A 2/4.25`).",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The number of center holes or instances. Must be at least 1.",
          "examples": [
            2
          ],
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "standard": {
          "description": "The standard the center hole is specified by, as written on the drawing.",
          "examples": [
            "DIN 332"
          ],
          "title": "Standard",
          "type": "string"
        },
        "form": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The form defined by the standard (e.g. `A`, `B`, `R`), if stated.",
          "examples": [
            "A"
          ],
          "title": "Form"
        },
        "pilot_diameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The diameter of the pilot hole (e.g. `2.5` in `A 2,5x5,3`), if stated.",
          "examples": [
            {
              "size_type": "DIAMETER",
              "tolerance": null,
              "unit": "millimeter",
              "value": "2.5"
            }
          ]
        },
        "outer_diameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The outer diameter of the countersink (e.g. `5.3` in `A 2,5x5,3`), if stated."
        },
        "requirement": {
          "anyOf": [
            {
              "$ref": "#/$defs/CenterHoleRequirement"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the center hole must, may or must not remain on the finished part, if stated."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "standard"
      ],
      "title": "CenterHole",
      "type": "object"
    },
    "CenterHoleRequirement": {
      "description": "Whether a center hole must remain on the finished part (ISO 6411).\n\n- REQUIRED: the center hole is required on the finished part.\n- PERMITTED: the center hole may remain, but is not required (often\n  written as \"optional\").\n- NOT_PERMITTED: the center hole must not remain on the finished part.",
      "enum": [
        "REQUIRED",
        "PERMITTED",
        "NOT_PERMITTED"
      ],
      "title": "CenterHoleRequirement",
      "type": "string"
    },
    "Certification": {
      "description": "Represents a certification or compliance mark on a part or drawing.",
      "properties": {
        "certification_type": {
          "$ref": "#/$defs/CertificationType",
          "description": "The type of certification, such as CE, UL, or ISO.",
          "examples": [
            "EAR"
          ]
        },
        "raw_ocr": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Raw OCR text extracted from the drawing that contains the certification information.",
          "examples": [
            "Requires Certificate of Compliance"
          ],
          "title": "Raw Ocr"
        }
      },
      "required": [
        "certification_type"
      ],
      "title": "Certification",
      "type": "object"
    },
    "CertificationType": {
      "enum": [
        "AS9100",
        "CMRT",
        "COC",
        "EAR",
        "EN_9100",
        "FINISHING_CERT",
        "HARDWARE_CERT",
        "IATF_16949",
        "ISO_13485",
        "ISO_14001",
        "ISO_9001",
        "ITAR",
        "JCP",
        "MATERIAL_CERT_DFARS",
        "MATERIAL_CERT_STANDARD",
        "MATERIAL_TRACEABILITY",
        "NADCAP",
        "NIST_800_171",
        "REACH",
        "ROHS"
      ],
      "title": "CertificationType",
      "type": "string"
    },
    "Chamfer": {
      "description": "Represents a chamfer feature in an engineering or technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The number of chamfers or instances. Must be at least 1.",
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "size": {
          "$ref": "#/$defs/Size",
          "description": "The linear size of the chamfer, such as the width or depth.",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": {
                "deviation_lower": "-0.1",
                "deviation_upper": "0.1",
                "fit": null,
                "is_approximation": false,
                "is_general_tolerance": false,
                "is_reference": false,
                "is_theoretically_exact": false,
                "tolerance_grade": "IT7"
              },
              "unit": "millimeter",
              "value": "2"
            }
          ]
        },
        "angle": {
          "$ref": "#/$defs/Size",
          "description": "The angle of the chamfer, typically specified in degrees.",
          "examples": [
            {
              "size_type": "ANGULAR",
              "tolerance": {
                "deviation_lower": "-0.5",
                "deviation_upper": "0.5",
                "fit": null,
                "is_approximation": false,
                "is_general_tolerance": false,
                "is_reference": false,
                "is_theoretically_exact": false,
                "tolerance_grade": "IT8"
              },
              "unit": "degree",
              "value": "45"
            }
          ]
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "size",
        "angle"
      ],
      "title": "Chamfer",
      "type": "object"
    },
    "Confidence": {
      "description": "Represents a confidence score for a feature or measurement.",
      "properties": {
        "score": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The confidence score of the feature, indicating the confidence the symstem has in the reading.",
          "examples": [
            "0.75"
          ],
          "title": "Score"
        }
      },
      "required": [
        "score"
      ],
      "title": "Confidence",
      "type": "object"
    },
    "CoordinateSpace": {
      "enum": [
        "PIXEL_SPACE",
        "WORLD_SPACE"
      ],
      "title": "CoordinateSpace",
      "type": "string"
    },
    "Counterbore": {
      "description": "Represents a counterbore feature in an engineering or technical drawing.",
      "properties": {
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the counterbore.",
          "examples": [
            {
              "size_type": "DIAMETER",
              "tolerance": {
                "deviation_lower": "-0.1",
                "deviation_upper": "0.1",
                "fit": null,
                "is_approximation": false,
                "is_general_tolerance": false,
                "is_reference": false,
                "is_theoretically_exact": false,
                "tolerance_grade": "IT7"
              },
              "unit": "millimeter",
              "value": "10"
            }
          ]
        },
        "depth": {
          "$ref": "#/$defs/Depth",
          "description": "The depth of the counterbore.",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": {
                "deviation_lower": "-0.2",
                "deviation_upper": "0.2",
                "fit": null,
                "is_approximation": false,
                "is_general_tolerance": false,
                "is_reference": false,
                "is_theoretically_exact": false,
                "tolerance_grade": "IT8"
              },
              "unit": "millimeter",
              "value": "5"
            }
          ]
        }
      },
      "required": [
        "diameter",
        "depth"
      ],
      "title": "Counterbore",
      "type": "object"
    },
    "Counterdrill": {
      "description": "Represents a counterdrill feature in an engineering or technical drawing.",
      "properties": {
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the counterdrill.",
          "examples": [
            {
              "size_type": "DIAMETER",
              "tolerance": null,
              "unit": "millimeter",
              "value": "8"
            }
          ]
        },
        "depth": {
          "$ref": "#/$defs/Depth",
          "description": "The depth of the counterdrill.",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "20"
            }
          ]
        },
        "angle": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "description": "The angle of the counterdrill, typically in degrees.",
          "examples": [
            {
              "size_type": "ANGULAR",
              "tolerance": null,
              "unit": "degree",
              "value": "118"
            }
          ]
        }
      },
      "required": [
        "diameter",
        "depth",
        "angle"
      ],
      "title": "Counterdrill",
      "type": "object"
    },
    "Countersink": {
      "description": "Represents a countersink feature in an engineering or technical drawing.",
      "properties": {
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the countersink.",
          "examples": [
            {
              "size_type": "DIAMETER",
              "tolerance": null,
              "unit": "millimeter",
              "value": "15"
            }
          ]
        },
        "angle": {
          "$ref": "#/$defs/Size",
          "description": "The angle of the countersink, typically in degrees.",
          "examples": [
            {
              "size_type": "ANGULAR",
              "tolerance": null,
              "unit": "degree",
              "value": "90"
            }
          ]
        }
      },
      "required": [
        "diameter",
        "angle"
      ],
      "title": "Countersink",
      "type": "object"
    },
    "CurvatureType": {
      "description": "Curvature types of Radius",
      "enum": [
        "CONCAVE",
        "CONVEX",
        "PLANE"
      ],
      "title": "CurvatureType",
      "type": "string"
    },
    "Depth": {
      "description": "Represents the depth of a feature, such as a hole or bore.",
      "properties": {
        "depth_type": {
          "$ref": "#/$defs/DepthType"
        },
        "size": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "depth_type",
        "size"
      ],
      "title": "Depth",
      "type": "object"
    },
    "DepthType": {
      "description": "Enumeration of depth types for holes and pockets.",
      "enum": [
        "SIZE",
        "THROUGH",
        "THROUGH_ALL",
        "BLIND"
      ],
      "title": "DepthType",
      "type": "string"
    },
    "Dimension": {
      "description": "Represents a measurement cue in an engineering or technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The quantity or value associated with the measurement, must be non-negative.",
          "examples": [
            10
          ],
          "minimum": 0,
          "title": "Quantity",
          "type": "integer"
        },
        "size": {
          "$ref": "#/$defs/Size",
          "description": "Details about the size, including type, nominal value, tolerance, and unit."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "size"
      ],
      "title": "Dimension",
      "type": "object"
    },
    "Entry": {
      "description": "Represents an entry in a list or table.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "language": {
          "anyOf": [
            {
              "$ref": "#/$defs/Language"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The language of the identifier, if known.",
          "examples": [
            "ENG",
            "DEU"
          ]
        },
        "value": {
          "description": "The value of the identifier. Must be a non-empty string.",
          "examples": [
            "12345-ABC"
          ],
          "title": "Value",
          "type": "string"
        }
      },
      "required": [
        "reference_id",
        "value"
      ],
      "title": "Entry",
      "type": "object"
    },
    "Fastener": {
      "description": "Represents a fastener as a callout on the drawing specifies it (e.g.\n`3x PEM CLS-M4-2`, `4x DIN 929 M12`, `6x weld stud M6x15`).",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "fastener_type": {
          "$ref": "#/$defs/FastenerType",
          "description": "The kind of fastener, by how it is joined.",
          "examples": [
            "PRESS_IN_NUT"
          ]
        },
        "designation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The designation of the fastener as written on the drawing, with spacing normalized (e.g. `PEM CLS-M4-2`, `DIN 929 M12`, `ISO 4762 M6x20`). None when the drawing names only the kind of fastener and its thread (e.g. `Einpressmutter M5`).",
          "examples": [
            "PEM CLS-M4-2"
          ],
          "title": "Designation"
        },
        "standard": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The standard the fastener is specified by, if one is named.",
          "examples": [
            "DIN 929"
          ],
          "title": "Standard"
        },
        "manufacturer": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturer, if the designation names one.",
          "examples": [
            "PEM"
          ],
          "title": "Manufacturer"
        },
        "thread": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadISOMetric"
            },
            {
              "$ref": "#/$defs/ThreadSM"
            },
            {
              "$ref": "#/$defs/ThreadUTS"
            },
            {
              "$ref": "#/$defs/ThreadACME"
            },
            {
              "$ref": "#/$defs/ThreadWhitworth"
            },
            {
              "$ref": "#/$defs/ThreadKnuckle"
            },
            {
              "$ref": "#/$defs/ThreadNPT"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The thread of one piece of the fastener (e.g. `M4` for `PEM CLS-M4-2`), if it has one. A pitch that is not written is the standard coarse pitch.",
          "title": "Thread"
        },
        "length": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the fastener, if stated (e.g. `15` in a weld stud `M6x15`, `20` in `ISO 4762 M6x20`). A manufacturer's code that is not a length, such as the shank code `2` in `PEM CLS-M4-2`, is not reported here.",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "15"
            }
          ]
        },
        "quantity": {
          "description": "The number of pieces. Must be at least 1.",
          "examples": [
            3
          ],
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Placement text the callout adds, as written (e.g. `pointing inward`), if any. It says on which side or in which direction the fastener is fitted, which matters to the manufacturing step.",
          "examples": [
            "pointing inward"
          ],
          "title": "Note"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "fastener_type",
        "quantity"
      ],
      "title": "Fastener",
      "type": "object"
    },
    "FastenerSpecification": {
      "description": "Describes a fastener: a press-in nut (e.g. `PEM CLS-M4-2`), a weld nut\n(e.g. `DIN 929 M12`), a weld stud (e.g. `M6x15`), a screw (e.g.\n`ISO 4762 M6x20`) and the like.\n\nThe same description is used for a fastener callout on the drawing\n(`Fastener`) and for a row of the bill of material that lists the\nfastener (`BillOfMaterialRow.fastener`), so the two can be matched.",
      "properties": {
        "fastener_type": {
          "$ref": "#/$defs/FastenerType",
          "description": "The kind of fastener, by how it is joined.",
          "examples": [
            "PRESS_IN_NUT"
          ]
        },
        "designation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The designation of the fastener as written on the drawing, with spacing normalized (e.g. `PEM CLS-M4-2`, `DIN 929 M12`, `ISO 4762 M6x20`). None when the drawing names only the kind of fastener and its thread (e.g. `Einpressmutter M5`).",
          "examples": [
            "PEM CLS-M4-2"
          ],
          "title": "Designation"
        },
        "standard": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The standard the fastener is specified by, if one is named.",
          "examples": [
            "DIN 929"
          ],
          "title": "Standard"
        },
        "manufacturer": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturer, if the designation names one.",
          "examples": [
            "PEM"
          ],
          "title": "Manufacturer"
        },
        "thread": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadISOMetric"
            },
            {
              "$ref": "#/$defs/ThreadSM"
            },
            {
              "$ref": "#/$defs/ThreadUTS"
            },
            {
              "$ref": "#/$defs/ThreadACME"
            },
            {
              "$ref": "#/$defs/ThreadWhitworth"
            },
            {
              "$ref": "#/$defs/ThreadKnuckle"
            },
            {
              "$ref": "#/$defs/ThreadNPT"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The thread of one piece of the fastener (e.g. `M4` for `PEM CLS-M4-2`), if it has one. A pitch that is not written is the standard coarse pitch.",
          "title": "Thread"
        },
        "length": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the fastener, if stated (e.g. `15` in a weld stud `M6x15`, `20` in `ISO 4762 M6x20`). A manufacturer's code that is not a length, such as the shank code `2` in `PEM CLS-M4-2`, is not reported here.",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "15"
            }
          ]
        }
      },
      "required": [
        "fastener_type"
      ],
      "title": "FastenerSpecification",
      "type": "object"
    },
    "FastenerType": {
      "description": "Kinds of fastener a drawing or a bill of material names.\n\nFastener is meant as in ISO 1891 (\"Fasteners - Terminology\"): the parts\nthat join other parts. The categories follow how the fastener is joined,\nbecause that decides the manufacturing or assembly step.\n\nJoined to the component while it is made:\n\n- PRESS_IN_NUT: a self-clinching or broaching nut pressed into sheet\n  metal, e.g. PEM types S, CLS or SP (``PEM CLS-M4-2``), often written\n  \"Einpressmutter\".\n- PRESS_IN_STUD: a self-clinching stud pressed into sheet metal, e.g.\n  PEM types FH or FHS (``PEM FH-M4-10``), often written \"Einpressbolzen\".\n- PRESS_IN_STANDOFF: a self-clinching spacer with a thread or a through\n  hole, e.g. PEM types SO or BSO (``PEM SO-M3-8``).\n- WELD_NUT: a nut welded onto the part, e.g. a hexagon weld nut to\n  DIN 929 or a square weld nut to DIN 928.\n- WELD_STUD: a threaded stud or pin welded onto the part, e.g. a stud\n  for arc stud welding to ISO 13918.\n- THREADED_INSERT: a thread insert set into a hole, e.g. a wire thread\n  insert to DIN 8140 or a threaded bushing.\n- RIVET_NUT: a blind rivet nut, set from one side of the part.\n\nSeparate parts of an assembly, as a bill of material lists them:\n\n- SCREW: a screw or bolt, e.g. ``ISO 4762 M6x20`` or ``ISO 4017 M8x30``.\n- NUT: a nut that is screwed on, e.g. ``ISO 4032 M8``.\n- WASHER: a washer, e.g. ``ISO 7089 8`` or ``DIN 125-A 6.4``.\n\n- OTHER: a fastener that fits none of the above, such as a pin or a\n  rivet. ``designation`` says what it is.",
      "enum": [
        "PRESS_IN_NUT",
        "PRESS_IN_STUD",
        "PRESS_IN_STANDOFF",
        "WELD_NUT",
        "WELD_STUD",
        "THREADED_INSERT",
        "RIVET_NUT",
        "SCREW",
        "NUT",
        "WASHER",
        "OTHER"
      ],
      "title": "FastenerType",
      "type": "string"
    },
    "GDnT": {
      "description": "Represents a GD&T (Geometric Dimensioning and Tolerancing) cue in a technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "characteristic": {
          "$ref": "#/$defs/GDnTCharacteristic",
          "description": "The GD&T characteristic being controlled (e.g., flatness, circularity)."
        },
        "zone": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTZone"
            },
            {
              "type": "null"
            }
          ],
          "description": "The tolerance zone defined for the characteristic."
        },
        "feature": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTFeature"
            },
            {
              "type": "null"
            }
          ],
          "description": "The feature being controlled by the GD&T characteristic."
        },
        "reference": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTReference"
            },
            {
              "type": "null"
            }
          ],
          "description": "The reference for the GD&T characteristic."
        },
        "material_condition": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTMaterialCondition"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Material condition (e.g., maximum material condition)."
        },
        "state": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTState"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "State of the feature (e.g., free state)."
        },
        "datums": {
          "description": "List of datums used as references for the GD&T characteristic.",
          "items": {
            "$ref": "#/$defs/GDnTDatum"
          },
          "title": "Datums",
          "type": "array"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "characteristic",
        "zone",
        "feature",
        "reference"
      ],
      "title": "GDnT",
      "type": "object"
    },
    "GDnTAssociatedFeature": {
      "description": "Enum of associated features for geometric tolerancing.\n\nAttributes:\n----------\n- MINIMAX (Ⓒ): Minimax feature tolerance.\n- GAUSSIAN (Ⓖ): Gaussian feature tolerance.\n- MIN_CIRCUMSCRIBED (Ⓝ): Minimum circumscribed feature.\n- MAX_CIRCUMSCRIBED (Ⓧ): Maximum circumscribed feature.\n- TANGENT (Ⓣ): Tangent feature tolerance.",
      "enum": [
        "Ⓒ",
        "Ⓖ",
        "Ⓝ",
        "Ⓧ",
        "Ⓣ"
      ],
      "title": "GDnTAssociatedFeature",
      "type": "string"
    },
    "GDnTCharacteristic": {
      "description": "Enumeration of possible Geometric Dimensioning and Tolerancing (GD&T) characteristics\nas defined by ISO 1101.\n\nAttributes:\n----------\n- ANGULARITY: Angularity (∠), ensures the feature is at a specified angle.\n- CIRCULAR_RUNOUT: Circular runout (↗), controls the surface elements' variation relative to a rotation axis.\n- CIRCULARITY: Circularity (○), ensures the feature is uniformly circular.\n- CONCENTRICITY: Concentricity (◎), ensures the center axes of features are aligned.\n- CYLINDRICITY: Cylindricity (⌭), ensures the feature is uniformly cylindrical.\n- DATUM: Datum indicator ([DATUM]), denotes the location of a reference datum.\n- FLATNESS: Flatness (⏥), ensures the surface is uniformly flat.\n- PARALLELISM: Parallelism (∥), ensures the feature is parallel to a reference.\n- PERPENDICULARITY: Perpendicularity (⟂), ensures the feature is at a 90° angle.\n- POSITION: Position (⌖), defines the allowable location of a feature.\n- PROFILE_OF_A_LINE: Profile of a line (⌒), defines the allowable deviation of a line profile.\n- PROFILE_OF_A_SURFACE: Profile of a surface (⌓), defines the allowable deviation of a surface profile.\n- STRAIGHTNESS: Straightness (⏤), ensures the surface or feature is straight.\n- SYMMETRY: Symmetry (⌯), ensures the feature is symmetric about a reference axis or plane.\n- TOTAL_RUNOUT: Total runout (⌰), controls the surface's variation in all directions relative to a rotation axis.",
      "enum": [
        "∠",
        "↗",
        "○",
        "◎",
        "⌭",
        "[DATUM]",
        "⏥",
        "∥",
        "⟂",
        "⌖",
        "⌒",
        "⌓",
        "⏤",
        "⌯",
        "⌰"
      ],
      "title": "GDnTCharacteristic",
      "type": "string"
    },
    "GDnTDatum": {
      "description": "Represents a GD&T datum definition.",
      "properties": {
        "label": {
          "description": "Reference name of the datum. Examples: 'A', 'B', or composite names such as '(A-B-C-D)[CM]'.",
          "title": "Label",
          "type": "string"
        }
      },
      "required": [
        "label"
      ],
      "title": "GDnTDatum",
      "type": "object"
    },
    "GDnTDerivedFeature": {
      "description": "Enum for derived geometric tolerancing features.\n\nAttributes:\n----------\n- PROJECTED (Ⓟ): Indicates tolerance for a projected feature.\n- MEAN (Ⓐ): Indicates tolerance for a mean or averaged feature.",
      "enum": [
        "Ⓟ",
        "Ⓐ"
      ],
      "title": "GDnTDerivedFeature",
      "type": "string"
    },
    "GDnTExtend": {
      "description": "Represents the extend of the GD&T Zone",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The value of the quantity.",
          "examples": [
            "10.5"
          ],
          "title": "Value"
        },
        "unit": {
          "description": "The unit of the quantity.",
          "examples": [
            "mm"
          ],
          "title": "Unit",
          "type": "string"
        },
        "size_type": {
          "$ref": "#/$defs/SizeType",
          "description": "The type of size (e.g., diameter, linear, angular).",
          "examples": [
            "DIAMETER"
          ]
        },
        "tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The tolerance specifications associated with the size.",
          "examples": [
            {
              "deviation_lower": "-0.05",
              "deviation_upper": "0.05",
              "fit": "H7",
              "is_approximation": false,
              "is_general_tolerance": false,
              "is_reference": false,
              "is_theoretically_exact": false,
              "tolerance_grade": "IT7"
            }
          ]
        },
        "quantity": {
          "default": 1,
          "description": "The number of extends",
          "examples": [
            1
          ],
          "title": "Quantity",
          "type": "integer"
        },
        "angle": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The angle of the extend",
          "examples": [
            "45"
          ],
          "title": "Angle"
        }
      },
      "required": [
        "value",
        "unit",
        "size_type"
      ],
      "title": "GDnTExtend",
      "type": "object"
    },
    "GDnTFeature": {
      "description": "Represents the feature of the GD&T",
      "properties": {
        "filter": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Filter for the feature",
          "title": "Filter"
        },
        "associated_feature": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTAssociatedFeature"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Associated feature for the GD&T"
        },
        "derived_feature": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTDerivedFeature"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Derived feature for the GD&T"
        }
      },
      "title": "GDnTFeature",
      "type": "object"
    },
    "GDnTMaterialCondition": {
      "description": "Enum for material condition modifiers in GD&T.\n\nAttributes:\n----------\n- MAXIMUM (Ⓜ): Maximum material condition (MMC).\n- MINIMUM (Ⓛ): Minimum material condition (LMC).\n- RECIPROCITY (Ⓡ): Reciprocity condition.",
      "enum": [
        "Ⓜ",
        "Ⓛ",
        "Ⓡ"
      ],
      "title": "GDnTMaterialCondition",
      "type": "string"
    },
    "GDnTReference": {
      "description": "Represents a reference for a GD&T characteristic.",
      "properties": {
        "association": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTReferenceAssociation"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Reference for associating elements in tolerance evaluation."
        },
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTReferenceParameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Parameter of the reference element (e.g., peak value, deviation span)."
        }
      },
      "title": "GDnTReference",
      "type": "object"
    },
    "GDnTReferenceAssociation": {
      "description": "Enum for associations of reference elements in geometric dimensioning and tolerancing (GD&T).\n\nThis class defines the various types of reference elements used to evaluate tolerances,\nincluding unconstrained and constrained minimax (Tschebyschew) and Gaussian elements,\nas well as circumscribed elements.\n\nAttributes:\n----------\n- MINIMAX (C): Unconstrained Tschebyschew element, minimizing the maximum deviation.\n- MINIMAX_EXTERNAL (CE): Tschebyschew element with an external constraint.\n- MINIMAX_INTERNAL (CI): Tschebyschew element with an internal constraint.\n- GAUSSIAN (G): Unconstrained Gaussian least squares element.\n- GAUSSIAN_EXTERNAL (GE): Gaussian least squares element with an external constraint.\n- GAUSSIAN_INTERNAL (GI): Gaussian least squares element with an internal constraint.\n- MIN_CIRCUMSCRIBED (N): Minimal circumscribed element, fitting the smallest boundary.\n- MAX_CIRCUMSCRIBED (X): Maximal circumscribed element, fitting the largest boundary.",
      "enum": [
        "C",
        "CE",
        "CI",
        "G",
        "GE",
        "GI",
        "N",
        "X"
      ],
      "title": "GDnTReferenceAssociation",
      "type": "string"
    },
    "GDnTReferenceParameter": {
      "description": "Enum for reference parameters in geometric tolerancing.\n\nAttributes:\n----------\n- PEAK_VALUE (P): Highest value in the tolerance range.\n- VALLEY_VALUE (V): Lowest value in the tolerance range.\n- DEVIATION_SPAN (T): Total deviation span.\n- STANDARD_DEVIATION (Q): Root mean square deviation.",
      "enum": [
        "P",
        "V",
        "T",
        "Q"
      ],
      "title": "GDnTReferenceParameter",
      "type": "string"
    },
    "GDnTState": {
      "description": "Enum for GD&T state definitions.\n\nAttributes:\n----------\n- FREE (Ⓕ): Indicates that the feature is free without constraints.",
      "enum": [
        "Ⓕ"
      ],
      "title": "GDnTState",
      "type": "string"
    },
    "GDnTZone": {
      "description": "Representation of the GDT GD&T Value",
      "properties": {
        "value": {
          "$ref": "#/$defs/Size",
          "description": "The value of the GD&T zone."
        },
        "extend": {
          "anyOf": [
            {
              "$ref": "#/$defs/GDnTExtend"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The extend of the GD&T zone."
        },
        "combination": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The combination of the GD&T zone.",
          "title": "Combination"
        },
        "offset": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The offset of the GD&T zone.",
          "title": "Offset"
        },
        "constraint": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The constraint of the GD&T zone.",
          "title": "Constraint"
        }
      },
      "required": [
        "value"
      ],
      "title": "GDnTZone",
      "type": "object"
    },
    "GeneralTolerances": {
      "description": "Model representing general tolerances for a part or drawing.\n\nGeneral tolerances are applied to dimensions where specific tolerances are not explicitly defined.\nThese tolerances are governed by recognized standards and principles.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "tolerance_standard": {
          "$ref": "#/$defs/GeneralTolerancesStandard",
          "description": "The standard used for general tolerance definitions, e.g., DIN 7168 or ISO 2768.",
          "examples": [
            "ISO 2768"
          ]
        },
        "tolerance_class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The tolerance class or grade, defined as a short string such as 'm', 'f', or 'c'.",
          "examples": [
            "m"
          ],
          "title": "Tolerance Class"
        },
        "principle": {
          "anyOf": [
            {
              "$ref": "#/$defs/GeneralTolerancesPrinciple"
            },
            {
              "type": "null"
            }
          ],
          "description": "The principle governing the tolerance application, such as independence or envelope.",
          "examples": [
            "INDEPENDENCE"
          ]
        }
      },
      "required": [
        "reference_id",
        "tolerance_standard",
        "tolerance_class",
        "principle"
      ],
      "title": "GeneralTolerances",
      "type": "object"
    },
    "GeneralTolerancesPrinciple": {
      "description": "Enum representing the supported general tolerance principles.\n\nThese principles define how tolerances are applied and interpreted\nin technical drawings and mechanical part designs.\n\nAttributes:\n----------\n- INDEPENDENCE: The independence principle (ISO 8015), where tolerances on\n  size and form are treated separately unless explicitly stated.\n- ENVELOPE: The envelope principle (ISO 14405-1), where size and form tolerances\n  are combined, ensuring that the surface fits within an ideal envelope.",
      "enum": [
        "INDEPENDENCE",
        "ENVELOPE"
      ],
      "title": "GeneralTolerancesPrinciple",
      "type": "string"
    },
    "GeneralTolerancesStandard": {
      "description": "Enum representing all supported general tolerance standards.\n\nThese standards define acceptable limits of variation in dimensions,\ntypically applied to mechanical parts and technical drawings.\n\nAttributes:\n- DIN_7168: General tolerances for linear dimensions (DIN 7168 standard).\n- ISO_2768: General tolerances for linear dimensions and angular dimensions (ISO 2768 standard).\n- ISO_4759_1: General tolerances for fasteners (ISO 4759-1 standard).\n- TOLERANCE_NOTE: A custom or specific tolerance note included in the drawing.",
      "enum": [
        "DIN 7168",
        "ISO 2768",
        "ISO 4759-1",
        "TOLERANCE_NOTE"
      ],
      "title": "GeneralTolerancesStandard",
      "type": "string"
    },
    "GeometryCuboid": {
      "description": "Represents the geometry of a cuboid",
      "properties": {
        "geometry_type": {
          "const": "CUBOID",
          "default": "CUBOID",
          "title": "Geometry Type",
          "type": "string"
        },
        "width": {
          "$ref": "#/$defs/Size",
          "description": "The width of the cuboid."
        },
        "height": {
          "$ref": "#/$defs/Size",
          "description": "The height of the cuboid."
        },
        "depth": {
          "$ref": "#/$defs/Size",
          "description": "The depth of the cuboid."
        }
      },
      "required": [
        "width",
        "height",
        "depth"
      ],
      "title": "GeometryCuboid",
      "type": "object"
    },
    "GeometryCylinder": {
      "description": "Represents the geometry of a plate-shaped material.",
      "properties": {
        "geometry_type": {
          "const": "CYLINDER",
          "default": "CYLINDER",
          "title": "Geometry Type",
          "type": "string"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the cylinder."
        },
        "depth": {
          "$ref": "#/$defs/Size",
          "description": "The depth of the cylinder."
        }
      },
      "required": [
        "diameter",
        "depth"
      ],
      "title": "GeometryCylinder",
      "type": "object"
    },
    "Identifier": {
      "description": "Represents an identifier (such as the drawing number) used for distinguishing elements in a drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "language": {
          "anyOf": [
            {
              "$ref": "#/$defs/Language"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The language of the identifier, if known.",
          "examples": [
            "ENG",
            "DEU"
          ]
        },
        "value": {
          "description": "The value of the identifier. Must be a non-empty string.",
          "examples": [
            "12345-ABC"
          ],
          "title": "Value",
          "type": "string"
        },
        "identifier_type": {
          "$ref": "#/$defs/IdentifierType",
          "description": "The type of identifier, such as part ID or drawing ID."
        },
        "stakeholder": {
          "anyOf": [
            {
              "$ref": "#/$defs/IdentifierStakeholder"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The associated stakeholder, if known.",
          "examples": [
            "SUPPLIER",
            "OWNER"
          ]
        },
        "period": {
          "anyOf": [
            {
              "$ref": "#/$defs/IdentifierPeriod"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The associated period, if known.",
          "examples": [
            "PREVIOUS",
            "CURRENT"
          ]
        }
      },
      "required": [
        "reference_id",
        "value",
        "identifier_type"
      ],
      "title": "Identifier",
      "type": "object"
    },
    "IdentifierPeriod": {
      "description": "Enum representing the period of an identifier.\n\nAttributes:\n----------\n- PREVIOUS: Refers to a past period or version of the identifier.\n- CURRENT: Refers to the present or active period of the identifier.\n- FUTURE: Refers to a future or planned version of the identifier.",
      "enum": [
        "PREVIOUS",
        "CURRENT",
        "FUTURE"
      ],
      "title": "IdentifierPeriod",
      "type": "string"
    },
    "IdentifierStakeholder": {
      "description": "Enum representing the types of stakeholders that can be identified by Werk24.\n\nStakeholders play distinct roles in the lifecycle of a product, document,\nor process. This enumeration classifies the primary stakeholders.\n\nAttributes:\n----------\n- SUPPLIER: The entity supplying the part.\n- OWNER: Owner of the drawing.\n- CUSTOMER: entity requesting the part.",
      "enum": [
        "SUPPLIER",
        "OWNER",
        "CUSTOMER"
      ],
      "title": "IdentifierStakeholder",
      "type": "string"
    },
    "IdentifierType": {
      "description": "Enum representing the types of identifiers supported by Werk24.\n\nThese identifiers are commonly used in engineering drawings, contracts,\nand manufacturing processes to uniquely identify components, documents,\nor stakeholders.\n\nWhere a drawing carries an identifier whose kind is not listed here, it is\nreturned as `NUMBER`, which keeps the caption and the value but not the\nkind. That is why this list is kept as complete as the reader's own caption\nvocabulary: a missing member is not an error anywhere, it is a generic\nnumber in your output.\n\nAttributes:\n----------\n- ASSEMBLY_NAME: Name of the assembly.\n- ASSEMBLY_NUMBER: Number associated with the assembly.\n- CAGE_CODE: Commercial and Government Entity (CAGE) code.\n- CONTRACT_NUMBER: Number associated with a specific contract.\n- CUSTOMER_INDEX: Index a customer assigns alongside their own number.\n- CUSTOMER_NAME: Name of the customer.\n- CUSTOMER_NUMBER: Identifier assigned to the customer.\n- DASH_NUMBER: Dash number distinguishing a variant of a base part number.\n- DOCUMENT_CODE: Code classifying the document, as opposed to numbering it.\n- DOCUMENT_NUMBER: Identifier for a document.\n- DRAWING_NUMBER: Identifier for a drawing.\n- EQUIPMENT_NUMBER: Identifier for a piece of equipment.\n- ERP_CHANGE_NUMBER: Identifier of a change record in the ERP system.\n- ERP_NUMBER: Enterprise Resource Planning (ERP) identifier.\n- FINANCIAL_SUPPLY_CHAIN_MANAGEMENT_NUMBER: FSCM identifier.\n- GROUP_NUMBER: Identifier of the group the part belongs to.\n- IDENTIFICATION_NUMBER: General identification number.\n- ITEM_NUMBER: Number assigned to an item (corrected from \"ITEM_NUMER\").\n- JOB_NUMBER: Identifier of the job or work order.\n- MANUFACTURER_NAME: Name of the manufacturer.\n- MANUFACTURER_NUMBER: Identifier assigned to the manufacturer.\n- MATERIAL_NUMBER: Identifier of the material.\n- MATERIAL_WAREHOUSE_NUMBER: Warehouse identifier for the material.\n- MISCELLANEOUS: Miscellaneous identifier.\n- MODEL: Model designation of the part or product.\n- NUMBER: Generic number. Also what an identifier of an unlisted kind\n  falls back to.\n- ORDER_NAME: Name associated with an order.\n- ORDER_NUMBER: Number associated with an order.\n- ORIGIN_DRAWING_NUMBER: Identifier of the drawing this one originates\n  from. Distinct from a former drawing number, which is the same drawing\n  under its previous identifier.\n- PART_NUMBER: Identifier of the part.\n- PRODUCT_GROUP: Identifier of the product group.\n- PRODUCT_ID: Identifier of the product.\n- PRODUCT_NAME: Name of the product.\n- PRODUCT_NUMBER: Number of the product, as opposed to its name or id.\n- PROFILE_NUMBER: Identifier of the profile or extrusion.\n- PROJECT_NAME: Name of the project.\n- PROJECT_NUMBER: Number of the project. Distinct from its name.\n- PROTOTYPE_NUMBER: Identifier of the prototype.\n- REFERENCE_DRAWING_NUMBER: Identifier of a referenced drawing.\n- REPLACED_BY: Identifier for the component that replaces another.\n- REPLACEMENT_FOR: Identifier for the component that is replaced by another.\n- SERIAL_NUMBER: Serial number of the individual item.\n- SETTING_PLAN_NUMBER: Identifier of the setting or setup plan.\n- TOOL_NUMBER: Identifier of the tool.\n- TYPE_NUMBER: Type designation number.",
      "enum": [
        "ASSEMBLY_NAME",
        "ASSEMBLY_NUMBER",
        "CAGE_CODE",
        "CONTRACT_NUMBER",
        "CUSTOMER_INDEX",
        "CUSTOMER_NAME",
        "CUSTOMER_NUMBER",
        "DASH_NUMBER",
        "DOCUMENT_CODE",
        "DOCUMENT_NUMBER",
        "DRAWING_NUMBER",
        "EQUIPMENT_NUMBER",
        "ERP_CHANGE_NUMBER",
        "ERP_NUMBER",
        "FINANCIAL_SUPPLY_CHAIN_MANAGEMENT_NUMBER",
        "GROUP_NUMBER",
        "IDENTIFICATION_NUMBER",
        "ITEM_NUMBER",
        "JOB_NUMBER",
        "MANUFACTURER_NAME",
        "MANUFACTURER_NUMBER",
        "MATERIAL_NUMBER",
        "MATERIAL_WAREHOUSE_NUMBER",
        "MISCELLANEOUS",
        "MODEL",
        "NUMBER",
        "ORDER_NAME",
        "ORDER_NUMBER",
        "ORIGIN_DRAWING_NUMBER",
        "PART_NUMBER",
        "PRODUCT_GROUP",
        "PRODUCT_ID",
        "PRODUCT_NAME",
        "PRODUCT_NUMBER",
        "PROFILE_NUMBER",
        "PROJECT_NAME",
        "PROJECT_NUMBER",
        "PROTOTYPE_NUMBER",
        "REFERENCE_DRAWING_NUMBER",
        "REPLACED_BY",
        "REPLACEMENT_FOR",
        "SERIAL_NUMBER",
        "SETTING_PLAN_NUMBER",
        "TOOL_NUMBER",
        "TYPE_NUMBER"
      ],
      "title": "IdentifierType",
      "type": "string"
    },
    "ImageReference": {
      "additionalProperties": false,
      "dependentRequired": {
        "sectional_id": [
          "sheet_id"
        ],
        "sheet_id": [
          "sectional_id"
        ]
      },
      "description": "``payload_dict`` beside an image's ``payload_url``.\n\ncore-reader sends exactly ``{}`` with a sheet image and exactly\n``{\"sheet_id\", \"sectional_id\"}`` with a view image. Neither is a response\nmodel. One schema with both fields optional but only together\n(``dependentRequired``) admits those two shapes and nothing else; two\nschemas would need one with no properties, which openapi-generator maps\nto a raw map and writes Java for that does not compile. No ``ask_type``\nand no other field, so no body matches this and a response model both,\nand the ``oneOf`` stays exclusive.",
      "properties": {
        "sheet_id": {
          "anyOf": [
            {
              "format": "uuid",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "View images only: the sheet the view is on.",
          "title": "Sheet Id"
        },
        "sectional_id": {
          "anyOf": [
            {
              "format": "uuid",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "View images only: the view the image shows.",
          "title": "Sectional Id"
        }
      },
      "title": "ImageReference",
      "type": "object"
    },
    "KeySlot": {
      "description": "Represents a slot (keyway) for a parallel key, also called a feather key,\nspecified by a standard (e.g. `DIN 6885 A 8x7x56`).",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The number of key slots or instances. Must be at least 1.",
          "examples": [
            1
          ],
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "standard": {
          "description": "The standard the key is specified by, as written on the drawing.",
          "examples": [
            "DIN 6885"
          ],
          "title": "Standard",
          "type": "string"
        },
        "form": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The form of the key defined by the standard (e.g. `A` for round ends), if stated.",
          "examples": [
            "A"
          ],
          "title": "Form"
        },
        "key_width": {
          "$ref": "#/$defs/Size",
          "description": "The width of the key, and so of the slot (e.g. `8` in `8x7x56`).",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "8"
            }
          ]
        },
        "key_height": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The height of the key (e.g. `7` in `8x7x56`), if stated."
        },
        "key_length": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the key, and so of the slot (e.g. `56` in `8x7x56`), if stated."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "standard",
        "key_width"
      ],
      "title": "KeySlot",
      "type": "object"
    },
    "Language": {
      "description": "Enumeration of supported Languages following\nthe ISO/639-2/B bibliographic codes.\n\nEach entry maps a language name to its corresponding code.",
      "enum": [
        "ALB",
        "AMH",
        "ARA",
        "ARM",
        "AZE",
        "BOS",
        "BUL",
        "CAT",
        "CHI",
        "CZE",
        "DAN",
        "DEU",
        "DUT",
        "ENG",
        "EST",
        "FIN",
        "FRA",
        "GEO",
        "GLE",
        "GRE",
        "HEB",
        "HIN",
        "HRV",
        "HUN",
        "ICE",
        "IND",
        "ITA",
        "JPN",
        "KAZ",
        "KOR",
        "LAV",
        "LIT",
        "MAC",
        "MLT",
        "NOR",
        "POL",
        "POR",
        "RUM",
        "RUS",
        "SLO",
        "SLV",
        "SPA",
        "SRP",
        "SWE",
        "THA",
        "TUR",
        "UKR",
        "URD",
        "VIE",
        "WEL",
        "ZUL"
      ],
      "title": "Language",
      "type": "string"
    },
    "Material": {
      "description": "Represents a material definition with raw OCR text, standard name, designation, and",
      "properties": {
        "raw_ocr": {
          "description": "Raw OCR text extracted from the drawing.",
          "title": "Raw Ocr",
          "type": "string"
        },
        "standard": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Standard that defines the standard.",
          "title": "Standard"
        },
        "designation": {
          "description": "Designation of the material following the spelling used in the standard.",
          "title": "Designation",
          "type": "string"
        },
        "material_category": {
          "description": "Hierarchical Material category.",
          "maxItems": 3,
          "minItems": 3,
          "prefixItems": [
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/MaterialCategory1"
                },
                {
                  "type": "null"
                }
              ]
            },
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/MaterialCategory2"
                },
                {
                  "type": "null"
                }
              ]
            },
            {
              "anyOf": [
                {
                  "$ref": "#/$defs/MaterialCategory3"
                },
                {
                  "type": "null"
                }
              ]
            }
          ],
          "title": "Material Category",
          "type": "array"
        },
        "origin": {
          "anyOf": [
            {
              "$ref": "#/$defs/MaterialOrigin"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Where on the drawing this material was read: the title block, a canvas note, or a bill-of-material row. None when the reader could not attribute it. Two materials listed as alternatives can have different origins.",
          "examples": [
            "TITLE_BLOCK",
            "CANVAS_NOTE"
          ]
        }
      },
      "required": [
        "raw_ocr",
        "designation",
        "material_category"
      ],
      "title": "Material",
      "type": "object"
    },
    "MaterialCategory1": {
      "enum": [
        "FERROUS_ALLOY",
        "NONFERROUS_ALLOY",
        "POLYMER",
        "CERAMIC",
        "COMPOSITE",
        "ORGANIC"
      ],
      "title": "MaterialCategory1",
      "type": "string"
    },
    "MaterialCategory2": {
      "enum": [
        "STEEL",
        "IRON",
        "MAGNETIC_OR_ELECTRICAL_MATERIAL",
        "SINTERED_POWDERED_METAL",
        "WELDING_FILLER_MATERIAL",
        "ALUMINUM",
        "ANTIMONY",
        "BERYLLIUM",
        "BISMUTH",
        "CADMIUM",
        "CHROMIUM",
        "COBALT",
        "COPPER",
        "GALLIUM",
        "IRIDIUM",
        "LEAD",
        "MAGNESIUM",
        "MANGANESE",
        "MERCURY",
        "MOLYBDENUM",
        "NICKEL",
        "NIOBIUM",
        "PLATINUM",
        "RARE_EARTHS",
        "SELENIUM",
        "SILICON",
        "TANTALUM",
        "THALLIUM",
        "TIN",
        "TITANIUM",
        "TUNGSTEN",
        "VANADIUM",
        "ZINC",
        "ZIRCONIUM",
        "THERMOPLAST",
        "THERMOSET",
        "THERMOPLASTIC_ELASTOMER",
        "THERMOSET_ELASTOMER",
        "POLYMER_FOAM",
        "REFRACTORY",
        "TECHNICAL_CERAMIC",
        "CERAMIC_FOAM",
        "MATRIX",
        "REINFORCEMENT",
        "WOOD"
      ],
      "title": "MaterialCategory2",
      "type": "string"
    },
    "MaterialCategory3": {
      "enum": [
        "STRUCTURAL_OR_CONSTRUCTIONAL_STEEL",
        "STAINLESS_STEEL",
        "TOOL_STEEL",
        "CAST_STEEL",
        "CAST_IRON",
        "FERROALLOY",
        "ABS",
        "ABS_PC",
        "ABS_PLUS_PA",
        "ABS_PLUS_PA6",
        "ABS_PLUS_PA66",
        "ABS_PLUS_PBT",
        "ABS_PLUS_PC",
        "ABS_PLUS_PET",
        "ABS_PLUS_PMMA",
        "ABS_PLUS_PVC",
        "ABS_PLUS_PVC_C",
        "ABS_PLUS_SAN",
        "ABS_PLUS_TPE",
        "ABS_PLUS_TPES",
        "ABS_PLUS_TPU",
        "ABS_PP",
        "ACPES",
        "AES",
        "AES_PLUS_PC",
        "ASA",
        "ASA_PC",
        "ASA_PLUS_ABS",
        "ASA_PLUS_AES",
        "ASA_PLUS_MSAN",
        "ASA_PLUS_PA",
        "ASA_PLUS_PC",
        "ASA_PLUS_PMMA",
        "ASA_PLUS_SAN",
        "ASA_PLUS_TPE",
        "BMI",
        "BVOH",
        "CAB",
        "CAP",
        "CE",
        "COC",
        "CP",
        "CPE",
        "CPT",
        "E_P",
        "EA",
        "EAA",
        "EBA",
        "EBACO",
        "EC",
        "ECTFE",
        "EEA",
        "EFEP",
        "EMAA",
        "EMAAA",
        "ENBAGMA",
        "ETFE",
        "EVA",
        "EVACO",
        "EVOH",
        "FEP",
        "HDPE",
        "HIPP",
        "HIPS",
        "IONOMER_RESIN",
        "LCP",
        "LCP_PLUS_PPS",
        "LDPE",
        "LDPE_EVA",
        "LDPE_LLDPE",
        "LLDPE",
        "LMDPE",
        "MABS",
        "MBS",
        "MDPE",
        "MFA",
        "PA",
        "PA_MACM10_1010",
        "PA_MACM12",
        "PA_MACM12_PLUS_PA_12",
        "PA_MXD6",
        "PA_MXD6_MXDI",
        "PA_PACM12",
        "PA_PLUS_HDPE",
        "PA_PLUS_PA66_6",
        "PA_PLUS_PE",
        "PA_PLUS_PP",
        "PA_PLUS_PPA",
        "PA_PLUS_SPS",
        "PA_PLUS_TPE",
        "PA_TPE",
        "PA1010",
        "PA1012",
        "PA10T_X",
        "PA11",
        "PA12",
        "PA12_MACMI",
        "PA12_MACMI_PLUS_PA12",
        "PA410",
        "PA46",
        "PA46_PLUS_PA6",
        "PA4T",
        "PA510",
        "PA6",
        "PA6_12",
        "PA6_3T",
        "PA6_66_12",
        "PA6_66_136",
        "PA6_66_610",
        "PA6_69",
        "PA6_6I",
        "PA6_6T",
        "PA6_IPDI",
        "PA6_PA12",
        "PA6_PLUS_ASA",
        "PA_6_PLUS_PA_6I_6T",
        "PA6_PLUS_PA12",
        "PA6_PLUS_PA12_X",
        "PA6_PLUS_PA66",
        "PA6_PLUS_PA66_6",
        "PA6_PLUS_PE",
        "PA6_PLUS_PP",
        "PA610",
        "PA612",
        "PA66",
        "PA66_6",
        "PA66_610",
        "PA66_PLUS_PA610",
        "PA66_PLUS_PA612",
        "PA66_PLUS_PA6I",
        "PA66_PLUS_PA6I_6T",
        "PA66_PLUS_PA6I_X",
        "PA66_PLUS_PE",
        "PA66_PLUS_PP",
        "PA66_PLUS_PPA",
        "PA69",
        "PA6I",
        "PA6I_6T",
        "PA6I_X",
        "PA6T",
        "PA6T_66",
        "PA6T_XT_PLUS_PA6T_66",
        "PA6T_6I",
        "PA6T_6I_66",
        "PA6T_MPMDT",
        "PA6T_XT",
        "PA9T",
        "PAEK",
        "PAI",
        "PAMXD6_PA66",
        "PAO",
        "PAR",
        "PARA",
        "PB",
        "PBAT",
        "PBAT_PLUS_PLA",
        "PBI",
        "PBS",
        "PBT",
        "PBT_ASA",
        "PBT_PC",
        "PBT_PLUS_ASA",
        "PBT_PLUS_PE",
        "PBT_PLUS_PET",
        "PBT_PLUS_PET_PLUS_ASA",
        "PBT_PLUS_PETG",
        "PBT_PLUS_PPE",
        "PBT_PLUS_PS",
        "PBT_PLUS_SAN",
        "PC",
        "PC_PET",
        "PC_PLUS_HIPS",
        "PC_PLUS_MBS",
        "PC_PLUS_PBT",
        "PC_PLUS_PCT",
        "PC_PLUS_PET",
        "PC_PLUS_PET_PLUS_PBT",
        "PC_PLUS_PLA",
        "PC_PLUS_PMMA",
        "PC_PLUS_PPC",
        "PC_PLUS_PS",
        "PC_PLUS_PTFE",
        "PC_PLUS_SAN",
        "PC_PLUS_TPES",
        "PC_PLUS_TPU",
        "PC_PPC",
        "PCL",
        "PCT",
        "PCTA",
        "PCTFE",
        "PCTG",
        "PCTG_PLUS_PC",
        "PE",
        "PE_HMW",
        "PE_HMWHD",
        "PE_PLUS_HIPS",
        "PE_UHMW",
        "PEEK",
        "PEI",
        "PEI_PLUS_PCE",
        "PEK",
        "PEKEKK",
        "PEKK",
        "PEN",
        "PESU",
        "PET",
        "PET_G",
        "PET_PLUS_PA6",
        "PET_PLUS_PA66",
        "PEX_B",
        "PFA",
        "PFSA_PTFE",
        "PGA",
        "PHA",
        "PHB",
        "PHBV",
        "PI",
        "PIB",
        "PK",
        "PLA",
        "PLA_PCL",
        "PLA_PEG",
        "PLA_PHA",
        "PLA_PLUS_ABS",
        "PLA_PLUS_HDPE",
        "PLA_PLUS_PHB",
        "PLA_PLUS_PMMA",
        "PLGA",
        "PMMA",
        "PMMI",
        "PMP",
        "PMS",
        "POM",
        "POM_PLUS_MBS",
        "POM_PLUS_PE",
        "POM_PLUS_PTFE",
        "POM_PLUS_PUR",
        "PP",
        "PP_PE",
        "PP_PLUS_EPDM",
        "PP_PLUS_EPR",
        "PP_PLUS_EVA",
        "PP_PLUS_PE",
        "PP_PLUS_PPE_PLUS_PS",
        "PPA",
        "PPC",
        "PPE",
        "PPE_PLUS_HIPS",
        "PPE_PLUS_PA",
        "PPE_PLUS_PA6",
        "PPE_PLUS_PA66",
        "PPE_PLUS_PP",
        "PPE_PLUS_PS",
        "PPE_PLUS_PS_PLUS_PA",
        "PPE_PLUS_TPE",
        "PPE_PLUS_TPS_SEBS",
        "PPOX",
        "PPS",
        "PPS_PLUS_PA",
        "PPS_PLUS_PPE",
        "PPS_PLUS_PTFE",
        "PPSU",
        "PPSU_PLUS_PSU",
        "PS",
        "PS_I",
        "PS_PLUS_PE",
        "PS_PLUS_PMMA",
        "PS_PLUS_SPS",
        "PSU",
        "PSU_PLUS_ABS",
        "PSU_PLUS_PC",
        "PTFE",
        "PTT",
        "PVAL",
        "PVB",
        "PVC",
        "PVC_C",
        "PVC_C_PLUS_PVC",
        "PVC_PLUS_NBR",
        "PVC_PLUS_PMMA",
        "PVC_PLUS_PUR",
        "PVC_U",
        "PVCA",
        "PVDC",
        "PVDF",
        "PVP",
        "RPS",
        "SAN",
        "SB",
        "SMA",
        "SMA_PLUS_HIPS",
        "SMI",
        "SMMA",
        "SPS",
        "SRP",
        "TPC_EE_PLUS_PBT",
        "TPC_ET_PLUS_EMA",
        "TPC_ET_PLUS_PBT",
        "TPES",
        "TPU_PLUS_TPS_PLUS_TPA",
        "VDF_CTFE",
        "VDF_HFP",
        "VINYL_CHLORIDE_BLEND",
        "VLDPE",
        "XLPE",
        "XLPO",
        "CA",
        "EP",
        "MA",
        "MF",
        "MP",
        "PDAIP",
        "PDAP",
        "PUR",
        "UF",
        "UP",
        "VE",
        "MPR",
        "PCU",
        "PEBA",
        "SPU",
        "TPA",
        "TPC",
        "TPC_EE",
        "TPC_ES",
        "TPC_ET",
        "TPE",
        "TPO",
        "TPO_EB",
        "TPO_EO",
        "TPO_EPDM_PLUS_PP",
        "TPS",
        "TPS_SBS",
        "TPS_SEBS",
        "TPS_SIS",
        "TPU",
        "TPU_ALES",
        "TPU_ALET",
        "TPU_ARES",
        "TPU_ARET",
        "TPU_ES",
        "TPU_ET",
        "TPV",
        "TPV_EPDM",
        "TPV_EPDM_PLUS_PP",
        "TPV_IIR_HIIR",
        "TPV_NBR",
        "TSPCU",
        "TSPU",
        "ACM",
        "ACSM",
        "AEM",
        "AU",
        "BIIR",
        "BR",
        "CIIR",
        "CM",
        "CR",
        "CR_NBR",
        "CR_SBR",
        "CSM",
        "ECO",
        "EPDM",
        "EPDM_SBR",
        "EPM",
        "EPM_EPDM",
        "EPT",
        "EU",
        "FFKM",
        "FKM",
        "FMQ",
        "FVMQ",
        "HNBR",
        "IIR",
        "IR",
        "IR_BR",
        "NBR",
        "NBR_PVC",
        "NBR_SBR",
        "NR",
        "PDMS",
        "PUMA",
        "PVMQ",
        "RET",
        "SBR",
        "SBR_ACM",
        "SBR_BR",
        "SBR_IR",
        "SBR_NR",
        "SI",
        "VMQ",
        "VMQ_PVMQ",
        "XNBR",
        "XNBR_PVC",
        "CARBON_FIBER_COMPOSITE",
        "GLASS_FIBER_COMPOSITE",
        "FIBER_REINFORCEMENT",
        "STRUCTURAL_COMPOSITE",
        "POLYPHENYLENE_OR_POLYSTYRENE",
        "POLYPHENYLENE_OR_POLYSTYRENE_HIPS",
        "POLYCARBONATE",
        "ALUMINA_BASED_CERAMIC",
        "CALCIA_BASED_CERAMIC",
        "CARBON_BASED_CERAMIC",
        "CHROMIA_BASED_CERAMIC",
        "MAGNESIA_BASED_CERAMIC",
        "MONOLOTHIC",
        "SIC_BASED_CERAMIC",
        "SILICA_BASED_CERAMIC",
        "ZIRCONIA_BASED_CERAMIC",
        "BORIDE_CERAMIC",
        "CARBIDE_CERAMIC",
        "GLASS_CERAMIC",
        "MIXED_CERAMIC",
        "NITRIDE_CERAMIC",
        "SILICATE_CERAMIC",
        "SINGLE_OXIDE_CERAMIC",
        "TITANATE_CERAMIC",
        "FIBER_CERAMIC"
      ],
      "title": "MaterialCategory3",
      "type": "string"
    },
    "MaterialCombination": {
      "description": "List of Materials that need to be combined\n(Material_A and Material_B) is a material combination",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "material_combination": {
          "description": "List of materials that need to be used together.",
          "items": {
            "$ref": "#/$defs/Material"
          },
          "title": "Material Combination",
          "type": "array"
        }
      },
      "required": [
        "reference_id",
        "material_combination"
      ],
      "title": "MaterialCombination",
      "type": "object"
    },
    "MaterialOrigin": {
      "description": "Where on the drawing a material specification was read.\n\nTwo drawings can list the same two materials and mean very different\nthings. \"1.4301 or 1.4404\" written in one canvas note is a choice the\ndesigner offers; \"1.4301\" in the title block with \"alternative material\n1.4404\" in a canvas note is a primary material with a fallback. Both\narrive as two entries in ``material_options``, so without the origin the\ntwo cases are indistinguishable.\n\n- ``TITLE_BLOCK``: read from a cell of the drawing's title block (or of\n  the frame band around the canvas).\n- ``CANVAS_NOTE``: read from a note on the drawing canvas.\n- ``BILL_OF_MATERIAL``: read from a row of a bill-of-material table.",
      "enum": [
        "TITLE_BLOCK",
        "CANVAS_NOTE",
        "BILL_OF_MATERIAL"
      ],
      "title": "MaterialOrigin",
      "type": "string"
    },
    "Note": {
      "description": "Represents a note in a technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "note_type": {
          "$ref": "#/$defs/NoteType",
          "description": "The type of the note, specifying whether it is a canvas note, sectional note, or a sectional feature."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "note_type"
      ],
      "title": "Note",
      "type": "object"
    },
    "NoteType": {
      "description": "Enum to differentiate between various types of notes in technical drawings.\n\n- Canvas Notes: General notes associated with the overall drawing canvas,\n  sometimes referred to as \"General Notes\". These notes apply broadly and are\n  not tied to any specific section.\n- View Notes: Notes specific to a particular section of the drawing,\n  but not associated with a leader or callout. Example: \"VIEW A\".",
      "enum": [
        "CANVAS_NOTE",
        "VIEW_NOTE"
      ],
      "title": "NoteType",
      "type": "string"
    },
    "PageAssessment": {
      "description": "What one page turned out to be, and whether it shows welding.\n\nTwo answers from a single look at the page, kept in one object because\nthey were made together and kept as separate fields because they are\nindependent: a page nobody could categorise may still plainly carry weld\ncallouts, so an unhelpful `page_type` says nothing about\n`has_welding_symbols`.",
      "properties": {
        "page_type": {
          "$ref": "#/$defs/PageType",
          "default": "MISCELLANEOUS",
          "description": "What kind of page this is. COMPONENT_DRAWING and ASSEMBLY_DRAWING are interpreted; the others are recognised so you learn early that the rest of your asks will come back empty. MISCELLANEOUS also covers a page we looked at and could not place."
        },
        "has_welding_symbols": {
          "default": false,
          "description": "Whether the page carries welding callouts. Presence only, never which weld: the symbol's flag and its lettering are too small to read reliably at the resolution this is judged at, while the callout as a whole is not. Answered False when unsure, so a True is worth more than a False.",
          "title": "Has Welding Symbols",
          "type": "boolean"
        },
        "description": {
          "default": "",
          "description": "One short sentence saying what this page shows, in plain language. Most useful when `page_type` is MISCELLANEOUS, which on its own tells you only that the page is not one of the categories: the sentence is what tells you whether you sent a cover sheet, a specification, a photograph or something we simply have no name for yet. Empty when no description was produced. Written from a downscaled image, so it describes what the page IS and never quotes a dimension or a tolerance off it.",
          "examples": [
            "A dimensioned drawing of a turned shaft with a keyway.",
            "A cover sheet listing the drawings in this package.",
            "A photograph of a printed drawing, taken at an angle."
          ],
          "title": "Description",
          "type": "string"
        }
      },
      "title": "PageAssessment",
      "type": "object"
    },
    "PageType": {
      "description": "Enum representing page types.\n\nWerk24 interprets COMPONENT_DRAWING and ASSEMBLY_DRAWING. The remaining\nmembers exist so that a page we cannot interpret can be *named* rather than\nsilently returned as a component drawing with nothing on it: knowing that a\nrequest was a wiring diagram is a far more useful answer than an empty\nresult, both for you and for us.\n\nNew members may be added as the classification improves. Treat an\nunrecognised value as MISCELLANEOUS rather than as an error.",
      "enum": [
        "COMPONENT_DRAWING",
        "ASSEMBLY_DRAWING",
        "ARCHITECTURAL_DRAWING",
        "PID_DRAWING",
        "WIRING_DIAGRAM",
        "MISCELLANEOUS"
      ],
      "title": "PageType",
      "type": "string"
    },
    "PaperSize": {
      "description": "The sheet format a drawing is drawn on.\n\nOrientation is normalised away, so a landscape A3 and a portrait A3 are\nboth `A3`: it is the same sheet either way. A drawing trimmed by a few\nmillimetres, or a PDF whose media box carries a bleed, still reports its\nnominal format.\n\nNote for anyone who finds `W24PaperSize` in the v1 models and expects it\nhere: this is deliberately a separate enum rather than a reuse. The v1\nenum spells its values for humans (`\"A4 (ISO 216)\"`) where every v2 enum\nuses a bare token, and it covers neither the ARCH formats, nor A6, nor any\nway of saying \"a real sheet that is not a named format\" — so it cannot\nrepresent what the reader actually produces.",
      "enum": [
        "A6",
        "A5",
        "A4",
        "A3",
        "A2",
        "A1",
        "A0",
        "2A0",
        "ANSI_A",
        "ANSI_B",
        "ANSI_C",
        "ANSI_D",
        "ANSI_E",
        "ARCH_A",
        "ARCH_B",
        "ARCH_C",
        "ARCH_D",
        "ARCH_E",
        "ARCH_E1",
        "CUSTOM"
      ],
      "title": "PaperSize",
      "type": "string"
    },
    "Polygon": {
      "description": "Represents a polygon area in the drawing.",
      "properties": {
        "coordinate_space": {
          "$ref": "#/$defs/CoordinateSpace",
          "description": "The coordinate space used to define the polygon, such as absolute or relative."
        },
        "coordinates": {
          "description": "A list of x,y tuples representing the vertices of the polygon.",
          "items": {
            "maxItems": 2,
            "minItems": 2,
            "prefixItems": [
              {
                "type": "integer"
              },
              {
                "type": "integer"
              }
            ],
            "type": "array"
          },
          "title": "Coordinates",
          "type": "array"
        }
      },
      "required": [
        "coordinate_space",
        "coordinates"
      ],
      "title": "Polygon",
      "type": "object"
    },
    "PresignedPost": {
      "description": "Represents the details of a presigned POST request for uploading a file\nto the Werk24 file system.\n\nAttributes:\n----------\n- url (HttpUrl): The URL where the POST request should be sent.\n- fields (Dict[str, str]): A dictionary of form fields to include in the POST request.",
      "properties": {
        "url": {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "title": "Url",
          "type": "string"
        },
        "fields": {
          "additionalProperties": {
            "type": "string"
          },
          "default": {},
          "title": "Fields",
          "type": "object"
        }
      },
      "required": [
        "url"
      ],
      "title": "PresignedPost",
      "type": "object"
    },
    "PrimaryProcessCutting": {
      "description": "Represents a cutting process in a technical drawing.",
      "properties": {
        "primary_process": {
          "const": "CUTTING",
          "default": "CUTTING",
          "title": "Primary Process",
          "type": "string"
        },
        "requires_bending": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the cutting process requires bending.",
          "title": "Requires Bending"
        }
      },
      "title": "PrimaryProcessCutting",
      "type": "object"
    },
    "PrimaryProcessMilling": {
      "properties": {
        "primary_process": {
          "const": "MILLING",
          "default": "MILLING",
          "title": "Primary Process",
          "type": "string"
        },
        "axis_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The number of axes used in the milling process.",
          "title": "Axis Count"
        }
      },
      "title": "PrimaryProcessMilling",
      "type": "object"
    },
    "PrimaryProcessTurning": {
      "properties": {
        "primary_process": {
          "const": "TURNING",
          "default": "TURNING",
          "title": "Primary Process",
          "type": "string"
        },
        "requires_secondary_milling": {
          "description": "Whether the turning process requires secondary milling.",
          "title": "Requires Secondary Milling",
          "type": "boolean"
        }
      },
      "required": [
        "requires_secondary_milling"
      ],
      "title": "PrimaryProcessTurning",
      "type": "object"
    },
    "ProcessingTimeEstimate": {
      "description": "How long this document is likely to take to read.\n\nDeliberately a **range and not a single number**. Werk24's processing time\nhas a long right tail — the median is around half a minute while the 99th\npercentile is over two — so a point estimate would be wrong in the only\ncase where being wrong is expensive: the request you are still waiting on.\nShow `seconds_p50` to a user; size timeouts and progress bars against\n`seconds_p95`.\n\nThe estimate is made from the document's **sheet size** at the moment the\nfile is read, before any interpretation, so it is available almost\nimmediately and does not depend on what the drawing turns out to contain.\n\nDeliberately not from page count, which is the obvious candidate and is\nwrong: measured over 4,639 requests, two-page documents come back faster\nthan one-page ones (median 9.3 s against 18.7 s), almost certainly because\na two-page PDF is usually a drawing plus a cover. Scaling by it would make\nthe estimate worse.",
      "properties": {
        "seconds_p50": {
          "description": "Median expected processing time in seconds. Half of comparable documents finish faster than this.",
          "examples": [
            16.5,
            34.9
          ],
          "exclusiveMinimum": 0,
          "title": "Seconds P50",
          "type": "number"
        },
        "seconds_p95": {
          "description": "95th-percentile expected processing time in seconds. Size timeouts against this rather than against the median.",
          "examples": [
            48.0,
            120.0
          ],
          "exclusiveMinimum": 0,
          "title": "Seconds P95",
          "type": "number"
        }
      },
      "required": [
        "seconds_p50",
        "seconds_p95"
      ],
      "title": "ProcessingTimeEstimate",
      "type": "object"
    },
    "ProjectionMethod": {
      "description": "Projection Method according to ISO 128",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "projection_method": {
          "$ref": "#/$defs/ProjectionMethodType"
        }
      },
      "required": [
        "reference_id",
        "projection_method"
      ],
      "title": "ProjectionMethod",
      "type": "object"
    },
    "ProjectionMethodType": {
      "enum": [
        "FIRST_ANGLE",
        "THIRD_ANGLE"
      ],
      "title": "ProjectionMethodType",
      "type": "string"
    },
    "Quantity": {
      "description": "Represents a Physical Quantity with a value and a unit.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The value of the quantity.",
          "examples": [
            "10.5"
          ],
          "title": "Value"
        },
        "unit": {
          "description": "The unit of the quantity.",
          "examples": [
            "mm"
          ],
          "title": "Unit",
          "type": "string"
        }
      },
      "required": [
        "value",
        "unit"
      ],
      "title": "Quantity",
      "type": "object"
    },
    "Radius": {
      "description": "Represents a radius feature in an engineering or technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The quantity or value associated with the measurement, must be non-negative.",
          "minimum": 0,
          "title": "Quantity",
          "type": "integer"
        },
        "curvature_type": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurvatureType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of curvature for the radius, such as concave or convex. This is only set if the label explicitly states it (e.g., 'R10 concave')."
        },
        "size": {
          "$ref": "#/$defs/Size",
          "description": "Details about the size, including type, nominal value, tolerance, and unit."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "size"
      ],
      "title": "Radius",
      "type": "object"
    },
    "RedactionZone": {
      "description": "A class that represents a redacted area in the drawing.",
      "properties": {
        "redaction_zone_type": {
          "$ref": "#/$defs/RedactionZoneType"
        },
        "polygon": {
          "$ref": "#/$defs/Polygon",
          "description": "A list of x,y tuples representing the vertices of the redacted area."
        }
      },
      "required": [
        "redaction_zone_type",
        "polygon"
      ],
      "title": "RedactionZone",
      "type": "object"
    },
    "RedactionZoneType": {
      "enum": [
        "LOGO",
        "PERSONAL_DATA",
        "COMPANY_DATA",
        "KEYWORD"
      ],
      "title": "RedactionZoneType",
      "type": "string"
    },
    "Reference": {
      "description": "Base model that allows refering to a specific object by its reference_id.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        }
      },
      "required": [
        "reference_id"
      ],
      "title": "Reference",
      "type": "object"
    },
    "ReferencePosition": {
      "description": "Represents the position of a reference in the drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "polygon": {
          "anyOf": [
            {
              "$ref": "#/$defs/Polygon"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "reference_id",
        "polygon"
      ],
      "title": "ReferencePosition",
      "type": "object"
    },
    "ResponseBalloons": {
      "description": "`ResponseBalloons` is the corresponding response object for `AskBalloons`.\nIt contains the extracted balloon details from the technical drawing.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "BALLOONS",
          "default": "BALLOONS",
          "title": "Ask Type",
          "type": "string"
        },
        "balloons": {
          "description": "The balloons in the technical drawing.",
          "items": {
            "$ref": "#/$defs/Balloon"
          },
          "title": "Balloons",
          "type": "array"
        }
      },
      "required": [
        "ask_type",
        "balloons"
      ],
      "title": "ResponseBalloons",
      "type": "object"
    },
    "ResponseCustom": {
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "CUSTOM",
          "default": "CUSTOM",
          "title": "Ask Type",
          "type": "string"
        },
        "custom_id": {
          "description": "The ID of the custom output.",
          "title": "Custom Id",
          "type": "string"
        },
        "output": {
          "description": "The custom output.",
          "title": "Output"
        }
      },
      "required": [
        "ask_type",
        "custom_id",
        "output"
      ],
      "title": "ResponseCustom",
      "type": "object"
    },
    "ResponseDocumentProfile": {
      "description": "The document's shape: how big it is, and how long it is likely to take.\n\nRead off the file itself, before any interpretation begins and without\nasking a model anything, so it arrives in milliseconds rather than\nseconds. Use it to tell a waiting user how long they are waiting.\n\n**What kind of page this is is no longer here.** It costs a vision call,\nwhich is thousands of times slower than everything in this response, so\nkeeping the two together meant the fast answer waited for the slow one.\nAsk `AskPageAssessment` for it, and for whether the pages carry welding.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "DOCUMENT_PROFILE",
          "default": "DOCUMENT_PROFILE",
          "title": "Ask Type",
          "type": "string"
        },
        "page_count": {
          "description": "Number of pages in the document, before any page limit is applied. Note that this does NOT drive the processing-time estimate: measured over 4,639 requests, two-page documents come back faster than one-page ones, so the estimate is keyed on sheet size instead.",
          "examples": [
            1,
            12
          ],
          "minimum": 1,
          "title": "Page Count",
          "type": "integer"
        },
        "paper_size": {
          "anyOf": [
            {
              "$ref": "#/$defs/PaperSize"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sheet format. CUSTOM for a real sheet that is not one of the named formats. None for inputs that state no physical size, which is every raster image: a photograph or a scan carries pixels, not millimetres.",
          "examples": [
            "A3",
            "ANSI_D",
            "CUSTOM"
          ]
        },
        "processing_time": {
          "anyOf": [
            {
              "$ref": "#/$defs/ProcessingTimeEstimate"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "How long this document is likely to take. None when the shape is too unusual to compare against anything we have measured; treat that as 'no estimate' rather than 'fast'."
        }
      },
      "required": [
        "ask_type",
        "page_count"
      ],
      "title": "ResponseDocumentProfile",
      "type": "object"
    },
    "ResponseFeaturesComponentDrawing": {
      "description": "Represents an Response to a request for features of a mechanical component drawing from the server.\nIt contains extracted features from the technical drawing, providing structured data for further processing.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "FEATURES",
          "default": "FEATURES",
          "title": "Ask Type",
          "type": "string"
        },
        "page_type": {
          "const": "COMPONENT_DRAWING",
          "default": "COMPONENT_DRAWING",
          "title": "Page Type",
          "type": "string"
        },
        "bores": {
          "description": "Bore specifications for the component (e.g., `Ø6 H7 (+0.012/0) ↧13.4`, `6x Ø3.3 ↧12.0 ⌵ Ø3.3x45° M4×0.7—6H/6g×8.0`).",
          "items": {
            "$ref": "#/$defs/Bore"
          },
          "title": "Bores",
          "type": "array"
        },
        "chamfers": {
          "description": "Chamfer specifications for the component (e.g., `3 x 45°`, `4x 0.031 x 45.00° TYPICAL`).",
          "items": {
            "$ref": "#/$defs/Chamfer"
          },
          "title": "Chamfers",
          "type": "array"
        },
        "dimensions": {
          "description": "Dimension details for the component (e.g, `5 ±0.3`, `Ø30`, `□5`). ",
          "items": {
            "$ref": "#/$defs/Dimension"
          },
          "title": "Dimensions",
          "type": "array"
        },
        "gdnts": {
          "description": "Geometric dimensioning and tolerancing (GD&T) details (e.g., `[◎|Ø0.02|A-B]`).",
          "items": {
            "$ref": "#/$defs/GDnT"
          },
          "title": "Gdnts",
          "type": "array"
        },
        "radii": {
          "description": "Radius specifications for the component (e.g., `R5`).",
          "items": {
            "$ref": "#/$defs/Radius"
          },
          "title": "Radii",
          "type": "array"
        },
        "roughnesses": {
          "description": "Additional surface roughness details beyond general roughness. (e.g., `√URa  12.5`)",
          "items": {
            "$ref": "#/$defs/Roughness"
          },
          "title": "Roughnesses",
          "type": "array"
        },
        "threads": {
          "description": "Thread specifications for the component (e.g., `M5×0.8—6g/6H`, `0.25—20 UNC—2A`).",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/ThreadISOMetric"
              },
              {
                "$ref": "#/$defs/ThreadSM"
              },
              {
                "$ref": "#/$defs/ThreadUTS"
              },
              {
                "$ref": "#/$defs/ThreadACME"
              },
              {
                "$ref": "#/$defs/ThreadWhitworth"
              },
              {
                "$ref": "#/$defs/ThreadKnuckle"
              },
              {
                "$ref": "#/$defs/ThreadNPT"
              }
            ]
          },
          "title": "Threads",
          "type": "array"
        },
        "undercuts": {
          "description": "Thread undercuts and relief grooves specified by standard (e.g., `DIN 76-B`, `DIN 509-E0,8x0,3`).",
          "items": {
            "$ref": "#/$defs/Undercut"
          },
          "title": "Undercuts",
          "type": "array"
        },
        "key_slots": {
          "description": "Slots for parallel (feather) keys specified by standard (e.g., `DIN 6885 A 8x7x56`).",
          "items": {
            "$ref": "#/$defs/KeySlot"
          },
          "title": "Key Slots",
          "type": "array"
        },
        "center_holes": {
          "description": "Center holes specified by standard (e.g., `DIN 332-A 2,5x5,3`).",
          "items": {
            "$ref": "#/$defs/CenterHole"
          },
          "title": "Center Holes",
          "type": "array"
        },
        "fasteners": {
          "description": "Fasteners the drawing specifies, such as press-in nuts, weld nuts, weld studs and screws (e.g., `3x PEM CLS-M4-2`, `4x DIN 929 M12`).",
          "items": {
            "$ref": "#/$defs/Fastener"
          },
          "title": "Fasteners",
          "type": "array"
        }
      },
      "title": "ResponseFeaturesComponentDrawing",
      "type": "object",
      "required": [
        "ask_type"
      ]
    },
    "ResponseInsightsComponentDrawing": {
      "description": "`ResponseInsightsComponentDrawing` is the response object corresponding to an AskInsights request.\nIt provides structured insights into the manufacturability and processing of a mechanical component.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "INSIGHTS",
          "default": "INSIGHTS",
          "title": "Ask Type",
          "type": "string"
        },
        "page_type": {
          "const": "COMPONENT_DRAWING",
          "default": "COMPONENT_DRAWING",
          "title": "Page Type",
          "type": "string"
        },
        "dimensions_before_processing": {
          "anyOf": [
            {
              "$ref": "#/$defs/BoundingDimensions"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The bounding dimensions of the component before processing."
        },
        "dimensions_after_processing": {
          "anyOf": [
            {
              "$ref": "#/$defs/BoundingDimensions"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The bounding dimensions of the component after processing."
        },
        "primary_process_options": {
          "description": "The primary processing options available for the component.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/PrimaryProcessCutting"
              },
              {
                "$ref": "#/$defs/PrimaryProcessTurning"
              },
              {
                "$ref": "#/$defs/PrimaryProcessMilling"
              }
            ]
          },
          "title": "Primary Process Options",
          "type": "array"
        },
        "secondary_processes": {
          "description": "The final geometry or shape of the material after processing.",
          "items": {
            "$ref": "#/$defs/SecondaryProcess"
          },
          "title": "Secondary Processes",
          "type": "array"
        },
        "volume_estimate": {
          "anyOf": [
            {
              "$ref": "#/$defs/VolumeEstimate"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The estimated volume of the component."
        }
      },
      "required": [
        "ask_type",
        "primary_process_options",
        "secondary_processes"
      ],
      "title": "ResponseInsightsComponentDrawing",
      "type": "object"
    },
    "ResponseMetaDataComponentDrawing": {
      "description": "`ResponseMetaData` represents the structured response to a metadata request (AskMetaData)\nfor a mechanical component drawing. This response provides essential details such as identifiers,\nmaterial options, unit systems, general tolerances, and other metadata extracted from the drawing.\n\nThe response enables better integration with manufacturing systems,\nPLM (Product Lifecycle Management), and ERP systems by providing structured component details.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "META_DATA",
          "default": "META_DATA",
          "title": "Ask Type",
          "type": "string"
        },
        "page_type": {
          "const": "COMPONENT_DRAWING",
          "default": "COMPONENT_DRAWING",
          "title": "Page Type",
          "type": "string"
        },
        "bill_of_material": {
          "anyOf": [
            {
              "$ref": "#/$defs/BillOfMaterial"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Bill of materials for the component, listing parts and quantities."
        },
        "certifications": {
          "description": "List of certifications associated with the component.",
          "items": {
            "$ref": "#/$defs/Certification"
          },
          "title": "Certifications",
          "type": "array"
        },
        "designation": {
          "description": "Designation of the component.",
          "items": {
            "$ref": "#/$defs/Entry"
          },
          "title": "Designation",
          "type": "array"
        },
        "identifiers": {
          "description": "List of identifiers associated with the component.",
          "items": {
            "$ref": "#/$defs/Identifier"
          },
          "title": "Identifiers",
          "type": "array"
        },
        "general_roughness": {
          "anyOf": [
            {
              "$ref": "#/$defs/Roughness"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "General roughness specifications for the component."
        },
        "general_tolerances": {
          "anyOf": [
            {
              "$ref": "#/$defs/GeneralTolerances"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "General tolerance specifications for the component."
        },
        "languages": {
          "description": "Languages used in the drawing.",
          "items": {
            "$ref": "#/$defs/Language"
          },
          "title": "Languages",
          "type": "array"
        },
        "material_options": {
          "description": "Material options available for the component.",
          "items": {
            "$ref": "#/$defs/MaterialCombination"
          },
          "title": "Material Options",
          "type": "array"
        },
        "notes": {
          "description": "List of all notes in the drawing.",
          "items": {
            "$ref": "#/$defs/Note"
          },
          "title": "Notes",
          "type": "array"
        },
        "projection_method": {
          "anyOf": [
            {
              "$ref": "#/$defs/ProjectionMethod"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Projection method used in the drawing (e.g., first angle or third angle)."
        },
        "unit_systems": {
          "description": "The units specification for the component.",
          "items": {
            "$ref": "#/$defs/UnitSystem"
          },
          "title": "Unit Systems",
          "type": "array"
        },
        "weight": {
          "anyOf": [
            {
              "$ref": "#/$defs/Weight"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Weight of the component."
        }
      },
      "title": "ResponseMetaDataComponentDrawing",
      "type": "object",
      "required": [
        "ask_type"
      ]
    },
    "ResponsePageAssessment": {
      "description": "What each page of the document is, and whether it shows welding.\n\nOne entry per page **we were asked to read**, in the order we read them,\nwhich is not necessarily the order they appear in the file: a request that\nnames particular pages gets those pages, and a page limit truncates the\nrest. `ResponseDocumentProfile.page_count` reports the length of the whole\ndocument, so the two legitimately disagree.\n\nA `None` entry means that page could not be assessed, which is not the\nsame as a page assessed as ordinary. Do not read it as \"no welding\".\n\nThis response waits on a model, so it arrives well after\n`ResponseDocumentProfile` and roughly alongside the extraction results.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "PAGE_ASSESSMENT",
          "default": "PAGE_ASSESSMENT",
          "title": "Ask Type",
          "type": "string"
        },
        "pages": {
          "description": "One entry per page read, in reading order. None where the page could not be assessed at all, which is distinct from a page assessed as MISCELLANEOUS with no welding.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/PageAssessment"
              },
              {
                "type": "null"
              }
            ]
          },
          "title": "Pages",
          "type": "array"
        }
      },
      "title": "ResponsePageAssessment",
      "type": "object",
      "required": [
        "ask_type"
      ]
    },
    "ResponseRedaction": {
      "description": "A class that represents an Response to a redaction request from the server.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "REDACTION",
          "default": "REDACTION",
          "title": "Ask Type",
          "type": "string"
        },
        "redaction_zones": {
          "description": "A list of redacted areas in the drawing.",
          "items": {
            "$ref": "#/$defs/RedactionZone"
          },
          "title": "Redaction Zones",
          "type": "array"
        }
      },
      "title": "ResponseRedaction",
      "type": "object",
      "required": [
        "ask_type"
      ]
    },
    "ResponseReferencePositions": {
      "description": "A class that represents an Response to a request for the position of a component in the drawing.",
      "properties": {
        "ask_version": {
          "const": "v2",
          "default": "v2",
          "title": "Ask Version",
          "type": "string"
        },
        "ask_type": {
          "const": "REFERENCE_POSITIONS",
          "default": "REFERENCE_POSITIONS",
          "title": "Ask Type",
          "type": "string"
        },
        "reference_positions": {
          "description": "The positions of the component in the drawing.",
          "items": {
            "$ref": "#/$defs/ReferencePosition"
          },
          "title": "Reference Positions",
          "type": "array"
        }
      },
      "required": [
        "ask_type",
        "reference_positions"
      ],
      "title": "ResponseReferencePositions",
      "type": "object"
    },
    "Roughness": {
      "description": "Represents the roughness specifications on a technical drawing.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "standard": {
          "$ref": "#/$defs/RoughnessStandard",
          "description": "The standard used for defining the roughness specifications (e.g., ISO 1302:1992, ASME Y14.36M-1996)."
        },
        "machining_allowance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Additional material allowance for machining, if specified."
        },
        "material_removal_type": {
          "$ref": "#/$defs/RoughnessMaterialRemovalType",
          "description": "Indicates whether material removal is required, prohibited, or unspecified."
        },
        "applies_all_around": {
          "description": "Indicates whether the roughness applies uniformly to the entire surface.",
          "title": "Applies All Around",
          "type": "boolean"
        },
        "direction_of_lay": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessDirectionOfLay"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Specifies the lay direction of the surface texture, if defined (e.g., parallel, perpendicular)."
        },
        "manufacturing_process": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A description of the manufacturing process that affects surface roughness, if provided.",
          "title": "Manufacturing Process"
        },
        "conditions": {
          "description": "A list of roughness conditions specifying upper, lower, or average limits for different parameters.",
          "items": {
            "$ref": "#/$defs/RoughnessCondition"
          },
          "title": "Conditions",
          "type": "array"
        },
        "waviness": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessWaviness"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Waviness specifications for the surface, if applicable."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "standard",
        "material_removal_type",
        "applies_all_around",
        "conditions"
      ],
      "title": "Roughness",
      "type": "object"
    },
    "RoughnessAcceptanceCriterion": {
      "description": "The designer can specify whether to apply\nthe 16%-rule, the maximum- or medium- rule\nwhen deciding whether a surface complies with\nthe specifications.",
      "enum": [
        "16%",
        "max",
        "mean"
      ],
      "title": "RoughnessAcceptanceCriterion",
      "type": "string"
    },
    "RoughnessCondition": {
      "description": "Represents a condition for surface roughness specified on a technical drawing.",
      "properties": {
        "condition_type": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessConditionType"
            },
            {
              "type": "null"
            }
          ],
          "description": "Specifies whether the condition applies to the upper limit, lower limit, or average of the roughness."
        },
        "filter_type": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessFilterType"
            },
            {
              "type": "null"
            }
          ],
          "description": "The filter used during roughness measurement (e.g., Gaussian, Spline)."
        },
        "lambda_s": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The short wavelength cutoff for filtering, if specified."
        },
        "lambda_c": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The long wavelength cutoff for filtering, if specified."
        },
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessParameter"
            },
            {
              "type": "null"
            }
          ],
          "description": "The roughness parameter being evaluated (e.g., Ra, Rz, Rt)."
        },
        "evaluation_length": {
          "anyOf": [
            {
              "$ref": "#/$defs/Quantity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Details of the evaluation length used for roughness measurement."
        },
        "acceptance_criterion": {
          "anyOf": [
            {
              "$ref": "#/$defs/RoughnessAcceptanceCriterion"
            },
            {
              "type": "null"
            }
          ],
          "description": "Specifies the acceptance rule for the roughness condition (e.g., 16%-rule, maximum, mean)."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "description": "The target roughness value specified in the condition."
        },
        "roughness_grade": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An optional roughness grade (e.g., N6, N7) associated with the condition.",
          "examples": [
            "N6"
          ],
          "title": "Roughness Grade"
        }
      },
      "required": [
        "condition_type",
        "filter_type",
        "parameter",
        "acceptance_criterion",
        "value"
      ],
      "title": "RoughnessCondition",
      "type": "object"
    },
    "RoughnessConditionType": {
      "description": "Enum representing the type of roughness condition specified on a surface.\n\nThis classification indicates whether the roughness applies to the upper limit,\nlower limit, or average value of the measured surface profile.\n\nAttributes:\n----------\n- UPPER: Represents the upper limit of the roughness.\n- LOWER: Represents the lower limit of the roughness.\n- AVERAGE: Represents the average value of the roughness.",
      "enum": [
        "UPPER",
        "LOWER",
        "AVERAGE"
      ],
      "title": "RoughnessConditionType",
      "type": "string"
    },
    "RoughnessDirectionOfLay": {
      "description": "The lay of the roughness limits the\nmanufacturing process and is sometimes\nrequired for the application.",
      "enum": [
        "=",
        "⟂",
        "X",
        "M",
        "C",
        "R",
        "P"
      ],
      "title": "RoughnessDirectionOfLay",
      "type": "string"
    },
    "RoughnessFilterType": {
      "description": "Enum representing filter types used during roughness measurement.\n\nDifferent filters influence the roughness measurements by emphasizing\nor attenuating specific frequency components of the surface profile.\nThis enum allows designers to specify the desired filter to ensure\nconsistent and comparable results.",
      "enum": [
        "G",
        "RG",
        "S",
        "\"2RC\""
      ],
      "title": "RoughnessFilterType",
      "type": "string"
    },
    "RoughnessMaterialRemovalType": {
      "description": "Most standard allow the designer to specify\nwhether material removal is required or prohibited.\n\nBy default both options are allowed.",
      "enum": [
        "UNSPECIFIED",
        "PROHIBITED",
        "REQUIRED"
      ],
      "title": "RoughnessMaterialRemovalType",
      "type": "string"
    },
    "RoughnessParameter": {
      "description": "Enum representing roughness parameters commonly specified in engineering drawings.\n\nThis list includes frequently used parameters categorized by their context\n(e.g., ASME standards, profile parameters, roughness parameters, waviness parameters, etc.).\n\nNote:\n----\n- This list is not exhaustive.\n- For any additional parameters, feel free to extend or contact the maintainers.",
      "enum": [
        "AA",
        "CLA",
        "PVA",
        "RMS",
        "Pa",
        "PC",
        "Pku",
        "Pp",
        "Pq",
        "Psk",
        "Pt",
        "Pv",
        "Py",
        "Pz",
        "Ra",
        "Rc",
        "Rku",
        "Rp",
        "Rq",
        "Rsk",
        "Rt",
        "Rv",
        "Ry",
        "Rz",
        "Wa",
        "Wc",
        "Wku",
        "Wp",
        "Wq",
        "Wsk",
        "Wt",
        "Wv",
        "Wy",
        "Wz",
        "N"
      ],
      "title": "RoughnessParameter",
      "type": "string"
    },
    "RoughnessStandard": {
      "description": "Most standards that define the surface roughness use\nvery similar symbols. However, the position of the fields\nvaries.\n\nThe standards listed here are understood and supported\nby the API.\n\nNOTE: the ISO 1302 standard exists in four different versions,\nthese releases substantially modified the position and\nstructure of the roughness symbols.\n\nNOTE: this list is not exhaustive, many countries have specified\ntheir own standards over the years. Do not hesitate to reach\nout if you wish us to implement another standard.",
      "enum": [
        "ISO 1302:1978",
        "ISO 1302:1992",
        "ISO 1302:2002",
        "ISO 21920-1:2021",
        "ASME Y14.36-1978",
        "ASME Y14.36M-1996",
        "ASME Y14.36-2018",
        "VARIABLE"
      ],
      "title": "RoughnessStandard",
      "type": "string"
    },
    "RoughnessWaviness": {
      "description": "Represents the waviness characteristics of a surface in terms of height and width.",
      "properties": {
        "height": {
          "$ref": "#/$defs/Size",
          "description": "The height of the waviness, typically measured as the peak-to-valley distance."
        },
        "width": {
          "$ref": "#/$defs/Size",
          "description": "The width of the waviness, representing the wavelength or distance between peaks."
        }
      },
      "required": [
        "height",
        "width"
      ],
      "title": "RoughnessWaviness",
      "type": "object"
    },
    "SecondaryProcess": {
      "description": "Represents a manufacturing process with its type, category, and source.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "process_category": {
          "description": "The category of the process based on DIN 8580, e.g., forming or coating.",
          "examples": [
            [
              "SEPARATION",
              "CUTTING",
              "WATERJET_CUTTING"
            ]
          ],
          "items": {
            "type": "string"
          },
          "title": "Process Category",
          "type": "array"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "process_category"
      ],
      "title": "SecondaryProcess",
      "type": "object"
    },
    "Size": {
      "description": "Represents a size definition for a part or feature in an engineering context.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The value of the quantity.",
          "examples": [
            "10.5"
          ],
          "title": "Value"
        },
        "unit": {
          "description": "The unit of the quantity.",
          "examples": [
            "mm"
          ],
          "title": "Unit",
          "type": "string"
        },
        "size_type": {
          "$ref": "#/$defs/SizeType",
          "description": "The type of size (e.g., diameter, linear, angular).",
          "examples": [
            "DIAMETER"
          ]
        },
        "tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The tolerance specifications associated with the size.",
          "examples": [
            {
              "deviation_lower": "-0.05",
              "deviation_upper": "0.05",
              "fit": "H7",
              "is_approximation": false,
              "is_general_tolerance": false,
              "is_reference": false,
              "is_theoretically_exact": false,
              "tolerance_grade": "IT7"
            }
          ]
        }
      },
      "required": [
        "value",
        "unit",
        "size_type"
      ],
      "title": "Size",
      "type": "object"
    },
    "SizeType": {
      "description": "Enumeration class for W24 size types.\n\nRepresents different types of sizes that can be used for dimensions in\nengineering and technical contexts.\n\nAttributes:\n----------\n- ANGULAR (str): Represents angular sizes or measurements (e.g., angles).\n- LINEAR (str): Represents linear sizes or measurements (e.g., lengths).\n- DIAMETER (str): Represents circular diameter measurements.\n- SPHERICAL_DIAMETER (str): Represents spherical diameter measurements.\n- WIDTH_ACROSS_FLATS (str): Represents the width across flats for hexagonal or similar shapes.\n- SQUARE (str): Represents dimensions of square shapes.",
      "enum": [
        "ANGULAR",
        "LINEAR",
        "DIAMETER",
        "SPHERICAL_DIAMETER",
        "WIDTH_ACROSS_FLATS",
        "SQUARE"
      ],
      "title": "SizeType",
      "type": "string"
    },
    "TechreadException": {
      "description": "Error message that accompanies the W24TechreadMessage\nif an error occured.\n\nAttributes:\n----------\n- exception_level (TechreadExceptionLevel): How severe it is. Only\n    ERROR means the processing stopped.\n- exception_type (TechreadExceptionType): Error Type that allows the\n    API-user to translate the message to a user-info.\n- ask_type (Optional[str]): The ask the exception concerns, when it\n    concerns one. Set on a ``READ_INCOMPLETE`` warning.\n- reason (Optional[str]): A short, machine-readable code for what\n    happened (for example ``\"timeout\"``). The set of codes may grow.\n\nA type this client does not know is kept as its plain string rather\nthan refused. The server adds types over time, and every consumer that\ninstalls this package would otherwise fail to parse the whole message,\nresults included, the day it starts sending a new one. The level stays\nstrict: it decides ``is_successful``, and core-reader validates what it\nreplays from its request cache against it.",
      "properties": {
        "exception_level": {
          "$ref": "#/$defs/TechreadExceptionLevel"
        },
        "exception_type": {
          "anyOf": [
            {
              "$ref": "#/$defs/TechreadExceptionType"
            },
            {
              "type": "string"
            }
          ],
          "title": "Exception Type"
        },
        "ask_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Ask Type"
        },
        "reason": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Reason"
        }
      },
      "required": [
        "exception_level",
        "exception_type"
      ],
      "title": "TechreadException",
      "type": "object"
    },
    "TechreadExceptionLevel": {
      "description": "Severity level for the Error\n\n!!! note\n    This is defined for future-compatibility.\n    The only value that is currently used is ERROR.\n    The INFO level will follow shortly.",
      "enum": [
        "ERROR",
        "INFO",
        "WARNING"
      ],
      "title": "TechreadExceptionLevel",
      "type": "string"
    },
    "TechreadExceptionType": {
      "description": "List of all the error types that can possibly\nbe associated to the error type.",
      "enum": [
        "DRAWING_FILE_FORMAT_UNSUPPORTED",
        "DRAWING_FILE_SIZE_TOO_LARGE",
        "DRAWING_RESOLUTION_TOO_LOW",
        "DRAWING_CONTENT_NOT_UNDERSTOOD",
        "CONFIGURATION_INCORRECT",
        "DRAWING_PAPER_SIZE_TOO_LARGE",
        "DRAWING_PAGE_COUNT_TOO_LARGE",
        "READ_INCOMPLETE"
      ],
      "title": "TechreadExceptionType",
      "type": "string"
    },
    "TechreadInitResponse": {
      "description": "API response to the Initialize request\n\nAttributes:\n----------\n- drawing_presigned_post: Presigned Post for uploading the drawing\n- model_presigned_post: Presigned Post for uploading the model\n- exceptions (List[W24TechreadException]): List of exceptions that occured",
      "properties": {
        "exceptions": {
          "default": [],
          "items": {
            "$ref": "#/$defs/TechreadException"
          },
          "title": "Exceptions",
          "type": "array"
        },
        "drawing_presigned_post": {
          "$ref": "#/$defs/PresignedPost"
        },
        "model_presigned_post": {
          "anyOf": [
            {
              "$ref": "#/$defs/PresignedPost"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "public_key": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Public Key"
        }
      },
      "required": [
        "drawing_presigned_post"
      ],
      "title": "TechreadInitResponse",
      "type": "object"
    },
    "TechreadMessageSubtype": {
      "description": "Message Subtype for the MessageType: PROGRESS",
      "enum": [
        "COMPLETED",
        "INITIALIZATION_SUCCESS",
        "STARTED",
        "INTERNAL"
      ],
      "title": "TechreadMessageSubtype",
      "type": "string"
    },
    "TechreadMessageType": {
      "description": "Message Type of the message that is sent\nfrom the server to the client in response to\na request.",
      "enum": [
        "ASK",
        "PROGRESS",
        "ERROR"
      ],
      "title": "TechreadMessageType",
      "type": "string"
    },
    "ThreadACME": {
      "description": "Represents an ACME thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "ACME",
          "default": "ACME",
          "title": "Thread Type",
          "type": "string"
        },
        "acme_size": {
          "description": "The nominal size of the ACME thread.",
          "examples": [
            "1/4",
            "1/2"
          ],
          "title": "Acme Size",
          "type": "string"
        },
        "acme_series": {
          "description": "The series designation of the ACME thread.",
          "examples": [
            "ACME",
            "STUB ACME"
          ],
          "title": "Acme Series",
          "type": "string"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "acme_size",
        "acme_series"
      ],
      "title": "ThreadACME",
      "type": "object"
    },
    "ThreadHandedness": {
      "description": "Enumeration describing the direction of a thread.\n\nAttributes:\n----------\n- LEFT (str): Indicates a left-handed thread, which tightens counterclockwise.\n- RIGHT (str): Indicates a right-handed thread, which tightens clockwise.",
      "enum": [
        "LEFT",
        "RIGHT"
      ],
      "title": "ThreadHandedness",
      "type": "string"
    },
    "ThreadISOMetric": {
      "description": "Represents an ISO Metric thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "ISO_METRIC",
          "default": "ISO_METRIC",
          "title": "Thread Type",
          "type": "string"
        },
        "female_major_diameter_tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Tolerance for the major diameter of female threads."
        },
        "female_pitch_diameter_tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Tolerance for the pitch diameter of female threads."
        },
        "male_major_diameter_tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Tolerance for the major diameter of male threads."
        },
        "male_pitch_diameter_tolerance": {
          "anyOf": [
            {
              "$ref": "#/$defs/Tolerance"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Tolerance for the pitch diameter of male threads."
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness"
      ],
      "title": "ThreadISOMetric",
      "type": "object"
    },
    "ThreadKnuckle": {
      "description": "Represents a Knuckle thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "KNUCKLE",
          "default": "KNUCKLE",
          "title": "Thread Type",
          "type": "string"
        },
        "knuckle_size": {
          "description": "The nominal size of the Knuckle thread.",
          "title": "Knuckle Size",
          "type": "string"
        },
        "knuckle_series": {
          "description": "The series designation of the Knuckle thread.",
          "title": "Knuckle Series",
          "type": "string"
        },
        "knuckle_profile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The profile of the Knuckle thread.",
          "title": "Knuckle Profile"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "knuckle_size",
        "knuckle_series"
      ],
      "title": "ThreadKnuckle",
      "type": "object"
    },
    "ThreadNPT": {
      "description": "American National Standard Pipe Thread standards,\noften called National Pipe Thread (NPT) standards.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "NPT",
          "default": "NPT",
          "title": "Thread Type",
          "type": "string"
        },
        "npt_size": {
          "description": "The nominal size of the NPT thread.",
          "title": "Npt Size",
          "type": "string"
        },
        "npt_series": {
          "description": "The series designation of the NPT thread.",
          "examples": [
            "NPT",
            "NPS"
          ],
          "title": "Npt Series",
          "type": "string"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "npt_size",
        "npt_series"
      ],
      "title": "ThreadNPT",
      "type": "object"
    },
    "ThreadSM": {
      "description": "Represents a screw machine (SM) thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "SM",
          "default": "SM",
          "title": "Thread Type",
          "type": "string"
        },
        "sm_size": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The size of the SM thread.",
          "title": "Sm Size"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "sm_size"
      ],
      "title": "ThreadSM",
      "type": "object"
    },
    "ThreadSpacing": {
      "description": "Represents the spacing of a thread, defining the distance between thread crests.",
      "properties": {
        "pitch_in_mm": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The pitch of the thread, defining the distance between thread crests.",
          "title": "Pitch In Mm"
        },
        "threads_per_inch": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads per inch (TPI) for imperial threads. Must be non-negative.",
          "examples": [
            "20"
          ],
          "title": "Threads Per Inch"
        }
      },
      "required": [
        "pitch_in_mm",
        "threads_per_inch"
      ],
      "title": "ThreadSpacing",
      "type": "object"
    },
    "ThreadUTS": {
      "description": "Represents a Unified Thread Standard (UTS) thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "UTS",
          "default": "UTS",
          "title": "Thread Type",
          "type": "string"
        },
        "uts_size": {
          "description": "The nominal size of the UTS thread.",
          "examples": [
            "1/4",
            "1/2"
          ],
          "title": "Uts Size",
          "type": "string"
        },
        "uts_series": {
          "description": "The series designation of the UTS thread.",
          "examples": [
            "UNC",
            "UNF"
          ],
          "title": "Uts Series",
          "type": "string"
        },
        "uts_tolerance_class": {
          "description": "The tolerance class for the UTS thread.",
          "examples": [
            "2A",
            "3B"
          ],
          "title": "Uts Tolerance Class",
          "type": "string"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "uts_size",
        "uts_series",
        "uts_tolerance_class"
      ],
      "title": "ThreadUTS",
      "type": "object"
    },
    "ThreadWhitworth": {
      "description": "Represents a Whitworth thread.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "anyOf": [
            {
              "minimum": 0.0,
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The number of threads or instances. Must be non-negative.",
          "examples": [
            "1"
          ],
          "title": "Quantity"
        },
        "diameter": {
          "$ref": "#/$defs/Size",
          "description": "The diameter of the thread, including nominal size and tolerances."
        },
        "spacing": {
          "anyOf": [
            {
              "$ref": "#/$defs/ThreadSpacing"
            },
            {
              "type": "null"
            }
          ],
          "description": "The spacing of the thread, defining the distance between thread crests."
        },
        "handedness": {
          "$ref": "#/$defs/ThreadHandedness",
          "description": "The direction of the thread, such as LEFT or RIGHT."
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Depth"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The length of the threaded feature, including nominal size and tolerances."
        },
        "thread_type": {
          "const": "WHITWORTH",
          "default": "WHITWORTH",
          "title": "Thread Type",
          "type": "string"
        },
        "whitworth_size": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The nominal size of the Whitworth thread.",
          "title": "Whitworth Size"
        },
        "whitworth_tolerance_class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The tolerance class for the Whitworth thread.",
          "title": "Whitworth Tolerance Class"
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "diameter",
        "spacing",
        "handedness",
        "whitworth_size"
      ],
      "title": "ThreadWhitworth",
      "type": "object"
    },
    "Tolerance": {
      "description": "Represents a tolerance specification for a part or feature.",
      "properties": {
        "tolerance_grade": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The grade of tolerance, such as 'IT7' for an 'H7' fit. Calcuated if not specified.",
          "examples": [
            "IT7"
          ],
          "title": "Tolerance Grade"
        },
        "deviation_lower": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower deviation limit in the specified unit. Use None if unspecified.",
          "examples": [
            "-0.05"
          ],
          "title": "Deviation Lower"
        },
        "deviation_upper": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper deviation limit in the specified unit. Use None if unspecified.",
          "examples": [
            "0.05"
          ],
          "title": "Deviation Upper"
        },
        "fit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fit specification, such as 'H7'. Optional if not applicable.",
          "examples": [
            "H7"
          ],
          "title": "Fit"
        },
        "is_theoretically_exact": {
          "default": false,
          "description": "Whether the tolerance is theoretically exact (e.g., basic dimensions).",
          "title": "Is Theoretically Exact",
          "type": "boolean"
        },
        "is_reference": {
          "default": false,
          "description": "Whether the tolerance serves as a reference dimension.",
          "title": "Is Reference",
          "type": "boolean"
        },
        "is_general_tolerance": {
          "default": false,
          "description": "Whether the general tolerance was applied to this dimension.",
          "title": "Is General Tolerance",
          "type": "boolean"
        },
        "is_approximation": {
          "default": false,
          "description": "Whether the tolerance is an approximation (e.g., 'approx. 5').",
          "title": "Is Approximation",
          "type": "boolean"
        }
      },
      "title": "Tolerance",
      "type": "object"
    },
    "Undercut": {
      "description": "Represents an undercut specified by a standard: a thread undercut (e.g.\n`DIN 76-B`) or a relief groove at a shoulder (e.g. `DIN 509-E0,8x0,3`).",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "label": {
          "description": "A short description of the feature in a human-readable format.",
          "title": "Label",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/Confidence"
            },
            {
              "type": "null"
            }
          ],
          "description": "Confidence in the feature extraction or interpretation."
        },
        "quantity": {
          "description": "The number of undercuts or instances. Must be at least 1.",
          "examples": [
            1
          ],
          "minimum": 1,
          "title": "Quantity",
          "type": "integer"
        },
        "undercut_type": {
          "$ref": "#/$defs/UndercutType",
          "description": "Whether this is a thread undercut or a relief groove.",
          "examples": [
            "RELIEF_GROOVE"
          ]
        },
        "standard": {
          "description": "The standard the undercut is specified by, as written on the drawing.",
          "examples": [
            "DIN 509"
          ],
          "title": "Standard",
          "type": "string"
        },
        "form": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The form defined by the standard (e.g. `B` for DIN 76, `E` for DIN 509), if stated.",
          "examples": [
            "E"
          ],
          "title": "Form"
        },
        "radius": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The radius of the groove, if stated (e.g. `0.8` in `E0,8x0,3`).",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "0.8"
            }
          ]
        },
        "depth": {
          "anyOf": [
            {
              "$ref": "#/$defs/Size"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The depth of the groove, if stated (e.g. `0.3` in `E0,8x0,3`).",
          "examples": [
            {
              "size_type": "LINEAR",
              "tolerance": null,
              "unit": "millimeter",
              "value": "0.3"
            }
          ]
        }
      },
      "required": [
        "reference_id",
        "label",
        "confidence",
        "quantity",
        "undercut_type",
        "standard"
      ],
      "title": "Undercut",
      "type": "object"
    },
    "UndercutType": {
      "description": "Kinds of undercut a drawing specifies by standard.\n\n- THREAD_UNDERCUT: the run-out groove at the end of a thread, e.g.\n  DIN 76 forms A to D. Its dimensions follow from the thread pitch.\n- RELIEF_GROOVE: the relief groove at a shoulder of a turned or ground\n  part, e.g. DIN 509 forms E, F, G and H, given as ``E 0.8x0.3``\n  (form, radius x depth).",
      "enum": [
        "THREAD_UNDERCUT",
        "RELIEF_GROOVE"
      ],
      "title": "UndercutType",
      "type": "string"
    },
    "UnitSystem": {
      "description": "Represents the unit system used in the technical drawing",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "unit_system_type": {
          "$ref": "#/$defs/UnitSystemType"
        }
      },
      "required": [
        "reference_id",
        "unit_system_type"
      ],
      "title": "UnitSystem",
      "type": "object"
    },
    "UnitSystemType": {
      "enum": [
        "METRIC",
        "IMPERIAL"
      ],
      "title": "UnitSystemType",
      "type": "string"
    },
    "VolumeEstimate": {
      "description": "Represents a volume estimate for a part or feature.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The value of the quantity.",
          "examples": [
            "10.5"
          ],
          "title": "Value"
        },
        "unit": {
          "description": "The unit of the quantity.",
          "examples": [
            "mm"
          ],
          "title": "Unit",
          "type": "string"
        },
        "volume_estimate_type": {
          "$ref": "#/$defs/VolumeEstimateType",
          "description": "The type of volume estimate, such as gross or net volume."
        }
      },
      "required": [
        "value",
        "unit",
        "volume_estimate_type"
      ],
      "title": "VolumeEstimate",
      "type": "object"
    },
    "VolumeEstimateType": {
      "enum": [
        "UPPER_BOUND_IGNORING_CAVITIES"
      ],
      "title": "VolumeEstimateType",
      "type": "string"
    },
    "W24AskType": {
      "description": "List of all Ask Type supported by the current\nAPI version. This list will grow with future releases.",
      "enum": [
        "CANVAS_THUMBNAIL",
        "NOTES",
        "PAGE_THUMBNAIL",
        "PART_FAMILY_CHARACTERIZATION",
        "PRODUCT_PMI_EXTRACT",
        "REVISION_TABLE",
        "SECTIONAL_THUMBNAIL",
        "SHEET_THUMBNAIL",
        "SHEET_ANONYMIZATION",
        "SHEET_REBRANDING",
        "TITLE_BLOCK",
        "TRAIN",
        "VARIANT_ANGLES",
        "VARIANT_CAD",
        "VARIANT_GDTS",
        "VARIANT_LEADERS",
        "VARIANT_MATERIAL",
        "VARIANT_MEASURES",
        "VARIANT_RADII",
        "VARIANT_ROUGHNESSES",
        "VARIANT_EXTERNAL_DIMENSIONS",
        "VARIANT_THREAD_ELEMENTS",
        "VARIANT_TOLERANCE_ELEMENTS",
        "VARIANT_PROCESSES",
        "INTERNAL_SCREENING",
        "DEBUG",
        "EXCEL_SUMMARY",
        "CANVAS_TABLES"
      ],
      "title": "W24AskType",
      "type": "string"
    },
    "Weight": {
      "description": "Represents a weight value with a unit.",
      "properties": {
        "reference_id": {
          "description": "Reference ID to identify the object.",
          "examples": [
            12345
          ],
          "title": "Reference Id",
          "type": "integer"
        },
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
              "type": "string"
            }
          ],
          "description": "The value of the quantity.",
          "examples": [
            "10.5"
          ],
          "title": "Value"
        },
        "unit": {
          "description": "The unit of the quantity.",
          "examples": [
            "mm"
          ],
          "title": "Unit",
          "type": "string"
        }
      },
      "required": [
        "reference_id",
        "value",
        "unit"
      ],
      "title": "Weight",
      "type": "object"
    }
  }
}