---
title: "Set Device Action Authorization"
method: PUT
path: "/api/v1/admin/devices/{device_id}/actions"
tags: ["device administration"]
---

# Set Device Action Authorization

`PUT /api/v1/admin/devices/{device_id}/actions`

## Request

- Base URL: `https://api.brumby.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.brumby.com/api/v1/admin/devices/{device_id}/actions`
- Auth: HTTP bearer

## Path parameters

- `device_id` string, required

## Request body

- DeviceActionsUpdate
  - `enabled` boolean, required
  - `reason` string, required

## Response `200`

Successful Response

- DeviceDetail
  - `device_id` string, required
  - `physical_components` string[]
  - `execution_type` 'deployment' | 'hitl' | 'sitl'
  - `manual_position` object, nullable
  - `serial_number` string, required
  - `hardware_kind` 'n100' | 'jetson', required
  - `role` 'dock_compute', required
  - `environment` 'staging', required
  - `lifecycle` 'inventory' | 'commissioned' | 'active' | 'maintenance' | 'retired', required
  - `actions_enabled` boolean, required
  - `display_name` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `installation` InstallationResponse
    - `installation_id` string, uuid, required
    - `device_id` string, required
    - `external_farm_id` string, required
    - `farm_name` string, required
    - `assigned_by_actor` string, required
    - `assignment_reason` string, nullable, required
    - `kind` 'field' | 'bench', required: Why a device is at a farm. FIELD is the record that matters: a dock physically installed somewhere, and the trail of where it has been. BENCH is a simulator pointed at a farm's geometry so it can fly it, which happens several times a day and means nothing about where any hardware is. Keeping them apart is what lets a bench move be cheap -- no reason typed, no weight -- without burying a real installation under forty test ones.
    - `installed_at` string, date-time, required
    - `uninstalled_at` string, date-time, nullable, required
    - `unassigned_by_actor` string, nullable, required
    - `unassignment_reason` string, nullable, required
  - `presence` CurrentPresenceResponse: Explicit boundary between device-authored data and FleetOps projection.
    - `device_report` PresenceV1, required: Version 1 application-presence report published with QoS 1, never retained.
      - `schema_version` '1', required
      - `device_id` string, required
      - `boot_id` string, uuid, required
      - `sequence` integer, required
      - `observed_at` string, date-time, required
      - `environment` 'staging', required
      - `hardware` HardwareIdentityV1, required
        - `kind` 'n100' | 'jetson', required
        - `serial_number` string, required
        - `model` string, nullable
        - `revision` string, nullable
      - `role` 'dock_compute', required
      - `agent` AgentIdentityV1, required
        - `name` string, required
        - `version` string, required
        - `build` string, nullable
        - `schema_version` string, nullable
        - `release_sha256` string, nullable
        - `defaults_sha256` string, nullable
        - `companion_version` string, nullable
        - `integrity` AgentIntegrityV1: The N100's own file-integrity verdict for its installed Dock release (bundle rule R4): the release's recorded checksums plus each installed package's hashes. A verdict counts only when bound to the reported release (`release_sha256` equal to the agent's): FleetOps maps an unbound, aborted, never-run or errored check to integrity `unknown` (bundles README section 5), never refuses the presence.
          - `status` 'ok' | 'modified' | 'aborted' | 'never_run' | 'error', required
          - `checked_at` string, date-time, nullable
          - `modified_count` integer, nullable
          - `release_sha256` string, nullable
      - `updater` DockUpdaterPresenceV1: Independently versioned privileged updater capability report. This block is optional on the presence-v1 envelope so deployed legacy dock-link processes continue to ingest. Once reported, FleetOps projects it independently from the ordinary Dock application version.
        - `name` 'dock-updater', required
        - `version` string, required
        - `supported_job_schema_versions` string[], required
        - `supported_release_format_versions` string[], required
        - `trusted_signing_key_ids` string[], required
        - `architecture` 'x86_64' | 'aarch64', required
        - `ready` boolean, required
      - `host` HostStatusV1, required
        - `hostname` string, required
        - `uptime_seconds` number, required
        - `load_1m` number, nullable
        - `memory_available_bytes` integer, nullable
        - `data_free_bytes` integer, nullable
        - `temperature_celsius` number, nullable
      - `health` HealthReportV1, required
        - `checks` HealthCheckV1[]
          - `name` string, required
          - `status` 'pass' | 'warn' | 'fail' | 'unknown', required
          - `message` string, nullable
      - `dock` DockPresenceV1
        - `dock_id` string, nullable
        - `state` 'BOOT' | 'IDLE_EMPTY' | 'IDLE_STOWED' | 'OPENING' | 'OPEN_READY' | 'LAUNCHING' | 'RECEIVING' | 'CLOSING' | 'CHARGING' | 'FAULT' | 'LOCKOUT'
        - `snapshot_observed_at` string, date-time, nullable
        - `supervisor_reachable` boolean, required
        - `reconciled` boolean, nullable
        - `configured` boolean, nullable
        - `active_faults` string[]
        - `snapshot_version` integer, nullable
        - `event_sequence` integer, nullable
        - `teensy` TeensyPresenceV1: Current Teensy controller health, carried in ordinary dock presence.
          - `model` string, required
          - `firmware_version` string, nullable, required
          - `io_mode` 'real' | 'fake' | 'unknown', required
          - `status` 'available' | 'degraded' | 'unavailable', required
          - `heartbeat` TeensyHeartbeatV1, required: Supervisor-observed Teensy heartbeat health and sender diagnostics.
            - `expected_hz` number, required
            - `sender_running` boolean, required
            - `ack_age_ms` integer, nullable, required
            - `mcu_uptime_s` integer, nullable, required
            - `uptime_advancing` boolean, nullable, required
            - `progress_age_ms` integer, nullable, required
            - `reset_count` integer, required
            - `last_reset_age_ms` integer, nullable, required
            - `actuation_inhibited` boolean, nullable, required
            - `in_safe_state` boolean, nullable, required
            - `beats_sent` integer, required
            - `late_beats` integer, required
            - `over_inhibit` integer, required
            - `send_errors` integer, required
            - `max_interval_ms` number, required
            - `mean_interval_ms` number, required
          - `producer` TeensyProducerV1, required: Process instance that observed and summarized the Teensy.
            - `service` string, required
            - `pid` integer, required
            - `instance_id` string, uuid, required
          - `diagnostics` TeensyDiagnosticsSpoolV1: Current health of the durable normalized-occurrence spool.
            - `status` 'available' | 'degraded' | 'unavailable', required
            - `pending` integer, nullable, required
            - `capacity` integer, required
            - `overflow_count` integer, nullable, required
            - `error` string, nullable, required
    - `fleetops_assessment` FleetOpsAssessmentResponse, required: Current state derived by FleetOps from accepted reports and timeouts.
      - `availability` 'online' | 'offline', required
      - `health_status` 'healthy' | 'degraded' | 'unknown', required
      - `received_at` string, date-time, required: Worker time at which the latest valid presence report was accepted.
      - `offline_since` string, date-time, nullable, required
      - `last_transition_at` string, date-time, required
      - `projection_updated_at` string, date-time, required
  - `aircraft` boolean
  - `aircraft_farm_id` string, nullable
  - `credentials` CredentialSummary[]
    - `credential_id` string, uuid, required
    - `public_key_fingerprint` string, required
    - `certificate_serial` string, required
    - `issued_at` string, date-time, required
    - `not_before` string, date-time, required
    - `not_after` string, date-time, required
    - `revoked_at` string, date-time, nullable, required
    - `revocation_reason` string, nullable, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/brumby/apis/brumby-platform-api.md) - [All operations](https://skmtc.dev/brumby/apis/brumby-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/brumby/apis/brumby-platform-api/revisions/fe185e20813e?raw)
