curl --request POST \
--url https://fleet-api.flatpeak.com/vpp-programs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"display_name": "Community Powershare",
"description": "Earn from grid events while you keep your tariff.",
"url": "https://pick.com/programs/community-powershare",
"managed": false,
"listed": true,
"currency_code": "USD",
"estimate": {
"amount": 612,
"period": "YEAR",
"dispatch_events_per_month": 15
},
"terms": {
"rewards": [
{
"basis": "FIXED",
"rate": 15,
"period": "QUARTER"
},
{
"basis": "DELIVERED_KWH",
"rate": 0.35
}
],
"opt_out_policy": "ALLOWED",
"notice_days": 30
},
"eligibility": {
"oem_ids": [
"oem_6a3a8dada72cd0a249ff9528"
],
"device_types": [
"BATTERY_STORAGE"
],
"min_storage_capacity_kwh": 5,
"min_export_power_kw": 3,
"telemetry_requirements": {
"state_interval_seconds": 300,
"device_meter_interval_seconds": 900
}
},
"enrollment": {
"join_days": 10,
"approval_required": false,
"dispatch_test_required": true
}
}
'{
"id": "vpr_5c8d1f2a7b3e4d6c9a0f1b2c",
"object": "vpp_program",
"live_mode": true,
"display_name": "Community Powershare",
"description": "Earn from grid events while you keep your tariff.",
"url": "https://pick.com/programs/community-powershare",
"managed": false,
"listed": true,
"currency_code": "USD",
"estimate": {
"amount": 612,
"period": "YEAR",
"dispatch_events_per_month": 15
},
"terms": {
"rewards": [
{
"basis": "FIXED",
"rate": 15,
"period": "QUARTER"
},
{
"basis": "DELIVERED_KWH",
"rate": 0.35
}
],
"opt_out_policy": "ALLOWED",
"notice_days": 30
},
"eligibility": {
"oem_ids": [
"oem_6a3a8dada72cd0a249ff9528"
],
"device_types": [
"BATTERY_STORAGE"
],
"zone_id": null,
"min_storage_capacity_kwh": 5,
"min_export_power_kw": 3,
"telemetry_requirements": {
"state_interval_seconds": 300,
"device_meter_interval_seconds": 900
}
},
"enrollment": {
"join_days": 10,
"approval_required": false,
"dispatch_test_required": true,
"signup_url": null
},
"status": "LIVE",
"rejection_reason": null,
"time_created": "2026-08-12T09:30:00Z",
"account_id": "acc_6a5e504c3b98d0d6739b5f72"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}Create a VPP program
Creates a program in DRAFT. display_name, currency_code and estimate are required. Request LIVE with update a VPP program, which lists what a listed program needs first.
curl --request POST \
--url https://fleet-api.flatpeak.com/vpp-programs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"display_name": "Community Powershare",
"description": "Earn from grid events while you keep your tariff.",
"url": "https://pick.com/programs/community-powershare",
"managed": false,
"listed": true,
"currency_code": "USD",
"estimate": {
"amount": 612,
"period": "YEAR",
"dispatch_events_per_month": 15
},
"terms": {
"rewards": [
{
"basis": "FIXED",
"rate": 15,
"period": "QUARTER"
},
{
"basis": "DELIVERED_KWH",
"rate": 0.35
}
],
"opt_out_policy": "ALLOWED",
"notice_days": 30
},
"eligibility": {
"oem_ids": [
"oem_6a3a8dada72cd0a249ff9528"
],
"device_types": [
"BATTERY_STORAGE"
],
"min_storage_capacity_kwh": 5,
"min_export_power_kw": 3,
"telemetry_requirements": {
"state_interval_seconds": 300,
"device_meter_interval_seconds": 900
}
},
"enrollment": {
"join_days": 10,
"approval_required": false,
"dispatch_test_required": true
}
}
'{
"id": "vpr_5c8d1f2a7b3e4d6c9a0f1b2c",
"object": "vpp_program",
"live_mode": true,
"display_name": "Community Powershare",
"description": "Earn from grid events while you keep your tariff.",
"url": "https://pick.com/programs/community-powershare",
"managed": false,
"listed": true,
"currency_code": "USD",
"estimate": {
"amount": 612,
"period": "YEAR",
"dispatch_events_per_month": 15
},
"terms": {
"rewards": [
{
"basis": "FIXED",
"rate": 15,
"period": "QUARTER"
},
{
"basis": "DELIVERED_KWH",
"rate": 0.35
}
],
"opt_out_policy": "ALLOWED",
"notice_days": 30
},
"eligibility": {
"oem_ids": [
"oem_6a3a8dada72cd0a249ff9528"
],
"device_types": [
"BATTERY_STORAGE"
],
"zone_id": null,
"min_storage_capacity_kwh": 5,
"min_export_power_kw": 3,
"telemetry_requirements": {
"state_interval_seconds": 300,
"device_meter_interval_seconds": 900
}
},
"enrollment": {
"join_days": 10,
"approval_required": false,
"dispatch_test_required": true,
"signup_url": null
},
"status": "LIVE",
"rejection_reason": null,
"time_created": "2026-08-12T09:30:00Z",
"account_id": "acc_6a5e504c3b98d0d6739b5f72"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "access_denied",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}Authorizations
Authenticate with the bearer_token obtained from the authentication endpoint.
Body
Program payload.
Program create payload.
true for a managed tariff: you run the device under this program with plans, and it replaces the customer's tariff. Plans are accepted only for devices enrolled in a managed program. Any number of programs can be managed.
false
Response
Program response.
A program you define: a VPP program, or a managed tariff when managed is true. Customers enroll in your app, or in their OEM's app once the program is listed and the OEM approves it. Enrolled devices arrive through Connect and fire device.connect.
true for a managed tariff: you run the device under this program with plans, and it replaces the customer's tariff. Plans are accepted only for devices enrolled in a managed program. Any number of programs can be managed.
false
Only LIVE programs are shown to customers. Approval applies to listed programs; an unlisted program goes LIVE on request. Changes fire program.update.
| Value | Meaning |
|---|---|
DRAFT | Private |
PENDING_APPROVAL | LIVE requested, under review by the OEMs in eligibility |
LIVE | Published |
REJECTED | An OEM declined; see rejection_reason |
PAUSED | No new enrollments |
DRAFT, PENDING_APPROVAL, LIVE, PAUSED, REJECTED "LIVE"
Was this page helpful?

