Skip to main content

Event Types

We are continually adding more event types as we build out the Texture platform so if there is an event type you would like to see, please let us know.

First some overall notes on the event types:

We follow the Standard Webhook Specification as closely as possible for maximum compatibility with existing webhook integrations.

  • All events are sent to the destination as a JSON object.
  • All events have a type property that indicates the type of event.
  • All events have a version property that indicates the version of the event type. We use semver for versioning.
  • All events have a key property that is a unique identifier for the event. The key is a hash of the event data and is used to deduplicate events helping you avoid duplicate events.

command.failed

Fired whenever a command run against a device fails.

Command Failed Event
{
"type": "command.failed",
"version": "0.0.2",
"key": "cc0e387d55ab78fb204c5c2225eff0aa6a9ca3f32a8d5542f75fe9b8bd972d87",
"timestamp": "2024-08-22T15:54:52.013Z",
"data": {
"workspaceId": "cllzcf9xe00066g7dcsxyq1e5",
"commandId": "cllzcbw0t00016g7dfua590dd",
"deviceId": "cllzcbw0t00016g7dfua590dd",
"error": {
"message": "Failed to execute command"
},
"issuedAt": "2023-09-01T20:48:24.967Z",
"executedAt": "2023-09-01T20:48:24.967Z"
}
}
KeyDescription
typeThe type of event, in this case command.failed
versionThe version of the event type, following semver
keyA unique identifier for the event
timestampThe date and time when the event occurred
data.workspaceIdThe ID of the workspace associated with the command
data.commandIdThe unique identifier for the command
data.deviceIdThe ID of the device on which the command was executed
data.statusThe status of the command, in this case "failed"
data.error.messageA description of the error that occurred
data.issuedAtThe date and time when the command was issued
data.executedAtThe date and time when the command was executed

command.succeeded

Fired whenever a command run against a device succeeds.

Command Succeeded Event
{
"type": "command.succeeded",
"version": "0.0.2",
"key": "cc0e387d55ab78fb204c5c2225eff0aa6a9ca3f32a8d5542f75fe9b8bd972d87",
"timestamp": "2024-08-22T15:54:52.013Z",
"data": {
"workspaceId": "cllzcf9xe00066g7dcsxyq1e5",
"commandId": "cllzcbw0t00016g7dfua590dd",
"deviceId": "cllzcbw0t00016g7dfua590dd",
"issuedAt": "2023-09-01T20:48:24.967Z",
"executedAt": "2023-09-01T20:48:24.967Z"
}
}
KeyDescription
typeThe type of event, in this case command.succeeded
versionThe version of the event type, following semver
keyA unique identifier for the event
timestampThe date and time when the event occurred
data.workspaceIdThe ID of the workspace associated with the command
data.commandIdThe unique identifier for the command
data.deviceIdThe ID of the device on which the command was executed
data.statusThe status of the command, in this case "succeeded"
data.issuedAtThe date and time when the command was issued
data.executedAtThe date and time when the command was executed

device.discovered

Fired when a new device is connected to the Texture platform. Includes the following payload:

Device Discovered Event
{
"type": "device.discovered",
"version": "0.0.1",
"key": "cc0e387d55ab78fb204c5c2225eff0aa6a9ca3f32a8d5542f75fe9b8bd972d87",
"timestamp": "2024-08-22T15:54:52.013Z",
"data": {
"deviceId": "cllzcbw0t00016g7dfua590dd",
"deviceModel": "ac_powerwall",
"deviceType": "battery",
"workspaceId": "cllzcf9xe00066g7dcsxyq1e5",
"organizationId": "cllzcf78o00036g7d0r4gjry1",
"manufacturer": "tesla",
"customer": {
"referenceId": "c1b1504d-4784-5d90-9459-a512c4789b35",
},
"site": {
"location": {
"latitude": 37.7749,
"longitude": -122.4194
}
},
"state": {
"id": "cltyhxpy406poq4z3zx19y2fs",
"charge": 18069.15789473684,
"chargePercentage": 59.30925587453832,
"chargingState": "charging",
"whConsumed": 0,
"chargeRate": -2290,
"backupReserve": 30,
"gridStatus": "idle",
"gridPower": 0,
"gridEnergy": 0,
"isStormModeEnabled": true,
"isStormModeActive": false,
"createdAt": "2024-03-19T14:55:10.493Z"
},
"createdAt": "2023-09-01T20:48:24.967Z",
"updatedAt": "2023-09-01T20:48:24.967Z"
}
}
KeyDescription
typeThe type of event, in this case device.discovered
versionThe version of the event schema, following semver
keyA unique identifier for this event instance
timestampThe date and time when the event was generated
data.deviceIdThe unique identifier for the device in Texture's system
data.deviceModelThe specific model of the device
data.deviceTypeThe category or type of the device (e.g., battery, inverter, vehicle, etc.)
data.workspaceIdThe identifier for the workspace to which this device belongs
data.organizationIdThe identifier for the organization to which this device belongs
data.manufacturerThe manufacturer of the device
data.customer.referenceIdAn external reference ID for the customer
data.site.location.latitudeThe latitude coordinate of the device's location
data.site.location.longitudeThe longitude coordinate of the device's location
data.stateThe current state of the device, including various metrics
data.state.idUnique identifier for this state instance
data.state.chargeThe current charge of the device in watt-hours
data.state.chargePercentageThe current charge level as a percentage
data.state.chargingStateThe current charging status of the device
data.state.whConsumedThe watt-hours consumed by the device
data.state.chargeRateThe rate at which the device is charging or discharging
data.state.backupReserveThe percentage of charge reserved for backup
data.state.gridStatusThe current status of the grid connection
data.state.gridPowerThe power currently drawn from or supplied to the grid
data.state.gridEnergyThe energy exchanged with the grid
data.state.createdAtThe timestamp when this state update happened
data.createdAtThe timestamp when the device was first discovered
data.updatedAtThe timestamp when the device information was last updated

Note that when you configure a destination, you can specify which device types are fired for a given destination which can act as a kind of filter. So for example you could say that you want only Battery updates to go to a given webhook and we will filter them for you.

device.updated

Fired whenever we get updated data for a device.

Device Updated Event
{
"type": "device.updated",
"version": "0.0.1",
"key": "cc0e387d55ab78fb204c5c2225eff0aa6a9ca3f32a8d5542f75fe9b8bd972d87",
"timestamp": "2024-08-22T15:54:52.013Z",
"data": {
"deviceId": "cllzcbw0t00016g7dfua590dd",
"deviceModel": "ac_powerwall",
"deviceName": "Susie's Powerwall",
"manufacturer": "tesla",
"deviceType": "battery",
"workspaceId": "cllzcf9xe00066g7dcsxyq1e5",
"organizationId": "cllzcf78o00036g7d0r4gjry1",
"customer": {
"referenceId": "c1b1504d-4784-5d90-9459-a512c4789b35",
},
"state": {
"id": "cm05mna4f00bn9dkcm5zylwt0",
"charge": 5378,
"chargePercentage": 20,
"chargingState": "idle",
"whConsumed": 0,
"chargeRate": 0,
"backupReserve": 20,
"gridStatus": "importing",
"gridPower": 201,
"gridEnergy": 17,
"isStormModeEnabled": true,
"isStormModeActive": false
"createdAt": "2024-08-22T18:39:38.479Z",
},
"createdAt": "2023-09-01T20:48:24.967Z",
"updatedAt": "2023-09-01T20:48:24.967Z"
}
}
KeyDescription
typeThe type of event, in this case device.updated
versionThe version of the event type, following semver
keyA unique identifier for the event, essentially a hash of the event data
timestampThe date and time when the event occurred
data.deviceIdThe unique identifier for the device, created by Texture when the device was discovered
data.deviceModelThe model of the device
data.deviceNameThe name given to the device, usually by the customer in their manufacturer app
data.manufacturerThe manufacturer of the device
data.deviceTypeThe type of device (e.g., battery)
data.workspaceIdThe ID of the workspace associated with the device
data.organizationIdThe ID of the organization associated with the device
data.customer.referenceIdA reference ID for the customer, whatever was supplied by your organization during the device enrollment process
data.stateAn object containing the current state of the device
data.state.idThe unique identifier for this state update
data.state.chargeThe current charge of the device in Wh (watt-hours)
data.state.chargePercentageThe current charge percentage of the device
data.state.chargingStateThe current charging state of the device
data.state.whConsumedThe amount of energy consumed in Wh (watt-hours)
data.state.chargeRateThe current charge rate of the device in W (watts)
data.state.backupReserveThe backup reserve percentage
data.state.gridStatusThe current status of the grid connection
data.state.gridPowerThe current power exchange with the grid in W (watts)
data.state.gridEnergyThe energy exchanged with the grid in Wh (watt-hours)
data.state.isStormModeEnabledWhether storm mode is enabled
data.state.isStormModeActiveWhether storm mode is currently active
data.state.createdAtThe timestamp when this state update occurred (which may be different than the event timestamp if the state was batched and sent slightly delayed which is the case for some OEMs)
data.createdAtThe timestamp when this update was created. This is the timestamp of the request the OEM's API returned, not necessarly the timestamp of when the state was actually updated on the device. For that see data.state.createdAt

Note, the state object will differ by device type. For example, a battery will have different state data than an inverter. We have details on these differences here. The above example is for a battery.

The lion's share of these events will be triggered from the Device state updates which we get mostly on 5 or 15 minute intervals from the devices, however we are always looking to get tighter interval telemetry data as well as allow for specifying filters on that data. Stay tuned as we continue to add richer functionality to the filtering data to these events.

device.disconnected

Fired whenever a device disconnects from the Texture platform.

Device Disconnected Event
{
"type": "device.disconnected",
"version": "0.0.1",
"key": "cc0e387d55ab78fb204c5c2225eff0aa6a9ca3f32a8d5542f75fe9b8bd972d87",
"timestamp": "2024-08-22T15:54:52.013Z",
"data": {
"deviceId": "cllzcbw0t00016g7dfua590dd",
"deviceModel": "ac_powerwall",
"deviceType": "battery",
"workspaceId": "cllzcf9xe00066g7dcsxyq1e5",
"organizationId": "cllzcf78o00036g7d0r4gjry1",
"manufacturer": "tesla",
"customer": {
"referenceId": "c1b1504d-4784-5d90-9459-a512c4789b35",
},
"site": {
"location": {
"latitude": 37.7749,
"longitude": -122.4194
}
},
"createdAt": "2023-09-01T20:48:24.967Z",
"updatedAt": "2023-09-01T20:48:24.967Z"
}
}

The following events are only available for organizations that have opted in to Grid Services. If you are interested in Grid Services, please reach out to us.

enrollment.approved

Fired whenever an enrollment is approved.

{
"type": "enrollment.approved",
"version": "0.0.1",
"key": "8f7d3b2e1a9c6f4e0d5b8a7c2e1f3d5b8a7c2e1f3d5b8a7c2e1f3d5b8a7c2e1f",
"timestamp": "2024-03-20T14:30:00Z",
"data": {
"workspaceId": "clm2n3o4p5q6r7s8t9u0v1w2x",
"organizationId": "cla1b2c3d4e5f6g7h8i9j0k1l",
"customer": {
"referenceId": "cust-123456-abcdef"
},
"program": {
"manager": "GridCo Energy Services"
}
}
}