> ## Documentation Index
> Fetch the complete documentation index at: https://gcore.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create virtual GPU cluster

> Create a new virtual GPU cluster with the specified configuration.



## OpenAPI

````yaml /api-reference/services_documented/cloud_api.yaml post /cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters
openapi: 3.1.0
info:
  title: Gcore OpenAPI – Cloud API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  version: '2026-05-14T07:00:22.640261+00:00'
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: Bare Metal
    x-displayName: Bare Metal
  - name: Container as a Service
    x-displayName: Container as a Service
  - name: Cost Reports
    x-displayName: Cost Reports
  - name: DDoS Protection
    x-displayName: DDoS Protection
  - name: Everywhere Inference
    x-displayName: Everywhere Inference
  - name: Everywhere Inference Apps
    x-displayName: Everywhere Inference Apps
  - name: File Shares
    x-displayName: File Shares
  - name: Floating IPs
    x-displayName: Floating IPs
  - name: Function as a Service
    x-displayName: Function as a Service
  - name: GPU Bare Metal
    x-displayName: GPU Bare Metal
  - name: GPU Virtual
    x-displayName: GPU Virtual
  - name: IP Ranges
    x-displayName: IP Ranges
  - name: Images
    x-displayName: Images
  - name: Instances
    x-displayName: Instances
  - name: Load Balancers
    x-displayName: Load Balancers
  - name: Logging
    x-displayName: Logging
  - name: Managed Kubernetes
    x-displayName: Managed Kubernetes
  - name: Managed PostgreSQL
    x-displayName: Managed PostgreSQL
  - name: Networks
    x-displayName: Networks
  - name: Placement Groups
    x-displayName: Placement Groups
  - name: Projects
    x-displayName: Projects
  - name: Quotas
    x-displayName: Quotas
  - name: Regions
    x-displayName: Regions
  - name: Registry
    x-displayName: Registry
  - name: Reservations
    x-displayName: Reservations
  - name: Reserved IPs
    x-displayName: Reserved IPs
  - name: Routers
    x-displayName: Routers
  - name: SSH Keys
    x-displayName: SSH Keys
  - name: Secrets
    x-displayName: Secrets
  - name: Security Groups
    x-displayName: Security Groups
  - name: Snapshot Schedules
    x-displayName: Snapshot Schedules
  - name: Snapshots
    x-displayName: Snapshots
  - name: Tasks
    x-displayName: Tasks
  - name: User Actions
    x-displayName: User Actions
  - name: User Role Assignments
    x-displayName: User Role Assignments
  - name: Volumes
    x-displayName: Volumes
paths:
  /cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters:
    post:
      tags:
        - GPU Virtual
      summary: Create virtual GPU cluster
      description: Create a new virtual GPU cluster with the specified configuration.
      operationId: VirtualClusterCollection.post
      parameters:
        - in: path
          name: project_id
          required: true
          description: Project ID
          schema:
            description: Project ID
            example: 1
            examples:
              - 1
            title: Project Id
            type: integer
        - in: path
          name: region_id
          required: true
          description: Region ID
          schema:
            description: Region ID
            example: 7
            examples:
              - 7
            title: Region Id
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterCreateSerializer'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskIDsSerializer'
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from gcore import Gcore

            client = Gcore(
                api_key=os.environ.get("GCORE_API_KEY"),  # This is the default and can be omitted
            )
            task_id_list = client.cloud.gpu_virtual.clusters.create(
                project_id=1,
                region_id=7,
                flavor="g3-ai-32-192-1500-l40s-48-1",
                name="gpu-cluster-1",
                servers_count=3,
                servers_settings={
                    "interfaces": [{
                        "type": "external"
                    }],
                    "volumes": [{
                        "boot_index": 1,
                        "name": "my-data-disk",
                        "size": 100,
                        "source": "new",
                        "type": "cold",
                    }],
                },
            )
            print(task_id_list.tasks)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/G-Core/gcore-go\"\n\t\"github.com/G-Core/gcore-go/cloud\"\n\t\"github.com/G-Core/gcore-go/option\"\n)\n\nfunc main() {\n\tclient := gcore.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\ttaskIDList, err := client.Cloud.GPUVirtual.Clusters.New(context.TODO(), cloud.GPUVirtualClusterNewParams{\n\t\tProjectID:    gcore.Int(1),\n\t\tRegionID:     gcore.Int(7),\n\t\tFlavor:       \"g3-ai-32-192-1500-l40s-48-1\",\n\t\tName:         \"gpu-cluster-1\",\n\t\tServersCount: 3,\n\t\tServersSettings: cloud.GPUVirtualClusterNewParamsServersSettings{\n\t\t\tInterfaces: []cloud.GPUVirtualClusterNewParamsServersSettingsInterfaceUnion{{\n\t\t\t\tOfExternal: &cloud.GPUVirtualClusterNewParamsServersSettingsInterfaceExternal{},\n\t\t\t}},\n\t\t\tVolumes: []cloud.GPUVirtualClusterNewParamsServersSettingsVolumeUnion{{\n\t\t\t\tOfNew: &cloud.GPUVirtualClusterNewParamsServersSettingsVolumeNew{\n\t\t\t\t\tBootIndex: 1,\n\t\t\t\t\tName:      \"my-data-disk\",\n\t\t\t\t\tSize:      100,\n\t\t\t\t\tType:      \"cold\",\n\t\t\t\t},\n\t\t\t}},\n\t\t},\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", taskIDList.Tasks)\n}\n"
components:
  schemas:
    ClusterCreateSerializer:
      properties:
        flavor:
          description: Cluster flavor ID
          example: g3-ai-32-192-1500-l40s-48-1
          examples:
            - g3-ai-32-192-1500-l40s-48-1
          title: Flavor
          type: string
        name:
          description: Cluster name
          example: gpu-cluster-1
          examples:
            - gpu-cluster-1
          maxLength: 63
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        servers_count:
          description: Number of servers in the cluster
          example: 3
          examples:
            - 3
          exclusiveMaximum: 1000
          exclusiveMinimum: 0
          title: Servers Count
          type: integer
        servers_settings:
          $ref: '#/components/schemas/VirtualServerSettingsInputSerializer'
          description: Configuration settings for the servers in the cluster
        tags:
          $ref: '#/components/schemas/CreateTagsSerializer'
          description: >-
            Key-value tags to associate with the resource. A tag is a key-value
            pair that can be associated with a resource, enabling efficient
            filtering and grouping for better organization and management. Both
            tag keys and values have a maximum length of 255 characters. Some
            tags are read-only and cannot be modified by the user. Tags are also
            integrated with cost reports, allowing cost data to be filtered
            based on tag keys or values.
          examples:
            - my-tag: my-tag-value
          x-stainless-terraform-configurability: computed_optional
      required:
        - name
        - flavor
        - servers_count
        - servers_settings
      title: ClusterCreateSerializer
      type: object
    TaskIDsSerializer:
      properties:
        tasks:
          description: >-
            List of task IDs representing asynchronous operations. Use these IDs
            to monitor operation progress:

            - `GET /v1/tasks/{task_id}` - Check individual task status and
            details

            Poll task status until completion (`FINISHED`/`ERROR`) before
            proceeding with dependent operations.
          example:
            - d478ae29-dedc-4869-82f0-96104425f565
          examples:
            - - d478ae29-dedc-4869-82f0-96104425f565
          items:
            type: string
          title: Tasks
          type: array
      required:
        - tasks
      title: TaskIDsSerializer
      type: object
    VirtualServerSettingsInputSerializer:
      properties:
        credentials:
          $ref: '#/components/schemas/ServerCredentialsSerializer'
          description: Optional server access credentials
        file_shares:
          description: List of file shares to be mounted across the cluster.
          items:
            $ref: '#/components/schemas/FileShareMountSerializer'
          title: File Shares
          type: array
          x-stainless-terraform-configurability: computed_optional
        interfaces:
          description: Subnet IPs and floating IPs
          items:
            discriminator:
              mapping:
                any_subnet:
                  $ref: '#/components/schemas/AnySubnetInterfaceInputSerializer'
                external:
                  $ref: '#/components/schemas/ExternalInterfaceInputSerializer'
                subnet:
                  $ref: '#/components/schemas/SubnetInterfaceInputSerializer'
              propertyName: type
            oneOf:
              - $ref: '#/components/schemas/ExternalInterfaceInputSerializer'
              - $ref: '#/components/schemas/SubnetInterfaceInputSerializer'
              - $ref: '#/components/schemas/AnySubnetInterfaceInputSerializer'
          title: Interfaces
          type: array
        security_groups:
          description: >-
            List of security group UUIDs. If omitted or an empty list, the
            default security group will be used.
          example:
            - id: b4849ffa-89f2-45a1-951f-0ae5b7809d98
          examples:
            - - id: b4849ffa-89f2-45a1-951f-0ae5b7809d98
          items:
            $ref: '#/components/schemas/MandatoryIdSerializerPydantic'
          title: Security Groups
          type: array
          x-stainless-terraform-configurability: computed_optional
        user_data:
          description: Optional custom user data (Base64-encoded)
          example: eyJ0ZXN0IjogImRhdGEifQ==
          examples:
            - eyJ0ZXN0IjogImRhdGEifQ==
          title: User Data
          type: string
          x-stainless-terraform-configurability: computed_optional
        volumes:
          description: List of volumes
          items:
            discriminator:
              mapping:
                image:
                  $ref: '#/components/schemas/ImageVolumeInputSerializer'
                new:
                  $ref: '#/components/schemas/NewVolumeInputSerializer'
              propertyName: source
            oneOf:
              - $ref: '#/components/schemas/NewVolumeInputSerializer'
              - $ref: '#/components/schemas/ImageVolumeInputSerializer'
          title: Volumes
          type: array
      required:
        - interfaces
        - volumes
      title: VirtualServerSettingsInputSerializer
      type: object
    CreateTagsSerializer:
      description: >-
        A tag is a key-value pair that can be associated with a resource,

        enabling efficient filtering and grouping for better organization and
        management.

        Some tags are read-only and cannot be modified by the user.

        Tags are also integrated with cost reports, allowing cost data to be
        filtered based on tag keys or values.
      patternProperties:
        ^[^\s=]+$:
          description: >-
            Tag value. Maximum 255 characters. Cannot contain tabs, newlines,
            empty string or start/end with whitespace.
          example: my-tag-value
          examples:
            - my-tag-value
          maxLength: 255
          minLength: 1
          pattern: ^[^ \t\n\r\f\v]([^\t\n\r\f\v]*[^ \t\n\r\f\v])?$
          type: string
      propertyNames:
        description: >-
          Tag key. Maximum 255 characters. Cannot contain spaces, tabs,
          newlines, empty string or '=' character.
        examples:
          - my-tag
        maxLength: 255
        minLength: 1
      title: CreateTagsSerializer
      type: object
    ServerCredentialsSerializer:
      properties:
        password:
          description: >-
            Used to set the password for the specified 'username' on Linux
            instances. If 'username' is not provided, the password is applied to
            the default user of the image. Mutually exclusive with 'user_data' -
            only one can be specified.
          example: securepassword
          examples:
            - securepassword
          format: password
          title: Password
          type: string
          writeOnly: true
        ssh_key_name:
          description: >-
            Specifies the name of the SSH keypair, created via the

            [/v1/`ssh_keys`
            endpoint](/docs/api-reference/cloud/ssh-keys/add-or-generate-ssh-key).
          example: my-ssh-key
          examples:
            - my-ssh-key
          minLength: 1
          title: Ssh Key Name
          type: string
        username:
          description: The 'username' and 'password' fields create a new user on the system
          example: admin
          examples:
            - admin
          title: Username
          type: string
      title: ServerCredentialsSerializer
      type: object
    FileShareMountSerializer:
      properties:
        id:
          description: Unique identifier of the file share in UUID format.
          example: a3f2d1b8-45e6-4f8a-bb5d-19dbf2cd7e9a
          examples:
            - a3f2d1b8-45e6-4f8a-bb5d-19dbf2cd7e9a
          format: uuid4
          title: Id
          type: string
        mount_path:
          description: >-
            Absolute mount path inside the system where the file share will be
            mounted.
          example: /mnt/vast
          examples:
            - /mnt/vast
          title: Mount Path
          type: string
      required:
        - id
        - mount_path
      title: FileShareMountSerializer
      type: object
    AnySubnetInterfaceInputSerializer:
      properties:
        floating_ip:
          $ref: '#/components/schemas/NewFloatingIpInterfaceSerializer'
          description: Floating IP config for this subnet attachment
        ip_family:
          default: ipv4
          description: 'Which subnets should be selected: IPv4, IPv6, or use dual stack'
          enum:
            - dual
            - ipv4
            - ipv6
          example: ipv4
          examples:
            - ipv4
          title: Ip Family
          type: string
        name:
          description: Interface name
          maxLength: 37
          title: Name
          type: string
          x-stainless-terraform-configurability: computed_optional
        network_id:
          description: >-
            Network ID the subnet belongs to. Port will be plugged in this
            network
          example: 59905c8e-2619-420a-b046-536096473370
          examples:
            - 59905c8e-2619-420a-b046-536096473370
          title: Network Id
          type: string
        type:
          const: any_subnet
          title: Type
          type: string
      required:
        - network_id
        - type
      title: AnySubnetInterfaceInputSerializer
      type: object
    ExternalInterfaceInputSerializer:
      properties:
        ip_family:
          default: ipv4
          description: 'Which subnets should be selected: IPv4, IPv6, or use dual stack.'
          enum:
            - dual
            - ipv4
            - ipv6
          example: ipv4
          examples:
            - ipv4
          title: Ip Family
          type: string
        name:
          description: Interface name
          example: eth0
          examples:
            - eth0
          maxLength: 37
          title: Name
          type: string
          x-stainless-terraform-configurability: computed_optional
        type:
          const: external
          title: Type
          type: string
      required:
        - type
      title: ExternalInterfaceInputSerializer
      type: object
    SubnetInterfaceInputSerializer:
      properties:
        floating_ip:
          $ref: '#/components/schemas/NewFloatingIpInterfaceSerializer'
          description: Floating IP config for this subnet attachment
        name:
          description: Interface name
          maxLength: 37
          title: Name
          type: string
          x-stainless-terraform-configurability: computed_optional
        network_id:
          description: >-
            Network ID the subnet belongs to. Port will be plugged in this
            network
          example: 59905c8e-2619-420a-b046-536096473370
          examples:
            - 59905c8e-2619-420a-b046-536096473370
          title: Network Id
          type: string
        subnet_id:
          description: Port is assigned an IP address from this subnet
          example: e3c6ee77-48cb-416b-b204-11b492cc776e3
          examples:
            - e3c6ee77-48cb-416b-b204-11b492cc776e3
          format: uuid4
          title: Subnet Id
          type: string
        type:
          const: subnet
          title: Type
          type: string
      required:
        - network_id
        - type
        - subnet_id
      title: SubnetInterfaceInputSerializer
      type: object
    MandatoryIdSerializerPydantic:
      properties:
        id:
          description: Resource ID
          example: ae74714c-c380-48b4-87f8-758d656cdad6
          examples:
            - ae74714c-c380-48b4-87f8-758d656cdad6
          format: uuid4
          title: Id
          type: string
      required:
        - id
      title: MandatoryIdSchema schema
      type: object
    ImageVolumeInputSerializer:
      properties:
        boot_index:
          description: Boot index of the volume
          example: 1
          examples:
            - 1
          minimum: 0
          title: Boot Index
          type: integer
        delete_on_termination:
          default: false
          description: >-
            Flag indicating whether the volume is deleted on instance
            termination
          example: true
          examples:
            - true
          title: Delete On Termination
          type: boolean
        image_id:
          description: Image ID for the volume
          example: 3793c250-0b3b-4678-bab3-e11afbc29657
          examples:
            - 3793c250-0b3b-4678-bab3-e11afbc29657
          format: uuid4
          title: Image Id
          type: string
        name:
          description: Volume name
          example: my-data-disk
          examples:
            - my-data-disk
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        size:
          description: Volume size in GiB
          example: 100
          examples:
            - 100
          exclusiveMaximum: 102400
          exclusiveMinimum: 0
          title: Size
          type: integer
        source:
          const: image
          title: Source
          type: string
        tags:
          additionalProperties:
            type: string
          description: Tags associated with the volume
          example:
            key1: value1
          examples:
            - key1: value1
          title: Tags
          type: object
        type:
          $ref: '#/components/schemas/AllVolumeTypeEnum'
          description: Volume type
          examples:
            - ssd
      required:
        - size
        - type
        - name
        - boot_index
        - source
        - image_id
      title: ImageVolumeInputSerializer
      type: object
    NewVolumeInputSerializer:
      properties:
        boot_index:
          description: Boot index of the volume
          example: 1
          examples:
            - 1
          minimum: 0
          title: Boot Index
          type: integer
        delete_on_termination:
          default: false
          description: >-
            Flag indicating whether the volume is deleted on instance
            termination
          example: true
          examples:
            - true
          title: Delete On Termination
          type: boolean
        name:
          description: Volume name
          example: my-data-disk
          examples:
            - my-data-disk
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        size:
          description: Volume size in GiB
          example: 100
          examples:
            - 100
          exclusiveMaximum: 102400
          exclusiveMinimum: 0
          title: Size
          type: integer
        source:
          const: new
          title: Source
          type: string
        tags:
          additionalProperties:
            type: string
          description: Tags associated with the volume
          example:
            key1: value1
          examples:
            - key1: value1
          title: Tags
          type: object
        type:
          $ref: '#/components/schemas/AllVolumeTypeEnum'
          description: Volume type
          examples:
            - ssd
      required:
        - size
        - type
        - name
        - boot_index
        - source
      title: NewVolumeInputSerializer
      type: object
    NewFloatingIpInterfaceSerializer:
      properties:
        source:
          const: new
          title: Source
          type: string
      required:
        - source
      title: NewFloatingIpInterfaceSerializer
      type: object
    AllVolumeTypeEnum:
      enum:
        - cold
        - ssd_hiiops
        - ssd_local
        - ssd_lowlatency
        - standard
        - ultra
      title: AllVolumeTypeEnum
      type: string
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234$abcdef`
      type: apiKey
      in: header
      name: Authorization

````