VCON - Voice Conversation format

Added on Nov. 26, 2025Managed by lisa

VCON - Voice Conversation format

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://ietf.org/vcon/schemas/unsigned-vcon.json",
  "title": "vCon - Unsigned Form",
  "description": "JSON schema for the unsigned form of vCon (Conversational Data Container) as defined in draft-ietf-vcon-vcon-core-01, sections 1-4",
  "type": "object",
  "required": ["uuid", "created_at", "parties"],
  "properties": {
    "vcon": {
      "type": "string",
      "description": "DEPRECATED: Syntactic version of the JSON format. For this document, must be '0.4.0'",
      "const": "0.4.0"
    },
    "uuid": {
      "type": "string",
      "description": "Globally unique identifier for the vCon. SHOULD be a version 8 UUID",
      "format": "uuid"
    },
    "extensions": {
      "type": "array",
      "description": "List of names of all vCon extensions for any parameters not defined in the core schema",
      "items": {
        "type": "string"
      }
    },
    "critical": {
      "type": "array",
      "description": "List of extension names that are incompatible with the core vCon schema and require explicit support",
      "items": {
        "type": "string"
      }
    },
    "created_at": {
      "type": "string",
      "description": "Creation time of this vCon in RFC3339 format",
      "format": "date-time"
    },
    "updated_at": {
      "type": "string",
      "description": "Last modified time of this vCon in RFC3339 format",
      "format": "date-time"
    },
    "subject": {
      "type": "string",
      "description": "Subject or topic of the conversation"
    },
    "redacted": {
      "type": "object",
      "description": "Reference to the unredacted or less redacted vCon instance version",
      "required": ["uuid", "type"],
      "properties": {
        "uuid": {
          "type": "string",
          "description": "UUID of the unredacted/prior vCon instance version",
          "format": "uuid"
        },
        "type": {
          "type": "string",
          "description": "Type of redaction performed"
        },
        "url": {
          "type": "string",
          "description": "HTTPS URL where the referenced vCon is stored",
          "format": "uri"
        },
        "content_hash": {
          "oneOf": [
            {"type": "string"},
            {"type": "array", "items": {"type": "string"}}
          ],
          "description": "Hash(es) of the external content using format: algorithm-base64url_encoded_hash"
        }
      }
    },
    "amended": {
      "type": "object",
      "description": "Reference to the prior vCon instance version that this vCon amends",
      "properties": {
        "uuid": {
          "type": "string",
          "description": "UUID of the prior vCon instance version",
          "format": "uuid"
        },
        "url": {
          "type": "string",
          "description": "HTTPS URL where the referenced vCon is stored",
          "format": "uri"
        },
        "content_hash": {
          "oneOf": [
            {"type": "string"},
            {"type": "array", "items": {"type": "string"}}
          ],
          "description": "Hash(es) of the external content (required if url is provided)"
        }
      }
    },
    "group": {
      "type": "array",
      "description": "Array of related vCons that aggregate into this conversation",
      "items": {
        "type": "object",
        "description": "Group Object - details not fully specified in sections 1-4"
      }
    },
    "parties": {
      "type": "array",
      "description": "Array of Party Objects representing all parties involved in the conversation",
      "items": {
        "$ref": "#/definitions/Party"
      }
    },
    "dialog": {
      "type": "array",
      "description": "Array of Dialog Objects containing the captured conversation content",
      "items": {
        "$ref": "#/definitions/Dialog"
      }
    },
    "analysis": {
      "type": "array",
      "description": "Array of Analysis Objects containing analysis performed on the conversational data",
      "items": {
        "$ref": "#/definitions/Analysis"
      }
    },
    "attachments": {
      "type": "array",
      "description": "Array of Attachment Objects for ancillary documents related to the conversation",
      "items": {
        "$ref": "#/definitions/Attachment"
      }
    }
  },
  "definitions": {
    "Party": {
      "type": "object",
      "description": "Represents a party involved in the conversation",
      "properties": {
        "tel": {
          "type": "string",
          "description": "TEL URL (RFC3966) for the party"
        },
        "sip": {
          "type": "string",
          "description": "SIP URL for the party"
        },
        "stir": {
          "type": "string",
          "description": "STIR PASSporT in JWS Compact Serialization form"
        },
        "mailto": {
          "type": "string",
          "description": "MAILTO URL (RFC6068) for the party",
          "format": "email"
        },
        "name": {
          "type": "string",
          "description": "Name of the party"
        },
        "did": {
          "type": "string",
          "description": "Decentralized Identifier (DID) URI for the party"
        },
        "validation": {
          "type": "string",
          "description": "Label or token identifying the method of identity validation used"
        },
        "gmlpos": {
          "type": "string",
          "description": "Geographic location in GML pos format (latitude longitude)"
        },
        "civicaddress": {
          "$ref": "#/definitions/Civicaddress"
        },
        "uuid": {
          "type": "string",
          "description": "Unique identifier for the participant",
          "format": "uuid"
        }
      }
    },
    "Civicaddress": {
      "type": "object",
      "description": "Civic address information for a party's location",
      "properties": {
        "country": {"type": "string"},
        "a1": {"type": "string", "description": "National subdivision (state/province)"},
        "a2": {"type": "string", "description": "County/parish/district"},
        "a3": {"type": "string", "description": "City/township"},
        "a4": {"type": "string", "description": "City division/borough"},
        "a5": {"type": "string", "description": "Neighborhood/block"},
        "a6": {"type": "string", "description": "Street"},
        "prd": {"type": "string", "description": "Leading street direction"},
        "pod": {"type": "string", "description": "Trailing street suffix"},
        "sts": {"type": "string", "description": "Street suffix"},
        "hno": {"type": "string", "description": "House number"},
        "hns": {"type": "string", "description": "House number suffix"},
        "lmk": {"type": "string", "description": "Landmark"},
        "loc": {"type": "string", "description": "Additional location info"},
        "flr": {"type": "string", "description": "Floor"},
        "nam": {"type": "string", "description": "Name/occupant"},
        "pc": {"type": "string", "description": "Postal code"}
      }
    },
    "Dialog": {
      "type": "object",
      "description": "Represents a segment of captured conversation",
      "required": ["type", "start"],
      "properties": {
        "type": {
          "type": "string",
          "enum": ["recording", "text", "transfer", "incomplete"],
          "description": "Type of dialog"
        },
        "start": {
          "type": "string",
          "format": "date-time",
          "description": "Start time of the dialog in RFC3339 format"
        },
        "duration": {
          "oneOf": [
            {"type": "integer", "minimum": 0},
            {"type": "number", "minimum": 0}
          ],
          "description": "Duration in seconds"
        },
        "parties": {
          "oneOf": [
            {"type": "integer", "minimum": 0},
            {"type": "array", "items": {"type": "integer", "minimum": 0}},
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {"type": "integer", "minimum": 0},
                  {"type": "array", "items": {"type": "integer", "minimum": 0}}
                ]
              }
            }
          ],
          "description": "Index/indices of parties in the parties array"
        },
        "originator": {
          "type": "integer",
          "minimum": 0,
          "description": "Index of the originating party if first party is not the originator"
        },
        "mediatype": {
          "type": "string",
          "description": "Media type of the dialog content"
        },
        "filename": {
          "type": "string",
          "description": "Original filename of the dialog content"
        },
        "body": {
          "type": "string",
          "description": "Inline content of the dialog (for inline files)"
        },
        "encoding": {
          "type": "string",
          "enum": ["base64url", "json", "none"],
          "description": "Encoding type for inline content"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "HTTPS URL for externally referenced content"
        },
        "content_hash": {
          "oneOf": [
            {"type": "string"},
            {"type": "array", "items": {"type": "string"}}
          ],
          "description": "Hash(es) of external content"
        },
        "disposition": {
          "type": "string",
          "enum": ["no-answer", "congestion", "failed", "busy", "hung-up", "voicemail-no-message"],
          "description": "Reason for incomplete dialog (required for incomplete type)"
        },
        "session_id": {
          "oneOf": [
            {"$ref": "#/definitions/SessionId"},
            {"type": "array", "items": {"$ref": "#/definitions/SessionId"}},
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {"$ref": "#/definitions/SessionId"},
                  {"type": "array", "items": {"$ref": "#/definitions/SessionId"}}
                ]
              }
            }
          ],
          "description": "Session ID(s) for the dialog"
        },
        "party_history": {
          "type": "array",
          "items": {"$ref": "#/definitions/PartyHistory"},
          "description": "History of party join/drop/hold/mute events"
        },
        "transferee": {
          "type": "integer",
          "minimum": 0,
          "description": "Party index of the transferee (for transfer type)"
        },
        "transferor": {
          "type": "integer",
          "minimum": 0,
          "description": "Party index of the transferor (for transfer type)"
        },
        "transfer_target": {
          "oneOf": [
            {"type": "integer", "minimum": 0},
            {"type": "array", "items": {"type": "integer", "minimum": 0}}
          ],
          "description": "Party index/indices of the transfer target (for transfer type)"
        },
        "original": {
          "oneOf": [
            {"type": "integer", "minimum": -1},
            {"type": "array", "items": {"type": "integer", "minimum": -1}}
          ],
          "description": "Dialog index/indices of original conversation (for transfer type)"
        },
        "consultation": {
          "oneOf": [
            {"type": "integer", "minimum": -1},
            {"type": "array", "items": {"type": "integer", "minimum": -1}}
          ],
          "description": "Dialog index/indices of consultation (for transfer type)"
        },
        "target_dialog": {
          "oneOf": [
            {"type": "integer", "minimum": -1},
            {"type": "array", "items": {"type": "integer", "minimum": -1}}
          ],
          "description": "Dialog index/indices of target dialog (for transfer type)"
        },
        "application": {
          "type": "string",
          "description": "Application, communication channel or context of the conversation"
        },
        "message_id": {
          "type": "string",
          "description": "Unique message identifier from the messaging system"
        }
      }
    },
    "SessionId": {
      "type": "object",
      "description": "Session identifier with local and remote UUIDs",
      "required": ["local", "remote"],
      "properties": {
        "local": {
          "type": "string",
          "description": "Local UUID for the session"
        },
        "remote": {
          "type": "string",
          "description": "Remote UUID for the session"
        }
      }
    },
    "PartyHistory": {
      "type": "object",
      "description": "Records party events during the dialog",
      "required": ["party", "time", "event"],
      "properties": {
        "party": {
          "type": "integer",
          "minimum": 0,
          "description": "Index of the party"
        },
        "time": {
          "type": "string",
          "format": "date-time",
          "description": "Time of the event in RFC3339 format"
        },
        "event": {
          "type": "string",
          "enum": ["join", "drop", "hold", "unhold", "mute", "unmute", "dtmfdown", "dtmfup"],
          "description": "Type of event"
        },
        "dtmf": {
          "type": "string",
          "description": "DTMF digit or character (required for dtmfdown/dtmfup events)"
        }
      }
    },
    "Attachment": {
      "type": "object",
      "description": "Represents an ancillary document related to the conversation",
      "required": ["start", "party", "dialog"],
      "properties": {
        "start": {
          "type": "string",
          "format": "date-time",
          "description": "Time the attachment was sent/exchanged in RFC3339 format"
        },
        "party": {
          "type": "integer",
          "minimum": 0,
          "description": "Index of the party that contributed the attachment"
        },
        "dialog": {
          "type": "integer",
          "minimum": 0,
          "description": "Index of the dialog this attachment is part of"
        },
        "mediatype": {
          "type": "string",
          "description": "Media type of the attachment"
        },
        "filename": {
          "type": "string",
          "description": "Original filename of the attachment"
        },
        "body": {
          "type": "string",
          "description": "Inline content of the attachment (for inline files)"
        },
        "encoding": {
          "type": "string",
          "enum": ["base64url", "json", "none"],
          "description": "Encoding type for inline content"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "HTTPS URL for externally referenced attachment"
        },
        "content_hash": {
          "oneOf": [
            {"type": "string"},
            {"type": "array", "items": {"type": "string"}}
          ],
          "description": "Hash(es) of external content"
        }
      }
    },
    "Analysis": {
      "type": "object",
      "description": "Represents analysis performed on the conversational data",
      "required": ["type", "vendor"],
      "properties": {
        "type": {
          "type": "string",
          "description": "Semantic type of analysis (e.g., transcript, translation, summary, sentiment)"
        },
        "dialog": {
          "oneOf": [
            {"type": "integer", "minimum": 0},
            {"type": "array", "items": {"type": "integer", "minimum": 0}}
          ],
          "description": "Index/indices of dialog objects this analysis is based on"
        },
        "mediatype": {
          "type": "string",
          "description": "Media type of the analysis file"
        },
        "filename": {
          "type": "string",
          "description": "Original filename of the analysis data"
        },
        "vendor": {
          "type": "string",
          "description": "Vendor or product name that generated the analysis"
        },
        "product": {
          "type": "string",
          "description": "Product name to differentiate from other vendor products"
        },
        "schema": {
          "type": "string",
          "description": "Token or label for the data format/schema of the analysis"
        },
        "body": {
          "type": "string",
          "description": "Inline content of the analysis (for inline files)"
        },
        "encoding": {
          "type": "string",
          "enum": ["base64url", "json", "none"],
          "description": "Encoding type for inline content"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "HTTPS URL for externally referenced analysis"
        },
        "content_hash": {
          "oneOf": [
            {"type": "string"},
            {"type": "array", "items": {"type": "string"}}
          ],
          "description": "Hash(es) of external content"
        }
      }
    }
  }
}


View source