ControlUp Scaling profiles API

The Scaling profiles API from ControlUp — 3 operation(s) for scaling profiles.

OpenAPI Specification

controlup-scaling-profiles-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DaaS IQ Scaling profiles API
  description: 'Multi-cloud Virtual Desktop Infrastructure Management API (Default Version: v1.0)


    🔒 **Authentication**


    This API supports two authentication methods:


    **1. API Key (Bearer Token)** - Recommended for programmatic access

    - Create an API key at [API Key Management](https://support.controlup.com/docs/create-an-api-key)

    - Include in requests: `Authorization: Bearer YOUR_API_KEY`


    **2. Cookie Authentication** - For browser-based access

    - Login via DEX authentication service

    - The `user_dex_token` cookie will be automatically included'
  contact:
    name: ControlUp Support
    url: https://controlup.com/support
    email: support@controlup.com
  version: v1
  x-build-version: 1.0.107
servers:
- url: https://api.controlup.com/daas-iq/v1
tags:
- name: Scaling profiles
paths:
  /cloud/scaling-profiles:
    get:
      tags:
      - Scaling profiles
      summary: Get scaling profiles
      description: 'Returns every scaling profile in the organization — reusable autoscale configurations that a host pool''s weekly schedule assigns to time blocks.

        Profiles are organization-wide and not bound to any pool, so this does not say where a profile is used.

        Filterable and sortable on Id, Name, Description, Color.'
      operationId: GetScalingProfiles
      parameters:
      - name: sort
        in: query
        description: 'Sort expression for ordering results.


          Format:

          field:direction,otherField:direction


          Directions: asc, desc, ascending, descending — defaults to ascending when omitted


          Fields (names are matched case-insensitively):

          color, description, elasticScalingMode, id, name, provisioningMode


          Default when omitted: name:asc.'
        schema:
          maxLength: 256
          type: string
          example: color:desc,name:asc
        examples:
          default:
            summary: default
            value: name:asc
        x-foundry-sort:
          fields:
          - color
          - description
          - elasticScalingMode
          - id
          - name
          - provisioningMode
          dynamicPaths: false
          defaultField: name
          defaultAscending: true
      - name: filter
        in: query
        description: 'Filter expression for filtering results.


          Supports JSON and RQL formats:


          - JSON: {"and":[{"field":"status","op":"eq","value":"Active"},{"field":"name","op":"ct","value":"Smith, John"}]}

          - RQL: and(eq(status,Active),ct(name,Smith%2C%20John)) — values are URL-decoded; encode reserved characters


          Operators:

          and, or, not (logical); eq, neq, ct, nct, sw, nsw, ew, new, gt, gte, lt, lte (predicate)


          Fields (names are matched case-insensitively):

          color, description, elasticScalingMode, id, name, provisioningMode'
        schema:
          maxLength: 512
          type: string
          example: and(eq(color,blue),sw(name,dev))
        examples:
          json:
            summary: json
            value: '{"field":"name","op":"eq","value":"value"}'
          rql:
            summary: rql
            value: eq(name,value)
        x-foundry-filter:
          fields:
          - color
          - description
          - elasticScalingMode
          - id
          - name
          - provisioningMode
          operators:
            logical:
            - and
            - or
            - not
            predicate:
            - eq
            - neq
            - ct
            - nct
            - sw
            - nsw
            - ew
            - new
            - gt
            - gte
            - lt
            - lte
          dynamicPaths: false
      responses:
        '200':
          description: Successfully retrieved the list of scaling profiles.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ScalingProfileResult'
        '400':
          description: Bad request. Invalid filter or sort expression.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have permission to view scaling profiles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
    post:
      tags:
      - Scaling profiles
      summary: Create a scaling profile
      description: Creates a new scaling profile with the specified configuration.
      operationId: CreateScalingProfile
      requestBody:
        description: The scaling profile data to create.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveScalingProfileRequest'
        required: true
      responses:
        '201':
          description: Successfully created the scaling profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScalingProfileResponseDto'
        '400':
          description: Bad request. Invalid scaling profile data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have manage scaling permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict. A scaling profile with the same name already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
  /cloud/scaling-profiles/{id}:
    get:
      tags:
      - Scaling profiles
      summary: Get a scaling profile by ID
      description: 'Returns one scaling profile with its complete nested configuration, including thresholds and host count rules.

        Returns the definition only — it does not say which host pools use the profile or whether it is currently active.'
      operationId: GetScalingProfile
      parameters:
      - name: id
        in: path
        description: The unique scaling profile identifier.
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully retrieved the scaling profile details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScalingProfileResponseDto'
        '400':
          description: Bad request. Invalid scaling profile ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have manage scaling permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found. The specified scaling profile does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
    put:
      tags:
      - Scaling profiles
      summary: Update a scaling profile
      description: Updates an existing scaling profile with the specified configuration.
      operationId: UpdateScalingProfile
      parameters:
      - name: id
        in: path
        description: The unique scaling profile identifier.
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: The updated scaling profile data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveScalingProfileRequest'
        required: true
      responses:
        '200':
          description: Successfully updated the scaling profile.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScalingProfileResponseDto'
        '400':
          description: Bad request. Invalid scaling profile data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have manage scaling permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found. The specified scaling profile does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict. A scaling profile with the same name already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
    delete:
      tags:
      - Scaling profiles
      summary: Delete a scaling profile
      description: Deletes a scaling profile. Cannot delete profiles that are currently in use by schedules.
      operationId: DeleteScalingProfile
      parameters:
      - name: id
        in: path
        description: The unique scaling profile identifier.
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '204':
          description: Successfully deleted the scaling profile.
        '400':
          description: Bad request. Invalid scaling profile ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have manage scaling permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found. The specified scaling profile does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict. Cannot delete scaling profile that is currently in use by schedules.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
  /cloud/scaling-profiles/{id}/color:
    patch:
      tags:
      - Scaling profiles
      summary: Update scaling profile color
      description: Updates the display color of a scaling profile.
      operationId: UpdateScalingProfileColor
      parameters:
      - name: id
        in: path
        description: The unique scaling profile identifier.
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: The color update request.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeScalingProfileColorRequest'
        required: true
      responses:
        '200':
          description: Successfully updated the scaling profile color.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScalingProfileResult'
        '400':
          description: Bad request. Invalid color identifier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized. User is not authenticated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment required. No active license for the organization.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden. User does not have manage scaling permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found. The specified scaling profile does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable. License status could not be verified. Try again later.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
      - BearerAuth: []
      - CookieAuth: []
components:
  schemas:
    ScalingStrategyDto:
      required:
      - provisioningMode
      - smartMinimums
      type: object
      properties:
        provisioningMode:
          $ref: '#/components/schemas/ProvisioningMode'
        staticConfig:
          $ref: '#/components/schemas/StaticConfigDto'
        elasticConfig:
          $ref: '#/components/schemas/ElasticConfigDto'
        smartMinimums:
          $ref: '#/components/schemas/SmartMinimumsDto'
      additionalProperties: false
      description: Scaling strategy including provisioning mode and mode-specific configuration.
    StaticConfigDto:
      required:
      - createAdditionalHostsIfNeeded
      - hostsToPowerOn
      type: object
      properties:
        hostsToPowerOn:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Number of hosts to keep powered on.
          format: int32
        createAdditionalHostsIfNeeded:
          type: boolean
          description: Whether to create additional hosts if not enough exist in the pool.
      additionalProperties: false
      description: Static provisioning configuration.
    ScaleTriggersDto:
      required:
      - freeSessionsThreshold
      type: object
      properties:
        cpuThresholdPercent:
          maximum: 100
          minimum: 5
          type:
          - integer
          - 'null'
          description: CPU usage threshold percentage. Null (omitted) means the metric is disabled and will not be evaluated.
          format: int32
        memoryThresholdPercent:
          maximum: 100
          minimum: 5
          type:
          - integer
          - 'null'
          description: Memory usage threshold percentage. Null (omitted) means the metric is disabled and will not be evaluated.
          format: int32
        freeSessionsThreshold:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Free sessions threshold for scaling actions. Required — cannot be disabled.
          format: int32
      additionalProperties: false
      description: Performance thresholds that trigger scaling actions.
    ElasticScalingMode:
      enum:
      - powerManagementOnly
      - dynamicHosts
      type: string
      description: Defines the elastic scaling mode for host pool capacity management.
    ProvisioningMode:
      enum:
      - static
      - elastic
      type: string
      description: Defines the provisioning and scaling mode for host pools.
    ScalingProfileResult:
      required:
      - color
      - description
      - id
      - name
      - provisioningMode
      - usedByHostPools
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the scaling profile.
          format: uuid
        name:
          type: string
          description: User-friendly name for the scaling profile.
        description:
          type: string
          description: Description explaining the purpose and behavior of this scaling profile.
        color:
          type: string
          description: 'Color identifier for this scaling profile. The UI maps this ID to actual colors.

            Examples: "blue", "primary-1", "accent-red", etc.'
        provisioningMode:
          $ref: '#/components/schemas/ProvisioningMode'
        elasticScalingMode:
          $ref: '#/components/schemas/ElasticScalingMode'
        usedByHostPools:
          type: array
          items:
            $ref: '#/components/schemas/HostPoolInfo'
          description: Host pools currently using this scaling profile.
      additionalProperties: false
      description: Represents a scaling profile that defines scaling behavior and parameters.
    ScalingProfileResponseDto:
      required:
      - color
      - experience
      - id
      - name
      - strategy
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 3
          type: string
          description: User-friendly name for the scaling profile.
        description:
          maxLength: 500
          minLength: 0
          type:
          - string
          - 'null'
          description: Optional description for the scaling profile.
        color:
          maxLength: 50
          minLength: 1
          type: string
          description: 'Color identifier for this scaling profile. The UI defines available color IDs and their visual representation.

            Examples: "blue", "primary-1", "accent-red", etc.'
        strategy:
          $ref: '#/components/schemas/ScalingStrategyDto'
        experience:
          $ref: '#/components/schemas/UserExperienceDto'
        id:
          type: string
          description: Unique identifier for the scaling profile.
          format: uuid
      additionalProperties: false
      description: 'Full scaling profile response including all configuration details.

        Returned when fetching a specific scaling profile by ID.'
    NotificationSettingsDto:
      required:
      - allowSnooze
      - gracePeriodMinutes
      - maximumSnoozes
      - notificationMessage
      - notificationTitle
      type: object
      properties:
        gracePeriodMinutes:
          maximum: 2147483647
          minimum: 1
          type: integer
          description: Grace period in minutes before users are logged off after notification.
          format: int32
        notificationTitle:
          maxLength: 200
          minLength: 1
          type: string
          description: Notification title displayed to users.
        notificationMessage:
          maxLength: 2000
          minLength: 1
          type: string
          description: Notification message displayed to users.
        allowSnooze:
          type: boolean
          description: Whether users are allowed to snooze the notification.
        maximumSnoozes:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Maximum number of times users can snooze notifications.
          format: int32
      additionalProperties: false
      description: User notification settings when sessions are about to be ended.
    ElasticPerformanceDto:
      required:
      - aggressiveness
      - scaleInTriggers
      - scaleOutTriggers
      - stabilizationWindowMinutes
      type: object
      properties:
        scaleOutTriggers:
          $ref: '#/components/schemas/ScaleTriggersDto'
        scaleInTriggers:
          $ref: '#/components/schemas/ScaleTriggersDto'
        aggressiveness:
          $ref: '#/components/schemas/ScalingAggressiveness'
        stabilizationWindowMinutes:
          maximum: 60
          minimum: 1
          type: integer
          description: Stabilization window in minutes before evaluating scaling actions.
          format: int32
      additionalProperties: false
      description: Performance settings for elastic provisioning.
    SaveScalingProfileRequest:
      required:
      - color
      - experience
      - name
      - strategy
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 3
          type: string
          description: User-friendly name for the scaling profile.
        description:
          maxLength: 500
          minLength: 0
          type:
          - string
          - 'null'
          description: Optional description for the scaling profile.
        color:
          maxLength: 50
          minLength: 1
          type: string
          description: 'Color identifier for this scaling profile. The UI defines available color IDs and their visual representation.

            Examples: "blue", "primary-1", "accent-red", etc.'
        strategy:
          $ref: '#/components/schemas/ScalingStrategyDto'
        experience:
          $ref: '#/components/schemas/UserExperienceDto'
      additionalProperties: false
      description: 'Consolidated request model for creating or updating a scaling profile.

        Use for both POST (create) and PUT (update) operations.'
    ErrorResponse:
      required:
      - status
      - title
      - traceId
      type: object
      properties:
        type:
          type:
          - string
          - 'null'
          description: A URI reference that identifies the problem type.
        title:
          type: string
          description: A short, human-readable summary of the problem type.
        status:
          type: integer
          description: The HTTP status code.
          format: int32
        detail:
          type:
          - string
          - 'null'
          description: A human-readable explanation specific to this occurrence of the problem.
        instance:
          type:
          - string
          - 'null'
          description: A URI reference that identifies the specific occurrence of the problem.
        errors:
          type:
          - object
          - 'null'
          additionalProperties:
            type: array
            items:
              type: string
          description: 'Dictionary of field-specific validation errors (only present for validation failures).

            Key is the field name, value is an array of error messages for that field.'
        traceId:
          type: string
          description: Request ID (cu-request-id) for tracking and debugging purposes.
      additionalProperties: false
      description: 'Standard error body the API returns when a request fails validation or cannot be completed.

        Follows RFC 7807 Problem Details with additional `errors` and `traceId` fields.'
    SmartMinimumsDto:
      required:
      - enabled
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether smart minimums is enabled.
        utilizationThresholdPercent:
          maximum: 100
          minimum: 1
          type:
          - integer
          - 'null'
          description: Utilization threshold percentage below which the minimum hosts rule is ignored.
          format: int32
        timeWindowMinutes:
          maximum: 2147483647
          minimum: 1
          type:
          - integer
          - 'null'
          description: Time window in minutes to evaluate utilization before scaling down.
          format: int32
        scaleDownToHostCount:
          maximum: 2147483647
          minimum: 0
          type:
          - integer
          - 'null'
          description: Number of hosts to scale down to when utilization is below threshold.
          format: int32
      additionalProperties: false
      description: Smart minimums configuration to prevent scaling down during low utilization.
    ScalingAggressiveness:
      enum:
      - gentle
      - balanced
      - aggressive
      type: string
      description: Defines the aggressiveness level for scaling operations.
    UserExperienceDto:
      required:
      - notifications
      type: object
      properties:
        notifications:
          $ref: '#/components/schemas/NotificationSettingsDto'
      additionalProperties: false
      description: User experience settings for scaling operations.
    ChangeScalingProfileColorRequest:
      required:
      - color
      type: object
      properties:
        color:
          maxLength: 50
          minLength: 1
          type: string
          description: 'Color identifier for this scaling profile. The UI defines available color IDs and their visual representation.

            Examples: "blue", "primary-1", "accent-red", etc.'
      additionalProperties: false
      description: Request model for changing a scaling profile's color.
    HostPoolInfo:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: string
          description: Internal Foundry host pool ID.
          format: uuid
        name:
          type: string
          description: Host pool friendly name.
      additionalProperties: false
      description: Minimal host pool information for scaling profile usage.
    ElasticConfigDto:
      required:
      - burstBatchSize
      - elasticScalingMode
      - maxHosts
      - minHosts
      - performance
      type: object
      properties:
        minHosts:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Minimum number of hosts (floor) that should be available.
          format: int32
        maxHosts:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Maximum number of hosts (ceiling) that can be active.
          format: int32
        burstBatchSize:
          maximum: 2147483647
          minimum: 1
          type: integer
          description: Number of hosts to start/stop in a single scaling operation.
          format: int32
        elasticScalingMode:
          $ref: '#/components/schemas/ElasticScalingMode'
        performance:
          $ref: '#/components/schemas/ElasticPerformanceDto'
      additionalProperties: false
      description: Elastic provisioning configuration.
  securitySchemes:
    BearerAuth:
      type: http
      description: '**API Key Authentication** (Recommended)


        [Learn how to create an API key](https://api.controlup.io/reference/how-to-create-api-keys).'
      scheme: bearer
      bearerFormat: JWT
    CookieAuth:
      type: apiKey
      description: '**Cookie Authentication** (Browser use)


        ⚠️ The ''Authorize'' button cannot set cookies due to browser security.


        To authenticate in browser:

        1. Login via DEX authentication service (same browser session)

        2. Or use DevTools Console: `document.cookie = "user_dex_token=YOUR_TOKEN; path=/"`'
      name: user_dex_token
      in: cookie
x-readme:
  explorer-enabled: true
  proxy-enabled: false
  samples-languages:
  - shell
  - powershell
  - node
  - javascript
  - python
  - c
  - clojure
  - cplusplus
  - csharp
  - http
  - go
  - java
  - json
  - kotlin
  - objectivec
  - ocaml
  - php
  - r
  - ruby
  - swift