## Device model

The device model is defined by the fields in this section.


Device model fields can only contain letters, numbers, and the following
symbols: period (.), hyphen (-), underscore (_), space ( ) and plus
(+). The first character of a field must be a letter or number.
Example

```
{
  "project_id": "my-devices-project",
  "device_model_id": "my-devices-project-prototype-light-v1",
  "manifest": {
    "manufacturer": "Assistant SDK developer",
    "product_name": "Assistant SDK light",
    "device_description": "Assistant SDK light device"
  },
  "device_type": "action.devices.types.LIGHT",
  "traits": ["action.devices.traits.OnOff"]
}
```
Schema

```
{
  "project_id": string,
  "device_model_id": string,
  "manifest": {
    "manufacturer": string,
    "product_name": string,
    "device_description": string
  },
  "device_type": string,
  "traits": [ string ]
}
```

- **`project_id`:** (String) Required. Google Cloud Platform project [ID](https://support.google.com/cloud/answer/6158840) of the Actions Console project to associate with this device model. A project can contain multiple device models.
- **`device_model_id`:** (String) Required. Globally-unique identifier for this device model; use the `project_id` as a prefix to help avoid collisions over the range of all projects. Used in metrics and during device registration.
- **`manifest`:** (object(Manifest)) Required. Metadata that describes the device model and manufacturer. This may be shown in the (upcoming) SDK console, metrics dashboards, and other related visual interfaces.
  - **`manifest.manufacturer`:** (String) Required. Name of the device manufacturer.
  - **`manifest.product_name`:** (String) Required. Consumer-facing product name for this device model.
  - **`manifest.device_description`:** (String) Optional. Description of this device model.
- **`device_type`:** (String) Required. The type of device hardware. Select from the following:
  - `action.devices.types.CAMERA`
  - `action.devices.types.DISHWASHER`
  - `action.devices.types.DRYER`
  - `action.devices.types.LIGHT`
  - `action.devices.types.OUTLET`
  - `action.devices.types.PHONE`
  - `action.devices.types.REFRIGERATOR`
  - `action.devices.types.SCENE`
  - `action.devices.types.SOUNDBAR`
  - `action.devices.types.SPEAKER`
  - `action.devices.types.SWITCH`
  - `action.devices.types.THERMOSTAT`
  - `action.devices.types.TV`
  - `action.devices.types.VACUUM`
  - `action.devices.types.WASHER`
- **`traits`:** (Array\<String\>) Optional. List of traits the device supports. Traits include the commands, attributes, and states for the device. You do not need to define an [Action package](https://developers.google.com/assistant/conversational/action-package/reference/rest/Shared.Types/ActionPackage) to use [built-in traits](https://developers.google.com/assistant/sdk/reference/traits).

## Device instance

The device instance is defined by the fields in this section.


Device instance fields must start with a letter or number. The device ID
can only contain letters, numbers, and the following symbols: period (.),
hyphen (-), underscore (_), and plus (+). The device nickname can only
contain numbers, letters, and the space ( ) symbol.
Example

```
  {
    "id": "my_led_1",
    "model_id": "my-devices-project-prototype-light-v1",
    "nickname": "My Assistant Light",
    "client_type": "SDK_LIBRARY"
  }
```
Schema

```
  {
    "id": string,
    "model_id": string,
    "nickname": string,
    "client_type": string
  }
```

- **`id`:** (String) Required. Identifier for the test device. Must be unique within all of the devices registered under the same Google Developer project.
- **`model_id`:** (String) Required. Identifier of the device model; must be the same as the [`device_model_id`](https://developers.google.com/assistant/sdk/reference/device-registration/model-and-instance-schemas#device_model_json) associated with this test device. The device model must have been registered previously.
- **`nickname`:** (String) Optional. Nickname for the device. This name will be used to refer to the device in visual interfaces like the Assistant settings.
- **`client_type`:** (String) Required. The type of client device. Must be either of the following: `SDK_SERVICE` or `SDK_LIBRARY`.