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