Skip to main content
A program is your offer to customers. In a VPP program the customer keeps their tariff and earns from grid events. In a managed tariff you supply the energy and run the device. Customers enroll in your app or in their OEM’s app.

Create

Call create a VPP program. The program starts in DRAFT, private to you. display_name, currency_code and estimate are required.
currency_code is the currency of estimate.amount and of every reward rate. Set it on create, because it cannot be changed afterwards.

Estimate

estimate is the figure the customer sees before they join: amount for one period (YEAR or MONTH), and optionally the dispatch_events_per_month it assumes. The copy follows managed: bill savings for a managed tariff, earnings otherwise.

Terms

terms holds what you and the customer are bound by after they join. The enrollment keeps a copy of the terms it joined with. A change to terms applies only to enrollments made after it.

Rewards

Each entry in rewards has a basis and a rate, in the program’s currency_code. A basis appears at most once.
  • A FIXED reward follows calendar periods, pro-rated by the days the enrollment is ACTIVE.
  • COMMITTED_KWH pays whatever the device then delivers, and nothing for a commitment the customer opted out of.
  • A listed VPP program needs at least one reward before it can go LIVE (422 terms_required). A managed tariff may have none.

Eligibility

eligibility decides which devices are offered the program: oem_ids, device_types, an optional zone_id, and the minimums min_storage_capacity_kwh and min_export_power_kw. Omit oem_ids to enable every OEM on your account. telemetry_requirements sets the sampling a device must sustain, with a minimum of 60 seconds. While its state is unchanged, a device sends a heartbeat. Flatpeak sets the heartbeat at three times state_interval_seconds, and never below 300 seconds. Each OEM declares the finest sampling its fleet can sustain. A program that samples finer is not offered to that OEM’s devices.

Enrollment settings

Managed tariffs

With a managed tariff you supply the electricity and run the device with plans. Plans are accepted only under a managed program.
  1. Set managed to true. Your account must be set up to supply energy.
  2. When a customer joins, your tariff replaces theirs. Create it as a device tariff, with the enrolled device’s device_id and location_id.
A managed tariff needs no rewards, so the smallest one is:
You can offer several managed tariffs.

Sign-up from an OEM app

A listed managed tariff appears on the OEM app’s Programs page, and the customer signs up for it on your site. Consent is the last step, after the customer has read your offer and signed up.
  1. Set enrollment.signup_url to your sign-up page. A listed managed program cannot go LIVE without it (422 signup_url_required).
  2. The customer chooses your tariff in the OEM app, and Flatpeak opens that URL with three query parameters. At this point you hold no consent, no enrollment and no device.
  3. Sign the customer up, and keep the three values with their record.
  4. Create a Connect session with the same oem_id and program_id, add signup_reference, and open target_url as in Connect. The OEM app opens Connect on the device the customer started from, so they do not pick it again.
  5. The customer grants consent and Flatpeak creates the enrollment. On device.connect, create the tariff for the device, which clears the AWAITING_TARIFF step.
A signup_reference works once, for 30 days. It identifies nobody on its own: the device reaches you only after the customer signs in to the OEM app and consents. If the reference is missing, used or expired (422 signup_reference_invalid), create the session without it, and the customer picks the device in the OEM app. An unlisted managed tariff needs no enrollment.signup_url: the customer starts in your app.

Publish

Request LIVE with update a VPP program. program.update fires on every status change. PAUSED keeps enrolled devices and stops new enrollments. Editing a live program’s customer-facing copy or estimates sends it back for OEM approval. Flatpeak decides which devices see a live program, so you cannot target individual customers.
A VPP program offered to a customer in Connect

A listed program in Connect

Enrollments

Flatpeak approves an enrollment once it passes consent, tariff, telemetry and the dispatch test. With enrollment.approval_required, it waits at step AWAITING_APPROVAL for you. See Enrollment states for the lifecycle and your two actions.