PCController API
The primary host exposes one unversioned, safety-gated living surface across REST, JSON-RPC, WebSocket, and the bounded Socket.IO adapter. Loopback is the default; immediate-alpha application authentication and authorization are disabled under issue #148.
HTTP operations
Canonical routes live directly under /api/. JSON bodies are capped at 1 MiB.
| Method | Path | Purpose | Capability |
|---|---|---|---|
GET | /healthz | Service liveness and API identity | public |
GET | /upnp/public.json | Bounded public host, board, endpoint, health, and telemetry directory | public |
GET | /api/ui-config | Non-secret browser bootstrap | public |
GET | /api/auth/server-proof | Dormant alpha compatibility endpoint; returns 409 while application authentication is disabled | public |
POST | /api/session/ticket | Dormant alpha compatibility endpoint; returns 409 while application authentication is disabled | session |
POST | /api/rpc | JSON-RPC 2.0 request | dynamic |
GET | /api/snapshot | Authoritative cached controller snapshot | read |
POST | /api/diagnostics/cpu-profile | Explicit five-second application CPU profile; loopback callers only, one active capture, no board actions or request body | local-only |
GET | /api/estop | Authoritative effect and motion interlock state | read |
PUT | /api/estop | Engage or release the effect and motion interlock | board_commands |
POST | /api/estop | Engage or release the effect and motion interlock | board_commands |
GET | /api/peripherals | Peripheral descriptors and host-owned names | read |
PUT | /api/peripherals | Replace host-owned peripheral names | host_configuration |
GET | /api/pwm | Authoritative PWM state | read |
PUT | /api/pwm | Mutate PWM state with board readback | board_commands |
DELETE | /api/pwm | Mutate PWM state with board readback | board_commands |
GET | /api/commands | Shared command catalog | read |
GET | /api/program-state | Host-owned program state | read |
PUT | /api/program-state | Update host-owned program state | board_commands |
POST | /api/program-state | Update host-owned program state | board_commands |
GET | /api/menu/catalog | Live board menu catalog | read |
GET | /api/menu/layout | Live board menu layout | read |
PUT | /api/menu/layout | Persist a validated board menu layout | board_commands |
POST | /api/menu/layout | Persist a validated board menu layout | board_commands |
GET | /api/host-menus | Host-presented menu directory | read |
PUT | /api/host-menus | Replace the host-presented menu directory | host_configuration |
POST | /api/host-menus | Replace the host-presented menu directory | host_configuration |
GET | /api/os/status | Host status and policy | read |
GET | /api/os/facts | Bounded read-only host facts | read |
POST | /api/os/key | Validated virtual-key action | virtual_keys |
POST | /api/os/power | Confirmed system or display action | power_actions |
POST | /api/command | Shared command dispatcher | dynamic |
POST | /api/messages | Typed source-tagged message | messages |
POST | /api/display | Present arbitrary seven-segment or LCD text with scroll and repeat timing | board_commands |
POST | /api/opcode | Exchange an opaque versionless UART opcode | board_commands |
GET | /api/app/bridge | Original coordinator bridge instance and process identity | read |
GET | /api/app/instances | List or query live application instances | read |
POST | /api/app/instances | Report or remove one live application instance | host_configuration |
DELETE | /api/app/instances | Report or remove one live application instance | host_configuration |
POST | /api/app/action | Freeze and route a correlated action to exact live application instances | host_configuration |
POST | /api/app/action/ack | Acknowledge one exact app-action target outcome | host_configuration |
GET | /api/app/action/outcome | Read one bounded app-action operation outcome | read |
POST | /api/app/navigate | Navigate all, one surface, or one exact application instance | host_configuration |
POST | /api/app/launch | Ensure, launch, or focus a named TUI or WebUI surface | host_configuration |
GET | /api/bridges | Configured bridge state | read |
POST | /api/bridges/call | Correlated bridge call | bridge_calls |
GET | /api/artifacts/manifest | Artifact/default/current manifest | read |
GET | /api/artifacts | Content-addressed artifact catalog | read |
POST | /api/artifacts/upload | Import a verified artifact | programming |
POST | /api/artifacts/fetch | Queue a bounded remote artifact fetch | programming |
POST | /api/artifacts/capture | Capture flash or EEPROM explicitly | programming |
GET | /api/artifacts/{kind}/{sha256} | Immutable ranged artifact download | read |
HEAD | /api/artifacts/{kind}/{sha256} | Immutable ranged artifact download | read |
GET | /api/artifacts/current/{kind} | Latest explicitly captured artifact | read |
HEAD | /api/artifacts/current/{kind} | Latest explicitly captured artifact | read |
POST | /api/board/firmware/upload | Queue a guarded staged-firmware transfer to the board | programming |
GET | /api/board/firmware/download | Download the latest verified board flash readback | read |
HEAD | /api/board/firmware/download | Download the latest verified board flash readback | read |
POST | /api/board/firmware/download | Queue a fresh verified board flash readback | programming |
POST | /api/updates/{kind} | Queue an explicitly authorized update | programming |
POST | /api/restores/flash | Queue an explicitly authorized flash restore | programming |
GET | /api/updates/status/{id} | Update operation progress | read |
POST | /api/discovery/github/workflow | Discover workflow artifacts | read |
POST | /api/discovery/github/release | Discover release assets | read |
GET | /api/discovery/manifest | Serve or validate an update manifest | read |
POST | /api/discovery/manifest | Serve or validate an update manifest | read |
POST | /api/discovery/check | Compare candidate and installed identities | read |
POST | /api/discovery/stage | Stage a verified candidate without programming | programming |
GET | /api/discovery/status/{id} | Discovery or staging progress | read |
POST | /api/webhooks/inbound | Optional inbound typed webhook | messages |
GET | /api/webhooks/outbound/status | Outbound delivery queue and dead-letter status | read |
GET | /api/webhooks/outbound/pending | Bounded non-secret pending delivery list | read |
GET | /api/webhooks/outbound/dead | Bounded non-secret dead-letter list | read |
POST | /api/webhooks/outbound/replay | Replay explicitly selected dead-letter deliveries | integrations |
POST | /api/webhooks/outbound/clear | Clear explicitly selected dead-letter deliveries | integrations |
GET | /api/integrations/status | Requested and effective buzzer routing and playback state | read |
GET | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
HEAD | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
POST | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
PUT | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
PATCH | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
DELETE | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
GET | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
HEAD | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
POST | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
PUT | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
PATCH | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
DELETE | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
PCController API
The primary host exposes one unversioned, safety-gated living surface across REST, JSON-RPC, WebSocket, and the bounded Socket.IO adapter. Loopback is the default; immediate-alpha application authentication and authorization are disabled under issue #148.
HTTP operations
Canonical routes live directly under /api/. JSON bodies are capped at 1 MiB.
| Method | Path | Purpose | Capability |
|---|---|---|---|
GET | /healthz | Service liveness and API identity | public |
GET | /upnp/public.json | Bounded public host, board, endpoint, health, and telemetry directory | public |
GET | /api/ui-config | Non-secret browser bootstrap | public |
GET | /api/auth/server-proof | Dormant alpha compatibility endpoint; returns 409 while application authentication is disabled | public |
POST | /api/session/ticket | Dormant alpha compatibility endpoint; returns 409 while application authentication is disabled | session |
POST | /api/rpc | JSON-RPC 2.0 request | dynamic |
GET | /api/snapshot | Authoritative cached controller snapshot | read |
POST | /api/diagnostics/cpu-profile | Explicit five-second application CPU profile; loopback callers only, one active capture, no board actions or request body | local-only |
POST | /api/diagnostics/execution-trace | Explicit five-second Go execution trace; loopback callers only, shared profile capture exclusion, no board actions or request body | local-only |
GET | /api/estop | Authoritative effect and motion interlock state | read |
PUT | /api/estop | Engage or release the effect and motion interlock | board_commands |
POST | /api/estop | Engage or release the effect and motion interlock | board_commands |
GET | /api/peripherals | Peripheral descriptors and host-owned names | read |
PUT | /api/peripherals | Replace host-owned peripheral names | host_configuration |
GET | /api/pwm | Authoritative PWM state | read |
PUT | /api/pwm | Mutate PWM state with board readback | board_commands |
DELETE | /api/pwm | Mutate PWM state with board readback | board_commands |
GET | /api/commands | Shared command catalog | read |
GET | /api/program-state | Host-owned program state | read |
PUT | /api/program-state | Update host-owned program state | board_commands |
POST | /api/program-state | Update host-owned program state | board_commands |
GET | /api/menu/catalog | Live board menu catalog | read |
GET | /api/menu/layout | Live board menu layout | read |
PUT | /api/menu/layout | Persist a validated board menu layout | board_commands |
POST | /api/menu/layout | Persist a validated board menu layout | board_commands |
GET | /api/host-menus | Host-presented menu directory | read |
PUT | /api/host-menus | Replace the host-presented menu directory | host_configuration |
POST | /api/host-menus | Replace the host-presented menu directory | host_configuration |
GET | /api/os/status | Host status and policy | read |
GET | /api/os/facts | Bounded read-only host facts | read |
POST | /api/os/key | Validated virtual-key action | virtual_keys |
POST | /api/os/power | Confirmed system or display action | power_actions |
POST | /api/command | Shared command dispatcher | dynamic |
POST | /api/messages | Typed source-tagged message | messages |
POST | /api/display | Present arbitrary seven-segment or LCD text with scroll and repeat timing | board_commands |
POST | /api/opcode | Exchange an opaque versionless UART opcode | board_commands |
GET | /api/app/bridge | Original coordinator bridge instance and process identity | read |
GET | /api/app/instances | List or query live application instances | read |
POST | /api/app/instances | Report or remove one live application instance | host_configuration |
DELETE | /api/app/instances | Report or remove one live application instance | host_configuration |
POST | /api/app/action | Freeze and route a correlated action to exact live application instances | host_configuration |
POST | /api/app/action/ack | Acknowledge one exact app-action target outcome | host_configuration |
GET | /api/app/action/outcome | Read one bounded app-action operation outcome | read |
POST | /api/app/navigate | Navigate all, one surface, or one exact application instance | host_configuration |
POST | /api/app/launch | Ensure, launch, or focus a named TUI or WebUI surface | host_configuration |
GET | /api/bridges | Configured bridge state | read |
POST | /api/bridges/call | Correlated bridge call | bridge_calls |
GET | /api/artifacts/manifest | Artifact/default/current manifest | read |
GET | /api/artifacts | Content-addressed artifact catalog | read |
POST | /api/artifacts/upload | Import a verified artifact | programming |
POST | /api/artifacts/fetch | Queue a bounded remote artifact fetch | programming |
POST | /api/artifacts/capture | Capture flash or EEPROM explicitly | programming |
GET | /api/artifacts/{kind}/{sha256} | Immutable ranged artifact download | read |
HEAD | /api/artifacts/{kind}/{sha256} | Immutable ranged artifact download | read |
GET | /api/artifacts/current/{kind} | Latest explicitly captured artifact | read |
HEAD | /api/artifacts/current/{kind} | Latest explicitly captured artifact | read |
POST | /api/board/firmware/upload | Queue a guarded staged-firmware transfer to the board | programming |
GET | /api/board/firmware/download | Download the latest verified board flash readback | read |
HEAD | /api/board/firmware/download | Download the latest verified board flash readback | read |
POST | /api/board/firmware/download | Queue a fresh verified board flash readback | programming |
POST | /api/updates/{kind} | Queue an explicitly authorized update | programming |
POST | /api/restores/flash | Queue an explicitly authorized flash restore | programming |
GET | /api/updates/status/{id} | Update operation progress | read |
POST | /api/discovery/github/workflow | Discover workflow artifacts | read |
POST | /api/discovery/github/release | Discover release assets | read |
GET | /api/discovery/manifest | Serve or validate an update manifest | read |
POST | /api/discovery/manifest | Serve or validate an update manifest | read |
POST | /api/discovery/check | Compare candidate and installed identities | read |
POST | /api/discovery/stage | Stage a verified candidate without programming | programming |
GET | /api/discovery/status/{id} | Discovery or staging progress | read |
POST | /api/webhooks/inbound | Optional inbound typed webhook | messages |
GET | /api/webhooks/outbound/status | Outbound delivery queue and dead-letter status | read |
GET | /api/webhooks/outbound/pending | Bounded non-secret pending delivery list | read |
GET | /api/webhooks/outbound/dead | Bounded non-secret dead-letter list | read |
POST | /api/webhooks/outbound/replay | Replay explicitly selected dead-letter deliveries | integrations |
POST | /api/webhooks/outbound/clear | Clear explicitly selected dead-letter deliveries | integrations |
GET | /api/integrations/status | Requested and effective buzzer routing and playback state | read |
GET | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
HEAD | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
POST | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
PUT | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
PATCH | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
DELETE | /api/integrations/datahub/{path} | Sanitized loopback data-service proxy | integrations |
GET | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
HEAD | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
POST | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
PUT | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
PATCH | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
DELETE | /api/integrations/device/{path} | Fail-closed device route; use typed RPC | integrations |
JSON-RPC methods
Standard JSON-RPC errors are preserved; host extensions use -32001 for authentication, -32003 for capability denial, and -32000 for runtime or device failures.
| Method | Purpose | Capability | Idempotency |
|---|---|---|---|
controller.action.invoke | Invoke one stable action ID advertised by the attached board profile and wait for the board acknowledgement. | board_commands | non-idempotent |
controller.app.action | Freeze a validated action to exact live targets and return its correlated per-target delivery operation. | dynamic | non-idempotent |
controller.app.action.ack | Acknowledge one exact app-action target as applied or rejected. | host_configuration | idempotent-with-authoritative-readback |
controller.app.action.outcome | Return one bounded app-action operation and its exact per-target outcomes. | read | safe |
controller.app.bridge | Return the original coordinator bridge instance and its bounded process self-information. | read | safe |
controller.app.instance.get | Read one live application instance by ID. | read | safe |
controller.app.instance.remove | Remove one application instance from the live registry. | host_configuration | non-idempotent |
controller.app.instance.report | Create or refresh one leased application-instance report. | host_configuration | non-idempotent |
controller.app.instances | List live application instances and their bounded non-secret state. | read | safe |
controller.app.launch | Ensure, launch, or focus a named TUI or WebUI surface without arbitrary process execution. | host_configuration | idempotent-with-authoritative-readback |
controller.app.navigate | Navigate all, one surface, or one exact live application instance. | host_configuration | non-idempotent |
controller.app.navigation.commit | Commit one follower group's canonical page and return its correlated coordinator outcome. | host_configuration | non-idempotent |
controller.app.page | app page | host_configuration | non-idempotent |
controller.artifact.capture | artifact capture | programming | non-idempotent |
controller.artifact.fetch | artifact fetch | programming | non-idempotent |
controller.artifact.list | artifact list | read | safe |
controller.artifact.manifest | artifact manifest | read | safe |
controller.artifact.upload | artifact upload | programming | idempotent-with-authoritative-readback |
controller.artifact.upload.abort | Abort and remove an incomplete peer artifact transfer. | programming | non-idempotent |
controller.artifact.upload.begin | Begin a bounded correlated peer artifact transfer. | programming | non-idempotent |
controller.artifact.upload.chunk | Append one ordered bounded chunk to a peer artifact transfer. | programming | non-idempotent |
controller.artifact.upload.finish | Revalidate and publish a completed peer artifact transfer. | programming | non-idempotent |
controller.audio.cues | Return the receiving host's declared local sound-effect intent vocabulary. | read | safe |
controller.audio.play | Play one validated sound-effect intent on the receiving host while honoring its mute and volume policy. | integrations | non-idempotent |
controller.board_automation.clear | Clear the board automation table and verify the empty snapshot. | board_commands | idempotent-with-authoritative-readback |
controller.board_automation.list | Read one generation-consistent board automation snapshot. | read | safe |
controller.board_automation.put | Transactionally add or edit one board automation and verify readback. | board_commands | non-idempotent |
controller.board_automation.remove | Remove one board automation and verify its absence. | board_commands | idempotent-with-authoritative-readback |
controller.board_profile.get | Return the attached board identity, configured wiring mode, and opaque profile revision. | read | safe |
controller.board_profile.update | Bind the attached physical board identity to one explicit host-owned wiring profile. | host_configuration | idempotent-with-authoritative-readback |
controller.board.firmware.download | Queue a fresh verified flash-only readback from the board. | programming | non-idempotent |
controller.board.firmware.upload | Queue a guarded transfer of a staged immutable firmware artifact to the board. | programming | non-idempotent |
controller.bridge.call | bridge call | bridge_calls | non-idempotent |
controller.bridge.list | bridge list | read | safe |
controller.close | close | connection_control | idempotent-with-authoritative-readback |
controller.command.catalog | Return the machine-readable shared command catalog. | read | safe |
controller.command.execute | Run a shared command after semantic capability classification. | dynamic | non-idempotent |
controller.connect | connect | connection_control | idempotent-with-authoritative-readback |
controller.device.action | device action | integrations | non-idempotent |
controller.device.inspect | device inspect | integrations | idempotent-with-authoritative-readback |
controller.device.status | device status | integrations | idempotent-with-authoritative-readback |
controller.discovery.check | discovery check | read | safe |
controller.discovery.config | Return persistent network advertisement configuration. | read | safe |
controller.discovery.config.get | Return persistent network advertisement configuration. | read | safe |
controller.discovery.config.set | Persist and hot-apply network advertisement configuration. | integrations | idempotent-with-authoritative-readback |
controller.discovery.connect | Verify an authenticated discovered host and return its health and snapshot. | bridge_calls | idempotent-with-authoritative-readback |
controller.discovery.github.release | discovery github release | read | safe |
controller.discovery.github.workflow | discovery github workflow | read | safe |
controller.discovery.local_manifest | discovery local manifest | read | safe |
controller.discovery.manifest | discovery manifest | read | safe |
controller.discovery.scan | discovery scan | read | safe |
controller.discovery.stage | discovery stage | programming | non-idempotent |
controller.discovery.status | discovery status | read | safe |
controller.display.send | display send | board_commands | non-idempotent |
controller.estop.get | Return the authoritative PCController-wide effect and motion interlock state. | read | safe |
controller.estop.set | Engage or release the PCController-wide effect and motion interlock; release never resumes cancelled work. | board_commands | idempotent-with-authoritative-readback |
controller.event.latest | event latest | events | safe |
controller.event.next | Long-poll the next retained event after an event ID, optionally selecting activity, state, telemetry, or debug. | events | safe |
controller.exit | exit | shutdown | idempotent-with-authoritative-readback |
controller.firmware.build | Compile the canonical host project with reviewed feature names and publish correlated ordered program progress events. | programming | non-idempotent |
controller.front_panel | front panel | read | safe |
controller.front-panel | front panel | read | safe |
controller.history.status | history status | read | safe |
controller.history.timeline | history timeline | read | safe |
controller.host_menu.config | host menu config | read | safe |
controller.host_menu.config.get | host menu config get | read | safe |
controller.host_menu.config.set | host menu config set | host_configuration | idempotent-with-authoritative-readback |
controller.host_menu.configure | host menu configure | host_configuration | idempotent-with-authoritative-readback |
controller.host_menu.content.push | host menu content push | board_commands | idempotent-with-authoritative-readback |
controller.host_menu.directory.replace | host menu directory replace | board_commands | idempotent-with-authoritative-readback |
controller.host_menu.state | host menu state | read | safe |
controller.host.facts | host facts | read | safe |
controller.host.facts.catalog | host facts catalog | read | safe |
controller.hotkeys.get | hotkeys get | read | safe |
controller.hotkeys.set | hotkeys set | host_configuration | idempotent-with-authoritative-readback |
controller.illumination.get | Read persisted enclosure-light policy, live door-selected target, and exact applied MOSFET channel-12 PWM. | read | safe |
controller.illumination.override | Temporarily apply exact 0..4095 PWM to MOSFET channel 12 without changing or taking ownership from the enclosure-light policy, then return authoritative readback. | board_commands | idempotent-with-authoritative-readback |
controller.illumination.set | Change only mode/on/off illumination fields, verify EEPROM durability, and return authoritative live state. | board_commands | idempotent-with-authoritative-readback |
controller.integrations.local.get | integrations local get | integrations | idempotent-with-authoritative-readback |
controller.integrations.local.set | integrations local set | integrations | idempotent-with-authoritative-readback |
controller.integrations.status | Return requested and effective buzzer routing and playback state. | read | safe |
controller.lcd.presentation.configure | lcd presentation configure | host_configuration | idempotent-with-authoritative-readback |
controller.lcd.presentation.status | lcd presentation status | read | safe |
controller.lcd.priority | lcd priority | board_commands | non-idempotent |
controller.lcd.prompt | lcd prompt | board_commands | non-idempotent |
controller.media.authority.change | Request, accept, reject, release, lock, or unlock playback authority for a registered client. | board_commands | idempotent-with-authoritative-readback |
controller.media.authority.get | Return the registered playback authority owner, pending requests, exclusivity, and revision. | read | safe |
controller.media.playback.get | Return the authoritative registered consumer playback clock and prepared-timeline state. | read | safe |
controller.media.playback.update | Publish one sequenced playback-clock update from the registered authority owner. | board_commands | idempotent-with-authoritative-readback |
controller.media.timeline.get | Return the prepared media timeline, acknowledgement ledger, and sticky failure state. | read | safe |
controller.media.timeline.prepare | Validate and arm a revisioned host-executed hardware timeline for a registered paused consumer. | board_commands | idempotent-with-authoritative-readback |
controller.melodies.list | Return the effective configured host melody catalog. | read | safe |
controller.menu.current | menu current | read | safe |
controller.menu.jump | menu jump | board_commands | idempotent-with-authoritative-readback |
controller.menu.layout.get | menu layout get | read | safe |
controller.menu.layout.set | menu layout set | board_commands | idempotent-with-authoritative-readback |
controller.menu.list | menu list | read | safe |
controller.menu.page | menu page | board_commands | idempotent-with-authoritative-readback |
controller.message.send | message send | messages | non-idempotent |
controller.mirror.apply | mirror apply | board_commands | idempotent-with-authoritative-readback |
controller.mirror.configure | mirror configure | host_configuration | idempotent-with-authoritative-readback |
controller.mirror.inspect | mirror inspect | read | safe |
controller.mirror.resync | mirror resync | board_commands | idempotent-with-authoritative-readback |
controller.mirror.status | mirror status | read | safe |
controller.network.peers.get | Return persistent peer topology with secret references and no plaintext credentials. | read | safe |
controller.network.peers.set | Replace and hot-apply peer topology; events, state, and status topics are accepted, and only optional secret references may carry compatibility credentials. | host_configuration | idempotent-with-authoritative-readback |
controller.opcode.exchange | Exchange an opaque versionless UART opcode and caller-selected response opcode. | board_commands | non-idempotent |
controller.opcode.request | Alias for an opaque versionless UART opcode exchange. | board_commands | non-idempotent |
controller.opcode.send | Send an opaque versionless UART opcode; ACK is expected by default. | board_commands | non-idempotent |
controller.open | open | connection_control | idempotent-with-authoritative-readback |
controller.os.configure | os configure | host_configuration | idempotent-with-authoritative-readback |
controller.os.facts | os facts | read | safe |
controller.os.facts.catalog | os facts catalog | read | safe |
controller.os.key | os key | virtual_keys | non-idempotent |
controller.os.policy | os policy | read | safe |
controller.os.power | os power | power_actions | non-idempotent |
controller.os.status | os status | read | safe |
controller.peer.update.host | Transfer a verified executable using a caller-generated idempotency_key, wait through the peer restart, and verify its exact active SHA-256 acknowledgement. Retry uncertain outcomes with the same key. | programming | non-idempotent |
controller.peripheral.folder.update | Atomically create, rename, set the icon, delete or move members of a board-profile channel folder using required expected_revision; return the complete authoritative folder/control catalog. | host_configuration | idempotent-with-authoritative-readback |
controller.peripheral.presentation.update | Update one advertised peripheral name, icon, group, kind-local order, visibility, or lock using optional optimistic concurrency. | host_configuration | idempotent-with-authoritative-readback |
controller.peripherals | peripherals | read | safe |
controller.peripherals.get | peripherals get | read | safe |
controller.peripherals.set | peripherals set | host_configuration | idempotent-with-authoritative-readback |
controller.ping | Return service health and protocol identity. | read | safe |
controller.port.close | port close | connection_control | idempotent-with-authoritative-readback |
controller.port.open | port open | connection_control | idempotent-with-authoritative-readback |
controller.port.owner | port owner | read | safe |
controller.port.process | port process | read | safe |
controller.port.reset | port reset | reset | non-idempotent |
controller.ports | ports | read | safe |
controller.program_state.get | program state get | read | safe |
controller.program_state.set | program state set | board_commands | idempotent-with-authoritative-readback |
controller.program-state.get | program state get | read | safe |
controller.program-state.set | program state set | board_commands | idempotent-with-authoritative-readback |
controller.pwm.channel.configure | Persist a partial PWM channel configuration (output type, icon, curve, gamma, step_percent, on_behavior full|restore), preserving omitted fields, then publish the changed descriptor. | host_configuration | idempotent-with-authoritative-readback |
controller.pwm.off | pwm off | board_commands | idempotent-with-authoritative-readback |
controller.pwm.set | pwm set | board_commands | idempotent-with-authoritative-readback |
controller.pwm.trace.get | Return bounded DEBUG-only PWM acknowledgements; no board read or output change. | read | safe |
controller.pwm.trace.start | Temporarily capture one channel 0..15 for explicit duration_ms 1..60000, off by default; no board operation. | events | safe |
controller.pwm.trace.stop | Stop temporary PWM acknowledgement capture and retain bounded receipts; no board operation. | events | safe |
controller.pwm.values | pwm values | read | safe |
controller.quit | quit | shutdown | idempotent-with-authoritative-readback |
controller.reset | reset | reset | non-idempotent |
controller.reset.lines | reset lines | reset | non-idempotent |
controller.restore.flash | Restore a captured flash backup through the guarded restore path. | programming | non-idempotent |
controller.rf.binding.put | Create a uniquely named validated RF binding, or explicitly edit with previous_name; reject name/stale-target conflicts without replacing unrelated assignments. | host_configuration | idempotent-with-authoritative-readback |
controller.rf.binding.remove | Remove one named host-owned RF application binding. | host_configuration | idempotent-with-authoritative-readback |
controller.rf.catalog | Return learned RF records, live capture state, persisted bindings, and currently advertised action choices. | read | safe |
controller.rf.clear | rf clear | board_commands | idempotent-with-authoritative-readback |
controller.rf.learn.cancel | rf learn cancel | board_commands | idempotent-with-authoritative-readback |
controller.rf.learn.start | rf learn start | board_commands | non-idempotent |
controller.rf.learn.status | rf learn status | read | safe |
controller.rf.list | rf list | read | safe |
controller.rf.map | Replace one learned RF mapping and return board readback. | board_commands | idempotent-with-authoritative-readback |
controller.rf.observed.add | Save a waveform actually received from the current board, unassigned, with preserved records and verified readback. | board_commands | idempotent-with-authoritative-readback |
controller.rf.preferences.set | Save timed-learning, duration and continuous-capture preferences without entering learning. | host_configuration | idempotent-with-authoritative-readback |
controller.rf.presentation | rf presentation | read | safe |
controller.rf.remove | rf remove | board_commands | idempotent-with-authoritative-readback |
controller.rf.transmit | Transmit one validated RF waveform request. | board_commands | non-idempotent |
controller.session.snapshot | session snapshot | read | safe |
controller.session.snapshot.last | session snapshot last | read | safe |
controller.snapshot | Return the authoritative cached controller snapshot. | read | safe |
controller.status | status | read | safe |
controller.status_led.release | status led release | board_commands | idempotent-with-authoritative-readback |
controller.status_led.set | status led set | board_commands | idempotent-with-authoritative-readback |
controller.subscribe | Subscribe this WebSocket connection to activity events, changed state, explicit debug, raw opcodes, and/or status. | events | safe |
controller.system.status | system status | read | safe |
controller.temperatures | temperatures | read | safe |
controller.udp.call | udp call | bridge_calls | idempotent-with-authoritative-readback |
controller.udp.config.get | udp config get | read | safe |
controller.udp.config.set | udp config set | host_configuration | idempotent-with-authoritative-readback |
controller.udp.events.get | udp events get | read | safe |
controller.udp.status | udp status | read | safe |
controller.udp.subscribe | udp subscribe | host_configuration | idempotent-with-authoritative-readback |
controller.udp.unsubscribe | udp unsubscribe | host_configuration | idempotent-with-authoritative-readback |
controller.ui.config | Return host-owned UI settings, including status_interval_ms and measurement_freshness_ms. | read | safe |
controller.ui.config.get | Return host-owned UI settings, including status_interval_ms and measurement_freshness_ms. | read | safe |
controller.ui.config.set | Atomically persist host UI fields; status_interval_ms is 50..60000 and measurement_freshness_ms is refresh+100..120000. | host_configuration | idempotent-with-authoritative-readback |
controller.unsubscribe | Remove this WebSocket connection's active subscriptions. | events | safe |
controller.update.eeprom | update eeprom | programming | non-idempotent |
controller.update.firmware | update firmware | programming | non-idempotent |
controller.update.host | update host | programming | non-idempotent |
controller.update.status | update status | read | safe |
controller.virtual_key | virtual key | virtual_keys | idempotent-with-authoritative-readback |
controller.webhooks.clear | Clear explicitly selected dead-letter deliveries. | integrations | idempotent-with-authoritative-readback |
controller.webhooks.dead | List bounded non-secret dead-letter deliveries. | read | safe |
controller.webhooks.pending | List bounded non-secret pending outbound deliveries. | read | safe |
controller.webhooks.replay | Replay explicitly selected dead-letter deliveries. | integrations | non-idempotent |
controller.webhooks.status | Return bounded outbound queue and dead-letter counters. | read | safe |
Contract digest 37d7181d0d839dbe2aba78f731adc11b93378796c26478bbff0c5bd7cc6bf5fa. Generated by Tools/Audit/generate-api-reference.mjs.
Contract digest 993a4c468b4553a208793aa8744ea56ce46d8a3854d3bfd0f541b1d210c58785. Generated by Tools/Audit/generate-api-reference.mjs.