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

# Get a virtual machine

> Retrieves the details of a virtual machine.



## OpenAPI

````yaml /openapi.json get /v1/projects/{projectId}/vms/{id}
openapi: 3.0.3
info:
  description: >-
    The CUDO Compute API is organized around
    [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer). Our
    API uses predictable resource-oriented URLs, accepts and returns
    [JSON](http://www.json.org/)-encoded requests and responses, and uses
    standard HTTP response codes, authentication, and verbs where possible.
  title: CUDO Compute service
  version: 1.0.0
servers:
  - url: https://rest.compute.cudo.org/
security:
  - bearerAuth: []
tags:
  - description: API keys allow you to authenticate requests with the CUDO Compute API.
    name: API keys
  - description: >
      Billing accounts hold all billing related information such as credit
      balance, payment methods & transaction history. You can use the same
      billing account for multiple projects.


      Related guide: [Billing](https://www.cudocompute.com/docs/billing)
    name: Billing
  - description: >
      Clusters are high-performance computing environments that can be used to
      run large-scale parallel and distributed applications.


      Related guide: [Clusters](https://www.cudocompute.com/docs/clusters)
    name: Clusters
  - description: >
      Storage disks are virtual disks that operate just like physical disks. You
      can attach & detach created storage disks to and from virtual machines in
      the same data center.


      Related guide: [Disks](https://www.cudocompute.com/docs/disks)
    name: Disks
  - description: |
      Images are boot disk templates used to create virtual machines.

      Related guide: [Images](https://www.cudocompute.com/docs/images)
    name: Images
  - description: >
      Bare-metal machines are dedicated physical servers for high-performance
      computing, offering full control and isolation from other users.


      Related guide: [Bare metal](https://www.cudocompute.com/docs/bare-metal)
    name: Machines
  - description: >
      Private networks allow you to securely connect your virtual machines
      together.


      Related guide: [Networks](https://www.cudocompute.com/docs/networks)
    name: Networks
  - description: >
      Store large amounts of unstructured data, including audio, video and user
      uploaded files.


      Related guide: [Object
      storage](https://www.cudocompute.com/docs/object-storage)
    name: Object storage
  - description: >
      Projects are containers for cloud resources, such as virtual machines &
      clusters.
    name: Projects
  - description: Operations for searching available compute resources.
    name: Resources
  - description: >
      SSH keys are access credentials that are automatically added to bare-metal
      and virtual machines you create.
    name: SSH keys
  - description: Operations related to user accounts and identity verification.
    name: Users
  - description: >
      A virtual machine (VM) is a software emulation of a physical computer.


      Related guide: [Virtual
      machines](https://www.cudocompute.com/docs/virtual-machines)
    name: Virtual machines
  - description: >
      Volumes are high-performance Network File Systems that allow cluster
      machines to share training data and model checkpoints.


      Related guide: [Volumes](https://www.cudocompute.com/docs/volumes)
    name: Volumes
paths:
  /v1/projects/{projectId}/vms/{id}:
    get:
      tags:
        - Virtual machines
      summary: Get a virtual machine
      description: Retrieves the details of a virtual machine.
      operationId: GetVM
      parameters:
        - in: path
          name: projectId
          required: true
          schema:
            type: string
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetVMResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
          description: An unexpected error response.
components:
  schemas:
    GetVMResponse:
      properties:
        VM:
          $ref: '#/components/schemas/VM'
        gpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        ipv4PriceHr:
          $ref: '#/components/schemas/Decimal'
        memoryGibPriceHr:
          $ref: '#/components/schemas/Decimal'
        storageGibPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalGpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalMemoryPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalStoragePriceHr:
          $ref: '#/components/schemas/Decimal'
        totalVcpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        vcpuPriceHr:
          $ref: '#/components/schemas/Decimal'
      required:
        - VM
        - vcpuPriceHr
        - totalVcpuPriceHr
        - memoryGibPriceHr
        - totalMemoryPriceHr
        - gpuPriceHr
        - totalGpuPriceHr
        - storageGibPriceHr
        - totalStoragePriceHr
        - ipv4PriceHr
        - totalPriceHr
      type: object
    Status:
      properties:
        code:
          format: int32
          type: integer
        details:
          items:
            $ref: '#/components/schemas/Any'
          type: array
        message:
          type: string
      type: object
    VM:
      properties:
        authorizedSshKeys:
          type: string
        bootDisk:
          $ref: '#/components/schemas/Disk'
        bootDiskSizeGib:
          format: int64
          type: integer
        commitmentEndTime:
          format: date-time
          readOnly: true
          type: string
        commitmentTerm:
          $ref: '#/components/schemas/CommitmentTerm'
        cpuModel:
          type: string
        createBy:
          readOnly: true
          type: string
        createTime:
          format: date-time
          readOnly: true
          type: string
        datacenterId:
          readOnly: true
          type: string
        expireTime:
          format: date-time
          readOnly: true
          type: string
        externalIpAddress:
          type: string
        gpuModel:
          type: string
        gpuModelId:
          type: string
        gpuQuantity:
          format: int64
          type: integer
        id:
          type: string
        imageId:
          type: string
        imageName:
          type: string
        internalIpAddress:
          type: string
        machineType:
          type: string
        memory:
          format: int64
          type: integer
        metadata:
          additionalProperties:
            type: string
          type: object
        nics:
          items:
            $ref: '#/components/schemas/VM.NIC'
          type: array
        price:
          $ref: '#/components/schemas/VMPrice'
        privateImageId:
          type: string
        projectId:
          type: string
        publicImageId:
          type: string
        publicImageName:
          type: string
        publicIpAddress:
          type: string
        renewableEnergy:
          type: boolean
        rules:
          items:
            $ref: '#/components/schemas/SecurityGroupRule'
          type: array
        securityGroupIds:
          items:
            type: string
          type: array
        securityGroups:
          items:
            $ref: '#/components/schemas/SecurityGroup'
          type: array
        shortState:
          type: string
        sshKeySource:
          $ref: '#/components/schemas/SshKeySource'
        state:
          $ref: '#/components/schemas/VmState'
        storageDisks:
          items:
            $ref: '#/components/schemas/Disk'
          type: array
        vcpus:
          format: int64
          type: integer
      required:
        - commitmentTerm
        - projectId
      type: object
    Decimal:
      description: >-
        A representation of a decimal value, such as 2.5. Clients may convert
        values

        into language-native decimal formats, such as Java's [BigDecimal][] or

        Python's [decimal.Decimal][].


        [BigDecimal]:

        https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html

        [decimal.Decimal]: https://docs.python.org/3/library/decimal.html
      properties:
        value:
          description: >-
            The decimal value, as a string.


            The string representation consists of an optional sign, `+`
            (`U+002B`)

            or `-` (`U+002D`), followed by a sequence of zero or more decimal
            digits

            ("the integer"), optionally followed by a fraction, optionally
            followed

            by an exponent.


            The fraction consists of a decimal point followed by zero or more
            decimal

            digits. The string must contain at least one digit in either the
            integer

            or the fraction. The number formed by the sign, the integer and the

            fraction is referred to as the significand.


            The exponent consists of the character `e` (`U+0065`) or `E`
            (`U+0045`)

            followed by one or more decimal digits.


            Services **should** normalize decimal values before storing them by:

              - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
              - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
              - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).
              - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).

            Services **may** perform additional normalization based on its own
            needs

            and the internal decimal implementation selected, such as shifting
            the

            decimal point and exponent value together (example: `2.5e-1` <->
            `0.25`).

            Additionally, services **may** preserve trailing zeroes in the
            fraction

            to indicate increased precision, but are not required to do so.


            Note that only the `.` character is supported to divide the integer

            and the fraction; `,` **should not** be supported regardless of
            locale.

            Additionally, thousand separators **should not** be supported. If a

            service does support them, values **must** be normalized.


            The ENBF grammar is:

                DecimalString =
                  [Sign] Significand [Exponent];

                Sign = '+' | '-';

                Significand =
                  Digits ['.'] [Digits] | [Digits] '.' Digits;

                Exponent = ('e' | 'E') [Sign] Digits;

                Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

            Services **should** clearly document the range of supported values,
            the

            maximum supported precision (total number of digits), and, if
            applicable,

            the scale (number of digits after the decimal point), as well as how
            it

            behaves when receiving out-of-bounds values.


            Services **may** choose to accept values passed as input even when
            the

            value has a higher precision or scale than the service supports, and

            **should** round the value to fit the supported scale.
            Alternatively, the

            service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in
            gRPC)

            if precision would be lost.


            Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT`
            in

            gRPC) if the service receives a value outside of the supported
            range.
          type: string
      type: object
    Any:
      additionalProperties: {}
      properties:
        '@type':
          type: string
      type: object
    Disk:
      properties:
        createTime:
          format: date-time
          readOnly: true
          type: string
        dataCenterId:
          type: string
        diskState:
          $ref: '#/components/schemas/DiskState'
        diskType:
          $ref: '#/components/schemas/DiskType'
        id:
          type: string
        privateImageId:
          readOnly: true
          type: string
        projectId:
          type: string
        publicImageId:
          readOnly: true
          type: string
        sizeGib:
          format: int32
          type: integer
        vmId:
          readOnly: true
          type: string
      required:
        - id
        - projectId
        - dataCenterId
        - sizeGib
      type: object
    CommitmentTerm:
      default: COMMITMENT_TERM_NONE
      enum:
        - COMMITMENT_TERM_NONE
        - COMMITMENT_TERM_1_MONTH
        - COMMITMENT_TERM_3_MONTHS
        - COMMITMENT_TERM_6_MONTHS
        - COMMITMENT_TERM_12_MONTHS
        - COMMITMENT_TERM_24_MONTHS
        - COMMITMENT_TERM_36_MONTHS
        - COMMITMENT_TERM_60_MONTHS
      type: string
    VM.NIC:
      properties:
        externalIpAddress:
          type: string
        internalIpAddress:
          type: string
        networkAddress:
          type: string
        networkId:
          type: string
        securityGroupIds:
          items:
            type: string
          type: array
      type: object
    VMPrice:
      properties:
        gpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        ipv4AddressPriceHr:
          $ref: '#/components/schemas/Decimal'
        memoryGibPriceHr:
          $ref: '#/components/schemas/Decimal'
        storageGibPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalGpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalMemoryPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalPriceHr:
          $ref: '#/components/schemas/Decimal'
        totalStoragePriceHr:
          $ref: '#/components/schemas/Decimal'
        totalVcpuPriceHr:
          $ref: '#/components/schemas/Decimal'
        vcpuPriceHr:
          $ref: '#/components/schemas/Decimal'
      required:
        - vcpuPriceHr
        - totalVcpuPriceHr
        - memoryGibPriceHr
        - totalMemoryPriceHr
        - gpuPriceHr
        - totalGpuPriceHr
        - storageGibPriceHr
        - totalStoragePriceHr
        - ipv4AddressPriceHr
        - totalPriceHr
      type: object
    SecurityGroupRule:
      properties:
        icmpType:
          type: string
        id:
          type: string
        ipRangeCidr:
          title: single IP or CIDR format range to apply rule to
          type: string
        ports:
          type: string
        protocol:
          $ref: '#/components/schemas/SecurityGroupRule.Protocol'
        ruleType:
          $ref: '#/components/schemas/SecurityGroupRule.RuleType'
      type: object
    SecurityGroup:
      properties:
        dataCenterId:
          type: string
        description:
          type: string
        id:
          type: string
        projectId:
          type: string
        rules:
          items:
            $ref: '#/components/schemas/Rule'
          type: array
      required:
        - dataCenterId
        - id
      type: object
    SshKeySource:
      default: SSH_KEY_SOURCE_UNKNOWN
      enum:
        - SSH_KEY_SOURCE_UNKNOWN
        - SSH_KEY_SOURCE_PROJECT
        - SSH_KEY_SOURCE_USER
        - SSH_KEY_SOURCE_NONE
      type: string
    VmState:
      default: CLONING
      enum:
        - CLONING
        - CREATING_SNAPSHOT
        - DELETED
        - DELETING
        - DELETING_SNAPSHOT
        - FAILED
        - HOTPLUGGING
        - MIGRATING
        - RECREATING
        - REVERTING_SNAPSHOT
        - RESIZING
        - RESIZING_DISK
        - ACTIVE
        - STARTING
        - STOPPED
        - STOPPING
        - SUSPENDED
        - SUSPENDING
        - UNKNOWN
        - PENDING
      type: string
    DiskState:
      default: UNKNOWN
      enum:
        - UNKNOWN
        - ATTACHED
        - CLONING
        - CREATING
        - DELETING
        - DISABLED
        - FAILED
        - READY
        - UPDATING
      type: string
    DiskType:
      default: DISK_TYPE_UNKNOWN
      enum:
        - DISK_TYPE_UNKNOWN
        - DISK_TYPE_BOOT
        - DISK_TYPE_STORAGE
      type: string
    SecurityGroupRule.Protocol:
      default: PROTOCOL_UNKNOWN
      enum:
        - PROTOCOL_UNKNOWN
        - PROTOCOL_ALL
        - PROTOCOL_TCP
        - PROTOCOL_UDP
        - PROTOCOL_ICMP
        - PROTOCOL_ICMPv6
        - PROTOCOL_IPSEC
      type: string
    SecurityGroupRule.RuleType:
      default: RULE_TYPE_UNKNOWN
      enum:
        - RULE_TYPE_UNKNOWN
        - RULE_TYPE_INBOUND
        - RULE_TYPE_OUTBOUND
      type: string
    Rule:
      properties:
        icmpType:
          type: string
        id:
          type: string
        ipRangeCidr:
          title: single IP or CIDR format range to apply rule to
          type: string
        ports:
          type: string
        protocol:
          $ref: '#/components/schemas/Rule.Protocol'
        ruleType:
          $ref: '#/components/schemas/Rule.RuleType'
      type: object
    Rule.Protocol:
      default: PROTOCOL_UNKNOWN
      enum:
        - PROTOCOL_UNKNOWN
        - PROTOCOL_ALL
        - PROTOCOL_TCP
        - PROTOCOL_UDP
        - PROTOCOL_ICMP
        - PROTOCOL_ICMPv6
        - PROTOCOL_IPSEC
      type: string
    Rule.RuleType:
      default: RULE_TYPE_UNKNOWN
      enum:
        - RULE_TYPE_UNKNOWN
        - RULE_TYPE_INBOUND
        - RULE_TYPE_OUTBOUND
      type: string
  securitySchemes:
    bearerAuth:
      description: >-
        API key authentication. API keys should be passed using the format
        `Bearer API_KEY`.
      in: header
      name: Authorization
      type: apiKey

````