{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/UIMessage",
  "definitions": {
    "UIMessage": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "A unique identifier for the message."
        },
        "role": {
          "type": "string",
          "enum": ["system", "user", "assistant"],
          "description": "The role of the message."
        },
        "metadata": {
          "description": "The metadata of the message."
        },
        "parts": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "text"
                  },
                  "text": {
                    "type": "string",
                    "description": "The text content."
                  },
                  "state": {
                    "type": "string",
                    "enum": ["streaming", "done"],
                    "description": "The state of the text part."
                  },
                  "providerMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "The provider metadata."
                  }
                },
                "required": ["type", "text"],
                "additionalProperties": false,
                "description": "A text part of a message."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "reasoning"
                  },
                  "text": {
                    "type": "string",
                    "description": "The reasoning text."
                  },
                  "state": {
                    "type": "string",
                    "enum": ["streaming", "done"],
                    "description": "The state of the reasoning part."
                  },
                  "providerMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "The provider metadata."
                  }
                },
                "required": ["type", "text"],
                "additionalProperties": false,
                "description": "A reasoning part of a message."
              },
              {
                "type": "object",
                "additionalProperties": false
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "input-streaming"
                  },
                  "input": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "input-available"
                  },
                  "input": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["input", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "approval-requested"
                  },
                  "input": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "approval": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      }
                    },
                    "required": ["id"],
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["approval", "input", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "approval-responded"
                  },
                  "input": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "approval": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "approved": {
                        "type": "boolean"
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": ["id", "approved"],
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["approval", "input", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "output-available"
                  },
                  "input": {},
                  "output": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "preliminary": {
                    "type": "boolean"
                  },
                  "approval": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "approved": {
                        "type": "boolean",
                        "const": true
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": ["id", "approved"],
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["input", "output", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "output-error"
                  },
                  "input": {},
                  "errorText": {
                    "type": "string"
                  },
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "approval": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "approved": {
                        "type": "boolean",
                        "const": true
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": ["id", "approved"],
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["errorText", "input", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "state": {
                    "type": "string",
                    "const": "output-denied"
                  },
                  "input": {},
                  "callProviderMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  },
                  "approval": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "approved": {
                        "type": "boolean",
                        "const": false
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": ["id", "approved"],
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "dynamic-tool"
                  },
                  "toolName": {
                    "type": "string",
                    "description": "Name of the tool that is being called."
                  },
                  "toolCallId": {
                    "type": "string",
                    "description": "ID of the tool call."
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerExecuted": {
                    "type": "boolean",
                    "description": "Whether the tool call was executed by the provider."
                  }
                },
                "required": ["approval", "input", "state", "toolCallId", "toolName", "type"]
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "source-url"
                  },
                  "sourceId": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "providerMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  }
                },
                "required": ["type", "sourceId", "url"],
                "additionalProperties": false,
                "description": "A source part of a message."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "source-document"
                  },
                  "sourceId": {
                    "type": "string"
                  },
                  "mediaType": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "providerMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "Additional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be fully encapsulated in the provider."
                  }
                },
                "required": ["type", "sourceId", "mediaType", "title"],
                "additionalProperties": false,
                "description": "A document source part of a message."
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "file"
                  },
                  "mediaType": {
                    "type": "string",
                    "description": "IANA media type of the file."
                  },
                  "filename": {
                    "type": "string",
                    "description": "Optional filename of the file."
                  },
                  "url": {
                    "type": "string",
                    "description": "The URL of the file. It can either be a URL to a hosted file or a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs)."
                  },
                  "providerMetadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "additionalProperties": {
                        "anyOf": [
                          {
                            "anyOf": [
                              {
                                "type": "null"
                              },
                              {
                                "type": "string"
                              },
                              {
                                "type": "number"
                              },
                              {
                                "type": "boolean"
                              },
                              {
                                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
                              },
                              {
                                "type": "array",
                                "items": {
                                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                                }
                              }
                            ],
                            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
                          },
                          {
                            "not": {}
                          }
                        ]
                      }
                    },
                    "description": "The provider metadata."
                  }
                },
                "required": ["type", "mediaType", "url"],
                "additionalProperties": false,
                "description": "A file part of a message."
              },
              {
                "type": "object",
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "step-start"
                  }
                },
                "required": ["type"],
                "additionalProperties": false,
                "description": "A step boundary part of a message."
              }
            ]
          },
          "description": "The parts of the message. Use this for rendering the message in the UI.\n\nSystem messages should be avoided (set the system prompt on the server instead). They can have text parts.\n\nUser messages can have text parts and file parts.\n\nAssistant messages can have text, reasoning, tool invocation, and file parts."
        }
      },
      "required": ["id", "role", "parts"],
      "additionalProperties": false,
      "description": "AI SDK UI Messages. They are used in the client and to communicate between the frontend and the API routes."
    },
    "alias-_index.d.ts-405-470-_index.d.ts-0-119070": {
      "type": "object",
      "additionalProperties": {
        "anyOf": [
          {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
                }
              }
            ],
            "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
          },
          {
            "not": {}
          }
        ]
      }
    },
    "alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725": {
      "anyOf": [
        {
          "type": "null"
        },
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/alias-_index.d.ts-405-470-_index.d.ts-0-119070"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/alias-_index.d.ts-156-405-_index.d.ts-0-119070133205725"
          }
        }
      ],
      "description": "A JSON value can be a string, number, boolean, object, array, or null. JSON values can be serialized and deserialized by the JSON.stringify and JSON.parse methods."
    }
  },
  "$id": "https://sandbox-agent/schemas/vercel-ai-sdk/ui-message.json",
  "title": "UIMessage",
  "description": "Vercel AI SDK v6.0.50 UIMessage"
}
