Skip to main content

Workflow

This page describes the end-to-end workflow for submitting e-reporting data (flows 10.1 - 10.4) and for tracking the resulting report through to its submission to the Portail Public de Facturation (PPF).

Prerequisite: VAT regime configuration

Before any transaction can be reported, the VAT regime of the legal entity (SIREN) must be configured. The reporting frequency (monthly, bimonthly, etc.) and the submission deadlines to the PPF are derived from this setting.

The VAT regime can be set in either of two ways:

  • through the guided KYC/KYB onboarding procedure on the web dashboard;
  • through the API:

PUT /legal-entities/{legalEntityUuid}/vat-regime

{
"vatRegime": "MONTHLY"
}

1. Submit a transaction

Each transaction (or transaction payment) is submitted individually through the endpoint matching its flow:

FlowContentEndpoint
10.1B2B international invoice dataPOST /legal-entities/{legalEntityUuid}/b2b-transactions
10.2Payment of a B2B international invoicePOST /legal-entities/{legalEntityUuid}/b2b-payments
10.3B2C transaction dataPOST /legal-entities/{legalEntityUuid}/b2c-transactions
10.4Payment of a B2C transactionPOST /legal-entities/{legalEntityUuid}/b2c-payments

Example - submit a B2C transaction

POST /legal-entities/{legalEntityUuid}/b2c-transactions

{
"transactionDate": "2023-01-01",
"transactions": [
{
"categoryCode": "TPS1",
"taxableTotalAmount": "100.00",
"taxTotalAmount": "20.00",
"taxDetails": [
{
"taxableAmount": "string",
"taxAmount": "string",
"percent": "20.0",
"taxCategoryCode": "S"
}
],
"currency": "EUR",
"taxPaymentOption": "invoice"
}
],
"registerId": "REG123",
"storeId": "STORE456",
"closureId": "CLOSURE789"
}

The call returns 202 Accepted with the identifier of the submitted transaction and its initial status:

{
"uuid": "019e7384-4322-7359-83ef-8e14833a7142",
"status": "WAITING",
"siren": "123456789",
"transactionDate": "2026-07-21",
"transactionCount": 5,
"registerId": "REG01",
"storeId": "STORE01",
"closureId": "CLO01",
"cancelledAt": "",
}

From this point, the transaction status evolves asynchronously.

2. Webhook events

Two webhook event types are available to track e-reporting activity end to end. Both are configured as usual through the event-destinations resource:

POST /event-destinations

{
"event": "ereporting.report.status",
"target": "https://example.com/webhooks/e-reporting",
"delivery": "webhook",
"status": "active",
"authType": "header",
"authKey": "X-Auth",
"authToken": "mysecret"
}

ereporting.entry.status

Tracks the status of each submitted transaction or payment (an "entry") and its association with a report. It fires both when an entry is accepted and assigned to a report, and when an entry is found invalid.

{
"eventId": "019e91c2-1a3f-7ab0-9c21-5824b2656b1a",
"eventType": "ereporting.entry.status",
"legalEntityUuid": "01990000-0000-7000-8000-000000000001",
"type": "b2b-transaction",
"entryUuid": "019e7384-03ca-75fe-a830-bbea235853b1",
"reportUuid": "019e7384-2243-7359-83ef-8e14833a7142",
"status": "ACCEPTED"
}

The type field identifies the kind of entry (b2b-transaction, b2b-payment, b2c-transaction, b2c-payment). When an entry is rejected as invalid, reportUuid is omitted and status reflects the rejection (REJECTED).

ereporting.report.status

Tracks the lifecycle of a report as a whole, from its creation up to its outcome at the PPF: CREATED, SUBMITTED, ACCEPTED, REJECTED. The event also carries the report's data when it is first created.

{
"eventId": "019e91b7-f799-7df7-a469-4824b2656b0e",
"eventType": "ereporting.report.status",
"legalEntityUuid": "01990000-0000-7000-8000-000000000001",
"reportUuid": "019e7384-2243-7359-83ef-8e14833a7142",
"status": "CREATED"
}

3. Read endpoints

Independently of the webhooks above, the reports and their content can be retrieved on demand at any time.

GET /legal-entities/{legalEntityUuid}/reports

[
{
"uuid": "019e7384-2243-7359-83ef-8e14833a7142",
"periodStart": "2026-01-01",
"periodEnd": "2026-01-31",
"status": "CREATED",
"submissionDeadline": "2026-02-10T08:00:00Z"
},
{
"uuid": "019c33ac-98a0-7239-985a-96e6c33ac8fa",
"periodStart": "2025-12-01",
"periodEnd": "2025-12-31",
"status": "ACCEPTED",
"submissionDeadline": "2026-01-10T08:00:00Z"
}
]

Filter the entries of a report

It's possible to retrieve the content of a report by filtering the collection endpoints by reportUuid, the identifier returned in the ereporting.entry.status webhook or in the entries themselves.

To reconstruct the full content of a report, the four endpoints must be queried separately (one per entry type) with the same reportUuid.