1. Onboarding
Each battery needs asite_id and asset_id in Axle’s system before you can send telemetry or
receive dispatch for it — these are the identifiers used throughout the rest of the integration.
There are two ways to get there.
What we mean by a “battery”. Axle treats a battery as a complete battery system — the
battery, its inverter and its meter. If a site has several battery units behind a single system,
register them as one asset with the combined capacity.
- Through your app
- Through Axle's signup flow
If you already collect address, consent and asset details yourself, call Axle’s onboarding API
directly.Example requestYour backend authenticates as described in Authentication.
Onboard site and asset
Register a site and battery, returns
site_id and asset_id.For events only mode you should use
vpp_limited_control in the dispatch_methods array.
If you want to allow full control of the battery, use full_asset_schedule_control instead.2. Telemetry
Send regular readings for each battery so we can optimise it and verify delivery. We rely mainly on two readings:- Battery state of charge —
battery_state_of_charge_pct(0–100) - Grid import/export at the site boundary —
boundary_import_kw
battery_inverter_import_kw) and solar generation (solar_power_kw), we’ll use them to improve
optimisation and determine event earnings.
Push readings to the readings endpoint, which lists every accepted label and its sign
convention.
Send instantaneous readings (a spot value at a single point in time) at a granularity of
5–10 minutes. Because each reading is instantaneous, its start and end timestamps must be the
same.
Send telemetry
Push battery and boundary readings to Axle.
If pushing readings doesn’t suit your platform, we can also pull readings from custom endpoints
you provide — get in touch to discuss your setup.
3. Dispatch
During a grid event we send a dispatch instruction to a webhook URL you provide. Each instruction covers a single event and sets a target power for every affected asset over a fixed window. You supply the webhook URL when you set up your integration — get in touch to register it.power_kw uses the same sign convention as telemetry: positive = charge (import into the
battery), negative = discharge (export). Apply the target power to each asset for the window
between start_time and end_time.
The target power applies at the inverter. We normally dispatch at the inverter’s maximum power
rating, and we account for the fact that household load can limit the power the battery actually
delivers.
We give you at least 30 minutes’ notice before an event (normally 4 hours to 1 day ahead)
via the dispatch webhook. We do not currently run very-short-notice (sub-30-minute) events.
Dispatch webhook
Full schema for the dispatch instruction we send to your webhook.
If you already have your own dispatch API, we can work with custom dispatch endpoints instead of
the webhook above — get in touch to discuss your setup.
Important points
- Customers should be able to override dispatch instructions at any time.
- The battery should return to its original mode of operation after the dispatch event has finished

