{
  "swagger": "2.0",
  "info": {
    "title": "TiDB Cloud Dedicated Open API",
    "description": "TiDB Cloud Dedicated Open API",
    "version": "v1beta1"
  },
  "tags": [
    {
      "name": "RecoveryGroupService"
    }
  ],
  "schemes": ["https"],
  "consumes": ["application/json"],
  "produces": ["application/json"],
  "paths": {
    "/api/v1beta1/recovery_groups": {
      "get": {
        "operationId": "ListRecoveryGroups",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ListRecoveryGroupsResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": ["RecoveryGroupService"]
      },
      "post": {
        "operationId": "CreateRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1CreateRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/v1beta1CreateRecoveryGroupRequest"
            }
          }
        ],
        "tags": ["RecoveryGroupService"]
      }
    },
    "/api/v1beta1/recovery_groups/fee": {
      "get": {
        "operationId": "CalRecoveryGroupFee",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1CalRecoveryGroupFeeResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "primary_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "secondary_ids",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": ["RecoveryGroupService"]
      }
    },
    "/api/v1beta1/recovery_groups/{recovery_group_id}": {
      "get": {
        "operationId": "GetRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1GetRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "recovery_group_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": ["RecoveryGroupService"]
      },
      "delete": {
        "operationId": "DeleteRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1DeleteRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "recovery_group_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "org_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "project_id",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "uint64"
          }
        ],
        "tags": ["RecoveryGroupService"]
      },
      "patch": {
        "operationId": "PatchRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1PatchRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "recovery_group_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "setting": {
                  "$ref": "#/definitions/v1beta1RecoveryGroupSetting"
                },
                "labels": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              },
              "required": ["setting", "labels"]
            }
          }
        ],
        "tags": ["RecoveryGroupService"]
      }
    },
    "/api/v1beta1/recovery_groups/{recovery_group_id}:failover": {
      "post": {
        "operationId": "FailoverRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1FailoverRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "recovery_group_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "new_primary_id": {
                  "type": "string",
                  "format": "uint64"
                },
                "labels": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              },
              "required": ["new_primary_id", "labels"]
            }
          }
        ],
        "tags": ["RecoveryGroupService"]
      }
    },
    "/api/v1beta1/recovery_groups/{recovery_group_id}:reprotect": {
      "post": {
        "operationId": "ReprotectRecoveryGroup",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1beta1ReprotectRecoveryGroupResp"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "recovery_group_id",
            "in": "path",
            "required": true,
            "type": "string",
            "format": "uint64"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "reprotected_ids": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uint64"
                  }
                },
                "labels": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              },
              "required": ["reprotected_ids", "labels"]
            }
          }
        ],
        "tags": ["RecoveryGroupService"]
      }
    }
  },
  "definitions": {
    "protobufAny": {
      "type": "object",
      "additionalProperties": {},
      "properties": {
        "@type": {
          "type": "string"
        }
      }
    },
    "rpcStatus": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "type": "string"
        },
        "details": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/protobufAny"
          }
        }
      }
    },
    "v1beta1CalRecoveryGroupFeeResp": {
      "description": "some customer may have discount. Raw fee is the fee before discount.",
      "type": "object",
      "properties": {
        "access_raw_fee": {
          "type": "number",
          "format": "double"
        },
        "access_fee": {
          "type": "number",
          "format": "double"
        },
        "data_processing_raw_fee": {
          "type": "number",
          "format": "double"
        },
        "data_processing_fee": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "v1beta1CreateRecoveryGroupRequest": {
      "type": "object",
      "properties": {
        "setting": {
          "$ref": "#/definitions/v1beta1RecoveryGroupSetting"
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "required": ["setting", "labels"]
    },
    "v1beta1CreateRecoveryGroupResp": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uint64"
        }
      }
    },
    "v1beta1DeleteRecoveryGroupResp": {
      "type": "object"
    },
    "v1beta1FailoverRecoveryGroupResp": {
      "type": "object"
    },
    "v1beta1GetRecoveryGroupResp": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uint64"
        },
        "create_time": {
          "type": "string",
          "format": "date-time"
        },
        "update_time": {
          "type": "string",
          "format": "date-time"
        },
        "delete_time": {
          "type": "string",
          "format": "date-time"
        },
        "setting": {
          "$ref": "#/definitions/v1beta1RecoveryGroupSetting"
        },
        "state": {
          "$ref": "#/definitions/v1beta1RecoveryGroupState"
        },
        "in_progress_actions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/v1beta1RecoveryGroupActionType"
          }
        },
        "allowed_actions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/v1beta1RecoveryGroupActionType"
          }
        },
        "topology": {
          "$ref": "#/definitions/v1beta1RecoveryGroupTopology"
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "creator": {
          "type": "string"
        }
      }
    },
    "v1beta1ListRecoveryGroupItem": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "id": {
          "type": "string",
          "format": "uint64"
        },
        "create_time": {
          "type": "string",
          "format": "date-time"
        },
        "update_time": {
          "type": "string",
          "format": "date-time"
        },
        "delete_time": {
          "type": "string",
          "format": "date-time"
        },
        "setting": {
          "$ref": "#/definitions/v1beta1RecoveryGroupSetting"
        },
        "state": {
          "$ref": "#/definitions/v1beta1RecoveryGroupState"
        },
        "in_progress_actions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/v1beta1RecoveryGroupActionType"
          }
        },
        "allowed_actions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/v1beta1RecoveryGroupActionType"
          }
        },
        "topology": {
          "$ref": "#/definitions/v1beta1RecoveryGroupTopology"
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "creator": {
          "type": "string"
        }
      }
    },
    "v1beta1ListRecoveryGroupsResp": {
      "type": "object",
      "properties": {
        "recovery_groups": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/v1beta1ListRecoveryGroupItem"
          }
        }
      }
    },
    "v1beta1PatchRecoveryGroupResp": {
      "type": "object"
    },
    "v1beta1Provider": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "v1beta1RecoveryGroupActionType": {
      "type": "string",
      "enum": [
        "RECOVERY_GROUP_ACTION_TYPE_UNSPECIFIED",
        "CREATE",
        "MODIFY",
        "DELETE",
        "FAILOVER",
        "REPROTECT",
        "MIGRATE"
      ],
      "default": "RECOVERY_GROUP_ACTION_TYPE_UNSPECIFIED"
    },
    "v1beta1RecoveryGroupSetting": {
      "type": "object",
      "properties": {
        "display_name": {
          "type": "string"
        },
        "table_filters": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "resiliency_policy": {
          "$ref": "#/definitions/v1beta1ResiliencyPolicyType"
        },
        "primary": {
          "type": "string",
          "format": "uint64"
        },
        "secondaries": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uint64"
          }
        }
      }
    },
    "v1beta1RecoveryGroupState": {
      "type": "string",
      "enum": [
        "RECOVERY_GROUP_STATE_UNSPECIFIED",
        "CREATING",
        "MODIFYING",
        "DELETING",
        "DELETED",
        "WARNING",
        "FAILING_OVER",
        "MIGRATING",
        "REPROTECTING",
        "AVAILABLE",
        "FAILED",
        "UNPROTECTED"
      ],
      "default": "RECOVERY_GROUP_STATE_UNSPECIFIED"
    },
    "v1beta1RecoveryGroupTopology": {
      "type": "object",
      "properties": {
        "clusters": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/v1beta1RgClusterInfo"
          }
        },
        "replications": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/v1beta1RgReplicationInfo"
          }
        }
      }
    },
    "v1beta1Region": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "display_name": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "provider": {
          "$ref": "#/definitions/v1beta1Provider"
        }
      }
    },
    "v1beta1ReprotectRecoveryGroupResp": {
      "type": "object"
    },
    "v1beta1ResiliencyPolicyType": {
      "type": "string",
      "enum": ["RESILIENCY_POLICY_TYPE_UNSPECIFIED", "WITHOUT_CONSISTENCY_GUARANTEE"],
      "title": "- WITHOUT_CONSISTENCY_GUARANTEE: EVENTUAL_CONSISTENCY = 2;\n  NEAR_REAL_TIME_CONSISTENCY = 3;",
      "default": "RESILIENCY_POLICY_TYPE_UNSPECIFIED"
    },
    "v1beta1RgClusterComponentState": {
      "type": "string",
      "enum": ["RG_CLUSTER_COMPONENT_STATE_UNSPECIFIED", "HEALTHY", "BROKEN", "ACTIONING"],
      "default": "RG_CLUSTER_COMPONENT_STATE_UNSPECIFIED"
    },
    "v1beta1RgClusterInfo": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uint64"
        },
        "display_name": {
          "type": "string"
        },
        "state": {
          "$ref": "#/definitions/v1beta1RgClusterComponentState"
        },
        "role": {
          "$ref": "#/definitions/v1beta1RgClusterRole"
        },
        "region": {
          "$ref": "#/definitions/v1beta1Region"
        }
      }
    },
    "v1beta1RgClusterRole": {
      "type": "string",
      "enum": ["RG_CLUSTER_ROLE_UNSPECIFIED", "PRIMARY", "SECONDARY"],
      "default": "RG_CLUSTER_ROLE_UNSPECIFIED"
    },
    "v1beta1RgLinkMetricsLabel": {
      "type": "object",
      "properties": {
        "changefeed": {
          "type": "string"
        }
      }
    },
    "v1beta1RgReplicationInfo": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string",
          "format": "uint64"
        },
        "dest": {
          "type": "string",
          "format": "uint64"
        },
        "state": {
          "$ref": "#/definitions/v1beta1RgReplicationState"
        },
        "metrics_labels": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/v1beta1RgLinkMetricsLabel"
          }
        }
      }
    },
    "v1beta1RgReplicationState": {
      "type": "string",
      "enum": [
        "RG_REPLICATION_STATE_UNSPECIFIED",
        "REPLICATION_HEALTHY",
        "REPLICATION_BROKEN",
        "REPLICATION_ACTIONING",
        "REPLICATION_MISSING"
      ],
      "default": "RG_REPLICATION_STATE_UNSPECIFIED"
    }
  }
}
