Alexa.InventoryLevelUsageSensor Interface

Implement the Alexa.InventoryLevelUsageSensor interface in your Alexa skill so that you can report the approximate usage of a consumable product installed in your device. For example, if your device is a vacuum cleaner, you can report the approximate health of the dust filter. You can implement multiple instances of Alexa.InventoryLevelUsageSensor for multiple consumable products, such as a vacuum with a dust filter and a brush.

If you report the quantity of a consumable product remaining in your device, implement the Alexa.InventoryLevelSensor interface instead. If you report when your device uses a consumable product, implement the Alexa.InventoryUsageSensor interface instead.

For the list of languages that the Alexa.InventoryLevelUsageSensor interface supports, see List of Alexa Interfaces and Supported Languages.

Dash replenishment IDs

You can add the Amazon Dash Replenishment Service to your smart home device to enable Alexa to monitor and reorder supplies or replacement parts for your device. When you report inventory with Alexa.InventoryLevelUsageSensor, your customers can track supply levels within the Alexa app and receive notifications from Alexa when supplies run low or parts need replacement. Also, customers can set up automatic reordering of these supplies. For example, a printer can report ink usage to Alexa so that the customer doesn't run out of ink. For details, see About Dash Replenishment.

When you register your device for Dash replenishment, Amazon supplies a replenishment ID for each consumable product in your device. The replenishment ID identifies the products that the customer can order to replace the consumed product. You can provide these IDs to Alexa in the following ways:

  • If you already have your replenishment IDs at the time of device discovery, provide them in your discovery response.
  • You can provide your replenishment IDs later in an AddOrUpdateReport message.

Reportable properties

The Alexa.InventoryLevelUsageSensor interface doesn't define any reportable properties.

Discovery

You describe endpoints that support Alexa.InventoryLevelUsageSensor by using the standard discovery mechanism described in Alexa.Discovery.

For the full list of display categories, see display categories.

Capabilities array

In addition to the usual discovery response fields, for each Alexa.InventoryLevelUsageSensor entry in the capabilities array, include the following fields.

Field Description Type
instance Name of the sensor.
Examples: Sensor.DustFilter or Sensor.Brush.
String
measurement Way you measure the consumable product.
Valid value: Duration
Object
replenishment Dash Replenishment ID for the consumable product. Object
capabilityResources Friendly names that customers can use to interact with the sensor. CapabilityResources object

Discover response example

The following example shows a Discover.Response message for a vacuum that supports the Alexa.InventoryLevelUsageSensor interface.

Copied to clipboard.

{
  "event": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover.Response",
      "payloadVersion": "3",
      "messageId": "a unique identifier, preferably a version 4 UUID"
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "unique ID of the endpoint",
          "manufacturerName": "Vacuum Plus",
          "description": "Smart Vacuum by Vacuum Maker Plus",
          "friendlyName": "Downstairs vacuum",
          "displayCategories": [
            "VACUUM_CLEANER"
          ],
          "additionalAttributes":  {
            "manufacturer": "Vacuum Plus",
            "model" : "VPM1",
            "serialNumber": "the serial number of the device",
            "firmwareVersion" : "the firmware version of the device",
            "softwareVersion": "the software version of the device",
            "customIdentifier": "your custom identifier for the device"
          },
          "cookie": {},
          "capabilities": [
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelUsageSensor",
              "instance": "Sensor.DustFilter",
              "version": "3",
              "configuration": {
                "measurement": {
                  "@type": "Duration"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "replenishment ID for refill options"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "Dust filter",
                      "locale": "en-US"
                    }
                  },
                  {
                    "@type": "text",
                    "value": {
                      "text": "filtre à poussière",
                      "locale": "fr-FR"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelUsageSensor",
              "instance": "Sensor.Brush",
              "version": "3",
              "configuration": {
                "measurement": {
                  "@type": "Duration"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "replenishment ID for refill options"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "Brush",
                      "locale": "en-US"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.PowerController",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "powerState"
                  }
                ],
                "retrievable": true,
                "proactivelyReported": true
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

AddOrUpdateReport

You must proactively send an Alexa.Discovery.AddOrUpdateReport message if the feature support of your endpoint changes. For example, if you don't have the replenishment IDs for your consumable products at the time of initial device discovery, you can provide the replenishment IDs to Alexa later by sending an AddOrUpdateReport message. For details, see AddOrUpdateReport event.

AddOrUpdateReport event example

Copied to clipboard.

{
  "event": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "AddOrUpdateReport",
      "payloadVersion": "3",
      "messageId": "a unique identifier, preferably a version 4 UUID"
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "unique ID of the endpoint",
          "manufacturerName": "Vacuum Plus",
          "description": "Smart Vacuum by Vacuum Maker Plus",
          "friendlyName": "Downstairs vacuum",
          "displayCategories": [
            "VACUUM_CLEANER"
          ],
          "additionalAttributes":  {
            "manufacturer": "Vacuum Plus",
            "model" : "VPM1",
            "serialNumber": "the serial number of the device",
            "firmwareVersion" : "the firmware version of the device",
            "softwareVersion": "the software version of the device",
            "customIdentifier": "your custom identifier for the device"
          },
          "cookie": {},
          "capabilities": [
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelUsageSensor",
              "instance": "Sensor.DustFilter",
              "version": "3",
              "configuration": {
                "measurement": {
                  "@type": "Duration"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "replenishment ID for refill options"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "Dust filter",
                      "locale": "en-US"
                    }
                  },
                  {
                    "@type": "text",
                    "value": {
                      "text": "filtre à poussière",
                      "locale": "fr-FR"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.InventoryLevelUsageSensor",
              "instance": "Sensor.Brush",
              "version": "3",
              "configuration": {
                "measurement": {
                  "@type": "Duration"
                },
                "replenishment": {
                  "@type": "DashReplenishmentId",
                  "value": "replenishment ID for refill options"
                }
              },
              "capabilityResources": {
                "friendlyNames": [
                  {
                    "@type": "text",
                    "value": {
                      "text": "Brush",
                      "locale": "en-US"
                    }
                  }
                ]
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa.PowerController",
              "version": "3",
              "properties": {
                "supported": [
                  {
                    "name": "powerState"
                  }
                ],
                "proactivelyReported": true,
                "retrievable": true
              }
            },
            {
              "type": "AlexaInterface",
              "interface": "Alexa",
              "version": "3"
            }
          ]
        }
      ]
    }
  }
}

Inventory update events

ChangeReport

When you implement the Alexa.InventoryLevelUsageSensor interface, you send InventoryConsumed and InventoryReplaced events instead of the ChangeReport event.

InventoryConsumed event

To report inventory proactively to Alexa, send an InventoryConsumed event and include the approximate usage of a consumable product installed in your device. Report this event about one time a day. You send the event to the Alexa event gateway.

InventoryConsumed event example

In the following example, you notify Alexa after the device consumes 30 hours of the dust filter lifespan.

Copied to clipboard.

{  
  "event": {
    "header": {
      "namespace": "Alexa.InventoryLevelUsageSensor",
      "name": "InventoryConsumed",
      "instance": "Sensor.DustFilter",
      "messageId": "a unique identifier, preferably a version 4 UUID",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "an OAuth2 bearer token"
      },
      "endpointId": "endpoint ID"
    },
    "payload": {
      "usage": {
        "@type": "Duration",
        "value": "PT30H"
    },
    "timeOfSample": "2020-07-02T16:20:50.52Z"
    }
  }
}

InventoryConsumed event payload

Field Description Type Required
usage Amount of the consumable product already used, expressed as a Duration. The duration value must not be negative. Object Yes
timeOfSample Time the sensor detected the usage level.
Defined in ISO 8601 format, YYYY-MM-DDThh:mm:ssZ.
String Yes

InventoryReplaced event

After the user replaces a consumable product, send an InventoryReplaced event proactively to Alexa. You send the event to the Alexa event gateway.

InventoryReplaced event example

In the following example, you notify Alexa after the user has replaced the dust filter.

Copied to clipboard.

{  
  "event": {
    "header": {
      "namespace": "Alexa.InventoryLevelUsageSensor",
      "name": "InventoryReplaced",
      "instance": "Sensor.DustFilter",
      "messageId": "a unique identifier, preferably a version 4 UUID",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "an OAuth2 bearer token"
      },
      "endpointId": "endpoint ID"
    },
    "payload": {
      "replacedDate": "2020-01-15T14:30Z"
    }
  }
}  

InventoryReplaced event payload

Field Description Type Required
replacedDate Date the user replaced the consumable product.
Defined in ISO 8601 format, YYYY-MM-DDThh:mm:ssZ.
String Yes