Skip to main content
VPP builds on your tariff integration: the same users, locations, devices and connected tariffs. A VPP operator runs programs and dispatches enrolled devices through the Fleet API, but you integrate the Energy API only: every instruction reaches you the same way, whichever VPP operator sent it.

What VPP adds

A device needs a connected tariff at its location to enroll, and the enrollment waits at step AWAITING_TARIFF until one exists.

Capabilities

Capabilities set eligibility, dispatch limits, supported settings and the state blocks a device reports.
  • When hardware changes, update the device with the full capabilities object. Flatpeak recomputes all four and device.update fires.
  • device_type cannot change while the device is enrolled; the update returns 422.
  • Capability blocks name parts (battery, evse), while device_type names products (BATTERY_STORAGE). An electric vehicle has a battery block and is not a BATTERY_STORAGE.

What the VPP operator sees

A VPP operator sees nothing until a user consents, and then only that device, under that program. Consent is per scope: TELEMETRY, CONTROL, LOCATION, SETTINGS. The user can withdraw it in your app or the VPP operator’s app, which suspends the enrollment.

What reaches your backend

Flatpeak bounds every instruction to the device’s capabilities, the user’s settings and consent before it reaches you. See Guardrails.

Grid standards

Each standard belongs to one hop between the grid and the device. You own the last two. You do not implement IEEE 2030.5. Ride-through, anti-islanding and other protection stay in your firmware, and Flatpeak never overrides them. When protection cuts a committed window, deliver what is safe; meter records show the deviation.