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

# Get device test history

> Site-scoped summary list and per-device history endpoints.



## OpenAPI

````yaml /openapi/fleet-manager-openapi.yaml get /api/v1/burn-in/sites/{site_id}/device-test-summaries/{device_id}/
openapi: 3.0.3
info:
  title: Fleet Manager API
  version: 1.0.0
  description: API for the Nscale Fleet Manager
servers: []
security: []
paths:
  /api/v1/burn-in/sites/{site_id}/device-test-summaries/{device_id}/:
    get:
      tags:
        - Burn-in
      summary: Get device test history
      description: Site-scoped summary list and per-device history endpoints.
      operationId: api_v1_burn_in_sites_device_test_summaries_retrieve
      parameters:
        - in: query
          name: created_at_after
          schema:
            type: string
            format: date-time
          description: Filter results created on or after this timestamp (inclusive).
        - in: query
          name: created_at_before
          schema:
            type: string
            format: date-time
          description: Filter results created before this timestamp (exclusive).
        - in: path
          name: device_id
          schema:
            type: string
            format: uuid
          description: Device identifier.
          required: true
        - in: query
          name: job_id
          schema:
            type: string
            format: uuid
          description: Optionally scope summaries to a specific job.
        - name: limit
          required: false
          in: query
          description: Number of results to return per page.
          schema:
            type: integer
            maximum: 500
            minimum: 1
        - in: query
          name: page
          schema:
            type: integer
          description: A page number within the paginated result set.
        - in: path
          name: site_id
          schema:
            type: string
            format: uuid
          description: Site identifier.
          required: true
        - in: query
          name: stage
          schema:
            $ref: '#/components/schemas/StageEnum'
          description: Filter results by test stage.
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedTestExecutionHistoryList'
              examples:
                DeviceTestHistoryExample:
                  value:
                    count: 123
                    next: http://api.example.org/accounts/?page=4
                    previous: http://api.example.org/accounts/?page=2
                    results:
                      - id: 4f6b06e1-20e4-44d4-8b4d-a31d09f34cce
                        job: 5da30eb2-a71b-44a9-9323-2f41f8f6f7d3
                        job_name: validation-batch-01
                        cohort: 6fb17c3b-42f8-4daf-8ec4-bd832bc3152d
                        test_slug: single-node.hpl-gpu
                        stage: single_node
                        status: completed
                        execution_mode: qualifying
                        freshness: current
                        marked_stale_at: null
                        metrics:
                          - name: gflops
                            value: 290000
                            unit: GFLOPS
                            detail: null
                            evaluation:
                              passed: true
                              threshold: 220000
                              comparator: gte
                            statistics:
                              mean:
                                value: 290000
                                evaluation:
                                  passed: true
                                  threshold: 220000
                                  comparator: gte
                              min:
                                value: 289000
                                evaluation: null
                              max:
                                value: 291000
                                evaluation: null
                              median:
                                value: 290500
                                evaluation: null
                              stdev:
                                value: 750
                                evaluation: null
                        iteration_summary:
                          requested: 3
                          completed: 3
                          failed: 0
                          completed_iterations:
                            - 1
                            - 2
                            - 3
                        evaluation:
                          passed: true
                          reason: null
                        error_details: null
                        artifact_uri: s3://fm-artifacts/sta1/jobs/5da30eb2/run-001/
                        slurm_job_id: 12345
                        started_at: '2026-02-15T09:02:00Z'
                        completed_at: '2026-02-15T09:07:00Z'
                        links:
                          self: >-
                            https://fm.example.com/api/v1/burn-in/test-executions/4f6b06e1-20e4-44d4-8b4d-a31d09f34cce/
                          collection: >-
                            https://fm.example.com/api/v1/burn-in/test-executions/
                          job: >-
                            https://fm.example.com/api/v1/jobs/5da30eb2-a71b-44a9-9323-2f41f8f6f7d3/
                          cohort: >-
                            https://fm.example.com/api/v1/burn-in/cohorts/6fb17c3b-42f8-4daf-8ec4-bd832bc3152d/
                  summary: Device Test History Example
          description: ''
        '400':
          description: Validation error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Authentication credentials were not provided or are invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: You do not have permission to perform this action.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - oauth2:
            - test-execution:read
        - cookieAuth: []
components:
  schemas:
    StageEnum:
      enum:
        - single_node
        - pairwise
        - collective
      type: string
      description: |-
        * `single_node` - Single Node
        * `pairwise` - Pairwise
        * `collective` - Collective
    PaginatedTestExecutionHistoryList:
      type: object
      required:
        - count
        - results
      properties:
        count:
          type: integer
          example: 123
        next:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=4
        previous:
          type: string
          nullable: true
          format: uri
          example: http://api.example.org/accounts/?page=2
        results:
          type: array
          items:
            $ref: '#/components/schemas/TestExecutionHistory'
    ErrorResponse:
      type: object
      description: >-
        Uniform error body for every 4xx/5xx response. `detail` is a
        human-readable message, always present, safe to display to end users.
        `code` is the machine-readable identifier. `field_errors` lists
        per-input-field validation messages and is empty for non-field errors
        (auth, permission, not-found, conflict, server).
      required:
        - detail
        - code
        - field_errors
      properties:
        detail:
          type: string
        code:
          $ref: '#/components/schemas/ErrorCodeEnum'
        field_errors:
          type: array
          items:
            $ref: '#/components/schemas/FieldError'
    TestExecutionHistory:
      type: object
      description: Serializer for per-device test execution history payloads.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        job:
          type: string
          format: uuid
          readOnly: true
          description: Denormalized from cohort for efficient job-level queries
        job_name:
          type: string
          readOnly: true
        cohort:
          type: string
          format: uuid
          readOnly: true
        test_slug:
          allOf:
            - $ref: '#/components/schemas/TestSlugEnum'
          readOnly: true
        stage:
          allOf:
            - $ref: '#/components/schemas/StageEnum'
          readOnly: true
        status:
          allOf:
            - $ref: '#/components/schemas/TestExecutionStatusEnum'
          readOnly: true
          description: |-
            Test execution status (must be set explicitly - no default)

            * `completed` - Completed
            * `passed` - Passed
            * `failed` - Failed
            * `error` - Error
        execution_mode:
          allOf:
            - $ref: '#/components/schemas/TestExecutionModeEnum'
          readOnly: true
        freshness:
          allOf:
            - $ref: '#/components/schemas/TestExecutionFreshnessEnum'
          readOnly: true
        marked_stale_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
          description: >-
            Timestamp this record first went stale since it was last fully
            fresh. Not touched by later holds stacking on top of an
            already-stale record; cleared only once every active
            TestExecutionStaleHold referencing this record has been undone.
            Freshness, not this timestamp, is the authoritative current/stale
            state.
        resolved_params:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          nullable: true
          readOnly: true
          description: Resolved test parameters that actually ran.
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/EvaluatedMetric'
          readOnly: true
        iteration_summary:
          allOf:
            - $ref: '#/components/schemas/IterationSummary'
          nullable: true
          readOnly: true
        nic_metrics:
          readOnly: true
          nullable: true
          description: Per-NIC metrics for pairwise tests (list of per-NIC result dicts)
        error_details:
          allOf:
            - $ref: '#/components/schemas/BurnInErrorDetails'
          nullable: true
          readOnly: true
          description: >-
            Structured error information for infrastructure failures
            (status=ERROR)
        device_diagnostics:
          type: array
          items:
            $ref: '#/components/schemas/DeviceDiagnostic'
          readOnly: true
        evaluation:
          allOf:
            - $ref: '#/components/schemas/TestEvaluation'
          nullable: true
          readOnly: true
        artifact_uri:
          type: string
          readOnly: true
          description: S3 URI to test artifacts (e.g., 's3://bucket/org/site/job/cohort/')
        started_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        completed_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        slurm_job_id:
          type: integer
          readOnly: true
          nullable: true
          description: SLURM job ID for hardware test execution (burn-in workflows only)
        links:
          allOf:
            - $ref: '#/components/schemas/TestExecutionLinks'
          readOnly: true
      required:
        - artifact_uri
        - cohort
        - completed_at
        - device_diagnostics
        - error_details
        - evaluation
        - execution_mode
        - freshness
        - id
        - iteration_summary
        - job
        - job_name
        - links
        - marked_stale_at
        - metrics
        - nic_metrics
        - resolved_params
        - slurm_job_id
        - stage
        - started_at
        - status
        - test_slug
    ErrorCodeEnum:
      type: string
      description: >-
        Stable machine-readable error identifier. New members may be added
        within this API version; clients must tolerate unknown values.
      enum:
        - error
        - invalid
        - parse_error
        - authentication_failed
        - not_authenticated
        - permission_denied
        - not_found
        - method_not_allowed
        - not_acceptable
        - unsupported_media_type
        - conflict
        - enrollment_infrastructure_reference_pending
        - enrollment_infrastructure_reference_changed
        - unprocessable_entity
        - throttled
        - service_unavailable
    FieldError:
      type: object
      description: One input field's validation messages.
      required:
        - field
        - messages
      properties:
        field:
          type: string
          description: >-
            Dotted path to the offending input field, or to the collection row
            when the whole row is invalid (e.g. `filters.end_date`,
            `memberships.0.role`, `memberships.0`).
        messages:
          type: array
          minItems: 1
          items:
            type: string
    TestSlugEnum:
      enum:
        - multi-node.hello-world
        - multi-node.iperf-matrix
        - multi-node.nccl-all-gather
        - multi-node.nccl-all-reduce
        - multi-node.nccl-all-reduce-multi-rack
        - multi-node.nccl-all-to-all
        - multi-node.nvloom
        - multi-node.pairwise-net-gpu.bw
        - multi-node.pairwise-net-gpu.lat
        - multi-node.pairwise-net.bw
        - multi-node.pairwise-net.lat
        - multi-node.s3-elbencho
        - multi-node.storage-elbencho
        - multi-node.training-gpt-oss-120b
        - multi-node.training-llama3-1-405b
        - multi-node.training-llama3-70b
        - multi-node.training-nemotron-24x2h
        - multi-node.training-nemotron-checkpoint
        - multi-node.training-nemotron-h
        - multi-node.training-nemotron-h-multi-rack
        - multi-node.training-qwen3-235b
        - single-node.babelstream
        - single-node.dcgmi-diag
        - single-node.gpu-fryer
        - single-node.hello-world
        - single-node.hpl-cpu
        - single-node.hpl-gpu
        - single-node.lmbench-lat-mem-rd
        - single-node.memtester
        - single-node.nccl-all-gather
        - single-node.nccl-all-reduce
        - single-node.nccl-all-reduce-loopback
        - single-node.nccl-all-to-all
        - single-node.node-health-check
        - single-node.nvme-fio
        - single-node.nvme-self-test
        - single-node.storage-elbencho
        - single-node.stream
        - single-node.stress-ng-cpu
        - single-node.training-llama3-8b
        - single-node.training-nemotronh-8b
      type: string
      description: >-
        * `multi-node.hello-world` - multi-node.hello-world

        * `multi-node.iperf-matrix` - multi-node.iperf-matrix

        * `multi-node.nccl-all-gather` - multi-node.nccl-all-gather

        * `multi-node.nccl-all-reduce` - multi-node.nccl-all-reduce

        * `multi-node.nccl-all-reduce-multi-rack` -
        multi-node.nccl-all-reduce-multi-rack

        * `multi-node.nccl-all-to-all` - multi-node.nccl-all-to-all

        * `multi-node.nvloom` - multi-node.nvloom

        * `multi-node.pairwise-net-gpu.bw` - multi-node.pairwise-net-gpu.bw

        * `multi-node.pairwise-net-gpu.lat` - multi-node.pairwise-net-gpu.lat

        * `multi-node.pairwise-net.bw` - multi-node.pairwise-net.bw

        * `multi-node.pairwise-net.lat` - multi-node.pairwise-net.lat

        * `multi-node.s3-elbencho` - multi-node.s3-elbencho

        * `multi-node.storage-elbencho` - multi-node.storage-elbencho

        * `multi-node.training-gpt-oss-120b` - multi-node.training-gpt-oss-120b

        * `multi-node.training-llama3-1-405b` -
        multi-node.training-llama3-1-405b

        * `multi-node.training-llama3-70b` - multi-node.training-llama3-70b

        * `multi-node.training-nemotron-24x2h` -
        multi-node.training-nemotron-24x2h

        * `multi-node.training-nemotron-checkpoint` -
        multi-node.training-nemotron-checkpoint

        * `multi-node.training-nemotron-h` - multi-node.training-nemotron-h

        * `multi-node.training-nemotron-h-multi-rack` -
        multi-node.training-nemotron-h-multi-rack

        * `multi-node.training-qwen3-235b` - multi-node.training-qwen3-235b

        * `single-node.babelstream` - single-node.babelstream

        * `single-node.dcgmi-diag` - single-node.dcgmi-diag

        * `single-node.gpu-fryer` - single-node.gpu-fryer

        * `single-node.hello-world` - single-node.hello-world

        * `single-node.hpl-cpu` - single-node.hpl-cpu

        * `single-node.hpl-gpu` - single-node.hpl-gpu

        * `single-node.lmbench-lat-mem-rd` - single-node.lmbench-lat-mem-rd

        * `single-node.memtester` - single-node.memtester

        * `single-node.nccl-all-gather` - single-node.nccl-all-gather

        * `single-node.nccl-all-reduce` - single-node.nccl-all-reduce

        * `single-node.nccl-all-reduce-loopback` -
        single-node.nccl-all-reduce-loopback

        * `single-node.nccl-all-to-all` - single-node.nccl-all-to-all

        * `single-node.node-health-check` - single-node.node-health-check

        * `single-node.nvme-fio` - single-node.nvme-fio

        * `single-node.nvme-self-test` - single-node.nvme-self-test

        * `single-node.storage-elbencho` - single-node.storage-elbencho

        * `single-node.stream` - single-node.stream

        * `single-node.stress-ng-cpu` - single-node.stress-ng-cpu

        * `single-node.training-llama3-8b` - single-node.training-llama3-8b

        * `single-node.training-nemotronh-8b` -
        single-node.training-nemotronh-8b
    TestExecutionStatusEnum:
      enum:
        - completed
        - passed
        - failed
        - error
      type: string
      description: |-
        * `completed` - Completed
        * `passed` - Passed
        * `failed` - Failed
        * `error` - Error
    TestExecutionModeEnum:
      enum:
        - qualifying
        - debug
      type: string
      description: |-
        * `qualifying` - Qualifying
        * `debug` - Debug
    TestExecutionFreshnessEnum:
      enum:
        - current
        - stale
      type: string
      description: |-
        * `current` - Current
        * `stale` - Stale
    JsonValue:
      description: Any JSON value.
      nullable: true
      anyOf:
        - type: string
        - type: number
        - type: integer
        - type: boolean
        - type: array
          items:
            $ref: '#/components/schemas/JsonValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
    EvaluatedMetric:
      type: object
      description: OpenAPI schema for a metric entry with optional evaluation.
      properties:
        name:
          type: string
        value:
          allOf:
            - $ref: '#/components/schemas/MetricDisplayValue'
          nullable: true
        unit:
          type: string
          nullable: true
        evaluation:
          allOf:
            - $ref: '#/components/schemas/ThresholdResult'
          nullable: true
        statistics:
          allOf:
            - $ref: '#/components/schemas/MetricStatistics'
          nullable: true
        detail:
          type: string
          nullable: true
        reason:
          type: string
          nullable: true
          description: >-
            Stable machine-readable sub-reason for this metric's outcome, when
            the producing check defines one. Lets a consumer branch on the cause
            without parsing prose.
      required:
        - detail
        - evaluation
        - name
        - statistics
        - unit
        - value
    IterationSummary:
      type: object
      description: OpenAPI schema for iteration execution summary.
      properties:
        requested:
          type: integer
        completed:
          type: integer
        failed:
          type: integer
        completed_iterations:
          type: array
          items:
            type: integer
      required:
        - completed
        - completed_iterations
        - failed
        - requested
    BurnInErrorDetails:
      type: object
      description: OpenAPI schema for burn-in infrastructure error details.
      properties:
        message:
          type: string
        debug_bundle_s3_uri:
          type: string
          nullable: true
        slurm_job_id:
          type: integer
          maximum: 2147483647
          minimum: 0
          nullable: true
      required:
        - debug_bundle_s3_uri
        - message
        - slurm_job_id
    DeviceDiagnostic:
      type: object
      description: >-
        Per-device diagnostics projected from JobDeviceStatus.


        Attached to API responses that group by test execution / job so the UI
        can

        surface the failure_code / failure_message / ai_diagnosis for each
        device

        without a second fetch. Fields are null for uninstrumented devices and

        devices without an emitted JobDeviceStatus row.
      properties:
        device_id:
          type: string
          format: uuid
        device_name:
          type: string
        failure_code:
          allOf:
            - $ref: '#/components/schemas/FailureCodeEnum'
          nullable: true
        failure_message:
          type: string
          nullable: true
        ai_diagnosis:
          allOf:
            - $ref: '#/components/schemas/AIDeviceDiagnosis'
          nullable: true
      required:
        - ai_diagnosis
        - device_id
        - device_name
        - failure_code
        - failure_message
    TestEvaluation:
      type: object
      description: OpenAPI schema for test-level evaluation (passed, reason).
      properties:
        passed:
          type: boolean
        reason:
          type: string
          nullable: true
      required:
        - passed
        - reason
    TestExecutionLinks:
      type: object
      description: Serializer for test execution links.
      properties:
        self:
          type: string
          format: uri
          readOnly: true
        collection:
          type: string
          format: uri
          readOnly: true
        job:
          type: string
          format: uri
          readOnly: true
        cohort:
          type: string
          format: uri
          readOnly: true
      required:
        - cohort
        - collection
        - job
        - self
    MetricDisplayValue:
      anyOf:
        - type: number
        - type: string
      nullable: true
    ThresholdResult:
      type: object
      description: Atomic result of comparing a value against a threshold.
      properties:
        passed:
          type: boolean
        threshold:
          allOf:
            - $ref: '#/components/schemas/MetricDisplayValue'
          nullable: true
        comparator:
          allOf:
            - $ref: '#/components/schemas/ComparatorTypeEnum'
          nullable: true
      required:
        - comparator
        - passed
        - threshold
    MetricStatistics:
      type: object
      description: OpenAPI schema for per-metric statistics across multiple iterations.
      properties:
        mean:
          $ref: '#/components/schemas/StatisticEntry'
        min:
          $ref: '#/components/schemas/StatisticEntry'
        max:
          $ref: '#/components/schemas/StatisticEntry'
        median:
          $ref: '#/components/schemas/StatisticEntry'
        stdev:
          $ref: '#/components/schemas/StatisticEntry'
      required:
        - max
        - mean
        - median
        - min
        - stdev
    FailureCodeEnum:
      enum:
        - UNMAPPED_APPLICATION_ERROR
        - ACTIVITY_EXECUTION_FAILURE
        - UNEXPECTED_WORKFLOW_EXCEPTION
        - WORKFLOW_TIMEOUT
        - WORKFLOW_CANCELLED
        - WORKFLOW_TERMINATED
        - UNKNOWN_WORKFLOW_FAILURE
        - JOB_PARAMETERS_INVALID
        - JOB_SUBMISSION_FAILED
        - IRONIC_NODE_CLEAN_FAILED
        - IRONIC_NODE_CLEAN_INVALID_ACTION
        - IRONIC_NODE_CLEAN_UNEXPECTED_PROVISION_STATE
        - QUARANTINE_TRAIT_REMOVAL_FAILED
        - RELEASE_TRAIT_ADDITION_FAILED
        - RELEASE_PARTITION_LATCH_REFUSED
        - RELEASE_BACKEND_VRF_LATCH_REFUSED
        - METAL_HANDOFF_FAILED
        - METAL_RECLAIM_FAILED
        - CUSTODY_STATUS_UPDATE_FAILED
        - SLURM_ADOPT_FAILED
        - SLURM_RELEASE_FAILED
        - SLURM_REGISTRATION_TIMEOUT
        - IMAGE_NODE_FAILED
        - UNIMAGE_NODE_FAILED
        - REPORT_SITE_NOT_FOUND
        - REPORT_NO_DATA_FOUND
        - REPORT_INVALID_BUNDLE_INPUT
        - REPORT_INVALID_SECTION
        - BURN_IN_DEVICE_STATUS_INVALID
        - BURN_IN_SLURM_NODE_VALIDATION_FAILED
        - BURN_IN_SLURM_RESERVATION_FAILED
        - BURN_IN_RESERVATION_WAIT_TIMEOUT
        - BURN_IN_RESERVATION_QUEUE_UNAVAILABLE
        - BURN_IN_TEST_PREPARATION_FAILED
        - BURN_IN_TEST_TIME_LIMIT_EXCEEDS_CEILING
        - HARDWARE_TEST_IMAGE_PREPARATION_FAILED
        - BURN_IN_TEST_EXECUTION_FAILED
        - BURN_IN_INSUFFICIENT_DEVICES
        - BURN_IN_UNKNOWN_TEST_SLUG
        - BURN_IN_INVALID_WORKFLOW_STAGE
        - BURN_IN_MISSING_RESOURCE_CLASS
        - BURN_IN_MIXED_RESOURCE_CLASS
        - BURN_IN_WORKFLOW_STATE_INVALID
        - BURN_IN_MISSING_PAIR_METRICS
        - BURN_IN_DUPLICATE_SLURM_SUBMISSION
        - BMC_HTTP_SERVICE_UNAVAILABLE
        - BMC_HTTP_BAD_REQUEST
        - BMC_HTTP_UNAUTHORIZED
        - BMC_HTTP_FORBIDDEN
        - BMC_REDFISH_DISCONNECT
        - BMC_REDFISH_FD_EXHAUSTION
        - BMC_HTTP_GENERIC_ERROR
        - BMC_COLD_RESET_TIMEOUT
        - BMC_IPMI_UNREACHABLE
        - BMC_IPMI_COMMAND_ERROR
        - NVSWITCH_CREDENTIAL_MISSING
        - NVSWITCH_CREDENTIAL_ERROR
        - NVSWITCH_ADDRESS_INVALID
        - NVSWITCH_ADDRESS_MISSING
        - NVSWITCH_PRECONDITION_FAILED
        - IRONIC_HTTP_INTERNAL_SERVER_ERROR
        - IRONIC_SSL_VERSION_ERROR
        - IRONIC_VIRTUAL_MEDIA_INSPECTION_ERROR
        - IRONIC_NODE_POWER_STATE_ERROR
        - IRONIC_DRIVER_MISMATCH
        - IRONIC_NODE_CUSTOMER_INSTANCE_ATTACHED
        - IRONIC_NODE_STUCK_IN_ENROLL
        - IRONIC_INSPECTFAIL
        - IRONIC_CLEANFAIL
        - IRONIC_NODE_LOCKED
        - IRONIC_UEFI_BOOT_MODE_TIMEOUT
        - IRONIC_ENROLLMENT_ACTIVITY_TIMEOUT
        - IRONIC_INSPECTION_HARDWARE_VALIDATION_FAILED
        - IRONIC_INSPECTION_TIMEOUT
        - IRONIC_INSPECTION_DID_NOT_RUN
        - IRONIC_INSPECTION_IPA_IMAGE_NOT_FOUND
        - IRONIC_NODE_POWER_ON_TIMEOUT
        - IRONIC_NODE_UNEXPECTED_PROVISION_STATE
        - IRONIC_ROUTING_UNRESOLVED
        - NETBOX_DEVICE_STATUS_INVALID
        - NETBOX_STATUS_UPDATE_FAILED
        - NETBOX_INSPECTION_VALIDATION_CONFIG_MALFORMED
        - NETBOX_LAG_PARENT_MISSING
        - NETBOX_CABLE_TOPOLOGY_INVALID
        - NETBOX_INTERFACE_CABLE_MISSING
        - NETBOX_INTERFACE_MAC_ADDRESS_MISSING
        - PLATFORM_CLASS_UNRESOLVABLE
        - PLATFORM_CLASS_RECORD_FAILED
        - DHCP_CONFIGURATION_FAILED
        - DHCP_TIMEOUT
        - DHCP_SERVICE_NOT_ACTIVE
        - CABLE_LLDP_VERIFICATION_FAILED
        - FRONTEND_LINK_DOWN
        - ONEPASSWORD_VAULT_DATA_CONFLICT
        - CONNECTIVITY_VERIFICATION_ACTIVITY_FAILED
        - ENROLLMENT_FINALIZATION_IDENTITY_UNAVAILABLE
        - ENROLLMENT_COMPLETION_PROOF_REJECTED
        - ENROLLMENT_PROOF_MISSING
        - ENROLLMENT_PROOF_UNAVAILABLE
        - UNENROLLMENT_RUNTIME_STATE_INVALID
        - UNENROLLMENT_NODE_DEPLOYED_IN_NOVA
        - UNENROLLMENT_IRONIC_TEARDOWN_FAILED
        - UNENROLLMENT_PLACEMENT_RP_DELETE_FAILED
        - UNENROLLMENT_NETBOX_STATUS_UPDATE_FAILED
        - UNENROLLMENT_BMC_FACTORY_RESET_FAILED
        - FIRMWARE_INVENTORY_INVALID_SCOPE
        - FIRMWARE_INVENTORY_COLLECTION_FAILED
        - FIRMWARE_VERIFICATION_INVALID_SCOPE
        - FIRMWARE_VERIFICATION_NON_COMPLIANT
        - FIRMWARE_VERIFICATION_EVIDENCE_UNAVAILABLE
        - FIRMWARE_VERIFICATION_REPORT_UPLOAD_FAILED
        - FIRMWARE_VERIFICATION_EVIDENCE_PERSISTENCE_CONFLICT
        - NODE_DIAGNOSTICS_UNEXPECTED_PROVISION_STATE
        - NODE_DIAGNOSTICS_STATE_CHANGED
        - NODE_DIAGNOSTICS_CLASSIFICATION_FAILED
        - NODE_DIAGNOSTICS_ARTIFACT_UPLOAD_FAILED
        - NODE_DIAGNOSTICS_SUMMARY_WRITE_FAILED
        - POWER_CYCLE_BMC_FAILED
        - MAINTENANCE_MODE_FAILED
        - SWITCH_VRF_FLIP_FAILED
        - SWITCH_VRF_LATCH_WRITE_FAILED
        - SWITCH_VRF_PREFLIGHT_REFUSED
        - NVLINK_PARTITION_FAILED
        - NVLINK_PARTITION_CONTRACT_FAILED
        - NVLINK_PARTITION_INVALID_REQUEST
        - NVLINK_PARTITION_PREFLIGHT_REFUSED
        - NVLINK_LATCH_WRITE_FAILED
        - BACKEND_VRF_PREFLIGHT_REFUSED
        - BACKEND_VRF_APPLY_REFUSED
        - BACKEND_VRF_FLIP_FAILED
        - BACKEND_VRF_LATCH_WRITE_FAILED
        - SWITCH_LOCK_TIMEOUT
        - SWITCH_LOCK_LOST
        - SWITCH_WRITE_UNCONFIRMED
        - SLURM_HTTP_BAD_REQUEST
        - SLURM_HTTP_UNAUTHORIZED
        - SLURM_HTTP_FORBIDDEN
        - SLURM_HTTP_SERVICE_UNAVAILABLE
        - SLURM_NODE_STATE_FAILED
        - NODE_SWAP_VALIDATION_FAILED
        - TOPOLOGY_SYNC_INTENT_FAILED
      type: string
      description: >-
        * `UNMAPPED_APPLICATION_ERROR` - UNMAPPED_APPLICATION_ERROR

        * `ACTIVITY_EXECUTION_FAILURE` - ACTIVITY_EXECUTION_FAILURE

        * `UNEXPECTED_WORKFLOW_EXCEPTION` - UNEXPECTED_WORKFLOW_EXCEPTION

        * `WORKFLOW_TIMEOUT` - WORKFLOW_TIMEOUT

        * `WORKFLOW_CANCELLED` - WORKFLOW_CANCELLED

        * `WORKFLOW_TERMINATED` - WORKFLOW_TERMINATED

        * `UNKNOWN_WORKFLOW_FAILURE` - UNKNOWN_WORKFLOW_FAILURE

        * `JOB_PARAMETERS_INVALID` - JOB_PARAMETERS_INVALID

        * `JOB_SUBMISSION_FAILED` - JOB_SUBMISSION_FAILED

        * `IRONIC_NODE_CLEAN_FAILED` - IRONIC_NODE_CLEAN_FAILED

        * `IRONIC_NODE_CLEAN_INVALID_ACTION` - IRONIC_NODE_CLEAN_INVALID_ACTION

        * `IRONIC_NODE_CLEAN_UNEXPECTED_PROVISION_STATE` -
        IRONIC_NODE_CLEAN_UNEXPECTED_PROVISION_STATE

        * `QUARANTINE_TRAIT_REMOVAL_FAILED` - QUARANTINE_TRAIT_REMOVAL_FAILED

        * `RELEASE_TRAIT_ADDITION_FAILED` - RELEASE_TRAIT_ADDITION_FAILED

        * `RELEASE_PARTITION_LATCH_REFUSED` - RELEASE_PARTITION_LATCH_REFUSED

        * `RELEASE_BACKEND_VRF_LATCH_REFUSED` -
        RELEASE_BACKEND_VRF_LATCH_REFUSED

        * `METAL_HANDOFF_FAILED` - METAL_HANDOFF_FAILED

        * `METAL_RECLAIM_FAILED` - METAL_RECLAIM_FAILED

        * `CUSTODY_STATUS_UPDATE_FAILED` - CUSTODY_STATUS_UPDATE_FAILED

        * `SLURM_ADOPT_FAILED` - SLURM_ADOPT_FAILED

        * `SLURM_RELEASE_FAILED` - SLURM_RELEASE_FAILED

        * `SLURM_REGISTRATION_TIMEOUT` - SLURM_REGISTRATION_TIMEOUT

        * `IMAGE_NODE_FAILED` - IMAGE_NODE_FAILED

        * `UNIMAGE_NODE_FAILED` - UNIMAGE_NODE_FAILED

        * `REPORT_SITE_NOT_FOUND` - REPORT_SITE_NOT_FOUND

        * `REPORT_NO_DATA_FOUND` - REPORT_NO_DATA_FOUND

        * `REPORT_INVALID_BUNDLE_INPUT` - REPORT_INVALID_BUNDLE_INPUT

        * `REPORT_INVALID_SECTION` - REPORT_INVALID_SECTION

        * `BURN_IN_DEVICE_STATUS_INVALID` - BURN_IN_DEVICE_STATUS_INVALID

        * `BURN_IN_SLURM_NODE_VALIDATION_FAILED` -
        BURN_IN_SLURM_NODE_VALIDATION_FAILED

        * `BURN_IN_SLURM_RESERVATION_FAILED` - BURN_IN_SLURM_RESERVATION_FAILED

        * `BURN_IN_RESERVATION_WAIT_TIMEOUT` - BURN_IN_RESERVATION_WAIT_TIMEOUT

        * `BURN_IN_RESERVATION_QUEUE_UNAVAILABLE` -
        BURN_IN_RESERVATION_QUEUE_UNAVAILABLE

        * `BURN_IN_TEST_PREPARATION_FAILED` - BURN_IN_TEST_PREPARATION_FAILED

        * `BURN_IN_TEST_TIME_LIMIT_EXCEEDS_CEILING` -
        BURN_IN_TEST_TIME_LIMIT_EXCEEDS_CEILING

        * `HARDWARE_TEST_IMAGE_PREPARATION_FAILED` -
        HARDWARE_TEST_IMAGE_PREPARATION_FAILED

        * `BURN_IN_TEST_EXECUTION_FAILED` - BURN_IN_TEST_EXECUTION_FAILED

        * `BURN_IN_INSUFFICIENT_DEVICES` - BURN_IN_INSUFFICIENT_DEVICES

        * `BURN_IN_UNKNOWN_TEST_SLUG` - BURN_IN_UNKNOWN_TEST_SLUG

        * `BURN_IN_INVALID_WORKFLOW_STAGE` - BURN_IN_INVALID_WORKFLOW_STAGE

        * `BURN_IN_MISSING_RESOURCE_CLASS` - BURN_IN_MISSING_RESOURCE_CLASS

        * `BURN_IN_MIXED_RESOURCE_CLASS` - BURN_IN_MIXED_RESOURCE_CLASS

        * `BURN_IN_WORKFLOW_STATE_INVALID` - BURN_IN_WORKFLOW_STATE_INVALID

        * `BURN_IN_MISSING_PAIR_METRICS` - BURN_IN_MISSING_PAIR_METRICS

        * `BURN_IN_DUPLICATE_SLURM_SUBMISSION` -
        BURN_IN_DUPLICATE_SLURM_SUBMISSION

        * `BMC_HTTP_SERVICE_UNAVAILABLE` - BMC_HTTP_SERVICE_UNAVAILABLE

        * `BMC_HTTP_BAD_REQUEST` - BMC_HTTP_BAD_REQUEST

        * `BMC_HTTP_UNAUTHORIZED` - BMC_HTTP_UNAUTHORIZED

        * `BMC_HTTP_FORBIDDEN` - BMC_HTTP_FORBIDDEN

        * `BMC_REDFISH_DISCONNECT` - BMC_REDFISH_DISCONNECT

        * `BMC_REDFISH_FD_EXHAUSTION` - BMC_REDFISH_FD_EXHAUSTION

        * `BMC_HTTP_GENERIC_ERROR` - BMC_HTTP_GENERIC_ERROR

        * `BMC_COLD_RESET_TIMEOUT` - BMC_COLD_RESET_TIMEOUT

        * `BMC_IPMI_UNREACHABLE` - BMC_IPMI_UNREACHABLE

        * `BMC_IPMI_COMMAND_ERROR` - BMC_IPMI_COMMAND_ERROR

        * `NVSWITCH_CREDENTIAL_MISSING` - NVSWITCH_CREDENTIAL_MISSING

        * `NVSWITCH_CREDENTIAL_ERROR` - NVSWITCH_CREDENTIAL_ERROR

        * `NVSWITCH_ADDRESS_INVALID` - NVSWITCH_ADDRESS_INVALID

        * `NVSWITCH_ADDRESS_MISSING` - NVSWITCH_ADDRESS_MISSING

        * `NVSWITCH_PRECONDITION_FAILED` - NVSWITCH_PRECONDITION_FAILED

        * `IRONIC_HTTP_INTERNAL_SERVER_ERROR` -
        IRONIC_HTTP_INTERNAL_SERVER_ERROR

        * `IRONIC_SSL_VERSION_ERROR` - IRONIC_SSL_VERSION_ERROR

        * `IRONIC_VIRTUAL_MEDIA_INSPECTION_ERROR` -
        IRONIC_VIRTUAL_MEDIA_INSPECTION_ERROR

        * `IRONIC_NODE_POWER_STATE_ERROR` - IRONIC_NODE_POWER_STATE_ERROR

        * `IRONIC_DRIVER_MISMATCH` - IRONIC_DRIVER_MISMATCH

        * `IRONIC_NODE_CUSTOMER_INSTANCE_ATTACHED` -
        IRONIC_NODE_CUSTOMER_INSTANCE_ATTACHED

        * `IRONIC_NODE_STUCK_IN_ENROLL` - IRONIC_NODE_STUCK_IN_ENROLL

        * `IRONIC_INSPECTFAIL` - IRONIC_INSPECTFAIL

        * `IRONIC_CLEANFAIL` - IRONIC_CLEANFAIL

        * `IRONIC_NODE_LOCKED` - IRONIC_NODE_LOCKED

        * `IRONIC_UEFI_BOOT_MODE_TIMEOUT` - IRONIC_UEFI_BOOT_MODE_TIMEOUT

        * `IRONIC_ENROLLMENT_ACTIVITY_TIMEOUT` -
        IRONIC_ENROLLMENT_ACTIVITY_TIMEOUT

        * `IRONIC_INSPECTION_HARDWARE_VALIDATION_FAILED` -
        IRONIC_INSPECTION_HARDWARE_VALIDATION_FAILED

        * `IRONIC_INSPECTION_TIMEOUT` - IRONIC_INSPECTION_TIMEOUT

        * `IRONIC_INSPECTION_DID_NOT_RUN` - IRONIC_INSPECTION_DID_NOT_RUN

        * `IRONIC_INSPECTION_IPA_IMAGE_NOT_FOUND` -
        IRONIC_INSPECTION_IPA_IMAGE_NOT_FOUND

        * `IRONIC_NODE_POWER_ON_TIMEOUT` - IRONIC_NODE_POWER_ON_TIMEOUT

        * `IRONIC_NODE_UNEXPECTED_PROVISION_STATE` -
        IRONIC_NODE_UNEXPECTED_PROVISION_STATE

        * `IRONIC_ROUTING_UNRESOLVED` - IRONIC_ROUTING_UNRESOLVED

        * `NETBOX_DEVICE_STATUS_INVALID` - NETBOX_DEVICE_STATUS_INVALID

        * `NETBOX_STATUS_UPDATE_FAILED` - NETBOX_STATUS_UPDATE_FAILED

        * `NETBOX_INSPECTION_VALIDATION_CONFIG_MALFORMED` -
        NETBOX_INSPECTION_VALIDATION_CONFIG_MALFORMED

        * `NETBOX_LAG_PARENT_MISSING` - NETBOX_LAG_PARENT_MISSING

        * `NETBOX_CABLE_TOPOLOGY_INVALID` - NETBOX_CABLE_TOPOLOGY_INVALID

        * `NETBOX_INTERFACE_CABLE_MISSING` - NETBOX_INTERFACE_CABLE_MISSING

        * `NETBOX_INTERFACE_MAC_ADDRESS_MISSING` -
        NETBOX_INTERFACE_MAC_ADDRESS_MISSING

        * `PLATFORM_CLASS_UNRESOLVABLE` - PLATFORM_CLASS_UNRESOLVABLE

        * `PLATFORM_CLASS_RECORD_FAILED` - PLATFORM_CLASS_RECORD_FAILED

        * `DHCP_CONFIGURATION_FAILED` - DHCP_CONFIGURATION_FAILED

        * `DHCP_TIMEOUT` - DHCP_TIMEOUT

        * `DHCP_SERVICE_NOT_ACTIVE` - DHCP_SERVICE_NOT_ACTIVE

        * `CABLE_LLDP_VERIFICATION_FAILED` - CABLE_LLDP_VERIFICATION_FAILED

        * `FRONTEND_LINK_DOWN` - FRONTEND_LINK_DOWN

        * `ONEPASSWORD_VAULT_DATA_CONFLICT` - ONEPASSWORD_VAULT_DATA_CONFLICT

        * `CONNECTIVITY_VERIFICATION_ACTIVITY_FAILED` -
        CONNECTIVITY_VERIFICATION_ACTIVITY_FAILED

        * `ENROLLMENT_FINALIZATION_IDENTITY_UNAVAILABLE` -
        ENROLLMENT_FINALIZATION_IDENTITY_UNAVAILABLE

        * `ENROLLMENT_COMPLETION_PROOF_REJECTED` -
        ENROLLMENT_COMPLETION_PROOF_REJECTED

        * `ENROLLMENT_PROOF_MISSING` - ENROLLMENT_PROOF_MISSING

        * `ENROLLMENT_PROOF_UNAVAILABLE` - ENROLLMENT_PROOF_UNAVAILABLE

        * `UNENROLLMENT_RUNTIME_STATE_INVALID` -
        UNENROLLMENT_RUNTIME_STATE_INVALID

        * `UNENROLLMENT_NODE_DEPLOYED_IN_NOVA` -
        UNENROLLMENT_NODE_DEPLOYED_IN_NOVA

        * `UNENROLLMENT_IRONIC_TEARDOWN_FAILED` -
        UNENROLLMENT_IRONIC_TEARDOWN_FAILED

        * `UNENROLLMENT_PLACEMENT_RP_DELETE_FAILED` -
        UNENROLLMENT_PLACEMENT_RP_DELETE_FAILED

        * `UNENROLLMENT_NETBOX_STATUS_UPDATE_FAILED` -
        UNENROLLMENT_NETBOX_STATUS_UPDATE_FAILED

        * `UNENROLLMENT_BMC_FACTORY_RESET_FAILED` -
        UNENROLLMENT_BMC_FACTORY_RESET_FAILED

        * `FIRMWARE_INVENTORY_INVALID_SCOPE` - FIRMWARE_INVENTORY_INVALID_SCOPE

        * `FIRMWARE_INVENTORY_COLLECTION_FAILED` -
        FIRMWARE_INVENTORY_COLLECTION_FAILED

        * `FIRMWARE_VERIFICATION_INVALID_SCOPE` -
        FIRMWARE_VERIFICATION_INVALID_SCOPE

        * `FIRMWARE_VERIFICATION_NON_COMPLIANT` -
        FIRMWARE_VERIFICATION_NON_COMPLIANT

        * `FIRMWARE_VERIFICATION_EVIDENCE_UNAVAILABLE` -
        FIRMWARE_VERIFICATION_EVIDENCE_UNAVAILABLE

        * `FIRMWARE_VERIFICATION_REPORT_UPLOAD_FAILED` -
        FIRMWARE_VERIFICATION_REPORT_UPLOAD_FAILED

        * `FIRMWARE_VERIFICATION_EVIDENCE_PERSISTENCE_CONFLICT` -
        FIRMWARE_VERIFICATION_EVIDENCE_PERSISTENCE_CONFLICT

        * `NODE_DIAGNOSTICS_UNEXPECTED_PROVISION_STATE` -
        NODE_DIAGNOSTICS_UNEXPECTED_PROVISION_STATE

        * `NODE_DIAGNOSTICS_STATE_CHANGED` - NODE_DIAGNOSTICS_STATE_CHANGED

        * `NODE_DIAGNOSTICS_CLASSIFICATION_FAILED` -
        NODE_DIAGNOSTICS_CLASSIFICATION_FAILED

        * `NODE_DIAGNOSTICS_ARTIFACT_UPLOAD_FAILED` -
        NODE_DIAGNOSTICS_ARTIFACT_UPLOAD_FAILED

        * `NODE_DIAGNOSTICS_SUMMARY_WRITE_FAILED` -
        NODE_DIAGNOSTICS_SUMMARY_WRITE_FAILED

        * `POWER_CYCLE_BMC_FAILED` - POWER_CYCLE_BMC_FAILED

        * `MAINTENANCE_MODE_FAILED` - MAINTENANCE_MODE_FAILED

        * `SWITCH_VRF_FLIP_FAILED` - SWITCH_VRF_FLIP_FAILED

        * `SWITCH_VRF_LATCH_WRITE_FAILED` - SWITCH_VRF_LATCH_WRITE_FAILED

        * `SWITCH_VRF_PREFLIGHT_REFUSED` - SWITCH_VRF_PREFLIGHT_REFUSED

        * `NVLINK_PARTITION_FAILED` - NVLINK_PARTITION_FAILED

        * `NVLINK_PARTITION_CONTRACT_FAILED` - NVLINK_PARTITION_CONTRACT_FAILED

        * `NVLINK_PARTITION_INVALID_REQUEST` - NVLINK_PARTITION_INVALID_REQUEST

        * `NVLINK_PARTITION_PREFLIGHT_REFUSED` -
        NVLINK_PARTITION_PREFLIGHT_REFUSED

        * `NVLINK_LATCH_WRITE_FAILED` - NVLINK_LATCH_WRITE_FAILED

        * `BACKEND_VRF_PREFLIGHT_REFUSED` - BACKEND_VRF_PREFLIGHT_REFUSED

        * `BACKEND_VRF_APPLY_REFUSED` - BACKEND_VRF_APPLY_REFUSED

        * `BACKEND_VRF_FLIP_FAILED` - BACKEND_VRF_FLIP_FAILED

        * `BACKEND_VRF_LATCH_WRITE_FAILED` - BACKEND_VRF_LATCH_WRITE_FAILED

        * `SWITCH_LOCK_TIMEOUT` - SWITCH_LOCK_TIMEOUT

        * `SWITCH_LOCK_LOST` - SWITCH_LOCK_LOST

        * `SWITCH_WRITE_UNCONFIRMED` - SWITCH_WRITE_UNCONFIRMED

        * `SLURM_HTTP_BAD_REQUEST` - SLURM_HTTP_BAD_REQUEST

        * `SLURM_HTTP_UNAUTHORIZED` - SLURM_HTTP_UNAUTHORIZED

        * `SLURM_HTTP_FORBIDDEN` - SLURM_HTTP_FORBIDDEN

        * `SLURM_HTTP_SERVICE_UNAVAILABLE` - SLURM_HTTP_SERVICE_UNAVAILABLE

        * `SLURM_NODE_STATE_FAILED` - SLURM_NODE_STATE_FAILED

        * `NODE_SWAP_VALIDATION_FAILED` - NODE_SWAP_VALIDATION_FAILED

        * `TOPOLOGY_SYNC_INTENT_FAILED` - TOPOLOGY_SYNC_INTENT_FAILED
    AIDeviceDiagnosis:
      type: object
      description: Serializer for AIDeviceDiagnosis.
      properties:
        headline:
          type: string
          description: Concise, information-dense summary (max ~80 chars)
        explanation:
          type: string
          description: >-
            Structured explanation with 'Evidence:' section (bulleted quotes
            with sources) and 'Interpretation:' section (1-2 sentences on
            workflow context)
      required:
        - explanation
        - headline
    ComparatorTypeEnum:
      enum:
        - gt
        - lt
        - eq
        - gte
        - lte
      type: string
      description: |-
        * `gt` - gt
        * `lt` - lt
        * `eq` - eq
        * `gte` - gte
        * `lte` - lte
    StatisticEntry:
      type: object
      description: A single statistic value with optional threshold evaluation.
      properties:
        value:
          type: number
          format: double
        evaluation:
          allOf:
            - $ref: '#/components/schemas/ThresholdResult'
          nullable: true
      required:
        - evaluation
        - value
  securitySchemes:
    oauth2:
      type: oauth2
      flows: {}
    cookieAuth:
      type: apiKey
      in: cookie
      name: sessionid

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.