# Mutations

Use this page when you already know which write operation you need and want the exact public mutation surface of the Luxonis Hub
GraphQL control API. Each supported mutation has its own section so you can link directly to it.

> **Public mutation surface**
> The public root mutation type is `PublicMutation`. Supported public mutations are available under `team { ... }`.

## About mutations

Every GraphQL schema has a root mutation type. In Luxonis Hub, the public root mutation type is `PublicMutation`.

Use this page to:

 * confirm the exact mutation name and argument names
 * check the top-level fields available on each mutation result type
 * link directly to one mutation field from guides or changelog entries

If you need input object details such as `InstallAppOnDeviceInput` or `StartOTAOnDeviceInput`, continue to
[Schema](https://docs.luxonis.com/cloud/api/reference/control-api/schema.md) or inspect the live schema through introspection.

## team

Enter the authenticated team-scoped mutation surface.

Path: `team`

Type: `TeamScopedMutations!`

All remaining mutation sections on this page are nested under `team` and use the path `team.<field>`.

## abortOtaOnDevice

Abort an OTA update already in progress on a device.

Path: `team.abortOtaOnDevice`

Returns: `AbortOTAOnDeviceResult!`

### Arguments for `abortOtaOnDevice`

 * `deviceId` (`ID!`): ID of the device whose OTA update you want to abort.

### Return fields for `abortOtaOnDevice`

 * `status` (`AbortOTAOnDeviceResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## createAdoptKey

Create an adopt key for device onboarding.

Path: `team.createAdoptKey`

Returns: `CreateAdoptKeyResult!`

### Arguments for `createAdoptKey`

 * `input` (`CreateAdoptKeyInput!`): Adopt key settings, including name, expiry, and remaining uses.

### Return fields for `createAdoptKey`

 * `status` (`CreateAdoptKeyResultStatus!`): Outcome of the operation.
 * `key` (`UUID`): Newly generated raw adopt key value.
 * `adoptKey` (`TeamAdoptKey`): Metadata for the created adopt key.

## createDeviceGroup

Create a new device group.

Path: `team.createDeviceGroup`

Returns: `CreateDeviceGroupResult!`

### Arguments for `createDeviceGroup`

 * `input` (`CreateDeviceGroupInput!`): Device group settings. Currently this input contains the group name.

### Return fields for `createDeviceGroup`

 * `status` (`CreateDeviceGroupResultStatus!`): Outcome of the operation.
 * `deviceGroup` (`DeviceGroup`): Metadata for the created device group.

## deleteAdoptKey

Delete an adopt key.

Path: `team.deleteAdoptKey`

Returns: `DeleteAdoptKeyResult!`

### Arguments for `deleteAdoptKey`

 * `adoptKeyId` (`ID!`): ID of the adopt key to delete.

### Return fields for `deleteAdoptKey`

 * `status` (`DeleteAdoptKeyResultStatus!`): Outcome of the operation.

## deleteDevice

Delete a device record from the team.

Path: `team.deleteDevice`

Returns: `DeleteDeviceResult!`

### Arguments for `deleteDevice`

 * `deviceId` (`ID!`): ID of the device to delete.

### Return fields for `deleteDevice`

 * `status` (`DeleteDeviceResultStatus!`): Outcome of the operation.

## deleteDeviceApp

Delete an installed device app from a device.

Path: `team.deleteDeviceApp`

Returns: `DeleteDeviceAppResult!`

### Arguments for `deleteDeviceApp`

 * `deviceAppId` (`ID!`): ID of the installed device app to delete.

### Return fields for `deleteDeviceApp`

 * `status` (`DeleteDeviceAppResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## deleteDeviceGroup

Delete a device group.

Path: `team.deleteDeviceGroup`

Returns: `DeleteDeviceGroupResult!`

### Arguments for `deleteDeviceGroup`

 * `deviceGroupId` (`ID!`): ID of the device group to delete.

### Return fields for `deleteDeviceGroup`

 * `status` (`DeleteDeviceGroupResultStatus!`): Outcome of the operation.

## deleteSnapsByFilter

Delete snaps in bulk using a filter.

Path: `team.deleteSnapsByFilter`

Returns: `DeleteSnapsResult!`

### Arguments for `deleteSnapsByFilter`

 * `filter` (`EventSnapFilterInput!`): Filter used to select which snaps to delete.

### Return fields for `deleteSnapsByFilter`

 * `status` (`DeleteSnapsResultStatus!`): Outcome of the operation.
 * `bgTaskId` (`ID`): Background task ID to poll when deletion continues asynchronously.

## deleteSnapsByIds

Delete a specific set of snaps by ID.

Path: `team.deleteSnapsByIds`

Returns: `DeleteSnapsResult!`

### Arguments for `deleteSnapsByIds`

 * `ids` (`[ID!]!`): IDs of the snaps to delete.

### Return fields for `deleteSnapsByIds`

 * `status` (`DeleteSnapsResultStatus!`): Outcome of the operation.
 * `bgTaskId` (`ID`): Background task ID to poll when deletion continues asynchronously.

## deviceGroupAddDevice

Add one device to a device group.

Path: `team.deviceGroupAddDevice`

Returns: `AddDeviceToDeviceGroupResult!`

### Arguments for `deviceGroupAddDevice`

 * `deviceGroupId` (`ID!`): ID of the target device group.
 * `input` (`AddDeviceToDeviceGroupInput!`): Device-group assignment input. Currently this input contains the device ID.

### Return fields for `deviceGroupAddDevice`

 * `status` (`AddDeviceToDeviceGroupResultStatus!`): Outcome of the operation.

## deviceGroupRemoveDevice

Remove one device from a device group.

Path: `team.deviceGroupRemoveDevice`

Returns: `RemoveDeviceFromDeviceGroupResult!`

### Arguments for `deviceGroupRemoveDevice`

 * `deviceGroupId` (`ID!`): ID of the device group.
 * `input` (`RemoveDeviceFromDeviceGroupInput!`): Device-group removal input. Currently this input contains the device ID.

### Return fields for `deviceGroupRemoveDevice`

 * `status` (`RemoveDeviceFromDeviceGroupResultStatus!`): Outcome of the operation.

## disableDeviceApp

Disable an installed device app.

Path: `team.disableDeviceApp`

Returns: `DisableDeviceAppResult!`

### Arguments for `disableDeviceApp`

 * `deviceAppId` (`ID!`): ID of the installed device app to disable.

### Return fields for `disableDeviceApp`

 * `status` (`DisableDeviceAppResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## enableDeviceApp

Enable an installed device app.

Path: `team.enableDeviceApp`

Returns: `EnableDeviceAppResult!`

### Arguments for `enableDeviceApp`

 * `deviceAppId` (`ID!`): ID of the installed device app to enable.

### Return fields for `enableDeviceApp`

 * `status` (`EnableDeviceAppResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## installAppOnDevice

Install an app on a device.

Path: `team.installAppOnDevice`

Returns: `InstallAppOnDeviceResult!`

### Arguments for `installAppOnDevice`

 * `deviceId` (`ID!`): ID of the device where the app should be installed.
 * `input` (`InstallAppOnDeviceInput!`): Installation settings, including app identifier, optional version, environment, and start
   behavior.

### Return fields for `installAppOnDevice`

 * `status` (`InstallAppOnDeviceResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## rebootDevice

Reboot a device.

Path: `team.rebootDevice`

Returns: `RebootDeviceResult!`

### Arguments for `rebootDevice`

 * `deviceId` (`ID!`): ID of the device to reboot.

### Return fields for `rebootDevice`

 * `status` (`RebootDeviceResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## renameDeviceGroup

Rename an existing device group.

Path: `team.renameDeviceGroup`

Returns: `RenameDeviceGroupResult!`

### Arguments for `renameDeviceGroup`

 * `deviceGroupId` (`ID!`): ID of the device group to rename.
 * `input` (`RenameDeviceGroupInput!`): Rename input. Currently this input contains the new group name.

### Return fields for `renameDeviceGroup`

 * `status` (`RenameDeviceGroupResultStatus!`): Outcome of the operation.

## requestDeviceAppConnection

Request connection details for a device app session.

Path: `team.requestDeviceAppConnection`

Returns: `RequestDeviceAppConnectionResult!`

### Arguments for `requestDeviceAppConnection`

 * `deviceAppId` (`ID!`): ID of the installed device app to connect to.

### Return fields for `requestDeviceAppConnection`

 * `status` (`RequestDeviceAppConnectionResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.
 * `connection` (`AppConnectionResponse`): Connection payload. If present, select `deviceAppId` and `state`.

## requestDeviceWebrtcConfig

Request browser-side WebRTC bootstrap details for a device.

Path: `team.requestDeviceWebrtcConfig`

Returns: `RequestDeviceWebrtcConfigResult!`

### Arguments for `requestDeviceWebrtcConfig`

 * `deviceId` (`ID!`): ID of the device to connect to.

### Return fields for `requestDeviceWebrtcConfig`

 * `status` (`RequestDeviceWebrtcConfigResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.
 * `config` (`WebRtcConfigResponse`): WebRTC bootstrap payload. If present, select `authToken` and `clientId`.

## revokeAdoptKey

Revoke an adopt key without deleting its record.

Path: `team.revokeAdoptKey`

Returns: `RevokeAdoptKeyResult!`

### Arguments for `revokeAdoptKey`

 * `adoptKeyId` (`ID!`): ID of the adopt key to revoke.

### Return fields for `revokeAdoptKey`

 * `status` (`RevokeAdoptKeyResultStatus!`): Outcome of the operation.

## setDeviceAppConfig

Update runtime configuration for a device app.

Path: `team.setDeviceAppConfig`

Returns: `SetDeviceAppConfigResult!`

### Arguments for `setDeviceAppConfig`

 * `deviceAppId` (`ID!`): ID of the installed device app to configure.
 * `input` (`SetDeviceAppConfigInput!`): Configuration update, including the environment object and restart behavior.

### Return fields for `setDeviceAppConfig`

 * `status` (`SetDeviceAppConfigResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## startDeviceApp

Start an installed device app.

Path: `team.startDeviceApp`

Returns: `StartDeviceAppResult!`

### Arguments for `startDeviceApp`

 * `deviceAppId` (`ID!`): ID of the installed device app to start.
 * `input` (`StartDeviceAppInput!`): Runtime overrides such as environment changes or app enablement behavior.

### Return fields for `startDeviceApp`

 * `status` (`StartDeviceAppResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## startOtaOnDevice

Start an OTA update on a device.

Path: `team.startOtaOnDevice`

Returns: `StartOTAOnDeviceResult!`

### Arguments for `startOtaOnDevice`

 * `deviceId` (`ID!`): ID of the device to update.
 * `input` (`StartOTAOnDeviceInput!`): OTA settings, including firmware ID and optional reboot behavior.

### Return fields for `startOtaOnDevice`

 * `status` (`StartOTAOnDeviceResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## stopDeviceApp

Stop a running device app.

Path: `team.stopDeviceApp`

Returns: `StopDeviceAppResult!`

### Arguments for `stopDeviceApp`

 * `deviceAppId` (`ID!`): ID of the installed device app to stop.

### Return fields for `stopDeviceApp`

 * `status` (`StopDeviceAppResultStatus!`): Outcome of the operation.
 * `failedMessage` (`String`): Failure details when the operation does not succeed.

## Related docs

### Schema

Inspect the live schema endpoint, SDL workflow, and introspection options.

[Schema](https://docs.luxonis.com/cloud/api/reference/control-api/schema.md)

### Types

Inspect the public object and connection types used by mutation results.

[Types](https://docs.luxonis.com/cloud/api/reference/control-api/types.md)

### Queries

Switch to the supported public read operations for the same API surface.

[Queries](https://docs.luxonis.com/cloud/api/reference/control-api/queries.md)

### About GraphQL

Return to request shape, authentication, and public API boundaries.

[About GraphQL](https://docs.luxonis.com/cloud/api/graphql.md)
