Initialise site and assets
Initialise a site with one or more assets.
This endpoint upserts the site and assets (creating them if they don’t exist, or filling in missing fields if they do), and returns eligibility information.
No enrollment side effects: Use the /enrol endpoint to commit to enrollment.
curl --request POST \
--url https://api-sandbox.axle.energy/entities/site/initialise \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site": {
"mpan": "1234567890123",
"postcode": "SW1A 1AA",
"street_address": "10 Downing Street",
"email": "resident@example.com",
"gave_boundary_meter_consent_at": "2026-01-15T10:30:00Z"
},
"assets": [
{
"external_id": "<string>",
"type": "charger",
"properties": {
"power_kw": 7.4
},
"asset_model": "<string>",
"installation_date": "2023-12-25"
}
]
}
'import requests
url = "https://api-sandbox.axle.energy/entities/site/initialise"
payload = {
"site": {
"mpan": "1234567890123",
"postcode": "SW1A 1AA",
"street_address": "10 Downing Street",
"email": "resident@example.com",
"gave_boundary_meter_consent_at": "2026-01-15T10:30:00Z"
},
"assets": [
{
"external_id": "<string>",
"type": "charger",
"properties": { "power_kw": 7.4 },
"asset_model": "<string>",
"installation_date": "2023-12-25"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
site: {
mpan: '1234567890123',
postcode: 'SW1A 1AA',
street_address: '10 Downing Street',
email: 'resident@example.com',
gave_boundary_meter_consent_at: '2026-01-15T10:30:00Z'
},
assets: [
{
external_id: '<string>',
type: 'charger',
properties: {power_kw: 7.4},
asset_model: '<string>',
installation_date: '2023-12-25'
}
]
})
};
fetch('https://api-sandbox.axle.energy/entities/site/initialise', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.axle.energy/entities/site/initialise",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'site' => [
'mpan' => '1234567890123',
'postcode' => 'SW1A 1AA',
'street_address' => '10 Downing Street',
'email' => 'resident@example.com',
'gave_boundary_meter_consent_at' => '2026-01-15T10:30:00Z'
],
'assets' => [
[
'external_id' => '<string>',
'type' => 'charger',
'properties' => [
'power_kw' => 7.4
],
'asset_model' => '<string>',
'installation_date' => '2023-12-25'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.axle.energy/entities/site/initialise"
payload := strings.NewReader("{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.axle.energy/entities/site/initialise")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.axle.energy/entities/site/initialise")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"site": {
"site_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site_created": true,
"fields_updated": [
"<string>"
],
"warnings": [
"<string>"
]
},
"assets": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"asset_created": true,
"fields_updated": [
"<string>"
],
"warnings": [
"<string>"
]
}
],
"eligibility": {
"site_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site_properties": {
"is_half_hourly_settled": false,
"has_meter_consent": true
},
"eligible_propositions": [],
"assets": []
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
Request model for initialising a site with one or more assets.
Upserts the site and assets, returning eligibility information. No enrollment side effects (no dispatch consent, no bonus, no email).
Site information
Show child attributes
Show child attributes
{
"mpan": "1234567890123",
"postcode": "SW1A 1AA",
"street_address": "10 Downing Street",
"email": "resident@example.com",
"gave_boundary_meter_consent_at": "2026-01-15T10:30:00Z"
}One or more assets to register at the site
Show child attributes
Show child attributes
[
{
"external_id": "charger-001",
"type": "charger",
"asset_model": "zappi",
"installation_date": "2025-06-15",
"properties": { "power_kw": 7.4 }
}
]Response
Successfully initialised site and assets
Response model for the initialise endpoint.
Was this page helpful?
curl --request POST \
--url https://api-sandbox.axle.energy/entities/site/initialise \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site": {
"mpan": "1234567890123",
"postcode": "SW1A 1AA",
"street_address": "10 Downing Street",
"email": "resident@example.com",
"gave_boundary_meter_consent_at": "2026-01-15T10:30:00Z"
},
"assets": [
{
"external_id": "<string>",
"type": "charger",
"properties": {
"power_kw": 7.4
},
"asset_model": "<string>",
"installation_date": "2023-12-25"
}
]
}
'import requests
url = "https://api-sandbox.axle.energy/entities/site/initialise"
payload = {
"site": {
"mpan": "1234567890123",
"postcode": "SW1A 1AA",
"street_address": "10 Downing Street",
"email": "resident@example.com",
"gave_boundary_meter_consent_at": "2026-01-15T10:30:00Z"
},
"assets": [
{
"external_id": "<string>",
"type": "charger",
"properties": { "power_kw": 7.4 },
"asset_model": "<string>",
"installation_date": "2023-12-25"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
site: {
mpan: '1234567890123',
postcode: 'SW1A 1AA',
street_address: '10 Downing Street',
email: 'resident@example.com',
gave_boundary_meter_consent_at: '2026-01-15T10:30:00Z'
},
assets: [
{
external_id: '<string>',
type: 'charger',
properties: {power_kw: 7.4},
asset_model: '<string>',
installation_date: '2023-12-25'
}
]
})
};
fetch('https://api-sandbox.axle.energy/entities/site/initialise', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.axle.energy/entities/site/initialise",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'site' => [
'mpan' => '1234567890123',
'postcode' => 'SW1A 1AA',
'street_address' => '10 Downing Street',
'email' => 'resident@example.com',
'gave_boundary_meter_consent_at' => '2026-01-15T10:30:00Z'
],
'assets' => [
[
'external_id' => '<string>',
'type' => 'charger',
'properties' => [
'power_kw' => 7.4
],
'asset_model' => '<string>',
'installation_date' => '2023-12-25'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.axle.energy/entities/site/initialise"
payload := strings.NewReader("{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.axle.energy/entities/site/initialise")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.axle.energy/entities/site/initialise")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"site\": {\n \"mpan\": \"1234567890123\",\n \"postcode\": \"SW1A 1AA\",\n \"street_address\": \"10 Downing Street\",\n \"email\": \"resident@example.com\",\n \"gave_boundary_meter_consent_at\": \"2026-01-15T10:30:00Z\"\n },\n \"assets\": [\n {\n \"external_id\": \"<string>\",\n \"type\": \"charger\",\n \"properties\": {\n \"power_kw\": 7.4\n },\n \"asset_model\": \"<string>\",\n \"installation_date\": \"2023-12-25\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"site": {
"site_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site_created": true,
"fields_updated": [
"<string>"
],
"warnings": [
"<string>"
]
},
"assets": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"asset_created": true,
"fields_updated": [
"<string>"
],
"warnings": [
"<string>"
]
}
],
"eligibility": {
"site_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"site_properties": {
"is_half_hourly_settled": false,
"has_meter_consent": true
},
"eligible_propositions": [],
"assets": []
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
