Enroll resources, push telemetry, set dispatch parameters, receive events, and read performance and settlements, all with one schema-first API. The sandbox ISO uses the same shapes as production.
Get startedDownload OpenAPI 3.1The base URL is https://api.energy1power.io. Create a scoped sandbox key in the workspace (an authenticator code is required; the key is shown once). Production access requires a signed program addendum.
curl https://api.energy1power.io/healthz
# Enroll a battery (key scope assets:write)
curl -X POST https://api.energy1power.io/v1/assets \
-H "Authorization: Bearer $E1P_SANDBOX_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "content-type: application/json" \
-d '{"site_name":"Fresno DC","type":"bess","capacity_kw":2000,
"energy_kwh":8000,"market":"CAISO"}'
# Push telemetry (scope telemetry:write; up to 5,000 points per call)
curl -X POST https://api.energy1power.io/v1/telemetry \
-H "Authorization: Bearer $E1P_SANDBOX_KEY" \
-H "Idempotency-Key: batch-2026-10-03T16:00Z" \
-H "content-type: application/json" \
-d '{"points":[{"asset_id":"","ts":"2026-10-03T16:00:00-07:00",
"kw":1800,"soc_kwh":4200,"quality":"measured"}]}'
# Portfolio MW / GW truth (scope assets:read)
curl https://api.energy1power.io/v1/portfolio -H "Authorization: Bearer $E1P_SANDBOX_KEY"
Simulator: node tools/telemetry-sim/sim.mjs --api https://api.staging.energy1power.io --asset <uuid>:bess:2000:8000 --hours 24 --live.
Every money or dispatch POST takes an Idempotency-Key. Every response carries a correlation id. Timestamps are RFC 3339 with an offset, and a market hour is never sent without a date and zone.
| Method | Path | Purpose | Status |
|---|---|---|---|
| GET | /healthz | Liveness | available |
| POST | /v1/assets | Enroll a resource (solar, bess, evse, load, gen, microgrid) | available |
| GET | /v1/assets | List org-scoped resources | available |
| GET | /v1/assets/{id} | Asset 360 with the latest telemetry point | available |
| GET | /v1/portfolio | MW/GW rollups by type and market | available |
| GET/POST | /v1/market/listings | Energy1Power Market listings | available |
| POST | /v1/telemetry | Push interval telemetry with quality flags (idempotent batches) | available |
| GET | /v1/assets/{id}/telemetry | Read a telemetry series | available |
| GET | /v1/dispatch/instructions | Receive dispatch (or subscribe via webhook) | phase 2 |
| GET | /v1/performance | Baseline vs measured per event | phase 2 |
| GET | /v1/settlements | Settlement packs | phase 3 |
Webhooks are signed (HMAC-SHA256, header E1P-Signature) and retried with exponential backoff. Partner-pulled webhooks support mTLS.
dispatch.instruction.createdA resource-level setpoint, with fail-safe semantics if it is not acknowledged.
event.shed.announcedA normalized load-shed or DR event from OpenADR, ISO, or a utility.
performance.measuredDelivered vs baseline for an interval or event.
settlement.issuedAn immutable settlement pack is ready.
2026-10-03: v1.1 preview adds scoped API keys, telemetry ingest and reads, Asset 360, and Idempotency-Key replay. Tenancy is enforced by Postgres row-level security.
2026-10-03: v1 preview with assets, portfolio, market listings, and access requests. The path stays /v1 until a breaking change, and additive fields never create a new version.