curl --request POST \
--url https://api.home.datanumia.com/api/v2/indexes-collect-jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--data-binary $'<string>'import requests
url = "https://api.home.datanumia.com/api/v2/indexes-collect-jobs"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'multipart/form-data'}
};
fetch('https://api.home.datanumia.com/api/v2/indexes-collect-jobs', 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.home.datanumia.com/api/v2/indexes-collect-jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "<string>",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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.home.datanumia.com/api/v2/indexes-collect-jobs"
payload := strings.NewReader("<string>")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "multipart/form-data")
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.home.datanumia.com/api/v2/indexes-collect-jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "multipart/form-data")
.body("<string>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.home.datanumia.com/api/v2/indexes-collect-jobs")
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"] = 'multipart/form-data'
request.body = "<string>"
response = http.request(request)
puts response.read_body{
"_links": {
"self": {
"href": "<string>"
}
}
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}Submit an archive
Allows you to submit an archive - encrypted or not - containing consumption data for processing.
An archive can contain following types of content (see details in βBodyβ section):
- Cyclic gaz indexes
- Smart elec indexes
- Max powers
- Load curves
It is recommended to send a single type of content per archive.
Once the archive is sent, it is decompressed and each file it contains is processed. No order is guaranteed for the file processing order nor the order of processing of requests within a file.
Since the processing is asynchronous, this endoint returns a URI to access the job status through a details report.
curl --request POST \
--url https://api.home.datanumia.com/api/v2/indexes-collect-jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--data-binary $'<string>'import requests
url = "https://api.home.datanumia.com/api/v2/indexes-collect-jobs"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "multipart/form-data"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'multipart/form-data'}
};
fetch('https://api.home.datanumia.com/api/v2/indexes-collect-jobs', 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.home.datanumia.com/api/v2/indexes-collect-jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "<string>",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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.home.datanumia.com/api/v2/indexes-collect-jobs"
payload := strings.NewReader("<string>")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "multipart/form-data")
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.home.datanumia.com/api/v2/indexes-collect-jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "multipart/form-data")
.body("<string>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.home.datanumia.com/api/v2/indexes-collect-jobs")
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"] = 'multipart/form-data'
request.body = "<string>"
response = http.request(request)
puts response.read_body{
"_links": {
"self": {
"href": "<string>"
}
}
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Only the .tar.gz archive format is valid. The archive must contain between 1 and 5 JSON files and its size cannot exceed 2,5 MB. Each JSON file can contain up to 10 000 indexes or 1500 load curves.
Expected object formats for each content type are :
{
"type": "object",
"properties": {
"cyclicGasIndexes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteId": {
"type": "string",
"description": "Site identifier provided by Datanumia",
"example": "site-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"nature": {
"type": "string",
"description": "Indicates how the index was read and transmitted.\n\r If several indexes exist with the same ts, the nature will be used to priotitize the index to use for consumption calculation. \n\rInvalidating natures are used to invalidate an incorrect index.",
"enum": ["MKT_CYCLIC_DISTRIBUTOR","MKT_ESTIMATION","DTN_CUSTOMER_ACK","MKT_CUSTOMER","MKT_CYCLIC_DISTRIBUTOR_INVALID","MKT_ESTIMATION_INVALID","DTN_CUSTOMER_ACK_INVALID","MKT_CUSTOMER_INVALID"],
"example":"MKT_CYCLIC_DISTRIBUTOR"
},
"ts": {
"type": "string",
"description": "Index reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize indexes for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"indexBeforeChange": {
"type": "boolean",
"description":"Used for meter changes. \n\rThe index before the change must be sent with indexBeforeChange=true, the index after the change must be sent with indexBeforeChange=false. Both indexes must have the same timestamp.",
"example":"false"
},
"value": {
"type": "integer",
"description": "Index value",
"example":"1234"
},
"conversionFactors": {
"type": "object",
"description":"Indicates how to convert the index to another unit.",
"example": "{\"kWh\":\"10.3\"}"
},
"unit": {
"type": "string",
"description": "Index unit",
"example": "m3"
}
},
"required": [
"siteId",
"podId",
"nature",
"ts",
"generationTs",
"value",
"conversionFactors",
"unit"
]
}
]
},
"smartElecIndexes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteId": {
"type": "string",
"description": "Site identifier provided by Datanumia",
"example": "site-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"ts": {
"type": "string",
"description": "Index reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize indexes for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"nature": {
"type": "string",
"description": "Indicates how the index was read and transmitted.\n\r If several indexes exist with the same ts, the nature will be used to priotitize the index to use for consumption calculation. \n\rInvalidating natures are used to invalidate an incorrect index.",
"enum": ["MKT_SMART_DISTRIBUTOR","MKT_SMART_DISTRIBUTOR_INVALID"],
"example":"MKT_SMART_DISTRIBUTOR"
},
"value": {
"type": "object",
"description":"Set of dial numbers - related to the contract's tariff headings - and associated values ββin watt-hours (Wh)",
"example":"{ \"1\":\"3143\", \"2\":\"6534\" }"
}
},
"required": [
"siteId",
"podId",
"ts",
"generationTs",
"nature",
"value"
]
}
]
},
"maxPowers": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteId": {
"type": "string",
"description": "Site identifier provided by Datanumia",
"example": "site-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"ts": {
"type": "string",
"description": "Max power reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize max powers for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"value": {
"type": "integer",
"description": "Max power value reached during the day, in watts (W)",
"example": "4700"
}
},
"required": [
"siteId",
"podId",
"ts",
"generationTs",
"value"
]
}
]
},
"loadCurves": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteId": {
"type": "string",
"description": "Site identifier provided by Datanumia",
"example": "site-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"meterReadingDate": {
"type": "string",
"description":"Date of the loadcurve reading",
"example" : "2025-11-10"
},
"generationTs": {
"type": "string",
"description":"Date used to historize loadcurves for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2022-05-17T14:28:37+02:00"
},
"step": {
"type": "string",
"description": "Time step of the collected load curve. The supported format is as defined by ISO 8601",
"example": "PT30M"
},
"values": {
"type": "array",
"description":"Load curve data points related to the meterReadingDate, consisting in : a timstamp (begin or end of the time step), a value and a reliability index",
"items": [
{
"type": "object",
"properties": {
"beginTs": {
"type": "string",
"description": "The supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2025-05-14T00:00:00+02:00"
},
"value": {
"type": "integer",
"description": "Value of the load curbe data point, in Watts (W)",
"example": "4838"
},
"reliability": {
"type": "integer",
"description": "Reliability index \n\r- 0: value is OK \n\r- 1: value potentially subject to verification
"enum":["0","1"],
"example":"1"
}
},
"required": [
"beginTs",
"value",
"reliability"
]
},
{
"type": "object",
"properties": {
"endTs": {
"type": "string",
"description": "The supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2025-05-14T00:00:00+02:00"
},
"value": {
"type": "integer",
"description": "Value of the load curbe data point, in Watts (W)",
"example": "4838"
},
"reliability": {
"type": "integer",
"description": "Reliability index \n\r- 0: value is OK \n\r- 1: value potentially subject to verification
"enum":["0","1"],
"example":"1"
}
},
"required": [
"endTs",
"value",
"reliability"
]
}
]
}
},
"required": [
"siteId",
"podId",
"meterReadingDate",
"generationTs",
"step",
"values"
]
}
]
}
}
}
{
"type": "object",
"properties": {
"cyclicGasIndexes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteCustomerId": {
"type": "string",
"description": "Site identifier provided by the Marketer",
"example": "site-3000"
},
"personCustomerId": {
"type": "string",
"description": "Person identifier provided by the Marketer",
"example": "bp-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"nature": {
"type": "string",
"description": "Indicates how the index was read and transmitted.\n\r If several indexes exist with the same ts, the nature will be used to priotitize the index to use for consumption calculation. \n\rInvalidating natures are used to invalidate an incorrect index.",
"enum": ["MKT_CYCLIC_DISTRIBUTOR","MKT_ESTIMATION","DTN_CUSTOMER_ACK","MKT_CUSTOMER","MKT_CYCLIC_DISTRIBUTOR_INVALID","MKT_ESTIMATION_INVALID","DTN_CUSTOMER_ACK_INVALID","MKT_CUSTOMER_INVALID"],
"example":"MKT_CYCLIC_DISTRIBUTOR"
},
"ts": {
"type": "string",
"description": "Index reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize indexes for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"indexBeforeChange": {
"type": "boolean",
"description":"Is used for meter changes. \n\rThe index before the change must be sent with indexBeforeChange=true, the index after the change must be sent with indexBeforeChange=false. Both indexes must have the same timestamp.",
"example":"false"
},
"value": {
"type": "integer",
"description": "Index value",
"example":"1234"
},
"conversionFactors": {
"type": "object",
"description":"Indicates how to convert the index to another unit.",
"example": "{\"kWh\":\"10.3\"}"
},
"unit": {
"type": "string",
"description": "Index unit",
"example": "m3"
}
},
"required": [
"siteCustomerId",
"personCustomerId",
"podId",
"nature",
"ts",
"generationTs",
"value",
"conversionFactors",
"unit"
]
}
]
},
"smartElecIndexes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteCustomerId": {
"type": "string",
"description": "Site identifier provided by the Marketer",
"example": "site-3000"
},
"personCustomerId": {
"type": "string",
"description": "Person identifier provided by the Marketer",
"example": "bp-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"ts": {
"type": "string",
"description": "Index reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize indexes for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"nature": {
"type": "string",
"description": "Indicates how the index was read and transmitted.\n\r If several indexes exist with the same ts, the nature will be used to priotitize the index to use for consumption calculation. \n\rInvalidating natures are used to invalidate an incorrect index.",
"enum": ["MKT_SMART_DISTRIBUTOR","MKT_SMART_DISTRIBUTOR_INVALID"],
"example":"MKT_SMART_DISTRIBUTOR"
},
"value": {
"type": "object",
"description":"Set of dial numbers - related to the contract's tariff headings - and associated values ββin watt-hours (Wh)",
"example":"{ \"1\":\"3143\", \"2\":\"6534\" }"
}
},
"required": [
"siteCustomerId",
"personCustomerId",
"podId",
"ts",
"generationTs",
"nature",
"value"
]
}
]
},
"maxPowers": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteCustomerId": {
"type": "string",
"description": "Site identifier provided by the Marketer",
"example": "site-3000"
},
"personCustomerId": {
"type": "string",
"description": "Person identifier provided by the Marketer",
"example": "bp-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"ts": {
"type": "string",
"description": "Max power reading date. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example":"2021-07-21T22:00:00Z"
},
"generationTs": {
"type": "string",
"description":"Date used to historize max powers for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time'Z'",
"example": "2022-05-17T14:28:37Z"
},
"value": {
"type": "integer",
"description": "Max power value reached during the day, in watts (W)",
"example": "4700"
}
},
"required": [
"siteCustomerId",
"personCustomerId",
"podId",
"ts",
"generationTs",
"value"
]
}
]
},
"loadCurves": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"siteCustomerId": {
"type": "string",
"description": "Site identifier provided by the Marketer",
"example": "site-3000"
},
"personCustomerId": {
"type": "string",
"description": "Person identifier provided by the Marketer",
"example": "bp-3000"
},
"podId": {
"type": "string",
"description":"Identifier of the point of delivery",
"example":"pdl-38"
},
"meterReadingDate": {
"type": "string",
"description":"Date of the loadcurve reading",
"example" : "2025-11-10"
},
"generationTs": {
"type": "string",
"description":"Date used to historize loadcurves for a given ts. \n\r When there are multiple indexes with the same ts value, the one with the most recent generationTs is used. \n\rThe supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2022-05-17T14:28:37+02:00"
},
"step": {
"type": "string",
"description": "The time step of the collected load curve. The supported format is as defined by ISO 8601",
"example": "PT30M"
},
"values": {
"type": "array",
"description":"Load curve data points related to the meterReadingDate, consisting in : a timstamp (begin or end of the time step), a value and a reliability index",
"items": [
{
"type": "object",
"properties": {
"beginTs": {
"type": "string",
"description": "The supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2025-05-14T00:00:00+02:00"
},
"value": {
"type": "integer",
"description": "Value of the load curbe data point, in Watts (W)",
"example": "4838"
},
"reliability": {
"type": "integer",
"description": "Reliability index \n\r- 0: value is OK \n\r- 1: value potentially subject to verification
"enum":["0","1"],
"example":"1"
}
},
"required": [
"beginTs",
"value",
"reliability"
]
},
{
"type": "object",
"properties": {
"endTs": {
"type": "string",
"description": "The supported format is as defined by RFC 3339, section 5.6 restricted to : full-date'T'partial-time time-offset",
"example": "2025-05-14T00:00:00+02:00"
},
"value": {
"type": "integer",
"description": "Value of the load curbe data point, in Watts (W)",
"example": "4838"
},
"reliability": {
"type": "integer",
"description": "Reliability index \n\r- 0: value is OK \n\r- 1: value potentially subject to verification
"enum":["0","1"],
"example":"1"
}
},
"required": [
"endTs",
"value",
"reliability"
]
}
]
}
},
"required": [
"siteCustomerId",
"personCustomerId",
"podId",
"meterReadingDate",
"generationTs",
"step",
"values"
]
}
]
}
}
}
A .tar.gz archive containing the The json files to be processed. Each json file must respect the CyclicGasIndexRequestsFileContent or SmartElecIndexRequestsFileContent schemas described in this document.
Response
Returns a job tracking URL "GET /indexes-collect-jobs/{job-id}" to access a detailed execution report.
Show child attributes
Show child attributes