{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/Artifact",
  "title": "Artifact",
  "type": "object",
  "properties": {
    "messages": {
      "type": "array",
      "description": "These are the messages that were spoken during the call.",
      "items": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/UserMessage",
            "title": "UserMessage"
          },
          {
            "$ref": "#/components/schemas/SystemMessage",
            "title": "SystemMessage"
          },
          {
            "$ref": "#/components/schemas/BotMessage",
            "title": "BotMessage"
          },
          {
            "$ref": "#/components/schemas/ToolCallMessage",
            "title": "ToolCallMessage"
          },
          {
            "$ref": "#/components/schemas/ToolCallResultMessage",
            "title": "ToolCallResultMessage"
          }
        ]
      }
    },
    "messagesOpenAIFormatted": {
      "description": "These are the messages that were spoken during the call, formatted for OpenAI.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OpenAIMessage"
      }
    },
    "recordingUrl": {
      "type": "string",
      "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
      "deprecated": true
    },
    "stereoRecordingUrl": {
      "type": "string",
      "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
      "deprecated": true
    },
    "videoRecordingUrl": {
      "type": "string",
      "description": "This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.",
      "deprecated": true
    },
    "videoRecordingStartDelaySeconds": {
      "type": "number",
      "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.",
      "deprecated": true
    },
    "recording": {
      "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
      "allOf": [
        {
          "$ref": "#/components/schemas/Recording"
        }
      ]
    },
    "transcript": {
      "type": "string",
      "description": "This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience."
    },
    "pcapUrl": {
      "type": "string",
      "description": "This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`."
    },
    "logUrl": {
      "type": "string",
      "description": "This is the url for the call logs. This includes all logging output during the call for debugging purposes."
    },
    "nodes": {
      "description": "This is the history of workflow nodes that were executed during the call.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/NodeArtifact"
      }
    },
    "assistantActivations": {
      "description": "Ordered list of assistants that were active during the call, including after transfers and handoffs.",
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/AssistantActivation"
      }
    },
    "variableValues": {
      "type": "object",
      "description": "These are the variable values at the end of the workflow execution."
    },
    "performanceMetrics": {
      "description": "This is the performance metrics for the call. It contains the turn latency, broken down by component.",
      "allOf": [
        {
          "$ref": "#/components/schemas/PerformanceMetrics"
        }
      ]
    },
    "structuredOutputs": {
      "type": "object",
      "description": "These are the structured outputs that will be extracted from the call.\nTo enable, set `assistant.artifactPlan.structuredOutputIds` with the IDs of the structured outputs you want to extract."
    },
    "scorecards": {
      "type": "object",
      "description": "These are the scorecards that have been evaluated based on the structured outputs extracted during the call.\nTo enable, set `assistant.artifactPlan.scorecardIds` or `assistant.artifactPlan.scorecards` with the IDs or objects of the scorecards you want to evaluate."
    },
    "transfers": {
      "description": "These are the transfer records from warm transfers, including destinations, transcripts, and status.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "structuredOutputsLastUpdatedAt": {
      "format": "date-time",
      "type": "string",
      "description": "This is when the structured outputs were last updated"
    }
  }
}