{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-graph/json-schema/microsoft-graph-microsoft-graph-teleconference-device-quality-schema.json",
  "title": "teleconferenceDeviceQuality",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/microsoft-graph-communications-call-api-openapi.yml#/components/schemas/microsoft.graph.teleconferenceDeviceQuality",
  "required": [
    "@odata.type"
  ],
  "type": "object",
  "properties": {
    "callChainId": {
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "type": "string",
      "description": "A unique identifier for all  the participant calls in a conference or a unique identifier for two participant calls in P2P call. This needs to be copied over from Microsoft.Graph.Call.CallChainId.",
      "format": "uuid"
    },
    "cloudServiceDeploymentEnvironment": {
      "type": [
        "string",
        "null"
      ],
      "description": "A geo-region where the service is deployed, such as ProdNoam."
    },
    "cloudServiceDeploymentId": {
      "type": [
        "string",
        "null"
      ],
      "description": "A unique deployment identifier assigned by Azure."
    },
    "cloudServiceInstanceName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Azure deployed cloud service instance name, such as FrontEndIN3."
    },
    "cloudServiceName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Azure deployed cloud service name, such as contoso.cloudapp.net."
    },
    "deviceDescription": {
      "type": "string",
      "description": "Any additional description, such as VTC Bldg 30/21."
    },
    "deviceName": {
      "type": "string",
      "description": "The user media agent name, such as Cisco SX80."
    },
    "mediaLegId": {
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "type": "string",
      "description": "A unique identifier for a specific media leg of a participant in a conference.  One participant can have multiple media leg identifiers if retargeting happens. CVI partner assigns this value.",
      "format": "uuid"
    },
    "mediaQualityList": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/microsoft.graph.teleconferenceDeviceMediaQuality"
      },
      "description": "The list of media qualities in a media session (call), such as audio quality, video quality, and/or screen sharing quality."
    },
    "participantId": {
      "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      "type": "string",
      "description": "A unique identifier for a specific participant in a conference. The CVI partner needs to copy over Call.MyParticipantId to this property.",
      "format": "uuid"
    },
    "@odata.type": {
      "type": "string"
    }
  },
  "$defs": {
    "ReferenceNumeric": {
      "enum": [
        "-INF",
        "INF",
        "NaN"
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "microsoft.graph.teleconferenceDeviceMediaQuality": {
      "title": "teleconferenceDeviceMediaQuality",
      "required": [
        "@odata.type"
      ],
      "type": "object",
      "properties": {
        "averageInboundJitter": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The average inbound stream network jitter.",
          "format": "duration"
        },
        "averageInboundPacketLossRateInPercentage": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The average inbound stream packet loss rate in percentage (0-100). For example, 0.01 means 0.01%."
        },
        "averageInboundRoundTripDelay": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The average inbound stream network round trip delay.",
          "format": "duration"
        },
        "averageOutboundJitter": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The average outbound stream network jitter.",
          "format": "duration"
        },
        "averageOutboundPacketLossRateInPercentage": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The average outbound stream packet loss rate in percentage (0-100). For example, 0.01 means 0.01%."
        },
        "averageOutboundRoundTripDelay": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The average outbound stream network round trip delay.",
          "format": "duration"
        },
        "channelIndex": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": "number",
          "description": "The channel index of media. Indexing begins with 1.  If a media session contains 3 video modalities, channel indexes will be 1, 2, and 3.",
          "format": "int32"
        },
        "inboundPackets": {
          "type": [
            "number",
            "null"
          ],
          "description": "The total number of the inbound packets.",
          "format": "int64"
        },
        "localIPAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "the local IP address for the media session."
        },
        "localPort": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": [
            "number",
            "null"
          ],
          "description": "The local media port.",
          "format": "int32"
        },
        "maximumInboundJitter": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The maximum inbound stream network jitter.",
          "format": "duration"
        },
        "maximumInboundPacketLossRateInPercentage": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The maximum inbound stream packet loss rate in percentage (0-100). For example, 0.01 means 0.01%."
        },
        "maximumInboundRoundTripDelay": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The maximum inbound stream network round trip delay.",
          "format": "duration"
        },
        "maximumOutboundJitter": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The maximum outbound stream network jitter.",
          "format": "duration"
        },
        "maximumOutboundPacketLossRateInPercentage": {
          "oneOf": [
            {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            },
            {
              "type": [
                "string",
                "null"
              ]
            },
            {
              "$ref": "#/$defs/ReferenceNumeric"
            }
          ],
          "description": "The maximum outbound stream packet loss rate in percentage (0-100). For example, 0.01 means 0.01%."
        },
        "maximumOutboundRoundTripDelay": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The maximum outbound stream network round trip delay.",
          "format": "duration"
        },
        "mediaDuration": {
          "pattern": "^-?P([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+([.][0-9]+)?S)?)?$",
          "type": [
            "string",
            "null"
          ],
          "description": "The total modality duration. If the media enabled and disabled multiple times, MediaDuration will the summation of all of the durations.",
          "format": "duration"
        },
        "networkLinkSpeedInBytes": {
          "type": [
            "number",
            "null"
          ],
          "description": "The network link speed in bytes",
          "format": "int64"
        },
        "outboundPackets": {
          "type": [
            "number",
            "null"
          ],
          "description": "The total number of the outbound packets.",
          "format": "int64"
        },
        "remoteIPAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "The remote IP address for the media session."
        },
        "remotePort": {
          "maximum": 2147483647,
          "minimum": -2147483648,
          "type": [
            "number",
            "null"
          ],
          "description": "The remote media port.",
          "format": "int32"
        },
        "@odata.type": {
          "type": "string"
        }
      }
    }
  }
}