{
  "swagger": "2.0",
  "info": {
    "title": "gRPC for our DBaaS dataflow service",
    "description": "notably uses gRPC-Gateway with OpenAPI",
    "version": "0.1"
  },
  "tags": [
    {
      "name": "ChangefeedService"
    },
    {
      "name": "DPFeatureService"
    },
    {
      "name": "ChangefeedSpecService"
    },
    {
      "name": "OpsInternalService"
    },
    {
      "name": "SinkEndpointService"
    },
    {
      "name": "DataPipelineService"
    }
  ],
  "schemes": [
    "https"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/api/v1beta2/dataflow/ops/cluster/{cluster_id}:pauseChangefeeds": {
      "post": {
        "operationId": "NgPauseClusterChangefeeds",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/OpsInternalServicePauseClusterChangefeedsBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/cluster/{cluster_id}:resumeChangefeeds": {
      "post": {
        "operationId": "NgResumeClusterChangefeeds",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/OpsInternalServiceResumeClusterChangefeedsBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/cluster/{cluster_id}:updateTableFilters": {
      "post": {
        "operationId": "NgUpdateTableFilters",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/OpsInternalServiceUpdateTableFilterOfClusterChangefeedsBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/config/apply": {
      "post": {
        "operationId": "NgApplyConfigChanges",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiApplyConfigChangesResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiApplyConfigChangesReq"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalChangefeeds": {
      "get": {
        "operationId": "NgListInternalChangefeeds",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiListInternalChangefeedsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "tidb_cluster_id",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalChangefeeds/{changefeed_id}": {
      "get": {
        "operationId": "NgGetInternalChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiInternalChangefeed"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalChangefeeds/{changefeed_id}:pause": {
      "post": {
        "operationId": "NgOpsPauseChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiOpsInternalServicePauseChangefeedBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalChangefeeds/{changefeed_id}:restart": {
      "post": {
        "operationId": "NgRestartChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/OpsInternalServiceRestartChangefeedBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalChangefeeds/{changefeed_id}:resume": {
      "post": {
        "operationId": "NgOpsResumeChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiOpsInternalServiceResumeChangefeedBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalTiCDCClusters/{ticdc_cluster_id}": {
      "get": {
        "operationId": "NgGetInternalTiCDCCluster",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiInternalTiCDCCluster"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "ticdc_cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/internalTiCDCClusters/{ticdc_cluster_id}:restart": {
      "post": {
        "operationId": "NgRestartTiCDCCluster",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "ticdc_cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/OpsInternalServiceRestartTiCDCClusterBody"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/dataflow/ops/storage/apply": {
      "post": {
        "operationId": "NgUpdateTiCDCClusterStorage",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiUpdateTiCDCClusterStorageResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiUpdateTiCDCClusterStorageReq"
            }
          }
        ],
        "tags": [
          "OpsInternalService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/adminProfile": {
      "get": {
        "operationId": "NgGetAdminProfile",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiAdminProfile"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/calChangefeedFee": {
      "post": {
        "operationId": "NgCalChangefeedFee",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiCalChangefeedFeeResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceCalChangefeedFeeBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeedSpecifications": {
      "get": {
        "operationId": "ListChangefeedSpecsX",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeedSpecs"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_type",
            "description": " - TIDB: deprecated",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "TOTAL",
              "KAFKA",
              "TIDB",
              "MYSQL",
              "SERVERLESS_TIDB",
              "S3",
              "GCS",
              "PULSAR"
            ],
            "default": "TOTAL"
          }
        ],
        "tags": [
          "ChangefeedSpecService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds": {
      "get": {
        "operationId": "NgListChangefeeds",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeeds"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "changefeed_type",
            "description": " - TIDB: deprecated",
            "in": "query",
            "required": true,
            "type": "string",
            "enum": [
              "TOTAL",
              "KAFKA",
              "TIDB",
              "MYSQL",
              "SERVERLESS_TIDB",
              "S3",
              "GCS",
              "PULSAR"
            ],
            "default": "TOTAL"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      },
      "post": {
        "operationId": "NgCreateChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeedID"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceCreateChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/test": {
      "post": {
        "operationId": "NgTestChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceTestChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}": {
      "get": {
        "operationId": "NgGetChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeed"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      },
      "delete": {
        "operationId": "NgDeleteChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}/detail": {
      "get": {
        "summary": "For E2E tests",
        "operationId": "NgGetChangefeedDetail",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}/ticdc_cluster": {
      "get": {
        "summary": "For E2E tests",
        "operationId": "NgGetTiCDCCluster",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}:edit": {
      "post": {
        "operationId": "NgEditChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceEditChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}:pause": {
      "post": {
        "operationId": "NgPauseChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeedServicePauseChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}:resume": {
      "post": {
        "operationId": "NgResumeChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/consoleapiChangefeedServiceResumeChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/changefeeds/{changefeed_id}:scale": {
      "post": {
        "operationId": "NgScaleChangefeed",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "changefeed_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceScaleChangefeedBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines": {
      "get": {
        "summary": "ListDataPipelines returns the same complete resource model as\nGetDataPipeline so the Console does not need one request per list item.",
        "operationId": "NgListDataPipelines",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiListDataPipelinesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "page",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "status",
            "description": " - DATA_PIPELINE_STATUS_EDITING: Edit applies the new desired configuration to the stopped children before\nreturning to PAUSED, so it is a transitional status like PAUSING/RESUMING.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "DATA_PIPELINE_STATUS_UNSPECIFIED",
              "DATA_PIPELINE_STATUS_CREATING",
              "DATA_PIPELINE_STATUS_RUNNING",
              "DATA_PIPELINE_STATUS_PAUSING",
              "DATA_PIPELINE_STATUS_PAUSED",
              "DATA_PIPELINE_STATUS_RESUMING",
              "DATA_PIPELINE_STATUS_DELETING",
              "DATA_PIPELINE_STATUS_FAILED",
              "DATA_PIPELINE_STATUS_COMPLETED",
              "DATA_PIPELINE_STATUS_EDITING"
            ],
            "default": "DATA_PIPELINE_STATUS_UNSPECIFIED"
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      },
      "post": {
        "operationId": "NgCreateDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiDataPipelineID"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceCreateDataPipelineBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines/{pipeline_id}": {
      "get": {
        "operationId": "NgGetDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiDataPipeline"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      },
      "delete": {
        "operationId": "NgDeleteDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines/{pipeline_id}:edit": {
      "post": {
        "summary": "EditDataPipeline fully replaces all editable fields. The Pipeline must be\npaused before this call, and ResumeDataPipeline applies the new desired\nconfiguration to the stopped child resources.",
        "operationId": "NgEditDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceEditDataPipelineBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines/{pipeline_id}:pause": {
      "post": {
        "operationId": "NgPauseDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServicePauseDataPipelineBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines/{pipeline_id}:resume": {
      "post": {
        "operationId": "NgResumeDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceResumeDataPipelineBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines/{pipeline_id}:scale": {
      "post": {
        "summary": "ScaleDataPipeline changes the TiCDC capacity of a running Pipeline. It is\nseparate from Edit because resizing reconciles shared TiCDC cluster\nresources asynchronously and is only valid while the Pipeline is running.",
        "operationId": "NgScaleDataPipeline",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "pipeline_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceScaleDataPipelineBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines:stagingTrust": {
      "get": {
        "summary": "GetDataPipelineStagingTrust returns everything a customer must put in the\ntrust policy of the IAM role they intend to use for role-ARN staging\naccess, in one answer.",
        "description": "Three principals assume that role, from two different systems: the\nsnapshot and incremental producers share one, and the destination uses a\nsecond to validate the connection and a third to load the data. Trusting\nonly some of them yields a configuration that passes validation and then\nfails partway through delivery, which is why they are reported together\nrather than discovered one failure at a time.",
        "operationId": "NgGetDataPipelineStagingTrust",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiDataPipelineStagingTrust"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "lake_org_id",
            "description": "Required: the roles a customer must trust are the ones belonging to the\nLake this Pipeline will use, and a TiDB organization may own several.",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines:validateDestination": {
      "post": {
        "summary": "ValidateDataPipelineDestination verifies that the requested destination is\nsupported and its configuration is acceptable before a Pipeline is created.",
        "operationId": "NgValidateDataPipelineDestination",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceValidateDataPipelineDestinationBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines:validateSourceConnection": {
      "post": {
        "summary": "ValidateDataPipelineSourceConnection verifies that the supplied TiDB\naccount can connect to the source cluster. Credentials are never returned.",
        "operationId": "NgValidateDataPipelineSourceConnection",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceValidateDataPipelineSourceConnectionBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/data-pipelines:validateStaging": {
      "post": {
        "summary": "ValidateDataPipelineStaging verifies that the staging bucket can be read\nand written with the supplied credentials. Secrets are never returned.",
        "operationId": "NgValidateDataPipelineStaging",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataPipelineServiceValidateDataPipelineStagingBody"
            }
          }
        ],
        "tags": [
          "DataPipelineService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/describeSchemaTable": {
      "post": {
        "operationId": "NgDescribeSchemaTable",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiDescribeSchemaTableResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ChangefeedServiceDescribeSchemaTableBody"
            }
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/enabledDPFeatures": {
      "get": {
        "operationId": "NgGetEnabledDPFeaturesForCluster",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiEnabledDPFeaturesForClusterResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "DPFeatureService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints": {
      "get": {
        "operationId": "NgListSinkEndpoints",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiListSinkEndpointsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "SINK_ENDPOINT_STATUS_UNSPECIFIED",
              "SINK_ENDPOINT_STATUS_CREATING",
              "SINK_ENDPOINT_STATUS_PENDING_ACCEPTANCE",
              "SINK_ENDPOINT_STATUS_AVAILABLE",
              "SINK_ENDPOINT_STATUS_FAILED"
            ],
            "default": "SINK_ENDPOINT_STATUS_UNSPECIFIED"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      },
      "post": {
        "operationId": "NgCreateSinkEndpoint",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiSinkEndpoint"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SinkEndpointServiceCreateSinkEndpointBody"
            }
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/authInfo": {
      "get": {
        "operationId": "NgGetSinkEndpointAuthInfo",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiGetSinkEndpointAuthInfoResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/availabilityZones": {
      "get": {
        "operationId": "NgListSinkAvailabilityZones",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiListSinkAvailabilityZonesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/endpointServiceAvailabilityZones": {
      "get": {
        "operationId": "NgDescribeEndpointServiceAvailabilityZones",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiDescribeEndpointServiceAvailabilityZonesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "endpoint_service_name",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "service_region",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/generateAdvertisedListener": {
      "post": {
        "operationId": "NgGenerateSinkAdvertisedListener",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiGenerateSinkAdvertisedListenerResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SinkEndpointServiceGenerateSinkAdvertisedListenerBody"
            }
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/validateAdvertisedListenerDomain": {
      "post": {
        "operationId": "NgValidateSinkAdvertisedListenerDomain",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiValidateSinkAdvertisedListenerDomainResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SinkEndpointServiceValidateSinkAdvertisedListenerDomainBody"
            }
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/sinkEndpoints/{sink_endpoint_id}": {
      "get": {
        "operationId": "NgGetSinkEndpoint",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/consoleapiSinkEndpoint"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "sink_endpoint_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      },
      "delete": {
        "operationId": "NgDeleteSinkEndpoint",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object",
              "properties": {}
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "sink_endpoint_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "SinkEndpointService"
        ]
      }
    },
    "/api/v1beta2/tidbs/{cluster_id}/ticdc_clusters": {
      "get": {
        "operationId": "NgListTiCDCClusters",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "cluster_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": [
          "ChangefeedService"
        ]
      }
    }
  },
  "definitions": {
    "ChangefeedServiceCalChangefeedFeeBody": {
      "type": "object",
      "properties": {
        "duration": {
          "type": "string",
          "format": "int64"
        },
        "changefeed_spec": {
          "type": "string"
        }
      }
    },
    "ChangefeedServiceCreateChangefeedBody": {
      "type": "object",
      "properties": {
        "changefeed_type": {
          "$ref": "#/definitions/consoleapiChangefeedType"
        },
        "kafka_info": {
          "$ref": "#/definitions/consoleapiKafkaInfo"
        },
        "mysql_info": {
          "$ref": "#/definitions/consoleapiMySQLInfo"
        },
        "s3_info": {
          "$ref": "#/definitions/consoleapiS3Info"
        },
        "gcs_info": {
          "$ref": "#/definitions/consoleapiGcsInfo"
        },
        "serverless_tidb_info": {
          "$ref": "#/definitions/consoleapiServerlessTidbInfo"
        },
        "pulsar_info": {
          "$ref": "#/definitions/consoleapiPulsarInfo"
        },
        "changefeed_spec": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "internal": {
          "type": "boolean"
        },
        "network_info": {
          "$ref": "#/definitions/consoleapiNetworkInfo"
        },
        "dry_run": {
          "type": "boolean"
        }
      },
      "required": [
        "changefeed_type"
      ]
    },
    "ChangefeedServiceDescribeSchemaTableBody": {
      "type": "object",
      "properties": {
        "filter_rule": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "case_sensitive": {
          "type": "boolean"
        }
      }
    },
    "ChangefeedServiceEditChangefeedBody": {
      "type": "object",
      "properties": {
        "changefeed_type": {
          "$ref": "#/definitions/consoleapiChangefeedType"
        },
        "kafka_info": {
          "$ref": "#/definitions/consoleapiKafkaInfo"
        },
        "mysql_info": {
          "$ref": "#/definitions/consoleapiMySQLInfo"
        },
        "serverless_tidb_info": {
          "$ref": "#/definitions/consoleapiServerlessTidbInfo"
        },
        "s3_info": {
          "$ref": "#/definitions/consoleapiS3Info"
        },
        "gcs_info": {
          "$ref": "#/definitions/consoleapiGcsInfo"
        },
        "pulsar_info": {
          "$ref": "#/definitions/consoleapiPulsarInfo"
        },
        "name": {
          "type": "string"
        },
        "dry_run": {
          "type": "boolean"
        }
      },
      "required": [
        "changefeed_type"
      ]
    },
    "ChangefeedServiceScaleChangefeedBody": {
      "type": "object",
      "properties": {
        "changefeed_spec": {
          "type": "string"
        }
      },
      "required": [
        "changefeed_spec"
      ]
    },
    "ChangefeedServiceTestChangefeedBody": {
      "type": "object",
      "properties": {
        "changefeed_type": {
          "$ref": "#/definitions/consoleapiChangefeedType"
        },
        "kafka_info": {
          "$ref": "#/definitions/consoleapiKafkaInfo"
        },
        "mysql_info": {
          "$ref": "#/definitions/consoleapiMySQLInfo"
        },
        "s3_info": {
          "$ref": "#/definitions/consoleapiS3Info"
        },
        "gcs_info": {
          "$ref": "#/definitions/consoleapiGcsInfo"
        },
        "serverless_tidb_info": {
          "$ref": "#/definitions/consoleapiServerlessTidbInfo"
        },
        "pulsar_info": {
          "$ref": "#/definitions/consoleapiPulsarInfo"
        },
        "changefeed_spec": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "internal": {
          "type": "boolean"
        },
        "network_info": {
          "$ref": "#/definitions/consoleapiNetworkInfo"
        },
        "dry_run": {
          "type": "boolean"
        }
      },
      "required": [
        "changefeed_type"
      ]
    },
    "DataPipelineServiceCreateDataPipelineBody": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "source": {
          "$ref": "#/definitions/consoleapiDataPipelineSourceInput"
        },
        "destination": {
          "$ref": "#/definitions/consoleapiDataPipelineDestination"
        },
        "staging": {
          "$ref": "#/definitions/consoleapiDataPipelineStagingInput"
        },
        "sync_mode": {
          "$ref": "#/definitions/consoleapiDataPipelineSyncMode"
        },
        "changefeed_specification": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "source",
        "destination",
        "staging",
        "sync_mode"
      ]
    },
    "DataPipelineServiceEditDataPipelineBody": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "source": {
          "$ref": "#/definitions/consoleapiDataPipelineTableSelection"
        },
        "destination": {
          "$ref": "#/definitions/consoleapiDataPipelineEditableDestination"
        },
        "staging": {
          "$ref": "#/definitions/consoleapiDataPipelineEditableStaging",
          "description": "Only the notification half of the staging area is editable. Changing the\nbucket, the prefix or the credentials would move where data lands and\norphan everything already staged, which is a new Pipeline rather than an\nedit; attaching or detaching a queue only changes how the destination\nlearns that objects arrived.\n\nAbsent means no queue, like every other field in this full-replacement\npayload - omitting it detaches a queue that was configured before."
        }
      },
      "required": [
        "name",
        "source",
        "destination"
      ]
    },
    "DataPipelineServicePauseDataPipelineBody": {
      "type": "object"
    },
    "DataPipelineServiceResumeDataPipelineBody": {
      "type": "object"
    },
    "DataPipelineServiceScaleDataPipelineBody": {
      "type": "object",
      "properties": {
        "changefeed_specification": {
          "type": "string"
        }
      },
      "required": [
        "changefeed_specification"
      ]
    },
    "DataPipelineServiceValidateDataPipelineDestinationBody": {
      "type": "object",
      "properties": {
        "destination": {
          "$ref": "#/definitions/consoleapiDataPipelineDestination"
        },
        "sync_mode": {
          "$ref": "#/definitions/consoleapiDataPipelineSyncMode"
        }
      },
      "required": [
        "destination",
        "sync_mode"
      ]
    },
    "DataPipelineServiceValidateDataPipelineSourceConnectionBody": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      },
      "required": [
        "username",
        "password"
      ]
    },
    "DataPipelineServiceValidateDataPipelineStagingBody": {
      "type": "object",
      "properties": {
        "lake_org_id": {
          "type": "string",
          "description": "Required because validating the staging area asks the destination to reach\nit, and reaching it means acting inside one particular Lake."
        },
        "staging": {
          "$ref": "#/definitions/consoleapiDataPipelineStagingInput"
        }
      },
      "required": [
        "lake_org_id",
        "staging"
      ]
    },
    "OpsInternalServicePauseClusterChangefeedsBody": {
      "type": "object"
    },
    "OpsInternalServiceRestartChangefeedBody": {
      "type": "object"
    },
    "OpsInternalServiceRestartTiCDCClusterBody": {
      "type": "object"
    },
    "OpsInternalServiceResumeClusterChangefeedsBody": {
      "type": "object"
    },
    "OpsInternalServiceUpdateTableFilterOfClusterChangefeedsBody": {
      "type": "object",
      "properties": {
        "updates": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiTableFilterUpdate"
          }
        }
      }
    },
    "SinkAdvertisedListenerDomainType": {
      "type": "string",
      "enum": [
        "DOMAIN_TYPE_UNSPECIFIED",
        "GENERATED",
        "CUSTOM"
      ],
      "default": "DOMAIN_TYPE_UNSPECIFIED"
    },
    "SinkAdvertisedListenerRecord": {
      "type": "object",
      "properties": {
        "zone": {
          "type": "string"
        },
        "subdomain_name": {
          "type": "string"
        }
      }
    },
    "SinkEndpointServiceCreateSinkEndpointBody": {
      "type": "object",
      "properties": {
        "sink_endpoint": {
          "$ref": "#/definitions/consoleapiSinkEndpoint"
        }
      },
      "required": [
        "sink_endpoint"
      ]
    },
    "SinkEndpointServiceGenerateSinkAdvertisedListenerBody": {
      "type": "object",
      "properties": {
        "zones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "endpoint_service_name": {
          "type": "string"
        },
        "downstream_id": {
          "type": "string"
        }
      },
      "required": [
        "endpoint_service_name",
        "downstream_id"
      ]
    },
    "SinkEndpointServiceValidateSinkAdvertisedListenerDomainBody": {
      "type": "object",
      "properties": {
        "endpoint_service_name": {
          "type": "string"
        },
        "root_domain_name": {
          "type": "string"
        },
        "zones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "endpoint_service_name",
        "root_domain_name"
      ]
    },
    "consoleapiAdminProfile": {
      "type": "object",
      "properties": {
        "provider": {
          "type": "string"
        },
        "cloud_account_id": {
          "type": "string"
        },
        "aws_external_id": {
          "type": "string"
        }
      },
      "required": [
        "provider",
        "cloud_account_id",
        "aws_external_id"
      ]
    },
    "consoleapiApplyConfigChangesReq": {
      "type": "object",
      "properties": {
        "cluster_type": {
          "$ref": "#/definitions/consoleapiConfigClusterType"
        },
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "configuration_file": {
          "$ref": "#/definitions/consoleapiConfigFileType"
        },
        "custom_params": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/consoleapiParamItem"
          }
        },
        "template_id": {
          "type": "string",
          "format": "uint64"
        },
        "version": {
          "type": "string"
        },
        "custom_image_tag": {
          "type": "string"
        }
      }
    },
    "consoleapiApplyConfigChangesResp": {
      "type": "object"
    },
    "consoleapiAuthentication": {
      "type": "object",
      "properties": {
        "auth_type": {
          "$ref": "#/definitions/consoleapiKafkaAuthType"
        },
        "userName": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "consoleapiBigintUnsignedHandlingMode": {
      "type": "string",
      "enum": [
        "BIGINT_UNSIGNED_HANDLING_MODE_LONG",
        "BIGINT_UNSIGNED_HANDLING_MODE_STRING"
      ],
      "default": "BIGINT_UNSIGNED_HANDLING_MODE_LONG"
    },
    "consoleapiBinaryEncodingMethod": {
      "type": "string",
      "enum": [
        "BASE64",
        "HEX"
      ],
      "default": "BASE64"
    },
    "consoleapiBroker": {
      "type": "object",
      "properties": {
        "kafka_version": {
          "$ref": "#/definitions/consoleapiKafkaVersion"
        },
        "broker_endpoints": {
          "type": "string"
        },
        "tls_enable": {
          "type": "boolean"
        },
        "compression": {
          "$ref": "#/definitions/consoleapiCompressionType"
        },
        "insecure_skip_verify": {
          "type": "boolean"
        },
        "kafka_client_id": {
          "type": "string",
          "description": "Optional Kafka client ID. When left empty it is not passed to the TiCDC\nkernel and the kernel keeps its own default. When set, it is forwarded to\nthe kernel via the sink URI `kafka-client-id` parameter."
        }
      }
    },
    "consoleapiCalChangefeedFeeResp": {
      "type": "object",
      "properties": {
        "raw_fee": {
          "type": "number",
          "format": "double"
        },
        "fee": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "consoleapiChangefeed": {
      "type": "object",
      "properties": {
        "changefeed_id": {
          "type": "string",
          "format": "uint64"
        },
        "changefeed_type": {
          "$ref": "#/definitions/consoleapiChangefeedType"
        },
        "status": {
          "$ref": "#/definitions/consoleapiChangefeedStatus"
        },
        "checkpoint_tso": {
          "type": "string",
          "format": "uint64"
        },
        "checkpoint_utc": {
          "type": "string",
          "format": "date-time"
        },
        "error": {
          "type": "string"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "request": {
          "$ref": "#/definitions/consoleapiChangefeedCreateReq"
        },
        "changefeed_spec": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "changefeed_id",
        "changefeed_type",
        "status"
      ]
    },
    "consoleapiChangefeedCreateReq": {
      "type": "object",
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "changefeed_type": {
          "$ref": "#/definitions/consoleapiChangefeedType"
        },
        "kafka_info": {
          "$ref": "#/definitions/consoleapiKafkaInfo"
        },
        "mysql_info": {
          "$ref": "#/definitions/consoleapiMySQLInfo"
        },
        "s3_info": {
          "$ref": "#/definitions/consoleapiS3Info"
        },
        "gcs_info": {
          "$ref": "#/definitions/consoleapiGcsInfo"
        },
        "serverless_tidb_info": {
          "$ref": "#/definitions/consoleapiServerlessTidbInfo"
        },
        "pulsar_info": {
          "$ref": "#/definitions/consoleapiPulsarInfo"
        },
        "changefeed_spec": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "internal": {
          "type": "boolean"
        },
        "network_info": {
          "$ref": "#/definitions/consoleapiNetworkInfo"
        },
        "dry_run": {
          "type": "boolean"
        }
      },
      "required": [
        "cluster_id",
        "changefeed_type"
      ]
    },
    "consoleapiChangefeedID": {
      "type": "object",
      "properties": {
        "changefeed_id": {
          "type": "string",
          "format": "uint64"
        },
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        }
      },
      "required": [
        "changefeed_id",
        "cluster_id"
      ]
    },
    "consoleapiChangefeedServicePauseChangefeedBody": {
      "type": "object"
    },
    "consoleapiChangefeedServiceResumeChangefeedBody": {
      "type": "object"
    },
    "consoleapiChangefeedSpec": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "rcu_num": {
          "type": "integer",
          "format": "int64"
        },
        "rps_limit": {
          "type": "integer",
          "format": "int64"
        }
      }
    },
    "consoleapiChangefeedSpecs": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiChangefeedSpec"
          }
        },
        "total": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "items",
        "total"
      ]
    },
    "consoleapiChangefeedStatus": {
      "type": "string",
      "enum": [
        "RUNNING",
        "FAILED",
        "ERROR",
        "CREATING",
        "RESUMING",
        "PAUSING",
        "PAUSED",
        "DELETING",
        "DELETED",
        "EDITING",
        "WARNING",
        "SCALING"
      ],
      "default": "RUNNING"
    },
    "consoleapiChangefeedType": {
      "type": "string",
      "enum": [
        "TOTAL",
        "KAFKA",
        "TIDB",
        "MYSQL",
        "SERVERLESS_TIDB",
        "S3",
        "GCS",
        "PULSAR"
      ],
      "default": "TOTAL",
      "title": "- TIDB: deprecated"
    },
    "consoleapiChangefeeds": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiChangefeed"
          }
        },
        "total": {
          "type": "integer",
          "format": "int64"
        }
      },
      "required": [
        "items",
        "total"
      ]
    },
    "consoleapiColumnSelector": {
      "type": "object",
      "properties": {
        "matcher": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "columns": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "consoleapiCompressionType": {
      "type": "string",
      "enum": [
        "NONE",
        "GZIP",
        "SNAPPY",
        "LZ4",
        "ZSTD"
      ],
      "default": "NONE"
    },
    "consoleapiConfigClusterType": {
      "type": "string",
      "enum": [
        "CONFIG_CLUSTER_TYPE_UNSPECIFIED",
        "TICDC_CLUSTER",
        "CHANGEFEED_CLUSTER"
      ],
      "default": "CONFIG_CLUSTER_TYPE_UNSPECIFIED"
    },
    "consoleapiConfigFileType": {
      "type": "string",
      "enum": [
        "CONFIG_FILE_TYPE_UNSPECIFIED",
        "TICDC_FILE",
        "CHANGEFEED_FILE",
        "SINK_URI"
      ],
      "default": "CONFIG_FILE_TYPE_UNSPECIFIED"
    },
    "consoleapiConnection": {
      "type": "object",
      "properties": {
        "endpoint": {
          "type": "string"
        },
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "consoleapiDataFormat": {
      "type": "object",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/consoleapiProtocol"
        },
        "enable_tidb_extension": {
          "type": "boolean"
        },
        "decimal_handling_mode": {
          "$ref": "#/definitions/consoleapiDecimalHandlingMode"
        },
        "bigint_unsigned_handling_mode": {
          "$ref": "#/definitions/consoleapiBigintUnsignedHandlingMode"
        },
        "schema_registry": {
          "$ref": "#/definitions/consoleapiSchemaRegistry"
        },
        "debezium_config": {
          "$ref": "#/definitions/consoleapiDebeziumConfig"
        },
        "output_raw_change_event": {
          "type": "boolean"
        }
      }
    },
    "consoleapiDataPipeline": {
      "type": "object",
      "properties": {
        "pipeline_id": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "cluster_id": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "name": {
          "type": "string",
          "readOnly": true
        },
        "source": {
          "$ref": "#/definitions/consoleapiDataPipelineSource",
          "readOnly": true
        },
        "destination": {
          "$ref": "#/definitions/consoleapiDataPipelineDestination",
          "readOnly": true
        },
        "staging": {
          "$ref": "#/definitions/consoleapiDataPipelineStaging",
          "readOnly": true
        },
        "sync_mode": {
          "$ref": "#/definitions/consoleapiDataPipelineSyncMode",
          "readOnly": true
        },
        "changefeed_specification": {
          "type": "string",
          "description": "Top-level because it controls the TiCDC capacity allocated to this\nPipeline. It is changed by ScaleDataPipeline, not by Edit.",
          "readOnly": true
        },
        "status": {
          "$ref": "#/definitions/consoleapiDataPipelineStatus",
          "readOnly": true
        },
        "execution_plan": {
          "$ref": "#/definitions/consoleapiDataPipelineExecutionPlan",
          "readOnly": true
        },
        "delivery_interval_plan": {
          "$ref": "#/definitions/consoleapiDataPipelineDeliveryIntervalPlan",
          "readOnly": true
        },
        "child_resources": {
          "$ref": "#/definitions/consoleapiDataPipelineChildResources",
          "readOnly": true
        },
        "observation": {
          "$ref": "#/definitions/consoleapiDataPipelineObservation",
          "readOnly": true
        },
        "error": {
          "$ref": "#/definitions/consoleapiDataPipelineError",
          "readOnly": true
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "phase": {
          "$ref": "#/definitions/consoleapiDataPipelinePhase",
          "readOnly": true
        },
        "creator_id": {
          "type": "string",
          "format": "uint64",
          "description": "Who created the Pipeline. The id is the stable identity; the email is what\na Console shows, and is the address the row was created under rather than\nthe account's current one - it is captured at create time because the\naccount service can resolve a user by token but not by id.\n\nA Pipeline created before these were recorded reports an empty email.",
          "readOnly": true
        },
        "creator": {
          "type": "string",
          "readOnly": true
        }
      },
      "description": "DataPipeline is the complete Console read model returned by both Get and\nList. It contains no source password or S3 secret access key."
    },
    "consoleapiDataPipelineChangefeedResource": {
      "type": "object",
      "properties": {
        "changefeed_id": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "status": {
          "type": "string",
          "readOnly": true
        },
        "error_message": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineChildResources": {
      "type": "object",
      "properties": {
        "export": {
          "$ref": "#/definitions/consoleapiDataPipelineExportResource",
          "readOnly": true
        },
        "changefeed": {
          "$ref": "#/definitions/consoleapiDataPipelineChangefeedResource",
          "readOnly": true
        },
        "lake": {
          "$ref": "#/definitions/consoleapiDataPipelineLakeResources",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineDeliveryIntervalPlan": {
      "type": "object",
      "properties": {
        "end_to_end_seconds": {
          "type": "integer",
          "format": "int64",
          "readOnly": true
        },
        "producer_flush_interval_seconds": {
          "type": "integer",
          "format": "int64",
          "readOnly": true
        },
        "consumer_poll_interval_seconds": {
          "type": "integer",
          "format": "int64",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineDestination": {
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/definitions/consoleapiDataPipelineDestinationType"
        },
        "lake_org_id": {
          "type": "string",
          "description": "Which Lake the warehouse below belongs to. A TiDB organization may own\nseveral Lakes, so the warehouse name alone does not say where data lands -\ntwo Lakes can each hold a warehouse of the same name. The destination is\ntherefore the pair, and this is the half the destination system uses to\nscope every call it makes on the Pipeline's behalf.\n\nThis is the Lake's own numeric identifier rather than its slug; the Console\nresolves it when the user picks a Lake. It is not editable: moving a\nPipeline to a different Lake would leave its datasource, its task and\neverything already loaded behind, which is a new Pipeline rather than an\nedit."
        },
        "warehouse": {
          "type": "string",
          "description": "A TiDB Lake warehouse name is its unique ID and is passed through as-is."
        },
        "target_naming": {
          "$ref": "#/definitions/consoleapiDataPipelineTargetNaming"
        },
        "flush_interval_seconds": {
          "type": "integer",
          "format": "int64",
          "description": "End-to-end delivery budget. The service derives TiCDC flush and destination\npoll intervals from this value. It must be zero for FULL mode and positive\nfor FULL_AND_INCREMENTAL mode; the controller enforces that cross-field\nrule using destination capabilities."
        }
      },
      "required": [
        "type",
        "lake_org_id",
        "warehouse",
        "target_naming"
      ]
    },
    "consoleapiDataPipelineDestinationType": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_DESTINATION_TYPE_UNSPECIFIED",
        "DATA_PIPELINE_DESTINATION_TYPE_TIDB_LAKE"
      ],
      "default": "DATA_PIPELINE_DESTINATION_TYPE_UNSPECIFIED"
    },
    "consoleapiDataPipelineEditableDestination": {
      "type": "object",
      "properties": {
        "warehouse": {
          "type": "string"
        },
        "target_naming": {
          "$ref": "#/definitions/consoleapiDataPipelineTargetNaming"
        },
        "flush_interval_seconds": {
          "type": "integer",
          "format": "int64"
        }
      },
      "description": "DataPipelineEditableDestination intentionally omits destination type. Edit is\na full replacement of these editable fields and cannot change sync mode,\nstaging, snapshot TSO, or the selected engines and formats.",
      "required": [
        "warehouse",
        "target_naming"
      ]
    },
    "consoleapiDataPipelineEditableStaging": {
      "type": "object",
      "properties": {
        "sqs_queue_url": {
          "type": "string"
        },
        "sqs_region": {
          "type": "string"
        }
      },
      "description": "DataPipelineEditableStaging is the part of the staging area that can change\nwithout the staged data losing its meaning."
    },
    "consoleapiDataPipelineError": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "readOnly": true
        },
        "message": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineExecutionPlan": {
      "type": "object",
      "properties": {
        "snapshot_engine": {
          "$ref": "#/definitions/consoleapiDataPipelineSnapshotEngine",
          "readOnly": true
        },
        "snapshot_format": {
          "$ref": "#/definitions/consoleapiDataPipelineSnapshotFormat",
          "readOnly": true
        },
        "incremental_engine": {
          "$ref": "#/definitions/consoleapiDataPipelineIncrementalEngine",
          "readOnly": true
        },
        "incremental_format": {
          "$ref": "#/definitions/consoleapiDataPipelineIncrementalFormat",
          "readOnly": true
        },
        "snapshot_tso": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        }
      },
      "description": "DataPipelineExecutionPlan is selected by the service on Create and is\nimmutable for the lifetime of the Pipeline. Users cannot select these fields."
    },
    "consoleapiDataPipelineExportResource": {
      "type": "object",
      "properties": {
        "export_id": {
          "type": "string",
          "readOnly": true
        },
        "status": {
          "type": "string",
          "readOnly": true
        },
        "error_message": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineID": {
      "type": "object",
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "pipeline_id": {
          "type": "string",
          "format": "uint64"
        }
      },
      "required": [
        "cluster_id",
        "pipeline_id"
      ]
    },
    "consoleapiDataPipelineIncrementalEngine": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_INCREMENTAL_ENGINE_UNSPECIFIED",
        "DATA_PIPELINE_INCREMENTAL_ENGINE_TICDC"
      ],
      "default": "DATA_PIPELINE_INCREMENTAL_ENGINE_UNSPECIFIED"
    },
    "consoleapiDataPipelineIncrementalFormat": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_INCREMENTAL_FORMAT_UNSPECIFIED",
        "DATA_PIPELINE_INCREMENTAL_FORMAT_CANAL_JSON"
      ],
      "default": "DATA_PIPELINE_INCREMENTAL_FORMAT_UNSPECIFIED"
    },
    "consoleapiDataPipelineLakeResources": {
      "type": "object",
      "properties": {
        "datasource_status": {
          "type": "string",
          "readOnly": true
        },
        "integration_status": {
          "type": "string",
          "readOnly": true
        },
        "error_message": {
          "type": "string",
          "readOnly": true
        },
        "datasource_name": {
          "type": "string",
          "readOnly": true
        },
        "integration_name": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineObservation": {
      "type": "object",
      "properties": {
        "changefeed_checkpoint_tso": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "changefeed_checkpoint_time": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "lake_resolved_tso": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "lake_resolved_time": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "latency_seconds": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "observed_at": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "stale": {
          "type": "boolean",
          "readOnly": true
        },
        "observation_error": {
          "type": "string",
          "readOnly": true
        },
        "rows_synced": {
          "type": "string",
          "format": "uint64",
          "description": "What the destination reported for its latest incremental run. These\ndescribe that one run rather than the Pipeline's lifetime: they can drop\nwhen a new run starts, so they are not a running total and should not be\ncharted as one.\n\nOnly the CDC run reports them, so a snapshot-only Pipeline leaves every one\nat zero for its whole life.\n\nThey count what the run has handled, not what it covers. A healthy\nincremental Pipeline whose tables have simply had no writes reports zero\nfor all of them, tables_active included, so none of these can be read as\n\"nothing is selected\" - source.matched_table_count is what answers that.",
          "readOnly": true
        },
        "insert_count": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "update_count": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "delete_count": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "tables_active": {
          "type": "integer",
          "format": "int32",
          "readOnly": true
        },
        "tables_error": {
          "type": "integer",
          "format": "int32",
          "description": "tables_error is the only signal that a Pipeline is healthy overall while\nsome of its tables are not arriving. It does not stop the Pipeline and does\nnot appear in status, so a caller that ignores it shows a partial failure\nas success.",
          "readOnly": true
        },
        "databases_active": {
          "type": "integer",
          "format": "int32",
          "readOnly": true
        }
      },
      "description": "DataPipelineObservation is the last observation collected by the dedicated\nData Pipeline worker. A stale observation preserves the last-good progress\nvalues and reports the polling error separately."
    },
    "consoleapiDataPipelinePhase": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_PHASE_UNSPECIFIED",
        "DATA_PIPELINE_PHASE_PREPARING",
        "DATA_PIPELINE_PHASE_SNAPSHOTTING",
        "DATA_PIPELINE_PHASE_CREATING_DESTINATION",
        "DATA_PIPELINE_PHASE_INITIAL_LOADING",
        "DATA_PIPELINE_PHASE_STREAMING",
        "DATA_PIPELINE_PHASE_PAUSING",
        "DATA_PIPELINE_PHASE_PAUSED",
        "DATA_PIPELINE_PHASE_EDITING",
        "DATA_PIPELINE_PHASE_RESUMING",
        "DATA_PIPELINE_PHASE_CLEANING_UP",
        "DATA_PIPELINE_PHASE_COMPLETE",
        "DATA_PIPELINE_PHASE_ERROR"
      ],
      "default": "DATA_PIPELINE_PHASE_UNSPECIFIED",
      "description": "DataPipelinePhase is a derived, UI-facing view of where a Pipeline is. It is\nnever persisted: the durable record is the internal orchestration stage, and\nexposing that would leak action names the Console must not depend on.\n\n - DATA_PIPELINE_PHASE_PREPARING: Export and Changefeed are being created; no data is moving yet.\n - DATA_PIPELINE_PHASE_SNAPSHOTTING: The full snapshot is running.\n - DATA_PIPELINE_PHASE_CREATING_DESTINATION: The destination integration is being created and started.\n - DATA_PIPELINE_PHASE_INITIAL_LOADING: The destination is loading the snapshot it has not finished consuming.\n - DATA_PIPELINE_PHASE_STREAMING: Snapshot delivered; incremental changes are flowing.\n - DATA_PIPELINE_PHASE_COMPLETE: Terminal success for a full-only Pipeline."
    },
    "consoleapiDataPipelineS3AuthType": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_S3_AUTH_TYPE_UNSPECIFIED",
        "DATA_PIPELINE_S3_AUTH_TYPE_ACCESS_KEY",
        "DATA_PIPELINE_S3_AUTH_TYPE_ROLE_ARN"
      ],
      "default": "DATA_PIPELINE_S3_AUTH_TYPE_UNSPECIFIED",
      "description": "DataPipelineS3AuthType selects how the staging bucket is reached. Both modes\nare carried through to all three children - Export, TiCDC and the\ndestination - so the choice is made once, here."
    },
    "consoleapiDataPipelineS3Provider": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_S3_PROVIDER_UNSPECIFIED",
        "DATA_PIPELINE_S3_PROVIDER_AWS",
        "DATA_PIPELINE_S3_PROVIDER_ALIBABA_OSS"
      ],
      "default": "DATA_PIPELINE_S3_PROVIDER_UNSPECIFIED",
      "description": "DataPipelineS3Provider selects the object-storage provider behind the\nstaging area. The two are reached differently: Alibaba OSS is addressed by an\noss:// URI, requires a custom endpoint, and makes the changefeed skip the\nAWS-only bucket-region probe that fails against OSS.\n\n - DATA_PIPELINE_S3_PROVIDER_UNSPECIFIED: Unspecified reads as AWS, so a request written before OSS support keeps\nits meaning."
    },
    "consoleapiDataPipelineS3Staging": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string",
          "readOnly": true
        },
        "region": {
          "type": "string",
          "readOnly": true
        },
        "access_key_id": {
          "type": "string",
          "readOnly": true
        },
        "endpoint": {
          "type": "string",
          "readOnly": true
        },
        "snapshot_uri": {
          "type": "string",
          "readOnly": true
        },
        "incremental_uri": {
          "type": "string",
          "readOnly": true
        },
        "auth_type": {
          "$ref": "#/definitions/consoleapiDataPipelineS3AuthType",
          "readOnly": true
        },
        "role_arn": {
          "type": "string",
          "readOnly": true
        },
        "sqs_queue_url": {
          "type": "string",
          "description": "Empty when the destination polls the staging prefix instead of being\nnotified. Reported so a reader can tell which of the two a pipeline is\ndoing without inferring it from the delivery interval.",
          "readOnly": true
        },
        "sqs_region": {
          "type": "string",
          "readOnly": true
        },
        "provider": {
          "$ref": "#/definitions/consoleapiDataPipelineS3Provider",
          "readOnly": true
        }
      },
      "description": "DataPipelineS3Staging contains credential metadata and resolved per-Pipeline\npaths, but never contains the secret access key."
    },
    "consoleapiDataPipelineS3StagingInput": {
      "type": "object",
      "properties": {
        "uri": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "access_key_id": {
          "type": "string",
          "description": "Required for ACCESS_KEY, and must be empty for ROLE_ARN. The pair is\nvalidated together with auth_type, which single-field rules cannot express."
        },
        "secret_access_key": {
          "type": "string"
        },
        "endpoint": {
          "type": "string",
          "description": "Optional custom S3-compatible endpoint. P0 Lake capability checks may\nreject endpoints that the destination cannot consume."
        },
        "auth_type": {
          "$ref": "#/definitions/consoleapiDataPipelineS3AuthType"
        },
        "role_arn": {
          "type": "string",
          "description": "Required for ROLE_ARN, and must be empty for ACCESS_KEY. The external ID is\nnot accepted here: the destination derives it from the organization, and\nthe trust policy is expected to match that."
        },
        "sqs_queue_url": {
          "type": "string",
          "description": "A queue receiving this bucket's S3 event notifications. Optional, and it\nchanges how quickly rows arrive rather than whether they do: without it the\ndestination discovers new objects by listing the staging prefix on a timer,\nso half the delivery budget is spent waiting for the next poll.\n\nThe queue is the customer's, like the bucket. Neither the queue nor the\nbucket notification can be created from here - the staging area lives in\ntheir account - so this field accepts one they have already set up, and\n:stagingTrust reports what it must permit.\n\nStandard and FIFO queues are both accepted. Only the URL shape is checked\nhere, because it is the one thing that can be wrong without any external\ncall; whether the queue exists and can be consumed is answered by the\ndestination probing it during staging validation. Deliberately not\nrestricted to FIFO: S3 event notifications cannot target a FIFO queue at\nall, so a FIFO-only rule would reject the only configuration a customer\ncan wire directly."
        },
        "sqs_region": {
          "type": "string",
          "description": "Defaults to the bucket's region when empty."
        },
        "provider": {
          "$ref": "#/definitions/consoleapiDataPipelineS3Provider",
          "description": "The object-storage provider. Optional, and unspecified means AWS S3, so a\nrequest that omits it behaves exactly as before this field existed.\n\nALIBABA_OSS must be paired with an oss:// uri and a non-empty endpoint, and\ncannot be combined with a queue: the destination has no notification\nsupport for OSS yet, so an OSS staging area is always polled. A role ARN\nis rejected too, because Export does not support one for OSS.\n\nThe endpoint governs the incremental half and the destination. The\nsnapshot does not read it: the regional service derives the public\nendpoint from the bucket's own region, so a private or VPC endpoint does\nnot apply there."
        }
      },
      "description": "DataPipelineS3StagingInput is accepted only by create and validation APIs.\nThe secret access key is input-only and never appears in the read model.",
      "required": [
        "uri",
        "region",
        "auth_type"
      ]
    },
    "consoleapiDataPipelineSnapshotEngine": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_SNAPSHOT_ENGINE_UNSPECIFIED",
        "DATA_PIPELINE_SNAPSHOT_ENGINE_DUMPLING",
        "DATA_PIPELINE_SNAPSHOT_ENGINE_BR"
      ],
      "default": "DATA_PIPELINE_SNAPSHOT_ENGINE_UNSPECIFIED"
    },
    "consoleapiDataPipelineSnapshotFormat": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_SNAPSHOT_FORMAT_UNSPECIFIED",
        "DATA_PIPELINE_SNAPSHOT_FORMAT_CSV"
      ],
      "default": "DATA_PIPELINE_SNAPSHOT_FORMAT_UNSPECIFIED"
    },
    "consoleapiDataPipelineSource": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string",
          "readOnly": true
        },
        "table_filter": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "readOnly": true
        },
        "case_sensitive": {
          "type": "boolean",
          "readOnly": true
        },
        "matched_table_count": {
          "type": "integer",
          "format": "int32",
          "description": "How many tables table_filter selected when it was last resolved, at create\nor edit. A filter matching nothing is accepted, so zero here is the signal\nthat a Pipeline was set up over an empty selection - which is legitimate\nfor an incremental Pipeline whose tables arrive later, and almost always a\nmistake for a snapshot-only one.\n\nAbsent, rather than zero, on Pipelines created before this was recorded:\nzero is a real answer and must stay distinguishable from \"not recorded\".",
          "readOnly": true
        }
      },
      "description": "DataPipelineSource is safe to return to the Console. It contains the source\naccount name but never contains the source password."
    },
    "consoleapiDataPipelineSourceInput": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "table_filter": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Each filter is fully qualified and filters may select tables from multiple\ndatabases in the same source TiDB cluster."
        },
        "case_sensitive": {
          "type": "boolean"
        }
      },
      "description": "DataPipelineSourceInput is accepted only by CreateDataPipeline. Its password\nis input-only and is deliberately absent from DataPipelineSource, the public\nGet/List read model.",
      "required": [
        "username",
        "password",
        "table_filter"
      ]
    },
    "consoleapiDataPipelineStaging": {
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/definitions/consoleapiDataPipelineStagingType",
          "readOnly": true
        },
        "s3": {
          "$ref": "#/definitions/consoleapiDataPipelineS3Staging",
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineStagingInput": {
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/definitions/consoleapiDataPipelineStagingType"
        },
        "s3": {
          "$ref": "#/definitions/consoleapiDataPipelineS3StagingInput"
        }
      },
      "required": [
        "type"
      ]
    },
    "consoleapiDataPipelineStagingTrust": {
      "type": "object",
      "properties": {
        "principals": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiDataPipelineStagingTrustPrincipal"
          },
          "readOnly": true
        },
        "bucket_actions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "What the principals above must be allowed to do on the bucket, and on the\nSQS queue if one is used. Reported for the same reason the principals are:\na policy that trusts the right roles but grants the wrong actions passes\nvalidation and then fails partway through delivery, and finding that out\none denial at a time is what this endpoint exists to avoid.\n\nThe queue actions apply only to a pipeline configured with sqs_queue_url;\nthey are reported unconditionally because the customer sets the policy up\nbefore creating the pipeline, when there is nothing to condition on yet.",
          "readOnly": true
        },
        "queue_actions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "readOnly": true
        }
      }
    },
    "consoleapiDataPipelineStagingTrustPrincipal": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Which system assumes the role, for display next to the ARN.",
          "readOnly": true
        },
        "role_arn": {
          "type": "string",
          "readOnly": true
        },
        "external_id": {
          "type": "string",
          "description": "The external ID this principal presents. It may differ between\nprincipals, so it is reported per principal rather than once.",
          "readOnly": true
        }
      },
      "description": "DataPipelineStagingTrustPrincipal is one identity that assumes the\ncustomer's staging role."
    },
    "consoleapiDataPipelineStagingType": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_STAGING_TYPE_UNSPECIFIED",
        "DATA_PIPELINE_STAGING_TYPE_CUSTOMER_MANAGED_S3",
        "DATA_PIPELINE_STAGING_TYPE_TIDB_MANAGED"
      ],
      "default": "DATA_PIPELINE_STAGING_TYPE_UNSPECIFIED",
      "description": " - DATA_PIPELINE_STAGING_TYPE_TIDB_MANAGED: Reserved for a future managed-staging adapter. P0 rejects this value with\nUNSUPPORTED_STAGING_TYPE before making an external request."
    },
    "consoleapiDataPipelineStatus": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_STATUS_UNSPECIFIED",
        "DATA_PIPELINE_STATUS_CREATING",
        "DATA_PIPELINE_STATUS_RUNNING",
        "DATA_PIPELINE_STATUS_PAUSING",
        "DATA_PIPELINE_STATUS_PAUSED",
        "DATA_PIPELINE_STATUS_RESUMING",
        "DATA_PIPELINE_STATUS_DELETING",
        "DATA_PIPELINE_STATUS_FAILED",
        "DATA_PIPELINE_STATUS_COMPLETED",
        "DATA_PIPELINE_STATUS_EDITING"
      ],
      "default": "DATA_PIPELINE_STATUS_UNSPECIFIED",
      "description": " - DATA_PIPELINE_STATUS_EDITING: Edit applies the new desired configuration to the stopped children before\nreturning to PAUSED, so it is a transitional status like PAUSING/RESUMING."
    },
    "consoleapiDataPipelineSyncMode": {
      "type": "string",
      "enum": [
        "DATA_PIPELINE_SYNC_MODE_UNSPECIFIED",
        "DATA_PIPELINE_SYNC_MODE_FULL",
        "DATA_PIPELINE_SYNC_MODE_FULL_AND_INCREMENTAL"
      ],
      "default": "DATA_PIPELINE_SYNC_MODE_UNSPECIFIED"
    },
    "consoleapiDataPipelineTableSelection": {
      "type": "object",
      "properties": {
        "table_filter": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "case_sensitive": {
          "type": "boolean"
        }
      },
      "required": [
        "table_filter"
      ]
    },
    "consoleapiDataPipelineTargetNaming": {
      "type": "object",
      "properties": {
        "database_prefix": {
          "type": "string"
        },
        "database_suffix": {
          "type": "string"
        },
        "table_prefix": {
          "type": "string"
        },
        "table_suffix": {
          "type": "string"
        }
      },
      "description": "DataPipelineTargetNaming is forwarded to the destination unchanged; the\ndestination owns the naming semantics."
    },
    "consoleapiDebeziumConfig": {
      "type": "object",
      "properties": {
        "output_old_value": {
          "type": "boolean"
        },
        "disable_schema": {
          "type": "boolean"
        }
      }
    },
    "consoleapiDecimalHandlingMode": {
      "type": "string",
      "enum": [
        "DECIMAL_HANDLING_MODE_PRECISE",
        "DECIMAL_HANDLING_MODE_STRING"
      ],
      "default": "DECIMAL_HANDLING_MODE_PRECISE"
    },
    "consoleapiDescribeEndpointServiceAvailabilityZonesResponse": {
      "type": "object",
      "properties": {
        "zones": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiEndpointServiceAvailabilityZone"
          }
        }
      }
    },
    "consoleapiDescribeSchemaTableResp": {
      "type": "object",
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "replicate_allow_schema_table": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "replicate_deny_schema_table": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "gc_safe_point": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "cluster_id"
      ]
    },
    "consoleapiDispatchType": {
      "type": "string",
      "enum": [
        "DISPATCH_TYPE_ONE_TOPIC",
        "DISPATCH_TYPE_BY_TABLE",
        "DISPATCH_TYPE_BY_DATABASE"
      ],
      "default": "DISPATCH_TYPE_ONE_TOPIC"
    },
    "consoleapiEnabledDPFeaturesForClusterResp": {
      "type": "object",
      "properties": {
        "features": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "features"
      ]
    },
    "consoleapiEndpointServiceAvailabilityZone": {
      "type": "object",
      "properties": {
        "availability_zone": {
          "type": "string",
          "readOnly": true
        },
        "availability_zone_id": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiEventFilterRule": {
      "type": "object",
      "properties": {
        "matcher": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignore_event": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignore_sql": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ignore_insert_value_expr": {
          "type": "string"
        },
        "ignore_update_new_value_expr": {
          "type": "string"
        },
        "ignore_update_old_value_expr": {
          "type": "string"
        },
        "ignore_delete_value_expr": {
          "type": "string"
        }
      }
    },
    "consoleapiGcsEndpoint": {
      "type": "object",
      "properties": {
        "gcsUri": {
          "type": "string"
        }
      }
    },
    "consoleapiGcsInfo": {
      "type": "object",
      "properties": {
        "endpoint": {
          "$ref": "#/definitions/consoleapiGcsEndpoint"
        },
        "data_format": {
          "$ref": "#/definitions/consoleapiS3Dataformat"
        },
        "table_config": {
          "$ref": "#/definitions/consoleapiTableConfig"
        },
        "start_position": {
          "$ref": "#/definitions/consoleapiStartPosition"
        },
        "storage_flush_config": {
          "$ref": "#/definitions/consoleapiStorageFlushConfig"
        }
      }
    },
    "consoleapiGenerateSinkAdvertisedListenerResponse": {
      "type": "object",
      "properties": {
        "advertised_listener": {
          "$ref": "#/definitions/consoleapiSinkAdvertisedListener"
        }
      }
    },
    "consoleapiGetSinkEndpointAuthInfoResponse": {
      "type": "object",
      "properties": {
        "cloud_account_id": {
          "type": "string"
        },
        "aws_principal_id": {
          "type": "string"
        }
      }
    },
    "consoleapiInternalChangefeed": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uint64"
        },
        "display_id": {
          "type": "string",
          "format": "uint64"
        },
        "display_name": {
          "type": "string"
        },
        "downstream_type": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "ticdc_cluster": {
          "$ref": "#/definitions/consoleapiInternalTiCDCCluster"
        }
      }
    },
    "consoleapiInternalTiCDCCluster": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uint64"
        },
        "name": {
          "type": "string"
        },
        "shared_pool_id": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "provider_type": {
          "type": "string"
        },
        "specification_code": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "org_id": {
          "type": "string",
          "format": "uint64"
        }
      }
    },
    "consoleapiKafkaAuthType": {
      "type": "string",
      "enum": [
        "DISABLE",
        "SASL_PLAIN",
        "SASL_SCRAM_SHA_256",
        "SASL_SCRAM_SHA_512"
      ],
      "default": "DISABLE"
    },
    "consoleapiKafkaInfo": {
      "type": "object",
      "properties": {
        "broker": {
          "$ref": "#/definitions/consoleapiBroker"
        },
        "authentication": {
          "$ref": "#/definitions/consoleapiAuthentication"
        },
        "data_format": {
          "$ref": "#/definitions/consoleapiDataFormat"
        },
        "topic_partition_config": {
          "$ref": "#/definitions/consoleapiTopicPartitionConfig"
        },
        "table_config": {
          "$ref": "#/definitions/consoleapiTableConfig"
        },
        "start_position": {
          "$ref": "#/definitions/consoleapiStartPosition"
        },
        "column_selectors": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiColumnSelector"
          }
        }
      }
    },
    "consoleapiKafkaVersion": {
      "type": "string",
      "enum": [
        "KAFKA_VERSION_0XX",
        "KAFKA_VERSION_1XX",
        "KAFKA_VERSION_2XX",
        "KAFKA_VERSION_3XX"
      ],
      "default": "KAFKA_VERSION_0XX"
    },
    "consoleapiListDataPipelinesResponse": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiDataPipeline"
          },
          "readOnly": true
        },
        "total": {
          "type": "integer",
          "format": "int64",
          "readOnly": true
        }
      }
    },
    "consoleapiListInternalChangefeedsResponse": {
      "type": "object",
      "properties": {
        "changefeeds": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiInternalChangefeed"
          }
        }
      }
    },
    "consoleapiListSinkAvailabilityZonesResponse": {
      "type": "object",
      "properties": {
        "availability_zones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "consoleapiListSinkEndpointsResponse": {
      "type": "object",
      "properties": {
        "sink_endpoints": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiSinkEndpoint"
          }
        }
      }
    },
    "consoleapiMskAuthType": {
      "type": "string",
      "enum": [
        "MSK_AUTH_TYPE_UNSPECIFIED",
        "SASL_SCRAM",
        "SASL_IAM"
      ],
      "default": "MSK_AUTH_TYPE_UNSPECIFIED"
    },
    "consoleapiMySQLInfo": {
      "type": "object",
      "properties": {
        "connection": {
          "$ref": "#/definitions/consoleapiConnection"
        },
        "table_config": {
          "$ref": "#/definitions/consoleapiTableConfig"
        },
        "start_position": {
          "$ref": "#/definitions/consoleapiStartPosition"
        },
        "privatelink_info": {
          "$ref": "#/definitions/consoleapiPrivatelinkInfo"
        }
      }
    },
    "consoleapiNetworkInfo": {
      "type": "object",
      "properties": {
        "network_type": {
          "$ref": "#/definitions/consoleapiNetworkType"
        },
        "sink_endpoint_id": {
          "type": "string",
          "format": "uint64"
        },
        "ports": {
          "type": "array",
          "items": {
            "type": "integer",
            "format": "int64"
          }
        }
      }
    },
    "consoleapiNetworkType": {
      "type": "string",
      "enum": [
        "NetworkType_Public",
        "NetworkType_VPC_Peering",
        "NetworkType_Private_Link"
      ],
      "default": "NetworkType_Public"
    },
    "consoleapiOpsInternalServicePauseChangefeedBody": {
      "type": "object"
    },
    "consoleapiOpsInternalServiceResumeChangefeedBody": {
      "type": "object"
    },
    "consoleapiParamItem": {
      "type": "object",
      "properties": {
        "value": {},
        "comment": {
          "type": "string"
        }
      }
    },
    "consoleapiPartitionDispatcher": {
      "type": "string",
      "enum": [
        "TABLE",
        "INDEX_VALUE",
        "TS",
        "COLUMNS"
      ],
      "default": "TABLE"
    },
    "consoleapiPartitionDispatcherConfig": {
      "type": "object",
      "properties": {
        "partition_type": {
          "$ref": "#/definitions/consoleapiPartitionDispatcher"
        },
        "matcher": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "index_name": {
          "type": "string"
        },
        "columns": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "consoleapiPrivatelinkInfo": {
      "type": "object",
      "properties": {
        "df_privatelink_endpoint_id": {
          "type": "string",
          "format": "uint64"
        },
        "endpoint_name": {
          "type": "string",
          "readOnly": true
        },
        "endpoint_address": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "consoleapiProtocol": {
      "type": "string",
      "enum": [
        "CANAL_JSON",
        "OPEN_PROTOCOL",
        "AVRO",
        "DEBEZIUM",
        "DEBEZIUM_AVRO"
      ],
      "default": "CANAL_JSON"
    },
    "consoleapiPulsarAdvancedSetting": {
      "type": "object",
      "properties": {
        "batching_max_messages": {
          "type": "integer",
          "format": "int64"
        },
        "batching_max_publish_delay": {
          "type": "integer",
          "format": "int64"
        },
        "connection_timeout": {
          "type": "integer",
          "format": "int64"
        },
        "operation_timeout": {
          "type": "integer",
          "format": "int64"
        },
        "send_timeout": {
          "type": "integer",
          "format": "int64"
        }
      }
    },
    "consoleapiPulsarAuthType": {
      "type": "string",
      "enum": [
        "PULSAR_AUTH_TYPE_BASIC",
        "PULSAR_AUTH_TYPE_TOKEN"
      ],
      "default": "PULSAR_AUTH_TYPE_BASIC"
    },
    "consoleapiPulsarAuthentication": {
      "type": "object",
      "properties": {
        "auth_type": {
          "$ref": "#/definitions/consoleapiPulsarAuthType"
        },
        "user_name": {
          "type": "string",
          "title": "PULSAR_AUTH_TYPE_BASIC"
        },
        "password": {
          "type": "string"
        },
        "token": {
          "type": "string",
          "title": "PULSAR_AUTH_TYPE_TOKEN"
        }
      }
    },
    "consoleapiPulsarCompressionType": {
      "type": "string",
      "enum": [
        "PULSAR_COMPRESSION_NONE",
        "PULSAR_COMPRESSION_LZ4",
        "PULSAR_COMPRESSION_ZLIB",
        "PULSAR_COMPRESSION_ZSTD"
      ],
      "default": "PULSAR_COMPRESSION_NONE"
    },
    "consoleapiPulsarDataFormat": {
      "type": "object",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/consoleapiProtocol",
          "title": "only support CANAL_JSON"
        },
        "enable_tidb_extension": {
          "type": "boolean"
        }
      }
    },
    "consoleapiPulsarDestinationProtocol": {
      "type": "string",
      "enum": [
        "PULSAR_PROTOCOL_PULSAR",
        "PULSAR_PROTOCOL_PULSAR_SSL",
        "PULSAR_PROTOCOL_HTTP",
        "PULSAR_PROTOCOL_HTTPS"
      ],
      "default": "PULSAR_PROTOCOL_PULSAR"
    },
    "consoleapiPulsarInfo": {
      "type": "object",
      "properties": {
        "destination_protocol": {
          "$ref": "#/definitions/consoleapiPulsarDestinationProtocol"
        },
        "endpoint": {
          "type": "string"
        },
        "authentication": {
          "$ref": "#/definitions/consoleapiPulsarAuthentication"
        },
        "compression_type": {
          "$ref": "#/definitions/consoleapiPulsarCompressionType"
        },
        "table_config": {
          "$ref": "#/definitions/consoleapiTableConfig"
        },
        "start_position": {
          "$ref": "#/definitions/consoleapiStartPosition"
        },
        "data_format": {
          "$ref": "#/definitions/consoleapiPulsarDataFormat"
        },
        "topic_distribution": {
          "$ref": "#/definitions/consoleapiPulsarTopicDistribution"
        },
        "partition_dispatchers": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiPartitionDispatcherConfig"
          }
        },
        "advanced_setting": {
          "$ref": "#/definitions/consoleapiPulsarAdvancedSetting"
        }
      }
    },
    "consoleapiPulsarTopicDistribution": {
      "type": "object",
      "properties": {
        "pulsar_tenant": {
          "type": "string"
        },
        "pulsar_namespace": {
          "type": "string"
        },
        "default_topic": {
          "type": "string"
        },
        "dispatch_type": {
          "$ref": "#/definitions/consoleapiDispatchType"
        },
        "topic_prefix": {
          "type": "string"
        },
        "separator": {
          "type": "string"
        },
        "topic_suffix": {
          "type": "string"
        }
      }
    },
    "consoleapiS3AuthType": {
      "type": "string",
      "enum": [
        "S3_AUTH_TYPE_AK_SK",
        "S3_AUTH_TYPE_ASSUME_ROLE"
      ],
      "default": "S3_AUTH_TYPE_AK_SK"
    },
    "consoleapiS3Dataformat": {
      "type": "object",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/consoleapiS3Protocol"
        },
        "terminator": {
          "type": "string"
        },
        "date_separator": {
          "type": "string"
        },
        "enable_tidb_extension": {
          "type": "boolean"
        },
        "delimiter": {
          "type": "string"
        },
        "quote": {
          "type": "string"
        },
        "null": {
          "type": "string"
        },
        "include_commit_ts": {
          "type": "boolean"
        },
        "binary_encoding_method": {
          "$ref": "#/definitions/consoleapiBinaryEncodingMethod"
        },
        "output_raw_change_event": {
          "type": "boolean"
        },
        "output_field_header": {
          "type": "boolean"
        }
      }
    },
    "consoleapiS3Endpoint": {
      "type": "object",
      "properties": {
        "s3Uri": {
          "type": "string"
        },
        "access_key": {
          "type": "string"
        },
        "secret_key": {
          "type": "string"
        },
        "auth_type": {
          "$ref": "#/definitions/consoleapiS3AuthType"
        },
        "iam_assumed_role_arn": {
          "type": "string"
        },
        "endpoint": {
          "type": "string",
          "description": "endpoint is the custom S3-compatible storage endpoint (e.g. for\nAlibaba Cloud OSS: https://s3.oss-us-east-1.aliyuncs.com). When set,\nit is appended to the changefeed sink URI as the `endpoint` query\nparameter. Leave empty to use the default AWS S3 endpoint."
        },
        "provider": {
          "$ref": "#/definitions/consoleapiS3Provider",
          "description": "provider selects the object-storage provider. Defaults to AWS S3. When\nset to ALIBABA_OSS it is appended to the changefeed sink URI as the\n`provider=alibaba` query parameter, which makes TiCDC/BR skip AWS-specific\nbucket-region discovery (which fails against OSS) and use the path-style\naddressing suited to OSS. Must be paired with a non-empty endpoint."
        }
      }
    },
    "consoleapiS3Info": {
      "type": "object",
      "properties": {
        "endpoint": {
          "$ref": "#/definitions/consoleapiS3Endpoint"
        },
        "data_format": {
          "$ref": "#/definitions/consoleapiS3Dataformat"
        },
        "table_config": {
          "$ref": "#/definitions/consoleapiTableConfig"
        },
        "start_position": {
          "$ref": "#/definitions/consoleapiStartPosition"
        },
        "storage_flush_config": {
          "$ref": "#/definitions/consoleapiStorageFlushConfig"
        }
      }
    },
    "consoleapiS3Protocol": {
      "type": "string",
      "enum": [
        "S3_PROTOCOL_CSV",
        "S3_PROTOCOL_CANAL_JSON"
      ],
      "default": "S3_PROTOCOL_CSV"
    },
    "consoleapiS3Provider": {
      "type": "string",
      "enum": [
        "S3_PROVIDER_AWS",
        "S3_PROVIDER_ALIBABA_OSS"
      ],
      "default": "S3_PROVIDER_AWS"
    },
    "consoleapiSchemaRegistry": {
      "type": "object",
      "properties": {
        "schema_registry_endpoints": {
          "type": "string"
        },
        "enableHttpAuth": {
          "type": "boolean"
        },
        "userName": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "consoleapiServerlessTidbInfo": {
      "type": "object",
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "mysql_info": {
          "$ref": "#/definitions/consoleapiMySQLInfo"
        }
      }
    },
    "consoleapiSinkAdvertisedListener": {
      "type": "object",
      "properties": {
        "domain_type": {
          "$ref": "#/definitions/SinkAdvertisedListenerDomainType"
        },
        "root_domain_name": {
          "type": "string"
        },
        "records": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/SinkAdvertisedListenerRecord"
          }
        }
      },
      "required": [
        "domain_type",
        "root_domain_name"
      ]
    },
    "consoleapiSinkEndpoint": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uint64",
          "readOnly": true
        },
        "endpoint_name": {
          "type": "string"
        },
        "endpoint_service_name": {
          "type": "string",
          "description": "endpoint_service_name is required for endpoint_type = VPC_ENDPOINT_SERVICE,\nand left empty for endpoint_type = AMAZON_MSK."
        },
        "provider": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "endpoint_zones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "service_region": {
          "type": "string"
        },
        "status": {
          "$ref": "#/definitions/consoleapiSinkEndpointStatus",
          "readOnly": true
        },
        "endpoint_id": {
          "type": "string",
          "readOnly": true
        },
        "advertised_listener": {
          "$ref": "#/definitions/consoleapiSinkAdvertisedListener"
        },
        "endpoint_address": {
          "type": "string",
          "readOnly": true
        },
        "cloud_account_id": {
          "type": "string",
          "readOnly": true
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "readOnly": true
        },
        "endpoint_type": {
          "$ref": "#/definitions/consoleapiSinkEndpointType",
          "description": "endpoint_type selects the private-link model. Empty defaults to\nVPC_ENDPOINT_SERVICE for backward compatibility."
        },
        "msk_arn": {
          "type": "string",
          "description": "msk_arn is required when endpoint_type = AMAZON_MSK."
        },
        "auth_type": {
          "$ref": "#/definitions/consoleapiMskAuthType",
          "description": "auth_type is the MSK VPC connection auth scheme (AMAZON_MSK only). It is\nimmutable. Only SASL_SCRAM is supported for now."
        },
        "bootstrap_broker": {
          "type": "string",
          "description": "bootstrap_broker is the MSK VPC-connectivity bootstrap broker string,\npopulated once the connection is available (AMAZON_MSK only).",
          "readOnly": true
        }
      },
      "required": [
        "endpoint_name",
        "provider",
        "region"
      ]
    },
    "consoleapiSinkEndpointStatus": {
      "type": "string",
      "enum": [
        "SINK_ENDPOINT_STATUS_UNSPECIFIED",
        "SINK_ENDPOINT_STATUS_CREATING",
        "SINK_ENDPOINT_STATUS_PENDING_ACCEPTANCE",
        "SINK_ENDPOINT_STATUS_AVAILABLE",
        "SINK_ENDPOINT_STATUS_FAILED"
      ],
      "default": "SINK_ENDPOINT_STATUS_UNSPECIFIED"
    },
    "consoleapiSinkEndpointType": {
      "type": "string",
      "enum": [
        "SINK_ENDPOINT_TYPE_UNSPECIFIED",
        "VPC_ENDPOINT_SERVICE",
        "AMAZON_MSK"
      ],
      "default": "SINK_ENDPOINT_TYPE_UNSPECIFIED"
    },
    "consoleapiStartMode": {
      "type": "string",
      "enum": [
        "FROM_NOW",
        "FROM_TSO",
        "FROM_UTC"
      ],
      "default": "FROM_NOW"
    },
    "consoleapiStartPosition": {
      "type": "object",
      "properties": {
        "mode": {
          "$ref": "#/definitions/consoleapiStartMode"
        },
        "tso": {
          "type": "string",
          "format": "uint64"
        },
        "utc": {
          "type": "string"
        }
      }
    },
    "consoleapiStorageFlushConfig": {
      "type": "object",
      "properties": {
        "flush_interval": {
          "type": "string"
        },
        "file_size": {
          "type": "string",
          "format": "uint64"
        }
      }
    },
    "consoleapiTableConfig": {
      "type": "object",
      "properties": {
        "filter_rule": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "mode": {
          "$ref": "#/definitions/consoleapiTableMode"
        },
        "event_filter_rule": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiEventFilterRule"
          }
        },
        "case_sensitive": {
          "type": "boolean"
        },
        "bdr_mode": {
          "type": "boolean"
        },
        "ignore_txn_start_ts": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uint64"
          }
        }
      }
    },
    "consoleapiTableFilterUpdate": {
      "type": "object",
      "properties": {
        "changefeed_id": {
          "type": "string",
          "format": "uint64"
        },
        "table_filter": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "consoleapiTableMode": {
      "type": "string",
      "enum": [
        "IGNORE_NOT_SUPPORT_TABLE",
        "FORCE_SYNC"
      ],
      "default": "IGNORE_NOT_SUPPORT_TABLE"
    },
    "consoleapiTopicPartitionConfig": {
      "type": "object",
      "properties": {
        "dispatch_type": {
          "$ref": "#/definitions/consoleapiDispatchType"
        },
        "default_topic": {
          "type": "string"
        },
        "topic_prefix": {
          "type": "string"
        },
        "separator": {
          "type": "string"
        },
        "topic_suffix": {
          "type": "string"
        },
        "replication_factor": {
          "type": "integer",
          "format": "int64"
        },
        "partition_num": {
          "type": "integer",
          "format": "int64"
        },
        "partition_dispatcher": {
          "$ref": "#/definitions/consoleapiPartitionDispatcher"
        },
        "partition_dispatchers": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/consoleapiPartitionDispatcherConfig"
          }
        }
      }
    },
    "consoleapiUpdateTiCDCClusterStorageReq": {
      "type": "object",
      "properties": {
        "cluster_id": {
          "type": "string",
          "format": "uint64"
        },
        "size_gi": {
          "type": "integer",
          "format": "int64"
        },
        "iops": {
          "type": "integer",
          "format": "int64"
        },
        "throughput_mbs": {
          "type": "integer",
          "format": "int64"
        }
      }
    },
    "consoleapiUpdateTiCDCClusterStorageResp": {
      "type": "object"
    },
    "consoleapiValidateSinkAdvertisedListenerDomainResponse": {
      "type": "object",
      "properties": {
        "advertised_listener": {
          "$ref": "#/definitions/consoleapiSinkAdvertisedListener"
        }
      }
    },
    "googlerpcStatus": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "type": "string"
        },
        "details": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/protobufAny"
          }
        }
      }
    },
    "protobufAny": {
      "type": "object",
      "properties": {
        "@type": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "protobufNullValue": {
      "type": "string",
      "enum": [
        "NULL_VALUE"
      ],
      "default": "NULL_VALUE",
      "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value."
    }
  },
  "securityDefinitions": {
    "bearer": {
      "type": "apiKey",
      "description": "Authentication token, prefixed by Bearer: Bearer <token>",
      "name": "Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "bearer": []
    }
  ],
  "externalDocs": {
    "description": "DBaaS Dataflow Service",
    "url": "https://github.com/tidbcloud/dataflow-service"
  }
}
