> ## 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.

# Update job device status

> List, retrieve and partially update the statuses of a device in a job.

Writes go through ``PATCH`` only. ``PUT`` is deliberately disabled: the sole
writer (the workflow agent's SDK ``job_executions`` manager) uses PATCH, and
the organic ``fm.device.validation-requested`` producer lives on
``partial_update`` — leaving a full-replace ``PUT`` open would be a status
write path that bypasses that enqueue chokepoint.



## OpenAPI

````yaml /openapi/fleet-manager-openapi.yaml patch /api/v1/job-device-statuses/{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/job-device-statuses/{id}/:
    patch:
      tags:
        - Jobs
      summary: Update job device status
      description: >-
        List, retrieve and partially update the statuses of a device in a job.


        Writes go through ``PATCH`` only. ``PUT`` is deliberately disabled: the
        sole

        writer (the workflow agent's SDK ``job_executions`` manager) uses PATCH,
        and

        the organic ``fm.device.validation-requested`` producer lives on

        ``partial_update`` — leaving a full-replace ``PUT`` open would be a
        status

        write path that bypasses that enqueue chokepoint.
      operationId: api_v1_job_device_statuses_partial_update
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
          description: A UUID string identifying this job device status.
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedJobDeviceStatusPartialUpdate'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedJobDeviceStatusPartialUpdate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedJobDeviceStatusPartialUpdate'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobDeviceStatus'
          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:
            - job-device-status:update
        - cookieAuth: []
components:
  schemas:
    PatchedJobDeviceStatusPartialUpdate:
      type: object
      description: Serializer for partially updating JobDeviceStatus instances.
      properties:
        status:
          allOf:
            - $ref: '#/components/schemas/JobDeviceStatusEnum'
          nullable: true
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        temporal_link:
          nullable: true
          oneOf:
            - type: string
              format: uri
              maxLength: 200
              minLength: 1
            - type: string
              maxLength: 0
        logs_link:
          nullable: true
          oneOf:
            - type: string
              format: uri
              maxLength: 2000
              minLength: 1
            - type: string
              maxLength: 0
        temporal_workflow_id:
          type: string
          nullable: true
          maxLength: 255
        ai_diagnosis:
          allOf:
            - $ref: '#/components/schemas/AIDeviceDiagnosis'
          nullable: true
          description: AI-generated diagnosis for device executions that failed
        node_diagnostics:
          allOf:
            - $ref: '#/components/schemas/NodeDiagnosticsSummary'
          nullable: true
          description: Summary written by a Node Diagnostics run when it completes.
        failure_code:
          allOf:
            - $ref: '#/components/schemas/FailureCodeEnum'
          nullable: true
        phase:
          type: string
          nullable: true
          maxLength: 120
        failure_message:
          type: string
          nullable: true
    JobDeviceStatus:
      type: object
      description: Serializer for the JobDeviceStatus model.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        device:
          allOf:
            - $ref: '#/components/schemas/Device'
          readOnly: true
        job:
          allOf:
            - $ref: '#/components/schemas/Job'
          readOnly: true
        failure_code:
          allOf:
            - $ref: '#/components/schemas/FailureCodeEnum'
          readOnly: true
          nullable: true
        ai_diagnosis:
          allOf:
            - $ref: '#/components/schemas/AIDeviceDiagnosis'
          nullable: true
          readOnly: true
          description: AI-generated diagnosis for device executions that failed
        node_diagnostics:
          allOf:
            - $ref: '#/components/schemas/NodeDiagnosticsSummary'
          nullable: true
          readOnly: true
          description: >-
            Summary of a Node Diagnostics run: the failure signature, findings,
            per-collector outcomes and a pointer to the evidence bundle. Null
            for every other workflow.
        responsible_team:
          allOf:
            - $ref: '#/components/schemas/ResponsibleTeamEnum'
          nullable: true
          readOnly: true
          description: >-
            Team responsible for triaging this failure, derived from
            `failure_code`. Null when `failure_code` is null (uninstrumented
            workflow).
        links:
          allOf:
            - $ref: '#/components/schemas/JobDeviceStatusLinks'
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        status:
          allOf:
            - $ref: '#/components/schemas/JobDeviceStatusEnum'
          nullable: true
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        temporal_workflow_id:
          type: string
          nullable: true
          maxLength: 255
        phase:
          type: string
          nullable: true
          maxLength: 120
        failure_message:
          type: string
          nullable: true
      required:
        - ai_diagnosis
        - created_at
        - device
        - failure_code
        - id
        - job
        - links
        - node_diagnostics
        - responsible_team
        - updated_at
    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'
    JobDeviceStatusEnum:
      enum:
        - running
        - completed
        - failed
        - cancelled
        - terminated
        - superseded
        - timed_out
      type: string
      description: |-
        * `running` - Running
        * `completed` - Completed
        * `failed` - Failed
        * `cancelled` - Cancelled
        * `terminated` - Terminated
        * `superseded` - Superseded
        * `timed_out` - Timed Out
    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
    NodeDiagnosticsSummary:
      type: object
      description: The result of one Node Diagnostics run.
      properties:
        schema_version:
          type: integer
          description: Schema version of this summary.
        failure_signature:
          allOf:
            - $ref: '#/components/schemas/FindingCodeEnum'
          description: >-
            Deterministic classification of why the Ironic operation failed.
            Always present when the summary is: a run that cannot classify fails
            rather than completing unclassified. This is not the workflow's
            `failure_code`. Accepts the finding-code vocabulary minus
            `clean_failed.recurring`, which is a recurrence annotation and is
            rejected here.


            * `clean_failed.neutron_ports` - clean_failed.neutron_ports

            * `clean_failed.bmc_power_off` - clean_failed.bmc_power_off

            * `clean_failed.virtual_media` - clean_failed.virtual_media

            * `clean_failed.other` - clean_failed.other

            * `clean_failed.recurring` - clean_failed.recurring
        findings:
          type: array
          items:
            $ref: '#/components/schemas/NodeDiagnosticsFinding'
          description: Deduplicated findings, sorted by (domain, code, collector).
        collectors:
          type: array
          items:
            $ref: '#/components/schemas/NodeDiagnosticsCollectorRun'
          description: Every collector the run executed.
        artifact:
          allOf:
            - $ref: '#/components/schemas/NodeDiagnosticsArtifactRef'
          description: Where the bundle lives.
      required:
        - artifact
        - collectors
        - failure_signature
        - findings
        - schema_version
    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
    Device:
      type: object
      description: Serializer for Device model.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        nvswitch_rack_slot:
          allOf:
            - $ref: '#/components/schemas/NVSwitchRackSlotEnum'
          readOnly: true
          nullable: true
        nvswitch_switch_role:
          allOf:
            - $ref: '#/components/schemas/NVSwitchSwitchRoleEnum'
          readOnly: true
        nvswitch_nvos_hostname:
          type: string
          readOnly: true
          maxLength: 255
        annotations:
          type: object
          additionalProperties:
            type: string
          description: >-
            Key-value annotations. Keys must start with a lowercase letter and
            contain only lowercase alphanumeric segments joined by hyphens or
            underscores (e.g. 'org-id', 'gpu_ready').
        tags:
          type: array
          items:
            type: string
          description: >-
            Tags for the resource. Must start with a lowercase letter and
            contain only lowercase alphanumeric segments joined by hyphens or
            underscores (e.g. 'gpu-ready', 'needs_review'). Stored deduplicated
            and sorted.
        serial_number:
          type: string
          nullable: true
        infrastructure_ref:
          type: string
          nullable: true
        enrollment_validated_ref:
          type: string
          nullable: true
          readOnly: true
        current_instance_uuid:
          type: string
          nullable: true
          readOnly: true
        ironic_provision_state:
          allOf:
            - $ref: '#/components/schemas/IronicProvisionStateEnum'
          nullable: true
        placement_traits:
          type: array
          items:
            type: string
        slurm_states:
          type: array
          items:
            $ref: '#/components/schemas/DeviceSlurmStateEnum'
        slurm_state_updated_at:
          type: string
          format: date-time
          nullable: true
        slurm_state_reason:
          type: string
          nullable: true
        operational_failure_reason:
          type: string
          nullable: true
        operational_failure_details:
          type: string
          nullable: true
        ironic_maintenance:
          type: boolean
        ironic_maintenance_reason:
          type: string
          nullable: true
        ironic_fault:
          type: string
          nullable: true
        ironic_last_error:
          type: string
          nullable: true
        triage_ticket_url:
          nullable: true
          oneOf:
            - type: string
              format: uri
              minLength: 1
            - type: string
              maxLength: 0
        parent_ticket_url:
          nullable: true
          oneOf:
            - type: string
              format: uri
              minLength: 1
            - type: string
              maxLength: 0
        netbox_link:
          type: string
          format: uri
          writeOnly: true
          maxLength: 200
        netbox_id:
          type: integer
          maximum: 2147483647
          minimum: 0
          nullable: true
        netbox_source_updated_at:
          type: string
          format: date-time
          writeOnly: true
          nullable: true
          description: >-
            NetBox device last_updated timestamp acknowledged by the lifecycle
            sync. This is NetBox source time, not a Fleet Manager wall-clock
            timestamp. Only the exact netbox-agent OAuth client may submit this
            field.
        interfaces:
          type: array
          items:
            $ref: '#/components/schemas/Interface'
        inventory_status:
          $ref: '#/components/schemas/DeviceInventoryStatusEnum'
        operational_status:
          $ref: '#/components/schemas/DeviceOperationalStatusEnum'
        health_status:
          $ref: '#/components/schemas/DeviceHealthStatusEnum'
        device_type_kind:
          type: string
          readOnly: true
        device_type_vendor:
          type: string
          readOnly: true
        device_type_model:
          type: string
          readOnly: true
        device_type_resource_class:
          type: string
          readOnly: true
        role_name:
          type: string
          readOnly: true
        role_slug:
          type: string
          readOnly: true
          pattern: ^[-a-zA-Z0-9_]+$
        device_class:
          allOf:
            - $ref: '#/components/schemas/DeviceClassEnum'
          readOnly: true
        rack_name:
          type: string
          readOnly: true
        rack_serial_number:
          type: string
          readOnly: true
          default: ''
          description: >-
            Rack serial number for this device's rack. Empty string if not
            synced.
        location_name:
          type: string
          readOnly: true
        site_name:
          type: string
          readOnly: true
        site_slug:
          type: string
          readOnly: true
          pattern: ^[-a-zA-Z0-9_]+$
        organisation_id:
          type: string
          format: uuid
          readOnly: true
        organisation_slug:
          type: string
          readOnly: true
          pattern: ^[-a-zA-Z0-9_]+$
        links:
          allOf:
            - $ref: '#/components/schemas/DeviceLinks'
          readOnly: true
        customer_ready:
          type: boolean
          description: Compute customer_ready based on status fields.
          readOnly: true
        topology:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Return topology paths keyed by facet.
          readOnly: true
        topology_group_types:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: string
          description: >-
            Return topology as {facet: {type: label}} using cached
            path_types/path_labels.


            Enables type-aware lookup (e.g. find the "pod" label within
            "networking")

            even when the device is a member of a deeper group like
            "nvlink-domain".

            No extra queries — both path_types and path_labels are cached JSON
            fields on TopologyGroup.
          readOnly: true
        short_name:
          type: string
          description: >-
            Extract short device identifier from full name.


            Takes the last hyphen-separated segment (e.g. "gpu1255" from
            "sta1-p-phy-gpu1255").

            Falls back to the full name if the segment doesn't contain both
            letters and digits.
          readOnly: true
        current_tenant_id:
          type: string
          format: uuid
          readOnly: true
          nullable: true
        current_tenant_name:
          type: string
          nullable: true
          readOnly: true
        current_allocation_annotations:
          type: object
          additionalProperties:
            type: string
          readOnly: true
          nullable: true
          description: UNI region annotations from the device's active allocation.
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        name:
          type: string
          pattern: ^[A-Za-z0-9._-]+$
          maxLength: 255
        nvswitch_ztp_completed_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        nvswitch_ztp_evidence_source:
          type: string
          readOnly: true
          description: e.g. netbox_tag, network_api, manual
        position:
          type: string
          format: decimal
          pattern: ^-?\d{0,3}(?:\.\d{0,1})?$
          nullable: true
          description: >-
            Rack U position. Null for an unpositioned device, one NetBox has in
            its rack without a U.
        platform_class:
          type: string
          description: >-
            Hardware descriptor key <GPUTYPE>_<DEVICETYPE>_<FABRICTYPE>_<NN>,
            computed by the enrollment workflow from NetBox and mirrored to
            NetBox custom_fields.platform_class. Empty until the device first
            enrols.
          maxLength: 128
        enrollment_proof_source:
          allOf:
            - $ref: '#/components/schemas/EnrollmentProofSourceEnum'
          readOnly: true
          description: |-
            Provenance of the current enrollment identity proof.

            * `enrolled` - Enrolled
            * `legacy` - Legacy
            * `unmigrated` - Unmigrated
            * `none` - None
        entered_service_at:
          type: string
          format: date-time
          nullable: true
        in_triage:
          type: boolean
        entered_triage_at:
          type: string
          format: date-time
          readOnly: true
          nullable: true
        chad_ignore:
          type: boolean
        inventory_only:
          type: boolean
          readOnly: true
        device_type:
          type: string
          format: uuid
        role:
          type: string
          format: uuid
        rack:
          type: string
          format: uuid
        location:
          type: string
          format: uuid
          readOnly: true
        site:
          type: string
          format: uuid
          readOnly: true
      required:
        - created_at
        - current_allocation_annotations
        - current_instance_uuid
        - current_tenant_id
        - current_tenant_name
        - customer_ready
        - device_class
        - device_type
        - device_type_kind
        - device_type_model
        - device_type_resource_class
        - device_type_vendor
        - enrollment_proof_source
        - enrollment_validated_ref
        - entered_triage_at
        - id
        - inventory_only
        - links
        - location
        - location_name
        - name
        - netbox_link
        - nvswitch_nvos_hostname
        - nvswitch_rack_slot
        - nvswitch_switch_role
        - nvswitch_ztp_completed_at
        - nvswitch_ztp_evidence_source
        - organisation_id
        - organisation_slug
        - position
        - rack
        - rack_name
        - rack_serial_number
        - role
        - role_name
        - role_slug
        - short_name
        - site
        - site_name
        - site_slug
        - topology
        - topology_group_types
        - updated_at
    Job:
      type: object
      description: >-
        The one job response shape, served everywhere a job is returned.


        `workflow` is the slim reference rather than the full workflow: the only
        workflow

        fields a job's consumers read are id, name and temporal_workflow_name,
        while the full

        row carries a parameters_schema measuring several KB — a cost every row
        of the jobs

        table and the job-device-status list would pay for nothing.


        The four projection fields below are the jobs list's own: they are
        populated only when

        the queryset carries the row projection, and dropped from the payload
        otherwise. That

        keeps the per-device summary off the job-device-status embed, where one
        copy per row

        of the job's whole device array is quadratic in the job's device count.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        workflow:
          allOf:
            - $ref: '#/components/schemas/WorkflowSummary'
          readOnly: true
        created_by:
          type: string
          nullable: true
          description: 'Return the creator: username, app client_id with prefix, or None.'
          readOnly: true
        ai_failure_summary:
          allOf:
            - $ref: '#/components/schemas/AIJobFailureSummary'
          nullable: true
          readOnly: true
          description: >-
            AI-generated failure summary for jobs that ended in FAILED or
            PARTIALLY_FAILED
        test_slugs:
          type: array
          items:
            $ref: '#/components/schemas/TestSlugEnum'
          readOnly: true
          description: Distinct test slugs from associated test executions
        hostlist:
          type: string
          readOnly: true
          description: Compressed hostlist derived from the job's associated device names
        chad_sop:
          allOf:
            - $ref: '#/components/schemas/ChadSop'
          nullable: true
          readOnly: true
          description: >-
            The CHAD SOP recipe that dispatched this job; null when the job was
            not dispatched by CHAD.
        links:
          allOf:
            - $ref: '#/components/schemas/JobLinks'
          readOnly: true
        devices:
          type: array
          items:
            $ref: '#/components/schemas/JobDeviceSummary'
          readOnly: true
          description: >-
            Per-device name + physical location (rack, U, networking pod) for
            the job's devices, ordered by name — a slim summary the UI
            aggregates into rack/pod chips. Carried by the jobs list only;
            omitted from responses that do not project it. The full device
            objects are at links.devices.
        device_count:
          type: integer
          description: >-
            Number of devices the job runs on. A convenience projection of the
            same set `devices` lists and `hostlist` compresses, so all three
            always agree. Carried by the jobs list only.
          readOnly: true
        failed_device_count:
          type: integer
          description: >-
            Number of the job's devices that failed burn-in evaluation, counting
            each device once however many of the job's tests it failed. Sourced
            from the evaluation outcome of the job's test executions, so it
            reflects the threshold verdict rather than the Temporal result: a
            burn-in job whose devices all report `completed` still counts them
            here when their metrics breached thresholds. A test that has not
            been evaluated yet is not counted, and a job that runs no burn-in
            tests reports 0 — read `unevaluated_device_count` to tell those two
            apart. A failing multi-device test implicates every device in its
            cohort, so one bad device in a collective run counts the whole
            cohort. Counts debug-mode and stale-marked evidence too, matching
            what the test-executions list returns for the job. Carried by the
            jobs list only.
          readOnly: true
        unevaluated_device_count:
          type: integer
          description: >-
            Number of the job's devices whose burn-in evidence finished but has
            never been evaluated, so `failed_device_count` cannot speak for
            them. Non-zero means this row's failure count is incomplete rather
            than clean: the test-executions list evaluates these rows on read,
            so it can show a failure the count does not. Counted once per
            device, and 0 for a job that runs no burn-in tests. Carried by the
            jobs list only.
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        name:
          type: string
          maxLength: 50
          pattern: ^[-a-zA-Z0-9_]+$
        parameters:
          readOnly: true
        max_attempts_override:
          type: integer
          readOnly: true
          nullable: true
          description: >-
            Per-job override for Temporal activity retry budgets. NULL uses the
            worker's ActivityRetryConfigs defaults; 1 fails fast (no retries)
            for OpenStack debugging. Must be >= 1 — Temporal treats
            maximum_attempts=0 as unlimited retries.
        status:
          $ref: '#/components/schemas/JobStatusEnum'
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        temporal_workflow_id:
          type: string
          nullable: true
          maxLength: 255
        source_test_execution:
          type: string
          format: uuid
          readOnly: true
          nullable: true
          description: >-
            Set when this job was created via a single-test re-run; points to
            the source execution.
      required:
        - ai_failure_summary
        - chad_sop
        - created_at
        - created_by
        - hostlist
        - id
        - links
        - max_attempts_override
        - parameters
        - source_test_execution
        - test_slugs
        - updated_at
        - workflow
    ResponsibleTeamEnum:
      type: string
      enum:
        - fleet_manager
        - infra_eng
        - dc_eng
        - unknown
    JobDeviceStatusLinks:
      type: object
      description: Serializer for job device status links.
      properties:
        self:
          type: string
          format: uri
          readOnly: true
        collection:
          type: string
          format: uri
          readOnly: true
        job:
          type: string
          format: uri
          readOnly: true
        device:
          type: string
          format: uri
          readOnly: true
        temporal:
          type: string
          format: uri
          readOnly: true
          nullable: true
        logs:
          type: string
          format: uri
          readOnly: true
          nullable: true
      required:
        - collection
        - device
        - job
        - logs
        - self
        - temporal
    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
    FindingCodeEnum:
      enum:
        - clean_failed.neutron_ports
        - clean_failed.bmc_power_off
        - clean_failed.virtual_media
        - clean_failed.other
        - clean_failed.recurring
      type: string
      description: |-
        * `clean_failed.neutron_ports` - clean_failed.neutron_ports
        * `clean_failed.bmc_power_off` - clean_failed.bmc_power_off
        * `clean_failed.virtual_media` - clean_failed.virtual_media
        * `clean_failed.other` - clean_failed.other
        * `clean_failed.recurring` - clean_failed.recurring
    NodeDiagnosticsFinding:
      type: object
      description: A typed conclusion one collector drew from evidence.
      properties:
        domain:
          allOf:
            - $ref: '#/components/schemas/FindingDomainEnum'
          description: |-
            Subsystem the finding is about.

            * `openstack_baremetal` - openstack_baremetal
            * `oob_mgmt` - oob_mgmt
        code:
          allOf:
            - $ref: '#/components/schemas/FindingCodeEnum'
          description: >-
            Dotted, Fleet Manager-owned code, for example
            `clean_failed.neutron_ports`. Opaque to consumers: route on
            equality, never by parsing the parts. The SDK types it as a plain
            string so an older client can parse a newer response.


            * `clean_failed.neutron_ports` - clean_failed.neutron_ports

            * `clean_failed.bmc_power_off` - clean_failed.bmc_power_off

            * `clean_failed.virtual_media` - clean_failed.virtual_media

            * `clean_failed.other` - clean_failed.other

            * `clean_failed.recurring` - clean_failed.recurring
        collector:
          allOf:
            - $ref: '#/components/schemas/CollectorSlugEnum'
          description: |-
            Collector that produced the finding.

            * `ironic-node` - ironic-node
      required:
        - code
        - collector
        - domain
    NodeDiagnosticsCollectorRun:
      type: object
      description: How one collector's run ended.
      properties:
        slug:
          allOf:
            - $ref: '#/components/schemas/CollectorSlugEnum'
          description: |-
            Collector slug.

            * `ironic-node` - ironic-node
        status:
          allOf:
            - $ref: '#/components/schemas/CollectorStatusEnum'
          description: >-
            `completed` read its source and wrote evidence; only a completed
            collector with no findings passed. `error` could not read its
            source. `unsupported` means the source cannot answer on this device
            or API version.


            * `completed` - completed

            * `error` - error

            * `unsupported` - unsupported
      required:
        - slug
        - status
    NodeDiagnosticsArtifactRef:
      type: object
      description: >-
        Where the run's evidence bundle lives.


        Provenance for a support or RMA case, not a download authority: the
        artefact

        download re-derives both bucket and key from the job and device.
      properties:
        bucket:
          type: string
          description: Object-storage bucket holding the bundle.
        key_prefix:
          type: string
          description: Key prefix owned by this run.
      required:
        - bucket
        - key_prefix
    NVSwitchRackSlotEnum:
      enum:
        - ST0
        - ST1
        - ST2
        - ST3
        - ST4
        - ST5
        - ST6
        - ST7
        - ST8
      type: string
      description: |-
        * `ST0` - ST0
        * `ST1` - ST1
        * `ST2` - ST2
        * `ST3` - ST3
        * `ST4` - ST4
        * `ST5` - ST5
        * `ST6` - ST6
        * `ST7` - ST7
        * `ST8` - ST8
    NVSwitchSwitchRoleEnum:
      enum:
        - ''
        - lead
        - member
      type: string
      description: |-
        * `` - Unset
        * `lead` - Lead
        * `member` - Member
    IronicProvisionStateEnum:
      enum:
        - enroll
        - verifying
        - manageable
        - available
        - active
        - wait call-back
        - deploying
        - deploy failed
        - deploy complete
        - deploy hold
        - deleting
        - deleted
        - cleaning
        - clean wait
        - clean failed
        - clean hold
        - error
        - rebuild
        - inspecting
        - inspect failed
        - inspect wait
        - adopting
        - adopt failed
        - rescue
        - rescue failed
        - rescue wait
        - rescuing
        - unrescue failed
        - unrescuing
        - service
        - servicing
        - service wait
        - service failed
        - service hold
        - unknown
      type: string
      description: |-
        * `enroll` - enroll
        * `verifying` - verifying
        * `manageable` - manageable
        * `available` - available
        * `active` - active
        * `wait call-back` - wait call-back
        * `deploying` - deploying
        * `deploy failed` - deploy failed
        * `deploy complete` - deploy complete
        * `deploy hold` - deploy hold
        * `deleting` - deleting
        * `deleted` - deleted
        * `cleaning` - cleaning
        * `clean wait` - clean wait
        * `clean failed` - clean failed
        * `clean hold` - clean hold
        * `error` - error
        * `rebuild` - rebuild
        * `inspecting` - inspecting
        * `inspect failed` - inspect failed
        * `inspect wait` - inspect wait
        * `adopting` - adopting
        * `adopt failed` - adopt failed
        * `rescue` - rescue
        * `rescue failed` - rescue failed
        * `rescue wait` - rescue wait
        * `rescuing` - rescuing
        * `unrescue failed` - unrescue failed
        * `unrescuing` - unrescuing
        * `service` - service
        * `servicing` - servicing
        * `service wait` - service wait
        * `service failed` - service failed
        * `service hold` - service hold
        * `unknown` - unknown
    DeviceSlurmStateEnum:
      enum:
        - ALLOCATED
        - DOWN
        - ERROR
        - FUTURE
        - IDLE
        - MIXED
        - UNKNOWN
        - BLOCKED
        - CLOUD
        - COMPLETING
        - DRAIN
        - DYNAMIC_FUTURE
        - DYNAMIC_NORM
        - FAIL
        - INVALID_REG
        - MAINTENANCE
        - NOT_RESPONDING
        - PLANNED
        - POWERED_DOWN
        - POWERING_DOWN
        - POWERING_UP
        - POWER_DOWN
        - POWER_DRAIN
        - POWER_UP
        - REBOOT_CANCELED
        - REBOOT_ISSUED
        - REBOOT_REQUESTED
        - RESERVED
        - RESUME
        - UNDRAIN
      type: string
      description: |-
        * `ALLOCATED` - ALLOCATED
        * `DOWN` - DOWN
        * `ERROR` - ERROR
        * `FUTURE` - FUTURE
        * `IDLE` - IDLE
        * `MIXED` - MIXED
        * `UNKNOWN` - UNKNOWN
        * `BLOCKED` - BLOCKED
        * `CLOUD` - CLOUD
        * `COMPLETING` - COMPLETING
        * `DRAIN` - DRAIN
        * `DYNAMIC_FUTURE` - DYNAMIC_FUTURE
        * `DYNAMIC_NORM` - DYNAMIC_NORM
        * `FAIL` - FAIL
        * `INVALID_REG` - INVALID_REG
        * `MAINTENANCE` - MAINTENANCE
        * `NOT_RESPONDING` - NOT_RESPONDING
        * `PLANNED` - PLANNED
        * `POWERED_DOWN` - POWERED_DOWN
        * `POWERING_DOWN` - POWERING_DOWN
        * `POWERING_UP` - POWERING_UP
        * `POWER_DOWN` - POWER_DOWN
        * `POWER_DRAIN` - POWER_DRAIN
        * `POWER_UP` - POWER_UP
        * `REBOOT_CANCELED` - REBOOT_CANCELED
        * `REBOOT_ISSUED` - REBOOT_ISSUED
        * `REBOOT_REQUESTED` - REBOOT_REQUESTED
        * `RESERVED` - RESERVED
        * `RESUME` - RESUME
        * `UNDRAIN` - UNDRAIN
    Interface:
      type: object
      description: Serializer for Interface model.
      properties:
        ip_addresses:
          type: array
          items:
            type: string
        name:
          type: string
          maxLength: 50
        type:
          type: string
          maxLength: 50
        type_display:
          type: string
          maxLength: 50
        mac_address:
          type: string
          nullable: true
          maxLength: 17
        ib_device_guid:
          type: string
          nullable: true
          maxLength: 16
      required:
        - name
        - type
        - type_display
    DeviceInventoryStatusEnum:
      enum:
        - planned
        - staged
        - active
        - failed
        - offline
        - rma
        - returned
        - decommissioning
        - decommissioned
        - inventory
        - unknown
      type: string
      description: |-
        * `planned` - Planned
        * `staged` - Staged
        * `active` - Active
        * `failed` - Failed
        * `offline` - Offline
        * `rma` - RMA
        * `returned` - Returned
        * `decommissioning` - Decommissioning
        * `decommissioned` - Decommissioned
        * `inventory` - Inventory
        * `unknown` - Unknown
    DeviceOperationalStatusEnum:
      enum:
        - unknown
        - quarantine
        - validation
        - available
        - in_use
        - delegated
        - pending_handover
        - drained
        - failed
      type: string
      description: |-
        * `unknown` - Unknown
        * `quarantine` - Quarantine
        * `validation` - Validation
        * `available` - Available
        * `in_use` - In Use
        * `delegated` - Delegated
        * `pending_handover` - Pending Handover
        * `drained` - Drained
        * `failed` - Failed
    DeviceHealthStatusEnum:
      enum:
        - unknown
        - healthy
        - degraded
        - critical
      type: string
      description: |-
        * `unknown` - Unknown
        * `healthy` - Healthy
        * `degraded` - Degraded
        * `critical` - Critical
    DeviceClassEnum:
      enum:
        - gpu_compute
        - cpu_hypervisor
        - cpu_baremetal
        - switch
      type: string
      description: |-
        * `gpu_compute` - GPU Compute
        * `cpu_hypervisor` - CPU Hypervisor
        * `cpu_baremetal` - CPU Baremetal
        * `switch` - Switch
    DeviceLinks:
      type: object
      description: Serializer for device links.
      properties:
        self:
          type: string
          format: uri
          readOnly: true
        collection:
          type: string
          format: uri
          readOnly: true
        device_type:
          type: string
          format: uri
          readOnly: true
        role:
          type: string
          format: uri
          readOnly: true
        rack:
          type: string
          format: uri
          readOnly: true
        location:
          type: string
          format: uri
          readOnly: true
        site:
          type: string
          format: uri
          readOnly: true
        jobs:
          type: string
          format: uri
          readOnly: true
        job_device_statuses:
          type: string
          format: uri
          readOnly: true
        netbox:
          type: string
          format: uri
          description: |-
            Construct the NetBox URL from netbox_id and configured public URL.

            If netbox_id is set and NETBOX_PUBLIC_URL is configured, constructs
            the public URL. Otherwise falls back to the stored netbox_link.
          readOnly: true
      required:
        - collection
        - device_type
        - job_device_statuses
        - jobs
        - location
        - netbox
        - rack
        - role
        - self
        - site
    EnrollmentProofSourceEnum:
      enum:
        - enrolled
        - legacy
        - unmigrated
        - none
      type: string
      description: |-
        * `enrolled` - Enrolled
        * `legacy` - Legacy
        * `unmigrated` - Unmigrated
        * `none` - None
    WorkflowSummary:
      type: object
      description: >-
        Compact workflow reference embedded in every job response.


        Includes the fields required by the fleet-manager client's WorkflowRef

        model while skipping expensive computed fields like parameters_presets.


        `category` is here because the UI reads it off a job's workflow, and it
        costs

        nothing: `Workflow.category` is a dict lookup on
        `temporal_workflow_name`, not a

        column or a query. Declared exactly as `WorkflowSerializer` declares it
        so both

        resolve to one named enum component instead of splitting into two
        generated types.
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
          maxLength: 255
        temporal_workflow_name:
          $ref: '#/components/schemas/TemporalWorkflowNameEnum'
        organisation:
          type: string
          format: uuid
        category:
          allOf:
            - $ref: '#/components/schemas/WorkflowCategoryEnum'
          readOnly: true
      required:
        - category
        - id
        - name
        - organisation
        - temporal_workflow_name
    AIJobFailureSummary:
      type: object
      description: Serializer for AIJobFailureSummary.
      properties:
        headline:
          type: string
          description: Concise job-level summary (max ~80 chars)
        explanation:
          type: string
          description: Narrative of what happened across devices
        failure_categories:
          type: object
          additionalProperties:
            type: integer
          description: Map of failure category to count of affected devices
      required:
        - explanation
        - failure_categories
        - headline
    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
    ChadSop:
      type: object
      description: >-
        The chad-sops recipe that dispatched a job.


        Provenance reported by CHAD, not a Fleet Manager entity: the recipe
        catalogue lives

        outside FM, so FM stores what the caller reports and validates only the
        shape. The

        three fields are set and cleared together — a job never carries a
        partial reference.
      properties:
        id:
          type: string
          description: >-
            chad-sops recipe id, e.g. `sop.gpu_compute.gb200_diag_reseat_swap`.
            A label, not a key: the same id can appear in more than one site's
            recipe, so do not treat it as unique.
          maxLength: 255
        name:
          type: string
          description: >-
            Human-readable recipe name, e.g. `GB200 GPU Diagnostics and Tray
            Reseat/Swap`. This is what operator-facing surfaces should display.
          maxLength: 255
        version:
          type: integer
          maximum: 2147483647
          minimum: 1
          description: >-
            Recipe version that ran, so a job can be tied to the exact
            procedure.
      required:
        - id
        - name
        - version
    JobLinks:
      type: object
      description: Serializer for job links.
      properties:
        self:
          type: string
          format: uri
          readOnly: true
        collection:
          type: string
          format: uri
          readOnly: true
        workflow:
          type: string
          format: uri
          readOnly: true
        devices:
          type: string
          format: uri
          readOnly: true
        job_device_statuses:
          type: string
          format: uri
          readOnly: true
        temporal:
          type: string
          format: uri
          readOnly: true
          nullable: true
        logs:
          type: string
          format: uri
          readOnly: true
          nullable: true
      required:
        - collection
        - devices
        - job_device_statuses
        - logs
        - self
        - temporal
        - workflow
    JobDeviceSummary:
      type: object
      description: A job device's name and physical location (rack + U + networking pod).
      properties:
        name:
          type: string
          readOnly: true
          description: Device name.
        rack_id:
          type: string
          format: uuid
          readOnly: true
          description: Rack id.
        rack_name:
          type: string
          readOnly: true
          description: Rack name.
        position:
          type: number
          format: double
          readOnly: true
          nullable: true
          description: Rack U position. Null when the device is in its rack without a U.
        pod:
          type: string
          readOnly: true
          description: >-
            Networking pod label for the device; empty if it has no networking
            topology.
      required:
        - name
        - pod
        - position
        - rack_id
        - rack_name
    JobStatusEnum:
      enum:
        - pending
        - running
        - cancellation_requested
        - completed
        - failed
        - partially_failed
        - cancelled
        - terminated
        - superseded
        - timed_out
      type: string
      description: |-
        * `pending` - Pending
        * `running` - Running
        * `cancellation_requested` - Cancellation Requested
        * `completed` - Completed
        * `failed` - Failed
        * `partially_failed` - Partially Failed
        * `cancelled` - Cancelled
        * `terminated` - Terminated
        * `superseded` - Superseded
        * `timed_out` - Timed Out
    FindingDomainEnum:
      enum:
        - openstack_baremetal
        - oob_mgmt
      type: string
      description: |-
        * `openstack_baremetal` - openstack_baremetal
        * `oob_mgmt` - oob_mgmt
    CollectorSlugEnum:
      enum:
        - ironic-node
      type: string
      description: '* `ironic-node` - ironic-node'
    CollectorStatusEnum:
      enum:
        - completed
        - error
        - unsupported
      type: string
      description: |-
        * `completed` - completed
        * `error` - error
        * `unsupported` - unsupported
    TemporalWorkflowNameEnum:
      enum:
        - EnrollmentWorkflow
        - SingleNodeBurnInWorkflow
        - MultiNodeBurnInPairwiseWorkflow
        - MultiNodeBurnInCollectiveWorkflow
        - PrepareHardwareTestImagesWorkflow
        - ReportGenerationWorkflow
        - SlurmAdoptWorkflow
        - SlurmReleaseWorkflow
        - CustomerReleaseWorkflow
        - IronicNodeCleanWorkflow
        - QuarantineWorkflow
        - ReleaseWorkflow
        - UnenrollmentWorkflow
        - ConnectivityVerificationWorkflow
        - FirmwareInventoryWorkflow
        - FirmwareVerificationWorkflow
        - FirmwarePolicyVerificationWorkflow
        - NVSwitchFirmwarePolicyVerificationWorkflow
        - NodeSwapWorkflow
        - PowerCycleWorkflow
        - PowerOffWorkflow
        - SetMaintenanceModeWorkflow
        - DisableMaintenanceModeWorkflow
        - ColdResetBmcWorkflow
        - SlurmDrainNodeWorkflow
        - SlurmResumeNodeWorkflow
        - FrontendVrfReturnWorkflow
        - FrontendVrfIsolateWorkflow
        - NvLinkIsolateWorkflow
        - NvLinkReturnWorkflow
        - BackendVrfIsolateWorkflow
        - BackendVrfReturnWorkflow
        - ImageNodeWorkflow
        - UnimageNodeWorkflow
        - NodeDiagnosticsWorkflow
      type: string
      description: >-
        * `EnrollmentWorkflow` - Enrollment Workflow

        * `SingleNodeBurnInWorkflow` - Single Node Burn-In Workflow

        * `MultiNodeBurnInPairwiseWorkflow` - Multi-Node Burn-In Pairwise
        Workflow

        * `MultiNodeBurnInCollectiveWorkflow` - Multi-Node Burn-In Collective
        Workflow

        * `PrepareHardwareTestImagesWorkflow` - Prepare Hardware-Test Images
        Workflow

        * `ReportGenerationWorkflow` - Report Generation Workflow

        * `SlurmAdoptWorkflow` - Add to Test Cluster Workflow

        * `SlurmReleaseWorkflow` - Release from Test Cluster Workflow

        * `CustomerReleaseWorkflow` - Customer Release Workflow

        * `IronicNodeCleanWorkflow` - Ironic Node Clean Workflow

        * `QuarantineWorkflow` - Quarantine Workflow

        * `ReleaseWorkflow` - Release Workflow

        * `UnenrollmentWorkflow` - Unenrollment Workflow

        * `ConnectivityVerificationWorkflow` - Connectivity Verification
        Workflow

        * `FirmwareInventoryWorkflow` - Firmware Inventory Workflow

        * `FirmwareVerificationWorkflow` - Firmware Verification Workflow

        * `FirmwarePolicyVerificationWorkflow` - Firmware Policy Verification
        Workflow

        * `NVSwitchFirmwarePolicyVerificationWorkflow` - NVSwitch Firmware
        Policy Verification Workflow

        * `NodeSwapWorkflow` - Node Swap Workflow

        * `PowerCycleWorkflow` - Power Cycle Workflow

        * `PowerOffWorkflow` - Power Off Workflow

        * `SetMaintenanceModeWorkflow` - Set Maintenance Mode Workflow

        * `DisableMaintenanceModeWorkflow` - Disable Maintenance Mode Workflow

        * `ColdResetBmcWorkflow` - Cold Reset BMC Workflow

        * `SlurmDrainNodeWorkflow` - Slurm Drain Node Workflow

        * `SlurmResumeNodeWorkflow` - Slurm Resume Drained Node Workflow

        * `FrontendVrfReturnWorkflow` - Frontend VRF Return Workflow

        * `FrontendVrfIsolateWorkflow` - Frontend VRF Isolate Workflow

        * `NvLinkIsolateWorkflow` - NVLink Isolate Workflow

        * `NvLinkReturnWorkflow` - NVLink Return Workflow

        * `BackendVrfIsolateWorkflow` - Back-end VRF Isolate Workflow

        * `BackendVrfReturnWorkflow` - Back-end VRF Return Workflow

        * `ImageNodeWorkflow` - Image Node Workflow

        * `UnimageNodeWorkflow` - Unimage Node Workflow

        * `NodeDiagnosticsWorkflow` - Node Diagnostics Workflow
    WorkflowCategoryEnum:
      enum:
        - enrolment
        - burn_in_testing
        - customer_release
        - in_service_ops
      type: string
      description: |-
        * `enrolment` - Enrolment
        * `burn_in_testing` - Burn-in testing
        * `customer_release` - Customer release
        * `in_service_ops` - In-service ops
  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.