CloudQuery policies API

The policies API from CloudQuery — 10 operation(s) for policies.

OpenAPI Specification

cloudquery-policies-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  contact:
    email: support@cloudquery.io
    name: CloudQuery Support Team
    url: https://cloudquery.io
  description: 'Welcome to the CloudQuery Platform API documentation! This API can be used to interact with the CloudQuery platform. As a user, the API allows you to search the CloudQuery asset inventory, run SQL queries against the data warehouse, save and load searches, and much more. As an administrator, it allows you to manage your teams, syncs, and other objects.

    ### Authentication

    The API is secured using bearer tokens. To get started, you can generate an API key for your Platform deployment from your platform dashboard. For a step-by-step guide, see: https://www.cloudquery.io/docs/cli/managing-cloudquery/deployments/generate-api-key.

    The base URL for the API depends on where your CloudQuery Platform is hosted. If running locally, this is usually http://localhost:3000/api. In a production deployment it should be an HTTPS URL. For purposes of illustration, we will assume the platform instance is available at https://cloudquery.mycompany.com. In this case, the base API endpoint will be https://cloudquery.mycompany.com/api.

    ### Example Request

    To test your connection to the API, we can use the `/plugins` endpoint. For example:

    `curl -v -H "Authorization: Bearer $CLOUDQUERY_API_KEY" \ https://cloudquery.mycompany.com/api/plugins`

    '
  license:
    name: MIT
    url: https://spdx.org/licenses/MIT
  termsOfService: https://www.cloudquery.io/terms
  title: CloudQuery Platform OpenAPI Spec admin policies API
  version: 1.0.0
security:
- bearerAuth: []
- cookieAuth: []
tags:
- name: policies
paths:
  /policies:
    get:
      description: List all policies for a team
      operationId: PlatformListPolicies
      parameters:
      - $ref: '#/components/parameters/platform_per_page'
      - $ref: '#/components/parameters/platform_page'
      - $ref: '#/components/parameters/platform_policy_status'
      - in: query
        name: severities
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicySeverity'
        style: form
        explode: true
        description: Filter by severities (policy matches any)
      - in: query
        name: domain
        required: false
        schema:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        description: Filter by domain
      - in: query
        name: policy_group_ids
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicyGroupID'
        style: form
        explode: true
        description: Filter by policy groups (policy matches any)
      - in: query
        name: search
        required: false
        schema:
          type: string
        description: Search in policy name and description
      - in: query
        name: sort_by
        required: false
        schema:
          type: string
          enum:
          - name
          - domain
          - severity
          - violation_count
          - last_run_at
          - created_at
          default: created_at
        description: Field to sort by
      - in: query
        name: sort_dir
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Sort direction
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                required:
                - items
                - metadata
                properties:
                  items:
                    items:
                      $ref: '#/components/schemas/PlatformPolicy'
                    type: array
                  metadata:
                    $ref: '#/components/schemas/PlatformListMetadata'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    post:
      description: Create a new policy
      operationId: PlatformCreatePolicy
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlatformPolicyCreate'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicy'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/{policy_id}:
    get:
      description: Get a policy by ID
      operationId: PlatformGetPolicy
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicy'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    put:
      description: Update a policy
      operationId: PlatformUpdatePolicy
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlatformPolicyUpdate'
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicy'
        '400':
          $ref: '#/components/responses/PlatformBadRequest'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    delete:
      description: Delete a policy
      operationId: PlatformDeletePolicy
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      responses:
        '204':
          description: Success
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/{policy_id}/toggle:
    post:
      description: Toggle a policy's status (active/paused)
      operationId: PlatformTogglePolicy
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicy'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/{policy_id}/violations:
    get:
      description: Get violations for a policy
      operationId: PlatformGetPolicyViolations
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      - $ref: '#/components/parameters/platform_page'
      - $ref: '#/components/parameters/platform_per_page'
      - name: search
        in: query
        description: Text search term to filter violations by resource_type_label, name, account_name, cloud, or region
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                required:
                - items
                properties:
                  items:
                    items:
                      $ref: '#/components/schemas/PlatformPolicyViolation'
                    type: array
                  metadata:
                    $ref: '#/components/schemas/PlatformListMetadata'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/{policy_id}/violations-history:
    get:
      description: Get violation history for a policy
      operationId: PlatformGetPolicyViolationsHistory
      parameters:
      - $ref: '#/components/parameters/platform_policy_id'
      - $ref: '#/components/parameters/platform_per_page'
      - $ref: '#/components/parameters/platform_page'
      - in: query
        name: start_time
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: end_time
        required: false
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                required:
                - items
                - metadata
                properties:
                  items:
                    items:
                      $ref: '#/components/schemas/PlatformPolicyEvaluationLog'
                    type: array
                  metadata:
                    $ref: '#/components/schemas/PlatformListMetadata'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/metrics:
    get:
      description: Get policy metrics summary
      operationId: PlatformGetPolicyMetrics
      parameters:
      - in: query
        name: severities
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicySeverity'
        style: form
        explode: true
        description: Filter by severities (policy matches any)
      - in: query
        name: domain
        required: false
        schema:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        description: Filter by domain
      - in: query
        name: policy_group_ids
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicyGroupID'
        style: form
        explode: true
        description: Filter by policy groups (policy matches any)
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicyMetrics'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/violations-by-domain:
    get:
      description: Get violations grouped by domain
      operationId: PlatformGetViolationsByDomain
      parameters:
      - in: query
        name: severities
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicySeverity'
        style: form
        explode: true
        description: Filter by severities (policy matches any)
      - in: query
        name: domain
        required: false
        schema:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        description: Filter by domain
      - in: query
        name: policy_group_ids
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicyGroupID'
        style: form
        explode: true
        description: Filter by policy groups (policy matches any)
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformViolationsByDomain'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policies/violations-history:
    get:
      description: Get violations history over time
      operationId: PlatformGetViolationsHistory
      parameters:
      - in: query
        name: start_date
        required: false
        schema:
          type: string
          format: date
        description: Start date for the query range (YYYY-MM-DD)
      - in: query
        name: end_date
        required: false
        schema:
          type: string
          format: date
        description: End date for the query range (YYYY-MM-DD)
      - in: query
        name: severities
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicySeverity'
        style: form
        explode: true
        description: Filter by severities (policy matches any)
      - in: query
        name: domain
        required: false
        schema:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        description: Filter by domain
      - in: query
        name: policy_group_ids
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicyGroupID'
        style: form
        explode: true
        description: Filter by policy groups (policy matches any)
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformViolationsHistory'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policy-groups:
    get:
      description: List all policy groups
      operationId: PlatformListPolicyGroups
      parameters:
      - in: query
        name: search
        required: false
        schema:
          type: string
        description: Search in policy group name and description
      - in: query
        name: severities
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicySeverity'
        style: form
        explode: true
        description: Filter to policy groups that contain at least one policy with any of these severities
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                type: object
                required:
                - items
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/PlatformPolicyGroupWithCounts'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    post:
      description: Create a new policy group
      operationId: PlatformCreatePolicyGroup
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlatformPolicyGroupCreate'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicyGroup'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
  /policy-groups/{policy_group_id}:
    get:
      description: List policies in a policy group
      operationId: PlatformListPoliciesInGroup
      parameters:
      - $ref: '#/components/parameters/platform_policy_group_id'
      - $ref: '#/components/parameters/platform_per_page'
      - $ref: '#/components/parameters/platform_page'
      - in: query
        name: sort_by
        required: false
        schema:
          type: string
          enum:
          - name
          - policy_count
          default: name
        description: Field to sort by
      - in: query
        name: sort_dir
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: asc
        description: Sort direction
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                required:
                - items
                - metadata
                properties:
                  items:
                    items:
                      $ref: '#/components/schemas/PlatformPolicy'
                    type: array
                  metadata:
                    $ref: '#/components/schemas/PlatformListMetadata'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    put:
      description: Update a policy group
      operationId: PlatformUpdatePolicyGroup
      parameters:
      - $ref: '#/components/parameters/platform_policy_group_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlatformPolicyGroupUpdate'
      responses:
        '200':
          description: Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPolicyGroup'
        '400':
          $ref: '#/components/responses/PlatformBadRequest'
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '422':
          $ref: '#/components/responses/PlatformUnprocessableEntity'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
    delete:
      description: Delete a policy group
      operationId: PlatformDeletePolicyGroup
      parameters:
      - $ref: '#/components/parameters/platform_policy_group_id'
      responses:
        '204':
          description: Success
        '401':
          $ref: '#/components/responses/PlatformRequiresAuthentication'
        '403':
          $ref: '#/components/responses/PlatformForbidden'
        '404':
          $ref: '#/components/responses/PlatformNotFound'
        '500':
          $ref: '#/components/responses/PlatformInternalError'
      tags:
      - policies
components:
  schemas:
    PlatformListMetadata:
      required:
      - page_size
      properties:
        total_count:
          type: integer
        last_page:
          type: integer
        page_size:
          type: integer
        time_ms:
          type: integer
    PlatformFieldError:
      allOf:
      - $ref: '#/components/schemas/PlatformBasicError'
      - properties:
          errors:
            items:
              type: string
            type: array
          field_errors:
            additionalProperties:
              type: string
            type: object
        type: object
    PlatformPolicyDomain:
      description: Policy domain
      type: string
      enum:
      - finops
      - security
      - compliance
      - governance
      - operations
      x-go-name: PolicyDomain
    PlatformPolicyID:
      description: The unique ID for the policy.
      type: string
      format: uuid
      x-go-name: PolicyID
    PlatformViolationsByDomainItem:
      title: Violations By Domain Item
      type: object
      description: Violation count for a specific domain
      additionalProperties: false
      required:
      - domain
      - violation_count
      properties:
        domain:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        violation_count:
          type: integer
          description: Number of violations for this domain
          example: 15
    PlatformPolicyUpdate:
      title: Policy Update
      type: object
      description: Update a policy
      additionalProperties: false
      properties:
        name:
          type: string
        domain:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        severity:
          $ref: '#/components/schemas/PlatformPolicySeverity'
        description:
          type: string
        query:
          type: string
          example: SELECT account_id, bucket_name, region FROM aws_s3_buckets WHERE encryption_status IS NULL
        notification_destination_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Notification destination IDs to send alerts to
        policy_group_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Policy group IDs to set for this policy
    PlatformPolicyViolation:
      title: Policy Violation
      type: object
      description: Policy violation resource information
      additionalProperties: false
      required:
      - cloud
      - resource_type_label
      - _cq_account_name
      - name
      - region
      - _cq_platform_id
      properties:
        cloud:
          type: string
          example: aws
        resource_type_label:
          type: string
          example: EC2 Instance
        _cq_account_name:
          type: string
          example: my-account
        name:
          type: string
          example: my-resource
        region:
          type: string
          example: us-east-1
        _cq_platform_id:
          type: string
          example: aws_ec2_instances_12345678-1234-1234-1234-123456789abc
        tags:
          type: array
          items:
            type: string
          description: Tags associated with the resource (e.g. for insights)
        additional_properties:
          type: object
          description: Insight-specific metadata per affected resource (e.g. AWS Health or cost insight fields)
          additionalProperties: true
    PlatformPolicyGroup:
      title: Policy Group
      type: object
      description: Policy Group
      additionalProperties: false
      required:
      - id
      - name
      - description
      - created_at
      - updated_at
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          example: Security Policies
        description:
          type: string
          example: Group containing all security-related policies
        created_at:
          example: '2017-07-14T16:53:42Z'
          format: date-time
          type: string
        updated_at:
          example: '2017-07-14T16:53:42Z'
          format: date-time
          type: string
    PlatformQueryID:
      description: The unique ID for the query.
      type: string
      format: uuid
      x-go-name: QueryID
    PlatformPolicyGroupCreate:
      title: Policy Group Create
      type: object
      description: Create a policy group
      additionalProperties: false
      required:
      - name
      properties:
        name:
          type: string
          example: Security Policies
        description:
          type: string
          default: ''
          example: Group containing all security-related policies
        policy_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Optional array of policy IDs to add to this group
    PlatformPolicyGroupUpdate:
      title: Policy Group Update
      type: object
      description: Update a policy group
      additionalProperties: false
      properties:
        name:
          type: string
        description:
          type: string
        policy_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Policy IDs to set for this group
    PlatformPolicyGroupID:
      title: Policy Group ID
      type: string
      format: uuid
      x-go-name: PolicyGroupID
    PlatformViolationsHistoryMetadata:
      title: Violations History Metadata
      type: object
      description: Metadata for violations history query
      additionalProperties: false
      required:
      - interval
      - start_date
      - end_date
      properties:
        interval:
          type: string
          description: Interval in days used for grouping
          example: '30'
        start_date:
          type: string
          format: date
          description: Start date of the query range
          example: '2025-05-01'
        end_date:
          type: string
          format: date
          description: End date of the query range
          example: '2026-12-01'
    PlatformNotificationDestinationID:
      description: The unique ID for the notification destination.
      type: string
      format: uuid
      x-go-name: NotificationDestinationID
    PlatformPolicyStatus:
      description: Policy status
      type: string
      enum:
      - paused
      - active
      x-go-name: PolicyStatus
    PlatformPolicy:
      title: Policy
      type: object
      description: Policy
      additionalProperties: false
      required:
      - id
      - name
      - domain
      - severity
      - description
      - status
      - team_name
      - query_id
      - query
      - created_by
      - created_at
      - updated_at
      properties:
        id:
          $ref: '#/components/schemas/PlatformPolicyID'
        name:
          type: string
          example: Unencrypted S3 buckets
        domain:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        severity:
          $ref: '#/components/schemas/PlatformPolicySeverity'
        description:
          type: string
          example: Policy to detect unencrypted S3 buckets
        status:
          $ref: '#/components/schemas/PlatformPolicyStatus'
        team_name:
          type: string
          example: my-team
        query_id:
          $ref: '#/components/schemas/PlatformQueryID'
        query:
          type: string
          description: The SQL query string for the policy
          example: SELECT * FROM aws_s3_buckets WHERE server_side_encryption_configuration IS NULL
        created_by:
          type: string
          format: uuid
          x-go-name: CreatedByUserID
        updated_by:
          type: string
          format: uuid
          nullable: true
          x-go-name: UpdatedByUserID
        created_at:
          example: '2017-07-14T16:53:42Z'
          format: date-time
          type: string
        updated_at:
          example: '2017-07-14T16:53:42Z'
          format: date-time
          type: string
        violation_count:
          type: integer
          nullable: true
          description: Number of violations from the last evaluation
          example: 5
        run_at:
          type: string
          format: date-time
          nullable: true
          description: Timestamp of the last evaluation run
          example: '2017-07-14T16:53:42Z'
        notification_destinations:
          type: array
          items:
            $ref: '#/components/schemas/PlatformNotificationDestinationListItem'
          description: List of notification destinations configured for the policy's alert
          example: []
        policy_groups:
          type: array
          items:
            $ref: '#/components/schemas/PlatformPolicyGroup'
          description: List of policy groups this policy belongs to
          example: []
    PlatformPolicyCreate:
      title: Policy Create
      type: object
      description: Create a policy (implicitly creates a query and an enabled alert)
      additionalProperties: false
      required:
      - name
      - domain
      - severity
      - query
      properties:
        name:
          type: string
          example: Unencrypted S3 buckets
        domain:
          $ref: '#/components/schemas/PlatformPolicyDomain'
        severity:
          $ref: '#/components/schemas/PlatformPolicySeverity'
        description:
          type: string
          default: ''
          example: Policy to detect unencrypted S3 buckets
        query:
          type: string
          example: SELECT account_id, bucket_name, region FROM aws_s3_buckets WHERE encryption_status IS NULL
        notification_destination_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Notification destination IDs to send alerts to
        policy_group_ids:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          description: Policy group IDs to add this policy to
    PlatformViolationsByDomain:
      title: Violations By Domain
      type: object
      description: Violations grouped by domain
      additionalProperties: false
      required:
      - items
      - total_violations
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/PlatformViolationsByDomainItem'
        total_violations:
          type: integer
          description: Total violations across all domains
          example: 28
    PlatformViolationsHistory:
      title: Violations History
      type: object
      description: Violations history over time
      additionalProperties: false
      required:
      - items
      - metadata
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/PlatformViolationsHistoryItem'
        metadata:
          $ref: '#/components/schemas/PlatformViolationsHistoryMetadata'
    PlatformPolicyGroupWithCounts:
      title: Policy Group With Counts
      type: object
      description: Policy Group with policy count and violation counts by severity
      additionalProperties: false
      required:
      - id
      - name
      - description
      - policy_count
      - violation_count_low
      - violation_count_medium
      - violation_count_high
      - violation_count_critical
      - created_at
      - updated_at
      allOf:
      - $ref: '#/components/schemas/PlatformPolicyGroup'
      - type: object
        properties:


# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cloudquery/refs/heads/main/openapi/cloudquery-policies-api-openapi.yml