Send telemetry
Send asset readings data to Axle using the generic readings format.
This endpoint accepts compressed data using gzip encoding. Returns statuses of the processed readings, indicating whether each reading was accepted or rejected.
Direction convention: for readings that can be either positive or negative (e.g. boundary_import_kw, battery_inverter_import_kw), a positive value denotes import (power flowing in from the grid, or into the battery) and a negative value denotes export (power flowing out to the grid, or out of the battery). All other reading types are unidirectional; the required sign for each label is documented in the ReadingDataPointLabel schema below.
curl --request POST \
--url https://api-sandbox.axle.energy/data/readings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"readings": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"value": 123
}
]
}
'import requests
url = "https://api-sandbox.axle.energy/data/readings"
payload = { "readings": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"value": 123
}
] }
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({
readings: [
{
asset_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
start_timestamp: '2023-11-07T05:31:56Z',
end_timestamp: '2023-11-07T05:31:56Z',
value: 123
}
]
})
};
fetch('https://api-sandbox.axle.energy/data/readings', 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/data/readings",
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([
'readings' => [
[
'asset_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'start_timestamp' => '2023-11-07T05:31:56Z',
'end_timestamp' => '2023-11-07T05:31:56Z',
'value' => 123
]
]
]),
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/data/readings"
payload := strings.NewReader("{\n \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\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/data/readings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.axle.energy/data/readings")
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 \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"responses": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"accepted": true,
"error": "<string>"
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
Readings data for multiple assets.
List of readings to be submitted
Show child attributes
Show child attributes
Response
Successfully recorded readings with processing summary
Response model for a batch of readings submissions.
List of responses for each reading submission
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api-sandbox.axle.energy/data/readings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"readings": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"value": 123
}
]
}
'import requests
url = "https://api-sandbox.axle.energy/data/readings"
payload = { "readings": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"value": 123
}
] }
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({
readings: [
{
asset_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
start_timestamp: '2023-11-07T05:31:56Z',
end_timestamp: '2023-11-07T05:31:56Z',
value: 123
}
]
})
};
fetch('https://api-sandbox.axle.energy/data/readings', 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/data/readings",
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([
'readings' => [
[
'asset_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'start_timestamp' => '2023-11-07T05:31:56Z',
'end_timestamp' => '2023-11-07T05:31:56Z',
'value' => 123
]
]
]),
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/data/readings"
payload := strings.NewReader("{\n \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\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/data/readings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.axle.energy/data/readings")
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 \"readings\": [\n {\n \"asset_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"start_timestamp\": \"2023-11-07T05:31:56Z\",\n \"end_timestamp\": \"2023-11-07T05:31:56Z\",\n \"value\": 123\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"responses": [
{
"asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_timestamp": "2023-11-07T05:31:56Z",
"end_timestamp": "2023-11-07T05:31:56Z",
"accepted": true,
"error": "<string>"
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
