OEM Platform

A unified integration and normalization layer between OEM device ecosystems and downstream applications. Batteries, thermostats, water heaters, and more in one consistent data and control interface.

Book a Demo

One API

Connect, normalize, and control a mixed device fleet through a single integration surface.

Step 1: Connect any OEM

Link an OEM cloud and kWh enumerates devices, assigns canonical IDs, and records capabilities.

iOne OAuth connection per OEM, then every device.
Enroll devices
OEM cloudOAuth linked
BESS · Inverter · EV charger
Devices discovered1,284
canonical device_idcapabilities

Step 2: Normalize to one model

OEM-specific schemas are mapped into a single canonical data model for devices, telemetry, and events.

iUnits, timestamps, and enums normalized at ingestion.
Field mapping
# oem schema         canonical
battery_soc_pct   → state_of_charge
power_w           → active_power
dev_uid           → oem_device_id
unitsUTCenums

Step 3: Read, stream, and control

Applications query reads, subscribe to event streams, and issue canonical commands through one interface.

iOne REST API, one webhook stream, one command schema.
Canonical command
POST /devices/dev_8f2c1a/commands
{ "command_type": "set_charge_mode" }
Translated to OEM APIacknowledged
Webhook streamlive

Step 4: Preserve everything

Nothing is dropped. OEM-specific fields are preserved so no fidelity is lost through normalization.

iFields with no canonical match live in oem_extensions.
Preserved data
{
  "device_id": "dev_8f2c1a",
  "state_of_charge": 63,
  "oem_extensions": { "eco_mode": true }
}
OEM-specific fields preserved
Enroll devices
OEM cloudOAuth linked
BESS · Inverter · EV charger
Devices discovered1,284
canonical device_idcapabilities
Field mapping
# oem schema         canonical
battery_soc_pct   → state_of_charge
power_w           → active_power
dev_uid           → oem_device_id
unitsUTCenums
Canonical command
POST /devices/dev_8f2c1a/commands
{ "command_type": "set_charge_mode" }
Translated to OEM APIacknowledged
Webhook streamlive
Preserved data
{
  "device_id": "dev_8f2c1a",
  "state_of_charge": 63,
  "oem_extensions": { "eco_mode": true }
}
OEM-specific fields preserved

The Problem

Every OEM exposes different APIs, auth schemes, units, and event semantics. Teams building on multiple device categories end up re-solving the same integration problem for every manufacturer.

The Solution

kWh maps OEM-specific schemas into a canonical data model. Applications interact with one API and one schema, not N OEM dialects.

Capabilities

  • REST APIs
    Enrollment, reads, control commands, and historical queries.
  • Event streams & webhooks
    Near-real-time telemetry and state-change events at scale.
  • Canonical data model
    Devices, telemetry, events, enrollment, and command state.
  • OEM mapping layer
    Units, timestamps, and enums normalized at ingestion.

Read technical overview →

Buyers

Aggregators

Unified fleet dispatch without per-OEM engineering backlog.

OEMs

Single path for downstream apps to connect to your devices.

Financiers

Portfolio telemetry and device health in one schema.

Utilities

OEM connectivity substrate under your own product experience.

See the OEM Platform

Request a technical walkthrough or read the full technical overview in our docs.

Book a Demo Technical docs