curl --request GET \
--url https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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{
"id": "018f9e2a-7c31-7a10-9b44-2f9d1e6c8a01",
"siren": "123456789",
"flux_kind": "tx",
"role": "seller",
"period_start": "2026-06-11",
"period_end": "2026-06-20",
"sequence": 1,
"status": "filed",
"flux_code": "PPF206_1025_000123",
"ack_ref": "300",
"submitted_at": "2026-06-21T08:15:00Z",
"created_at": "2026-06-21T08:00:00Z",
"updated_at": "2026-06-21T08:20:00Z"
}{
"error": "missing siren parameter"
}{
"error": "missing enrollment"
}{
"error": "silo entry not found"
}{
"error": "internal server error"
}Fetch an e-reporting period
Fetch the metadata and lifecycle status of a single Flux 10 report period.
curl --request GET \
--url https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.invopop.com/apps/gov-fr/v1/reports/{siren}/periods/{period_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{
"id": "018f9e2a-7c31-7a10-9b44-2f9d1e6c8a01",
"siren": "123456789",
"flux_kind": "tx",
"role": "seller",
"period_start": "2026-06-11",
"period_end": "2026-06-20",
"sequence": 1,
"status": "filed",
"flux_code": "PPF206_1025_000123",
"ack_ref": "300",
"submitted_at": "2026-06-21T08:15:00Z",
"created_at": "2026-06-21T08:00:00Z",
"updated_at": "2026-06-21T08:20:00Z"
}{
"error": "missing siren parameter"
}{
"error": "missing enrollment"
}{
"error": "silo entry not found"
}{
"error": "internal server error"
}status field tracks the lifecycle: generated → submitted → filed or rejected.
/xml sub-resource to download it.Authorizations
Authenticate using a valid Invopop enrollment token in the Bearer
scheme.
Example: Authorization: Bearer <token>
Path Parameters
SIREN of the reporting party. The party's org.Party silo entry ID
is still accepted in its place, but will be phased out.
"123456789"
ID of the report period.
"018f9e2a-7c31-7a10-9b44-2f9d1e6c8a01"
Response
The requested report period.
One Flux 10 submission window for a (kind, role) tuple. Corrective
re-submissions of the same window are separate periods sharing the
window dates but with an incrementing sequence.
Unique identifier of the period.
"018f9e2a-7c31-7a10-9b44-2f9d1e6c8a01"
9-digit French SIREN of the reporting party.
"123456789"
Report kind:
tx- Transactions (invoice data).py- Payments.
tx, py "tx"
Role the reporting party plays for the transactions in this period. Empty for B2C-only periods.
seller- The party is the supplier.buyer- The party is the customer.
seller, buyer, "seller"
First day of the reporting window, as YYYY-MM-DD.
"2026-06-11"
Last day (inclusive) of the reporting window, as YYYY-MM-DD.
"2026-06-20"
Submission sequence for the window. 1 is the initial report;
higher values are corrective re-submissions.
1
Lifecycle status of the period:
generated- XML built, not yet sent to the PPF.submitted- Sent to the PPF, awaiting acknowledgement.filed- Accepted by the PPF.rejected- Rejected by the PPF.
generated, submitted, filed, rejected "filed"
When the period was created.
"2026-06-21T08:00:00Z"
When the period was last updated.
"2026-06-21T08:20:00Z"
ID of the prior sequence for the same window. Omitted for sequence 1.
""
PPF flux filename assigned when the report was submitted. Omitted before submission.
"PPF206_1025_000123"
PPF acknowledgement status code once received (300 filed,
301 rejected). Omitted while awaiting acknowledgement.
"300"
When the report was submitted to the PPF. Omitted before submission.
"2026-06-21T08:15:00Z"
Was this page helpful?