get a job execution status
curl --request GET \
--url https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}', 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/contracts-jobs/{job-id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_links": {
"self": {
"href": "https://<DATANUMIA_ROOT_URL>/contracts-jobs/{job-id}"
}
},
"archive": "myOperationsArchive.tar.gz",
"state": {
"current": "ERROR",
"history": "{\n \"SUBMITTED\" : \"2017-07-21T17:32:28Z\",\n \"IN_PROGRESS\" : \"2017-07-21T17:34:28Z\",\n \"DONE\" : \"2017-07-21T17:34:58Z\"\n}\n"
},
"report": {
"error": {
"code": "INVALID_ARCHIVE_FORMAT",
"message": "<string>"
},
"overview": {
"nbOperationsTotal": 146,
"nbOperationsOK": 146,
"nbOperationsKO": 0
},
"files": [
{
"file": "test.json",
"error": {
"code": "INVALID_FILE_FORMAT",
"message": "<string>"
},
"content": {
"elecStatus": [
{
"ids": {
"personCustomerId": "person-customer-id-1234",
"siteCustomerId": "site-customer-id-978",
"siteId": "site-home-id-451"
},
"podId": "pdl-38",
"ts": "2021-07-21T22:00:00Z",
"generationTs": "2022-05-17T14:28:37Z",
"status": {
"code": "FIELD_IS_MANDATORY",
"message": "podId is mandatory"
}
}
]
}
}
]
}
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}This response has no body data.This response has no body data.This response has no body data.bulk mode contracts
get a job execution status
Returns a job execution current state. Depending on the state, a report specifying the operations processing details is accessible.
The job execution report is only accessible during 21 days after its submission.
You can use the view parameter to define the level of detail you need :
- OVERVIEW for basic information
- DETAILS for detailed information about the job
Example 1 : Job execution report -> overview
{
"archive": "contracts.tar.gz",
"state": {
"current": "DONE",
"history": [
{
"status": "SUBMITTED",
"ts": "2026-03-18T15:12:55Z"
},
//...
]
},
"report": {
"overview": {
"nbOperationsTotal": 100,
"nbOperationsOK": 100,
"nbOperationsKO": 0
}
},
"_links": {
//...
}
}
Example 2 : Job execution report -> details
{
"archive": "contracts.tar.gz",
"state": {
"current": "DONE",
"history": [
{
"status": "SUBMITTED",
"ts": "2026-03-18T15:12:55Z"
},
//...
]
},
"report": {
"overview": {
"nbOperationsTotal": 100,
"nbOperationsOK": 100,
"nbOperationsKO": 0
},
"files": [
{
"file": "contracts_1.json",
"content": {
"elecStatus": [
{
"status": [
{
"code": "OK"
}
],
"siteId": "fbabb71e-7d2b-4d49-9d03-f17581e70ffd",
"podId": "pdlfd112c3e-28",
"ts": "2026-03-01T23:00:00Z",
"generationTs": "2026-03-02T23:00:00Z"
},
//...
]
}
}
]
},
"_links": {
//...
}
}
GET
/
contracts-jobs
/
{job-id}
get a job execution status
curl --request GET \
--url https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}', 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/contracts-jobs/{job-id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.home.datanumia.com/api/v2/contracts-jobs/{job-id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_links": {
"self": {
"href": "https://<DATANUMIA_ROOT_URL>/contracts-jobs/{job-id}"
}
},
"archive": "myOperationsArchive.tar.gz",
"state": {
"current": "ERROR",
"history": "{\n \"SUBMITTED\" : \"2017-07-21T17:32:28Z\",\n \"IN_PROGRESS\" : \"2017-07-21T17:34:28Z\",\n \"DONE\" : \"2017-07-21T17:34:58Z\"\n}\n"
},
"report": {
"error": {
"code": "INVALID_ARCHIVE_FORMAT",
"message": "<string>"
},
"overview": {
"nbOperationsTotal": 146,
"nbOperationsOK": 146,
"nbOperationsKO": 0
},
"files": [
{
"file": "test.json",
"error": {
"code": "INVALID_FILE_FORMAT",
"message": "<string>"
},
"content": {
"elecStatus": [
{
"ids": {
"personCustomerId": "person-customer-id-1234",
"siteCustomerId": "site-customer-id-978",
"siteId": "site-home-id-451"
},
"podId": "pdl-38",
"ts": "2021-07-21T22:00:00Z",
"generationTs": "2022-05-17T14:28:37Z",
"status": {
"code": "FIELD_IS_MANDATORY",
"message": "podId is mandatory"
}
}
]
}
}
]
}
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}{
"errorCode": "<string>",
"errorDescription": "<string>"
}This response has no body data.This response has no body data.This response has no body data.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Id of the requested job
Query Parameters
The level of details requested for the report :
- OVERVIEW: job execution state (current & history) and operations status overview
- DETAILS: OVERVIEW + detailed status at the operation level
Available options:
overview, details