{
  "openapi": "3.1.2",
  "info": {
    "title": "Typesense Cloud Management API",
    "version": "1.0.0",
    "description": "Manage Typesense Cloud clusters, configuration, credentials, metrics, and invoices. Authenticate with a Cluster Management API key, copied exactly as it is shown when you create it, in the x-typesense-cloud-management-api-key header or as a bearer token in the Authorization header. Every credential carries a capability set; each operation names the capability it requires. The same operations are available as actions of the get_clusters and manage_cluster tools on the hosted MCP endpoint at https://cloud.typesense.org/mcp/v1, which also accepts OAuth access tokens."
  },
  "servers": [
    {
      "url": "https://cloud.typesense.org/api/v1",
      "description": "Typesense Cloud"
    }
  ],
  "security": [
    {
      "ManagementApiKey": []
    },
    {
      "Bearer": []
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Identify the account and credential in use."
    },
    {
      "name": "Clusters",
      "description": "Create, inspect, and update clusters."
    },
    {
      "name": "Metrics",
      "description": "Read allowlisted per-node cluster metrics."
    },
    {
      "name": "Lifecycle",
      "description": "Perform cluster lifecycle operations."
    },
    {
      "name": "Cluster credentials",
      "description": "Issue Typesense data-plane credentials."
    },
    {
      "name": "Configuration changes",
      "description": "Schedule, inspect, and cancel cluster configuration changes."
    },
    {
      "name": "Cloning operations",
      "description": "Create, inspect, and cancel cluster cloning operations."
    },
    {
      "name": "Server configuration parameters",
      "description": "Manage editable Typesense server parameters."
    },
    {
      "name": "Invoices",
      "description": "Read account invoices and line items."
    }
  ],
  "x-management-key-capability-model": {
    "description": "A credential with the admin capability permits every operation. Individual capabilities can be combined. clusters:read covers every read, including configuration-change and cloning history and server parameters; clusters:configure covers sizing, topology, rename and auto-upgrade; cluster_parameters:manage covers changing Typesense server parameters. These nine names are also the management half of the OAuth scopes a connected agent can hold for the hosted MCP endpoint at https://cloud.typesense.org/mcp/v1 (the other half is the data:* scopes, which a key never carries).",
    "capabilities": [
      "clusters:read",
      "metrics:read",
      "clusters:create",
      "clusters:configure",
      "cluster_parameters:manage",
      "clusters:clone",
      "cluster_credentials:issue",
      "billing:read",
      "clusters:terminate"
    ],
    "presets": {
      "read-only": [
        "clusters:read",
        "metrics:read"
      ],
      "provision": [
        "clusters:read",
        "metrics:read",
        "clusters:create",
        "clusters:configure"
      ],
      "operate": [
        "clusters:read",
        "metrics:read",
        "clusters:configure",
        "cluster_parameters:manage"
      ],
      "admin": [
        "admin"
      ]
    }
  },
  "paths": {
    "/account": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get the account this credential acts on",
        "operationId": "getAccount",
        "x-required-capability": "any",
        "description": "Returns the account, and the capabilities of the credential making the request. Call this first to confirm which account you are acting on.",
        "responses": {
          "200": {
            "description": "Account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters": {
      "get": {
        "tags": [
          "Clusters"
        ],
        "summary": "List clusters",
        "operationId": "listClusters",
        "x-required-capability": "clusters:read",
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/ClusterPerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated clusters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClusterList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "tags": [
          "Clusters"
        ],
        "summary": "Create a cluster (provisioning usually takes 4-6 minutes; poll get_cluster about every 60 seconds until in_service)",
        "operationId": "createCluster",
        "x-required-capability": "clusters:create",
        "description": "Creates a cluster asynchronously.",
        "requestBody": {
          "$ref": "#/components/requestBodies/ClusterCreate"
        },
        "responses": {
          "201": {
            "description": "Cluster provisioning accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClusterMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/ClusterId"
        }
      ],
      "get": {
        "tags": [
          "Clusters"
        ],
        "summary": "Get a cluster",
        "operationId": "getCluster",
        "x-required-capability": "clusters:read",
        "responses": {
          "200": {
            "description": "Cluster",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cluster"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "tags": [
          "Clusters"
        ],
        "summary": "Update cluster metadata",
        "operationId": "updateCluster",
        "x-required-capability": "clusters:configure",
        "description": "Updates the cluster name, automatic capacity upgrades, or both.",
        "requestBody": {
          "$ref": "#/components/requestBodies/ClusterUpdate"
        },
        "responses": {
          "200": {
            "description": "Updated cluster or validation error",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ClusterMutationResponse"
                    },
                    {
                      "$ref": "#/components/schemas/Error"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/metrics": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "get": {
        "tags": [
          "Metrics"
        ],
        "summary": "Get per-node cluster metrics",
        "operationId": "getClusterMetrics",
        "x-required-capability": "metrics:read",
        "description": "Returns per-node series with epoch-millisecond timestamps, each bucket aggregated by avg (the default), max, min or p95, the same choices as the cluster dashboard; each series names its node's hostname, and the response states the resolution (bucket width) the window was aggregated at: 30s for 1h and 3h, 30m for 24h, 1h for 7d and 30d. Responses are marked Cache-Control: private, no-store. Up to five allowlisted metrics can be requested.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Metrics"
          },
          {
            "$ref": "#/components/parameters/MetricsWindow"
          },
          {
            "$ref": "#/components/parameters/MetricsAggregation"
          }
        ],
        "responses": {
          "200": {
            "description": "Per-node metric series",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetricsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          }
        }
      }
    },
    "/clusters/{cluster_id}/lifecycle": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "post": {
        "tags": [
          "Lifecycle"
        ],
        "summary": "Terminate a cluster",
        "operationId": "terminateCluster",
        "x-required-capability": "clusters:terminate",
        "description": "Initiates irreversible cluster termination.",
        "requestBody": {
          "$ref": "#/components/requestBodies/LifecycleAction"
        },
        "responses": {
          "201": {
            "description": "Termination initiated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActionResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/api-keys": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "post": {
        "tags": [
          "Cluster credentials"
        ],
        "summary": "Issue cluster API keys",
        "operationId": "issueClusterApiKeys",
        "x-required-capability": "cluster_credentials:issue",
        "description": "Returns a wildcard Typesense admin key and a search-only key; both cover every collection. Treat both values as secrets and store them immediately. Never hand either key to an application: derive a scoped search key for it from the search-only key (https://typesense.org/docs/latest/api/api-keys.html#generate-scoped-search-key).",
        "responses": {
          "200": {
            "description": "New cluster credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClusterApiKeysResponse"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/configuration-changes": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "get": {
        "tags": [
          "Configuration changes"
        ],
        "summary": "List configuration changes",
        "operationId": "listConfigurationChanges",
        "x-required-capability": "clusters:read",
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/WorkflowPerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated configuration changes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationChangeList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "tags": [
          "Configuration changes"
        ],
        "summary": "Create a configuration change (runs in the background, anywhere from 30 minutes to several hours depending on the data; poll get_configuration_change about every 60 seconds until succeeded, starting at perform_change_at when the change is scheduled)",
        "operationId": "createConfigurationChange",
        "x-required-capability": "clusters:configure",
        "requestBody": {
          "$ref": "#/components/requestBodies/ConfigurationChangeCreate"
        },
        "responses": {
          "201": {
            "description": "Configuration change created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationChangeMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/configuration-changes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        },
        {
          "$ref": "#/components/parameters/ResourceId"
        }
      ],
      "get": {
        "tags": [
          "Configuration changes"
        ],
        "summary": "Get a configuration change",
        "operationId": "getConfigurationChange",
        "x-required-capability": "clusters:read",
        "responses": {
          "200": {
            "description": "Configuration change",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationChange"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "tags": [
          "Configuration changes"
        ],
        "summary": "Cancel a pending configuration change",
        "operationId": "cancelConfigurationChange",
        "x-required-capability": "clusters:configure",
        "requestBody": {
          "$ref": "#/components/requestBodies/CancelPendingOperation"
        },
        "responses": {
          "200": {
            "description": "Configuration change canceled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigurationChangeMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/cloning-operations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "get": {
        "tags": [
          "Cloning operations"
        ],
        "summary": "List cloning operations",
        "operationId": "listCloningOperations",
        "x-required-capability": "clusters:read",
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/WorkflowPerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated cloning operations",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloningOperationList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "tags": [
          "Cloning operations"
        ],
        "summary": "Clone a cluster (runs in the background for minutes; poll get_cloning_operation about every 60 seconds until succeeded, then get_cluster on the target)",
        "operationId": "createCloningOperation",
        "x-required-capability": "clusters:clone",
        "description": "Creates a clone asynchronously.",
        "requestBody": {
          "$ref": "#/components/requestBodies/CloningOperationCreate"
        },
        "responses": {
          "201": {
            "description": "Cloning operation created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloningOperationMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/cloning-operations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        },
        {
          "$ref": "#/components/parameters/ResourceId"
        }
      ],
      "get": {
        "tags": [
          "Cloning operations"
        ],
        "summary": "Get a cloning operation",
        "operationId": "getCloningOperation",
        "x-required-capability": "clusters:read",
        "responses": {
          "200": {
            "description": "Cloning operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloningOperation"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "tags": [
          "Cloning operations"
        ],
        "summary": "Cancel a pending cloning operation",
        "operationId": "cancelCloningOperation",
        "x-required-capability": "clusters:clone",
        "requestBody": {
          "$ref": "#/components/requestBodies/CancelPendingOperation"
        },
        "responses": {
          "200": {
            "description": "Cloning operation canceled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloningOperationMutationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/server-configuration-parameters": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        }
      ],
      "get": {
        "tags": [
          "Server configuration parameters"
        ],
        "summary": "List editable server configuration parameters",
        "operationId": "listServerConfigurationParameters",
        "x-required-capability": "clusters:read",
        "responses": {
          "200": {
            "description": "Editable parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServerConfigurationParameter"
                  }
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "tags": [
          "Server configuration parameters"
        ],
        "summary": "Create a server configuration parameter",
        "operationId": "createServerConfigurationParameter",
        "x-required-capability": "cluster_parameters:manage",
        "requestBody": {
          "$ref": "#/components/requestBodies/ServerConfigurationParameterCreate"
        },
        "responses": {
          "201": {
            "description": "Parameter created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerConfigurationParameter"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/clusters/{cluster_id}/server-configuration-parameters/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/NestedClusterId"
        },
        {
          "$ref": "#/components/parameters/ResourceId"
        }
      ],
      "get": {
        "tags": [
          "Server configuration parameters"
        ],
        "summary": "Get a server configuration parameter",
        "operationId": "getServerConfigurationParameter",
        "x-required-capability": "clusters:read",
        "responses": {
          "200": {
            "description": "Parameter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerConfigurationParameter"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "tags": [
          "Server configuration parameters"
        ],
        "summary": "Update a server configuration parameter",
        "operationId": "updateServerConfigurationParameter",
        "x-required-capability": "cluster_parameters:manage",
        "requestBody": {
          "$ref": "#/components/requestBodies/ServerConfigurationParameterUpdate"
        },
        "responses": {
          "200": {
            "description": "Updated parameter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerConfigurationParameter"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "tags": [
          "Server configuration parameters"
        ],
        "summary": "Delete a server configuration parameter",
        "operationId": "deleteServerConfigurationParameter",
        "x-required-capability": "cluster_parameters:manage",
        "responses": {
          "200": {
            "description": "Parameter deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/invoices": {
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "List invoices",
        "operationId": "listInvoices",
        "x-required-capability": "billing:read",
        "description": "Lists draft, due, and paid invoices without line items.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/InvoicePerPage"
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated invoices",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/invoices/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/InvoiceId"
        }
      ],
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "Get an invoice with line items",
        "operationId": "getInvoice",
        "x-required-capability": "billing:read",
        "responses": {
          "200": {
            "description": "Invoice and line items",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceWithLineItems"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/cluster-options": {
      "get": {
        "tags": [
          "Clusters"
        ],
        "summary": "List what a cluster can be made of",
        "operationId": "listClusterOptions",
        "x-required-capability": "clusters:read",
        "description": "Regions (with availability), memory options, the vCPU options each memory allows, the yes/no options, the search delivery network options, and the free-tier shape. Read this before create_cluster or a configuration change instead of learning the valid values from a refusal.",
        "responses": {
          "200": {
            "description": "Cluster options",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClusterOptions"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ManagementApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-typesense-cloud-management-api-key",
        "description": "A Cluster Management API key, copied exactly as it is shown when you create it."
      },
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "A Cluster Management API key, copied exactly as it is shown when you create it, sent as a bearer token. OAuth access tokens are accepted only by the hosted MCP endpoint at https://cloud.typesense.org/mcp/v1."
      }
    },
    "parameters": {
      "Page": {
        "name": "page",
        "in": "query",
        "description": "One-based page number.",
        "schema": {
          "type": "integer",
          "default": 1
        }
      },
      "ClusterPerPage": {
        "name": "per_page",
        "in": "query",
        "description": "Clusters per page. Values above 50 return HTTP 400.",
        "schema": {
          "type": "integer",
          "default": 10,
          "maximum": 50
        }
      },
      "WorkflowPerPage": {
        "name": "per_page",
        "in": "query",
        "description": "Operations per page. Values above 10 return HTTP 400.",
        "schema": {
          "type": "integer",
          "default": 10,
          "maximum": 10
        }
      },
      "InvoicePerPage": {
        "name": "per_page",
        "in": "query",
        "description": "Invoices per page. Values above 50 return HTTP 400.",
        "schema": {
          "type": "integer",
          "default": 10,
          "maximum": 50
        }
      },
      "ClusterId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "Cluster reference ID.",
        "schema": {
          "type": "string"
        }
      },
      "NestedClusterId": {
        "name": "cluster_id",
        "in": "path",
        "required": true,
        "description": "Cluster reference ID.",
        "schema": {
          "type": "string"
        }
      },
      "ResourceId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "Resource external ID.",
        "schema": {
          "type": "string"
        }
      },
      "InvoiceId": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "Invoice external ID.",
        "schema": {
          "type": "string"
        }
      },
      "Metrics": {
        "name": "metrics",
        "in": "query",
        "required": true,
        "description": "One to five comma-separated metric names. Names are canonicalized to lowercase and deduplicated.",
        "style": "form",
        "explode": false,
        "schema": {
          "type": "array",
          "minItems": 1,
          "maxItems": 5,
          "uniqueItems": true,
          "items": {
            "$ref": "#/components/schemas/MetricName"
          }
        }
      },
      "MetricsAggregation": {
        "name": "aggregation",
        "in": "query",
        "required": false,
        "description": "How each bucket is aggregated across the samples it covers: avg (default), max, min or p95, as in the cluster dashboard.",
        "schema": {
          "type": "string",
          "enum": [
            "avg",
            "max",
            "min",
            "p95"
          ],
          "default": "avg"
        }
      },
      "MetricsWindow": {
        "name": "window",
        "in": "query",
        "required": true,
        "description": "Preset duration ending at the current UTC time.",
        "schema": {
          "type": "string",
          "enum": [
            "1h",
            "3h",
            "24h",
            "7d",
            "30d"
          ]
        }
      }
    },
    "requestBodies": {
      "ClusterCreate": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClusterCreateRequest"
            }
          }
        }
      },
      "ClusterUpdate": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ClusterUpdateRequest"
            }
          }
        }
      },
      "LifecycleAction": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/LifecycleActionRequest"
            }
          }
        }
      },
      "ConfigurationChangeCreate": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ConfigurationChangeCreateRequest"
            }
          }
        }
      },
      "CancelPendingOperation": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CancelPendingOperationRequest"
            }
          }
        }
      },
      "CloningOperationCreate": {
        "required": false,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CloningOperationCreateRequest"
            }
          }
        }
      },
      "ServerConfigurationParameterCreate": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ServerConfigurationParameterCreateRequest"
            }
          }
        }
      },
      "ServerConfigurationParameterUpdate": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ServerConfigurationParameterUpdateRequest"
            }
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Malformed or invalid request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "PaymentRequired": {
        "description": "A payment method is required for the requested paid operation",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Invalid credential, missing capability, or restricted account",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found or not visible to the management key",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "UnprocessableEntity": {
        "description": "The resource state or submitted configuration prevents the operation",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Management-key rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "A retryable dependency outage prevents the operation",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string"
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "error": {
            "type": "string"
          },
          "required_capability": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "RegionNodeCounts": {
        "type": [
          "object",
          "null"
        ],
        "additionalProperties": {
          "type": "integer",
          "minimum": 1
        },
        "example": {
          "oregon": 3,
          "frankfurt": 2
        }
      },
      "SubmittedRegionNodeCounts": {
        "description": "Region-to-node-count object, or a JSON-encoded object for form submissions.",
        "oneOf": [
          {
            "type": "object",
            "minProperties": 1,
            "additionalProperties": {
              "type": "integer",
              "minimum": 1
            },
            "propertyNames": {
              "$ref": "#/components/schemas/Region"
            }
          },
          {
            "type": "string"
          }
        ],
        "example": {
          "oregon": 3,
          "frankfurt": 2
        }
      },
      "Cluster": {
        "type": "object",
        "required": [
          "id",
          "name",
          "memory",
          "vcpu",
          "gpu",
          "high_performance_disk",
          "typesense_server_version",
          "high_availability",
          "high_availability_node_count",
          "search_delivery_network",
          "load_balancing",
          "regions",
          "region_node_counts",
          "auto_upgrade_capacity",
          "usage",
          "provisioned_by",
          "provisioned_at",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cluster reference ID."
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "memory": {
            "type": "string"
          },
          "vcpu": {
            "type": "string"
          },
          "gpu": {
            "$ref": "#/components/schemas/YesNo"
          },
          "high_performance_disk": {
            "$ref": "#/components/schemas/YesNo"
          },
          "typesense_server_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "high_availability": {
            "$ref": "#/components/schemas/YesNo"
          },
          "high_availability_node_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Node count for single-region high-availability clusters. Requests accept 3 to 7; older clusters may carry other values."
          },
          "search_delivery_network": {
            "$ref": "#/components/schemas/SearchDeliveryNetwork"
          },
          "load_balancing": {
            "$ref": "#/components/schemas/YesNo"
          },
          "regions": {
            "type": "array",
            "description": "Live node regions. A region appears once per live node.",
            "items": {
              "type": "string"
            }
          },
          "region_node_counts": {
            "$ref": "#/components/schemas/RegionNodeCounts"
          },
          "auto_upgrade_capacity": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "hostnames": {
            "type": [
              "object",
              "null"
            ],
            "description": "Present when the cluster is in service.",
            "required": [
              "nodes"
            ],
            "properties": {
              "nodes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "search_delivery_network": {
                "type": "string"
              },
              "load_balanced": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "usage": {
            "type": "object",
            "required": [
              "runtime_hours",
              "used_bandwidth_kb"
            ],
            "properties": {
              "runtime_hours": {
                "type": "integer"
              },
              "used_bandwidth_kb": {
                "type": "object",
                "required": [
                  "last_7_days"
                ],
                "properties": {
                  "last_7_days": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "integer"
                    }
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "provisioned_by": {
            "type": "object",
            "required": [
              "user_name",
              "user_type"
            ],
            "properties": {
              "user_name": {
                "type": "string"
              },
              "user_type": {
                "type": "string",
                "enum": [
                  "User",
                  "API Key"
                ]
              }
            },
            "additionalProperties": false
          },
          "provisioned_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ClusterList": {
        "type": "object",
        "required": [
          "page",
          "per_page",
          "total",
          "clusters"
        ],
        "properties": {
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "clusters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Cluster"
            }
          }
        },
        "additionalProperties": false
      },
      "ClusterMutationResponse": {
        "type": "object",
        "required": [
          "success",
          "cluster"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "cluster": {
            "$ref": "#/components/schemas/Cluster"
          }
        },
        "additionalProperties": false
      },
      "ClusterCreateRequest": {
        "type": "object",
        "required": [
          "memory",
          "vcpu"
        ],
        "oneOf": [
          {
            "properties": {
              "regions": {}
            },
            "required": [
              "regions"
            ]
          },
          {
            "properties": {
              "region_node_counts": {}
            },
            "required": [
              "region_node_counts"
            ]
          }
        ],
        "not": {
          "properties": {
            "region_node_counts": {},
            "high_availability_node_count": {}
          },
          "required": [
            "region_node_counts",
            "high_availability_node_count"
          ]
        },
        "properties": {
          "memory": {
            "$ref": "#/components/schemas/MemoryOption"
          },
          "vcpu": {
            "$ref": "#/components/schemas/VcpuOption"
          },
          "regions": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Region"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/Region"
                }
              }
            ]
          },
          "region_node_counts": {
            "$ref": "#/components/schemas/SubmittedRegionNodeCounts"
          },
          "high_availability_node_count": {
            "type": "integer",
            "minimum": 3,
            "maximum": 7
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "gpu": {
            "$ref": "#/components/schemas/YesNo"
          },
          "high_performance_disk": {
            "$ref": "#/components/schemas/YesNo"
          },
          "high_availability": {
            "$ref": "#/components/schemas/YesNo"
          },
          "search_delivery_network": {
            "$ref": "#/components/schemas/SearchDeliveryNetwork"
          },
          "typesense_server_version": {
            "type": "string"
          },
          "auto_upgrade_capacity": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "additionalProperties": false,
        "allOf": [
          {
            "$ref": "#/components/schemas/MemoryVcpuPairing"
          }
        ]
      },
      "ClusterUpdateRequest": {
        "type": "object",
        "anyOf": [
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "auto_upgrade_capacity"
            ]
          }
        ],
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "auto_upgrade_capacity": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "LifecycleActionRequest": {
        "type": "object",
        "required": [
          "lifecycle_action"
        ],
        "properties": {
          "lifecycle_action": {
            "type": "string",
            "const": "terminate"
          }
        },
        "additionalProperties": false
      },
      "ActionResponse": {
        "type": "object",
        "required": [
          "success",
          "message"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ClusterApiKeysResponse": {
        "type": "object",
        "required": [
          "success",
          "api_keys"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "api_keys": {
            "type": "object",
            "required": [
              "admin_key",
              "search_only_key"
            ],
            "properties": {
              "admin_key": {
                "type": "string",
                "format": "password"
              },
              "search_only_key": {
                "type": "string",
                "format": "password"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "MetricName": {
        "type": "string",
        "enum": [
          "system_memory_used_bytes",
          "system_memory_total_bytes",
          "typesense_memory_active_bytes",
          "system_swap_used_bytes",
          "system_swap_total_bytes",
          "system_cpu_active_percentage",
          "search_latency_ms",
          "search_requests_per_second",
          "system_network_received_bytes_rate",
          "system_network_sent_bytes_rate",
          "system_disk_used_bytes",
          "system_disk_total_bytes",
          "pending_write_batches"
        ]
      },
      "MetricSeries": {
        "type": "object",
        "required": [
          "hostname",
          "timestamps",
          "values"
        ],
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The node's hostname (the series key is its node index)."
          },
          "timestamps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EpochMilliseconds"
            }
          },
          "values": {
            "type": "array",
            "items": {
              "type": [
                "number",
                "null"
              ]
            }
          }
        },
        "additionalProperties": false
      },
      "MetricsResponse": {
        "type": "object",
        "required": [
          "cluster_id",
          "window",
          "aggregation",
          "resolution",
          "timestamp_unit",
          "metrics"
        ],
        "properties": {
          "cluster_id": {
            "type": "string"
          },
          "window": {
            "type": "string",
            "enum": [
              "1h",
              "3h",
              "24h",
              "7d",
              "30d"
            ]
          },
          "aggregation": {
            "type": "string",
            "description": "How each bucket was aggregated: avg, max, min or p95.",
            "enum": [
              "avg",
              "max",
              "min",
              "p95"
            ]
          },
          "resolution": {
            "type": "string",
            "description": "The bucket width every series was aggregated at for this window, as a duration: 30s for 1h and 3h, 30m for 24h, 1h for 7d and 30d.",
            "examples": [
              "30s",
              "30m",
              "1h"
            ]
          },
          "timestamp_unit": {
            "type": "string",
            "const": "epoch_milliseconds"
          },
          "metrics": {
            "type": "object",
            "propertyNames": {
              "$ref": "#/components/schemas/MetricName"
            },
            "additionalProperties": {
              "type": "object",
              "propertyNames": {
                "pattern": "^[0-9]+$"
              },
              "additionalProperties": {
                "$ref": "#/components/schemas/MetricSeries"
              }
            }
          }
        },
        "additionalProperties": false
      },
      "ConfigurationChange": {
        "type": "object",
        "required": [
          "id",
          "status",
          "created_at",
          "updated_at",
          "perform_change_at",
          "completed_at",
          "old_memory",
          "old_vcpu",
          "old_gpu",
          "old_high_performance_disk",
          "old_typesense_server_version",
          "old_high_availability",
          "old_high_availability_node_count",
          "old_search_delivery_network",
          "old_load_balancing",
          "old_region_node_counts",
          "new_memory",
          "new_vcpu",
          "new_gpu",
          "new_high_performance_disk",
          "new_typesense_server_version",
          "new_high_availability",
          "new_high_availability_node_count",
          "new_search_delivery_network",
          "new_load_balancing",
          "new_region_node_counts",
          "notification_email_addresses"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/WorkflowStatus"
          },
          "created_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "updated_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "perform_change_at": {
            "$ref": "#/components/schemas/NullableEpochSeconds"
          },
          "completed_at": {
            "$ref": "#/components/schemas/NullableEpochSeconds"
          },
          "old_memory": {
            "$ref": "#/components/schemas/NullableString"
          },
          "old_vcpu": {
            "$ref": "#/components/schemas/NullableString"
          },
          "old_gpu": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "old_high_performance_disk": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "old_typesense_server_version": {
            "$ref": "#/components/schemas/NullableString"
          },
          "old_high_availability": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "old_high_availability_node_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Node count for single-region high-availability clusters. Requests accept 3 to 7; older clusters may carry other values."
          },
          "old_search_delivery_network": {
            "$ref": "#/components/schemas/NullableSearchDeliveryNetwork"
          },
          "old_load_balancing": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "old_region_node_counts": {
            "$ref": "#/components/schemas/RegionNodeCounts"
          },
          "new_memory": {
            "$ref": "#/components/schemas/NullableString"
          },
          "new_vcpu": {
            "$ref": "#/components/schemas/NullableString"
          },
          "new_gpu": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "new_high_performance_disk": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "new_typesense_server_version": {
            "$ref": "#/components/schemas/NullableString"
          },
          "new_high_availability": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "new_high_availability_node_count": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Node count for single-region high-availability clusters. Requests accept 3 to 7; older clusters may carry other values."
          },
          "new_search_delivery_network": {
            "$ref": "#/components/schemas/NullableSearchDeliveryNetwork"
          },
          "new_load_balancing": {
            "$ref": "#/components/schemas/NullableYesNo"
          },
          "new_region_node_counts": {
            "$ref": "#/components/schemas/RegionNodeCounts"
          },
          "notification_email_addresses": {
            "$ref": "#/components/schemas/NotificationEmailAddresses"
          }
        },
        "additionalProperties": false
      },
      "ConfigurationChangeList": {
        "type": "object",
        "required": [
          "page",
          "per_page",
          "total",
          "configuration_changes"
        ],
        "properties": {
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "configuration_changes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConfigurationChange"
            }
          }
        },
        "additionalProperties": false
      },
      "ConfigurationChangeMutationResponse": {
        "type": "object",
        "required": [
          "success",
          "configuration_change"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "configuration_change": {
            "$ref": "#/components/schemas/ConfigurationChange"
          }
        },
        "additionalProperties": false
      },
      "ConfigurationChangeCreateRequest": {
        "type": "object",
        "required": [
          "perform_change_at"
        ],
        "anyOf": [
          {
            "required": [
              "new_memory"
            ]
          },
          {
            "required": [
              "new_vcpu"
            ]
          },
          {
            "required": [
              "new_gpu"
            ]
          },
          {
            "required": [
              "new_high_performance_disk"
            ]
          },
          {
            "required": [
              "new_typesense_server_version"
            ]
          },
          {
            "required": [
              "new_high_availability"
            ]
          },
          {
            "required": [
              "new_high_availability_node_count"
            ]
          },
          {
            "required": [
              "new_search_delivery_network"
            ]
          },
          {
            "required": [
              "new_region_node_counts"
            ]
          }
        ],
        "properties": {
          "perform_change_at": {
            "type": "integer",
            "format": "int64",
            "description": "Unix timestamp in seconds for when to perform the change: from now (a few minutes of clock skew is tolerated) to one year ahead."
          },
          "new_memory": {
            "$ref": "#/components/schemas/MemoryOption"
          },
          "new_vcpu": {
            "$ref": "#/components/schemas/VcpuOption"
          },
          "new_gpu": {
            "$ref": "#/components/schemas/YesNo"
          },
          "new_high_performance_disk": {
            "$ref": "#/components/schemas/YesNo"
          },
          "new_typesense_server_version": {
            "type": "string"
          },
          "new_high_availability": {
            "$ref": "#/components/schemas/YesNo"
          },
          "new_high_availability_node_count": {
            "type": "integer",
            "minimum": 3,
            "maximum": 7
          },
          "new_search_delivery_network": {
            "$ref": "#/components/schemas/SearchDeliveryNetwork"
          },
          "new_region_node_counts": {
            "$ref": "#/components/schemas/SubmittedRegionNodeCounts"
          },
          "notification_email_addresses": {
            "$ref": "#/components/schemas/SubmittedNotificationEmailAddresses"
          }
        },
        "additionalProperties": false,
        "allOf": [
          {
            "$ref": "#/components/schemas/NewMemoryVcpuPairing"
          }
        ]
      },
      "CancelPendingOperationRequest": {
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string",
            "const": "canceled"
          }
        },
        "additionalProperties": false
      },
      "CloningOperation": {
        "type": "object",
        "required": [
          "id",
          "status",
          "created_at",
          "updated_at",
          "completed_at",
          "source_region",
          "target_region",
          "typesense_server_version",
          "target_cluster_name",
          "target_cluster_reference_id",
          "notification_email_addresses"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/NullableWorkflowStatus"
          },
          "created_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "updated_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "completed_at": {
            "$ref": "#/components/schemas/NullableEpochSeconds"
          },
          "source_region": {
            "$ref": "#/components/schemas/NullableString"
          },
          "target_region": {
            "$ref": "#/components/schemas/NullableString"
          },
          "typesense_server_version": {
            "$ref": "#/components/schemas/NullableString"
          },
          "target_cluster_name": {
            "$ref": "#/components/schemas/NullableString"
          },
          "target_cluster_reference_id": {
            "$ref": "#/components/schemas/NullableString"
          },
          "notification_email_addresses": {
            "$ref": "#/components/schemas/NotificationEmailAddresses"
          }
        },
        "additionalProperties": false
      },
      "CloningOperationList": {
        "type": "object",
        "required": [
          "page",
          "per_page",
          "total",
          "cloning_operations"
        ],
        "properties": {
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "cloning_operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CloningOperation"
            }
          }
        },
        "additionalProperties": false
      },
      "CloningOperationMutationResponse": {
        "type": "object",
        "required": [
          "success",
          "cloning_operation"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          },
          "cloning_operation": {
            "$ref": "#/components/schemas/CloningOperation"
          }
        },
        "additionalProperties": false
      },
      "CloningOperationCreateRequest": {
        "type": "object",
        "properties": {
          "typesense_server_version": {
            "type": "string"
          },
          "target_region": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "notification_email_addresses": {
            "$ref": "#/components/schemas/SubmittedNotificationEmailAddresses"
          }
        },
        "additionalProperties": false
      },
      "ServerConfigurationParameterName": {
        "type": "string",
        "enum": [
          "cors-domains",
          "analytics-flush-interval",
          "analytics-minute-rate-limit",
          "cache-num-entries",
          "embedding-cache-num-entries",
          "db-compaction-interval",
          "filter-by-max-ops",
          "max-per-page",
          "max-group-limit"
        ]
      },
      "ServerConfigurationParameterResponseName": {
        "type": "string",
        "enum": [
          "cors-domains",
          "analytics-flush-interval",
          "analytics-minute-rate-limit",
          "enable-search-logging",
          "thread-pool-size",
          "num-collections-parallel-load",
          "num-documents-parallel-load",
          "cache-num-entries",
          "embedding-cache-num-entries",
          "healthy-read-lag",
          "healthy-write-lag",
          "db-compaction-interval",
          "skip-writes",
          "filter-by-max-ops",
          "max-per-page",
          "max-group-limit",
          "db-write-buffer-size",
          "db-max-write-buffer-number",
          "db-max-log-file-size",
          "db-keep-log-file-num",
          "max-indexing-concurrency",
          "enable-search-analytics",
          "disk-used-max-percentage",
          "memory-used-max-percentage",
          "analytics-dir"
        ]
      },
      "ServerConfigurationParameter": {
        "type": "object",
        "required": [
          "id",
          "parameter_name",
          "parameter_value",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "parameter_name": {
            "$ref": "#/components/schemas/ServerConfigurationParameterResponseName"
          },
          "parameter_value": {
            "type": "string"
          },
          "created_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "updated_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          }
        },
        "additionalProperties": false
      },
      "ServerConfigurationParameterCreateRequest": {
        "type": "object",
        "required": [
          "parameter_name",
          "parameter_value"
        ],
        "properties": {
          "parameter_name": {
            "$ref": "#/components/schemas/ServerConfigurationParameterName"
          },
          "parameter_value": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ServerConfigurationParameterUpdateRequest": {
        "type": "object",
        "required": [
          "parameter_value"
        ],
        "properties": {
          "parameter_value": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "DeleteResponse": {
        "type": "object",
        "required": [
          "success"
        ],
        "properties": {
          "success": {
            "type": "boolean",
            "const": true
          }
        },
        "additionalProperties": false
      },
      "Invoice": {
        "type": "object",
        "required": [
          "id",
          "number",
          "status",
          "amount_cents",
          "invoice_date",
          "period_starts_at",
          "period_ends_at",
          "line_items_path",
          "invoice_html_url",
          "account",
          "payment"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "number": {
            "type": "integer"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "due",
              "paid"
            ]
          },
          "amount_cents": {
            "type": "integer"
          },
          "invoice_date": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "period_starts_at": {
            "$ref": "#/components/schemas/EpochSeconds"
          },
          "period_ends_at": {
            "$ref": "#/components/schemas/NullableEpochSeconds"
          },
          "line_items_path": {
            "type": "string"
          },
          "invoice_html_url": {
            "type": "string",
            "format": "uri"
          },
          "account": {
            "type": "object",
            "required": [
              "owner_name",
              "owner_type",
              "billing_email",
              "additional_billing_information"
            ],
            "properties": {
              "owner_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "owner_type": {
                "type": "string",
                "enum": [
                  "Team",
                  "User"
                ]
              },
              "billing_email": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "additional_billing_information": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalProperties": false
          },
          "payment": {
            "type": "object",
            "required": [
              "paid_via_card_cents",
              "paid_via_credits_cents",
              "credit_balance_snapshot_cents"
            ],
            "properties": {
              "paid_via_card_cents": {
                "type": "integer"
              },
              "paid_via_credits_cents": {
                "type": "integer"
              },
              "credit_balance_snapshot_cents": {
                "type": "integer"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "InvoiceList": {
        "type": "object",
        "required": [
          "page",
          "per_page",
          "total",
          "invoices"
        ],
        "properties": {
          "page": {
            "type": "integer"
          },
          "per_page": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "invoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InvoiceSummary"
            }
          }
        },
        "additionalProperties": false
      },
      "InvoiceSummary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Invoice"
          }
        ],
        "unevaluatedProperties": false
      },
      "InvoiceWithLineItems": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Invoice"
          },
          {
            "type": "object",
            "required": [
              "line_items"
            ],
            "properties": {
              "line_items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/InvoiceLineItem"
                }
              }
            }
          }
        ],
        "unevaluatedProperties": false
      },
      "InvoiceLineItem": {
        "type": "object",
        "required": [
          "description",
          "unit_price_cents",
          "quantity",
          "price_cents",
          "line_item_type",
          "parameters"
        ],
        "properties": {
          "description": {
            "type": "string"
          },
          "unit_price_cents": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "price_cents": {
            "type": "number"
          },
          "line_item_type": {
            "type": "string",
            "enum": [
              "node",
              "bandwidth",
              "support",
              "prepaid_credit_purchase"
            ]
          },
          "parameters": {
            "type": "object",
            "properties": {
              "cluster_id": {
                "type": "string"
              },
              "memory_option": {
                "type": "string"
              },
              "vcpu_option": {
                "type": "string"
              },
              "gpu_option": {
                "$ref": "#/components/schemas/YesNo"
              },
              "high_performance_disk_option": {
                "$ref": "#/components/schemas/YesNo"
              },
              "high_availability_option": {
                "$ref": "#/components/schemas/YesNo"
              },
              "search_delivery_network_option": {
                "$ref": "#/components/schemas/SearchDeliveryNetwork"
              },
              "load_balancing_option": {
                "$ref": "#/components/schemas/YesNo"
              },
              "region": {
                "type": "string"
              },
              "plan_name": {
                "type": "string"
              },
              "starts_at": {
                "$ref": "#/components/schemas/EpochSeconds"
              },
              "ends_at": {
                "$ref": "#/components/schemas/NullableEpochSeconds"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "WorkflowStatus": {
        "type": "string",
        "enum": [
          "canceled",
          "failed",
          "pending",
          "in_progress",
          "succeeded"
        ]
      },
      "NullableWorkflowStatus": {
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "canceled",
          "failed",
          "pending",
          "in_progress",
          "succeeded",
          null
        ]
      },
      "NotificationEmailAddresses": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "email"
        }
      },
      "SubmittedNotificationEmailAddresses": {
        "type": "array",
        "description": "Notification addresses. Blank and null entries are discarded before validation.",
        "items": {
          "oneOf": [
            {
              "type": "string",
              "format": "email"
            },
            {
              "type": "string",
              "const": ""
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "YesNo": {
        "type": "string",
        "enum": [
          "yes",
          "no"
        ]
      },
      "NullableYesNo": {
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "yes",
          "no",
          null
        ]
      },
      "SearchDeliveryNetwork": {
        "type": "string",
        "enum": [
          "off",
          "3_regions",
          "5_regions",
          "multi_nodes_per_region"
        ]
      },
      "NullableSearchDeliveryNetwork": {
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "off",
          "3_regions",
          "5_regions",
          "multi_nodes_per_region",
          null
        ]
      },
      "NullableString": {
        "type": [
          "string",
          "null"
        ]
      },
      "EpochSeconds": {
        "type": "integer",
        "format": "int64",
        "description": "Unix timestamp in seconds."
      },
      "NullableEpochSeconds": {
        "type": [
          "integer",
          "null"
        ],
        "format": "int64",
        "description": "Unix timestamp in seconds, or null."
      },
      "EpochMilliseconds": {
        "type": "integer",
        "format": "int64",
        "description": "Unix timestamp in milliseconds."
      },
      "Account": {
        "type": "object",
        "required": [
          "id",
          "name",
          "type",
          "status",
          "credential"
        ],
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "individual",
              "team"
            ]
          },
          "status": {
            "type": "string"
          },
          "credential": {
            "type": "object",
            "required": [
              "type",
              "capabilities"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "management_api_key",
                  "oauth_grant"
                ]
              },
              "capabilities": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "acting_as": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Username of the human whose OAuth consent this credential carries, if any."
              }
            }
          }
        }
      },
      "ClusterOptions": {
        "type": "object",
        "required": [
          "regions",
          "memory",
          "vcpu_by_memory",
          "gpu",
          "high_performance_disk",
          "high_availability",
          "search_delivery_network",
          "free_tier"
        ],
        "properties": {
          "regions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "available"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The value to pass as a region."
                },
                "available": {
                  "type": "boolean",
                  "description": "False while the region has an outage; new clusters there are refused."
                }
              }
            }
          },
          "memory": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Memory options, smallest first."
          },
          "vcpu_by_memory": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "The vCPU options each memory option allows; a vcpu value is only valid with its memory."
          },
          "gpu": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "high_performance_disk": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "high_availability": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "search_delivery_network": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "free_tier": {
            "type": "object",
            "required": [
              "memory",
              "vcpu"
            ],
            "properties": {
              "memory": {
                "type": "string"
              },
              "vcpu": {
                "type": "string"
              }
            },
            "description": "The shape created without a payment method."
          }
        }
      },
      "MemoryOption": {
        "type": "string",
        "description": "Memory per node.",
        "enum": [
          "0.5_gb",
          "1_gb",
          "2_gb",
          "4_gb",
          "8_gb",
          "16_gb",
          "32_gb",
          "64_gb",
          "96_gb",
          "128_gb",
          "192_gb",
          "256_gb",
          "384_gb",
          "512_gb",
          "768_gb",
          "1024_gb"
        ]
      },
      "VcpuOption": {
        "type": "string",
        "description": "vCPUs per node. Valid values depend on the memory option; see MemoryVcpuPairing.",
        "enum": [
          "2_vcpus_1_hr_burst_per_day",
          "2_vcpus_2_hr_burst_per_day",
          "2_vcpus_4_hr_burst_per_day",
          "2_vcpus",
          "2_vcpus_7_hr_burst_per_day",
          "4_vcpus",
          "4_vcpus_5_hr_burst_per_day",
          "8_vcpus",
          "8_vcpus_4_hr_burst_per_day",
          "16_vcpus",
          "32_vcpus",
          "12_vcpus",
          "24_vcpus",
          "48_vcpus",
          "64_vcpus",
          "96_vcpus",
          "128_vcpus",
          "192_vcpus"
        ]
      },
      "Region": {
        "type": "string",
        "description": "A Typesense Cloud region.",
        "enum": [
          "n_california",
          "oregon",
          "n_virginia",
          "ohio",
          "canada",
          "sao_paulo",
          "ireland",
          "london",
          "paris",
          "zurich",
          "frankfurt",
          "stockholm",
          "milan",
          "spain",
          "cape_town",
          "bahrain",
          "uae",
          "mumbai",
          "hyderabad",
          "singapore",
          "jakarta",
          "seoul",
          "osaka",
          "tokyo",
          "melbourne",
          "sydney"
        ]
      },
      "MemoryVcpuPairing": {
        "description": "Each memory option allows a specific set of vcpu options. Sending a pair that is not listed here is refused with 400, and the error names the valid vcpu options for the memory option you sent.",
        "allOf": [
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "0.5_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus_1_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "1_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus_2_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "2_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus_4_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "4_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus_4_hr_burst_per_day",
                    "2_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "8_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus_7_hr_burst_per_day",
                    "2_vcpus",
                    "4_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "16_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "2_vcpus",
                    "4_vcpus_5_hr_burst_per_day",
                    "4_vcpus",
                    "8_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "32_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus_4_hr_burst_per_day",
                    "8_vcpus",
                    "16_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "64_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "96_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "12_vcpus",
                    "24_vcpus",
                    "48_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "128_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "192_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "24_vcpus",
                    "48_vcpus",
                    "96_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "256_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "384_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "48_vcpus",
                    "96_vcpus",
                    "192_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "512_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "768_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "24_vcpus",
                    "48_vcpus",
                    "96_vcpus",
                    "192_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "memory": {
                  "const": "1024_gb"
                }
              },
              "required": [
                "memory"
              ]
            },
            "then": {
              "properties": {
                "vcpu": {
                  "enum": [
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          }
        ]
      },
      "NewMemoryVcpuPairing": {
        "description": "Each memory option allows a specific set of vcpu options. Sending a pair that is not listed here is refused with 400, and the error names the valid vcpu options for the memory option you sent.",
        "allOf": [
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "0.5_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus_1_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "1_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus_2_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "2_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus_4_hr_burst_per_day"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "4_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus_4_hr_burst_per_day",
                    "2_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "8_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus_7_hr_burst_per_day",
                    "2_vcpus",
                    "4_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "16_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "2_vcpus",
                    "4_vcpus_5_hr_burst_per_day",
                    "4_vcpus",
                    "8_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "32_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus_4_hr_burst_per_day",
                    "8_vcpus",
                    "16_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "64_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "96_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "12_vcpus",
                    "24_vcpus",
                    "48_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "128_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "4_vcpus",
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "192_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "24_vcpus",
                    "48_vcpus",
                    "96_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "256_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "8_vcpus",
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "384_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "48_vcpus",
                    "96_vcpus",
                    "192_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "512_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "16_vcpus",
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "768_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "24_vcpus",
                    "48_vcpus",
                    "96_vcpus",
                    "192_vcpus"
                  ]
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "new_memory": {
                  "const": "1024_gb"
                }
              },
              "required": [
                "new_memory"
              ]
            },
            "then": {
              "properties": {
                "new_vcpu": {
                  "enum": [
                    "32_vcpus",
                    "64_vcpus",
                    "128_vcpus"
                  ]
                }
              }
            }
          }
        ]
      }
    }
  }
}
