e-invoicing

Compliance Network Implementation Guide

Send e-reports

E-reporting sends transaction and payment data summaries to French tax authorities for transactions outside the B2B domestic e-invoicing scope.

Note:

E-reports are submitted per SIREN, not per establishment (SIRET).

Sovos gives you two ways to submit e-reports:

Pass-through

You build the complete Flow 10 XML, and Sovos sends it directly to the PPF.

Consolidation

You submit individual invoices, B2B payment receipts, and B2C daily transaction and payment aggregates. Sovos generates and sends the Flow 10 report on your behalf.

E-reporting vs e-invoicing

Both e-invoicing and e-reporting can apply to your business. Use e-invoicing for French B2B customers and e-reporting for B2C or cross-border transactions.

Aspect E-invoicing E-reporting
Scope B2B domestic (both parties VAT-registered in France) B2C sales, cross-border B2B where at least one party is not VAT-registered in France, and transactions exempt from or outside the e-invoicing mandate (for example, margin scheme sales, intra-community distance sales)
Format Full invoice (UBL or CII) Flow 10 transaction data (XML)
Recipient Buyer's PA through the Annuaire PPF (Tax Authority)
Submission One SBD per invoice One SBD per reporting period (pass-through) or one SBD per document (consolidation)
Report.Type N/A FR_Reporting_Flow10 (pass-through only). Consolidation uses format-specific types per document stream. See Document types and SBDH routing.

E-reporting covers four data categories:

Flow 10.1: B2B international transactions

Individual invoice data for cross-border B2B transactions where at least one party is not VAT-registered in France. Outbound transactions (sales) use the Seller as the report issuer. Inbound transactions (purchases) use the Buyer as the report issuer.

Flow 10.2: B2B international payments

Individual payment received data in CDAR format for B2B international service transactions where VAT is due on collection. The report issuer for the original invoice or credit note is the Seller; the report issuer for the payment is the Buyer.

Flow 10.3: B2C transaction aggregates

Daily aggregated outbound transaction data for sales to consumers or non-VAT entities, aggregated by date, currency, and transaction category. The Seller is always the report issuer.

Flow 10.4: B2C payment aggregates

Daily aggregated payment received data in CDAR format for B2C service transactions where VAT is due on collection, aggregated daily. The report issuer for the original invoice or credit note is the Seller; the report issuer for the payment is the Buyer.

Suppliers must e-report for B2C transactions (sales to consumers or non-VAT entities), cross-border B2B transactions (where at least one party is outside France), and out-of-scope supplies such as exempt transactions or margin scheme sales.

Buyers must e-report for imports with reverse charge, intra-community acquisitions, and purchases from non-VAT registered suppliers.

Submission methods: Pass-through and consolidation

Pass-through

In pass-through, you build the complete Flow 10 XML report internally and submit it as a ready-made payload. Sovos validates the report against the Flow 10 schema and sends it directly to the PPF.

Key characteristics:

You control timing

No scheduler; you decide when to submit.

SBDH routing

DocumentIdentification.Type = Flow10, Mapping.OutputSchema = Report, Report.Type = FR_Reporting_Flow10.

Responsibility

You are responsible for aggregating transaction data, calculating period totals, and constructing the XML.

Consolidation

In consolidation, you submit individual documents to Sovos across four input types:

  • B2B transaction invoices (UBL, CII, or SCI).

  • B2B payment receipts (CDAR).

  • B2C daily transaction aggregates (ReportTransactions XML).

  • B2C daily payment aggregates (CDAR).

Sovos stores the documents, then generates, validates, and sends the Flow 10 report to the PPF at the right time for your tax regime.

Key characteristics:

Sovos manages timing

A scheduler runs per your tax regime and generates Flow 10 (flows 10.1-10.4).

Customer buffer period

After each reporting period closes, a buffer period lets you add or remove documents. The length of the buffer depends on your VAT regime.

System period lock

Sovos locks the period for consolidation. No additions or removals are allowed once generation starts.

SBDH routing

Mapping.OutputSchema is set to one of:

  • TransactionB2B

  • TransactionB2C

  • PaymentsB2B

  • PaymentsB2C

See Document types and SBDH routing for the full table.

Consolidation end-to-end flow

Each document you submit passes through five stages before it is included in a Flow 10 report.

Stage 1: You submit a document

Use POST /v1/documents to submit one of the supported document types:

  • B2B transaction invoice (UBL, CII, or SCI coreset).

  • B2B payment received in CDAR format.

  • B2C daily transaction aggregate in ReportTransactions XML format.

  • B2C daily payment aggregate in CDAR format.

The SBDH DocumentIdentification.Type is Consolidation for all four types.

Stage 2: Sovos validates the document

Sovos runs schematron validation and France-specific BR-FR business rules against the document. If validation fails, you get a status 401 notification. Fix the document and resubmit. The document is not stored until it passes validation.

Stage 3: Reporting service stores the document

The validated document is stored and linked to your SIREN and the applicable reporting period. It remains available for addition or removal during the reporting period and the five-day customer buffer that follows it.

Stage 4: Scheduler generates Flow 10

At the end of your system period, the Sovos scheduler generates the Flow 10 XML (flows 10.1-10.4 as applicable) from all stored documents for that SIREN and period. Generation timing is based on your set-up VAT regime and the statutory deadline. See Reporting periods and deadlines.

Stage 5: Schema validation and sending to DGFiP

Sovos validates the generated Flow 10 against the PPF schema, then sends it to the DGFiP. You get status notifications as the report moves through the PPF pipeline. See Handle application responses.

CODE
Sovos validation fails → 401  (fix and resubmit)

Sovos validation passes → 102
  → 104 (sent to PPF)
      → 235 (PPF received, processing — wait for 228 or 407)
      	 → 234 (PPF did not receive — Sovos handles)
     	 → 407 (PPF rejected — fix errors and resubmit)
     	 → 228 ✅ (PPF accepted — workflow complete)

Buffer and system periods

Phase When What you can do
Reporting period — open Period start to period end Add and remove documents freely. The invoice issue date must fall within this reporting period. The date you submit to Sovos (the document creation date in the system) does not need to match. Submit a document at any time while the period is open, even if the submission date is later than the issue date.
Customer buffer After period closes (duration depends on VAT regime) Continue adding or removing documents. The document creation date (the date you submit to Sovos) can fall within the buffer period, but the document issue date must fall within the reporting period, not the buffer period.
System period — locked Day six after period closes through statutory deadline No additions or removals. Sovos generates and sends Flow 10. Sending is blocked eight hours before the statutory deadline.
Error recovery during system period

Network errors cause automatic retries. A generation failure sets an error status and unlocks the period for modification. Manual re-trigger is available for sending failures.

Consolidation product bundles

Sovos uses the following product bundles internally to route each consolidation document stream. These are platform-side identifiers and do not appear in your SBDH setup.

Document stream Product bundle
B2B transaction (outbound) FR_TransactionB2B_outbound__1.0
B2B transaction (inbound) FR_TransactionB2B_inbound__1.0
B2C aggregated transactions FR_TransactionB2C__1.0
B2B payment statuses FR_PaymentsB2B__1.0
B2C payment aggregates FR_PaymentsB2C__1.0

No action is needed unless Sovos support has told you to reference a specific product bundle in your setup.

Flow 10 report types

Flow 10 is the French government-defined XML format for sending transaction and payment data to the PPF, with four data block types covering B2B international and B2C scenarios.

Flow What you're reporting Who/What Report frequency
10.1 Invoice data B2B international transactions. Individual detail per invoice
10.2 Payment data B2B international transactions where VAT > 0%; International B2B transactions where VAT is due upon receipt of payment. Individual detail per payment
10.3 Transaction data B2C transactions (goods and services sold to consumers or non-VAT entities), aggregated daily by date, currency, and category code. Daily aggregates
10.4 Payment data B2C service transactions only (payment receipts for services where VAT is due on collection), aggregated daily. Daily aggregates

Use the following guidance to determine which flows apply to your scenario:

B2B international scenario

Use flows 10.1 and 10.2. Submit individual invoice detail (Flow 10.1) and individual payment detail for services where VAT > 0% (Flow 10.2).

B2C scenario

Use flows 10.3 and 10.4. Submit daily aggregated transaction data (Flow 10.3) and daily aggregated payment data for services (Flow 10.4).

Note:

Rectification reports (TypeCode=RE) are only available for pass-through submissions when you need to correct previously submitted data. Consolidation rectification is not yet supported. See Create and submit a report for details.

Document types and SBDH routing

The SBDH fields required for e-report submissions differ between pass-through and consolidation, and between document types within consolidation.

The SBDH DocumentIdentification.Type, Mapping.OutputSchema, Report.Type, and (for B2B) MetaSchema scope values differ between pass-through and consolidation, and between document types within consolidation. Use the tables below to compose the correct SBDH for each submission.

Pass-through SBDH fields

For pass-through, you submit one fully constructed Flow 10 XML per reporting period.

SBDH field Value
Sender.Identifier Your SIREN (9 digits). E-reports are filed at SIREN level; do not use SIRET or VAT number here. Set Authority="FR".
DocumentIdentification.Standard urn.cpro.gouv.fr:1p0:ereporting
DocumentIdentification.Type Flow10
Scope: Country FR
Scope: CompanyCode Your SIREN (9 digits)
Scope: ProcessType Outbound
Scope: Mapping.OutputSchema Report
Scope: BusinessService.BusinessServiceName Reporting
Scope: Report.Type FR_Reporting_Flow10
Scope: SenderDocumentId Your unique report reference
Scope: SenderSystemId Your ERP system ID (for example, ERP_eReporting)

Consolidation SBDH fields

For consolidation, you submit one document at a time. The DocumentIdentification.Type is always Consolidation. The Mapping.OutputSchema, Report.Type, and MetaSchema values vary by document type as shown below.

Fields common to all consolidation submissions:

SBDH field Value
Sender.Identifier Your SIREN (9 digits). Set Authority="FR".
DocumentIdentification.Standard urn.cpro.gouv.fr:1p0:ereporting
DocumentIdentification.Type Consolidation
Scope: Country FR
Scope: CompanyCode Your SIREN (9 digits)
Scope: ProcessType Outbound
Scope: SenderDocumentId Your unique document reference
Scope: SenderSystemId Your ERP system ID (must match an existing ERP system ID in Sovos)

Per-document-type SBDH scope values:

Document type Input format Mapping.OutputSchema Report.Type MetaSchema
B2B transaction — outbound (sales) UBL coreset TransactionB2B FR_Reporting_Transaction_UBL outbound
B2B transaction — outbound (sales) CII coreset TransactionB2B FR_Reporting_Transaction_CII outbound
B2B transaction — outbound (sales) SCI TransactionB2B FR_Reporting_Transaction_SCI outbound
B2B transaction — inbound (purchases) UBL coreset TransactionB2B FR_Reporting_Transaction_UBL inbound
B2B transaction — inbound (purchases) CII coreset TransactionB2B FR_Reporting_Transaction_CII inbound
B2B transaction — inbound (purchases) SCI TransactionB2B FR_Reporting_Transaction_SCI inbound
B2C daily transaction aggregate ReportTransactions XML TransactionB2C FR_Reporting_Transaction_B2C (omit)
B2B payment receipt Payment CDAR PaymentsB2B FR_Reporting_Payment_Status (omit)
B2C daily payment aggregate Payment CDAR PaymentsB2C FR_Reporting_Payment_Status (omit)
Note:

Include MetaSchema only for B2B transaction submissions. Omit it entirely for B2C and all payment submissions.

Reporting periods and deadlines

Reporting frequency and deadlines depend on your VAT regime, with transaction data and payment data having separate periods for each regime.

VAT regime Transaction period Transaction deadline Transaction TA deadline Payment period Payment deadline Payment TA deadline
Monthly normal real Three 10-day periods per month: 1st-10th, 11th-20th, 21st-end of month 10 days after period end: 20th, last day of month, 10th of following month Next day after statutory deadline at 8:00 AM CET Monthly 10th of following month 11th of following month at 8:00 AM CET
Quarterly normal real Monthly 10th of following month 11th of following month at 8:00 AM CET Monthly 10th of following month 11th of following month at 8:00 AM CET
Simplified VAT Monthly Last day of following month 1st of second following month at 8:00 AM CET Monthly Last day of following month 1st of second following month at 8:00 AM CET
VAT exemption scheme Bimonthly (every two months) Last day of following month 1st of second following month at 8:00 AM CET Bimonthly (every two months) Last day of following month 1st of second following month at 8:00 AM CET
Note:

Sovos blocks Flow 10 generation and transmission eight hours before the TA deadline. This protects against late-arriving documents causing a missed statutory deadline."

Before you start

Before submitting e-reports, confirm PPF connectivity status for your environment and prepare your transaction data for the correct flow types.

PPF connectivity status

Test environment (UAT)

Sovos UAT connects to a Sovos-built mock that simulates PPF responses. This mock validates Flow 10 format and structure but might not replicate all PPF validation scenarios.

Production environment

Full PPF connection with complete validation is available. Sovos is currently in the pilot phase with the PPF.

Data preparation

Identify which transactions need e-reporting rather than e-invoicing. Cross-border B2B and B2C transactions fall under e-reporting, while domestic B2B between French VAT-registered entities use e-invoicing.

B2C data (flows 10.3 and 10.4)

Aggregate transactions by date, currency, and category. Calculate daily totals per tax rate and currency. Transaction count is optional. Separate goods (TLB1) from services (TPS1) since payment reporting applies only to services.

B2B international data (flows 10.1 and 10.2)

Keep individual invoice and payment details per transaction. Track payment dates when VAT is due on collection.

Seller VAT number (BT-48)

The seller's international VAT number, shown in Flow 10 as <TaxRegistrationId> within the <Seller> block, is optional. The French mandate needs only the SIREN, given in <CompanyId>. You do not need to include <TaxRegistrationId> in your reports.

Note:

The French international VAT number (BT-48) follows the format: FR + 2 check digits + 9-digit SIREN, for a total of 13 characters. This is distinct from the SIREN alone. For example, a company with SIREN 123456789 would have a VAT number in the form FRxx123456789, where xx represents the calculated check digits. If you include <TaxRegistrationId> in your submission, Sovos validates the value.

CategoryCode values for B2C aggregates:

Code Description Use case
TLB1 Delivery of goods subject to VAT Retail goods sales
TPS1 Provision of services subject to VAT Services to consumers
TNT1 Goods or services not subject to French VAT Exempt supplies, intra-community distance sales
TMA1 Margin scheme transactions Travel agencies, second-hand goods, art/antiques

For transactions that include both goods and services, categorize based on the primary operation. For example, if a customer buys a suit and the tailor includes alterations as part of the sale, the entire transaction is categorized as goods (TLB1) since alterations are incidental to the suit purchase. However, if alterations are sold independently from a garment purchase, they are categorized as services (TPS1). When goods and services are truly independent in the same transaction, create separate <Transactions> entries for each category.

Set up e-reporting

Before submitting e-reports, you must add the e-reporting product to your organization and create a dedicated ERP System ID. For consolidation, also contact Sovos to configure your tax regime.

The e-reporting product must be added to your organization before you can submit reports. Contact Sovos to enable the France e-reporting product for your organization.

  1. Go to ERP Setup in Settings.
  2. Create a new ERP System ID specifically for e-reporting (for example, ERP_eReporting).
  3. Under Communication Method, choose polling or pushing V2 (Beta).
  4. Under Event Mapping: Optional, set up the following events:
    Select event Attachment
    Validated No attachments
    Error No attachments
    Transmitted No attachments
    Report received by tax authority LegalResponse
    Report notification was not received by tax authority LegalResponse
    Report accepted by tax authority LegalResponse
    Report rejected by tax authority LegalResponse
    Note:

    If events are not set up, you won't get notifications for status updates. Event setup is required for e-reporting workflows.

The ERP System ID is ready for both pass-through and consolidation e-reporting submissions. For consolidation, also contact Sovos to set up the tax regime for your organization. Sovos needs to set up your VAT regime (monthly normal, quarterly normal, simplified, or VAT exemption scheme), the report definitions linked to your tax ID, and the product IDs for each document stream you are using. The scheduler uses this setup to determine when to lock periods and generate Flow 10 reports.

Create and submit an e-report

Submit e-reports by constructing a Standard Business Document (SBD) with the correct SBDH fields and posting it to the Sovos API.

SBDH setup

The SBDH wraps every submission, whether pass-through or consolidation. The key differences between the two methods are the value of DocumentIdentification.Type, Mapping.OutputSchema, and Report.Type.

Critical SBDH fields: pass-through:

SBDH element Value Notes
Sender.Identifier Your SIREN (9 digits) Authority="FR"
DocumentIdentification.Standard urn.cpro.gouv.fr:1p0:ereporting Flow 10 schema
DocumentIdentification.Type Flow10 Document type
Scope: Country FR France
Scope: CompanyCode Your SIREN Reporting party
Scope: ProcessType outbound Always outbound
Scope: Mapping.OutputSchema Report Triggers pass-through e-reporting routing
Scope: BusinessService.BusinessServiceName Reporting Distinguishes from e-invoicing
Scope: Report.Type FR_Reporting_Flow10 Determines content type
Scope: SenderDocumentId Unique report ID Recommend ERP reference
Scope: SenderSystemId Your ERP system ID For example: ERP_eReporting

Critical SBDH fields: consolidation (B2B UBL example):

SBDH element Value Notes
Sender.Identifier Your SIREN (9 digits) Authority="FR". E-reports are filed at SIREN level.
DocumentIdentification.Standard urn.cpro.gouv.fr:1p0:ereporting Same as pass-through
DocumentIdentification.Type Consolidation Distinguishes consolidation from pass-through
Scope: Country FR France
Scope: CompanyCode Your SIREN (9 digits) Reporting party
Scope: ProcessType outbound Always outbound
Scope: Mapping.OutputSchema TransactionB2B See Document types and SBDH routing for all values
Scope: Report.Type FR_Reporting_Transaction_UBL See document types table for format-specific values
Scope: MetaSchema outbound or inbound B2B only — omit for B2C and payment submissions
Scope: SenderDocumentId Unique document ID Recommend ERP reference
Scope: SenderSystemId Your ERP system ID Must match an existing ERP system ID in Sovos

Consolidation SBDH sample: B2B UBL outbound:

XML
<?xml version="1.0" encoding="UTF-8"?>
<sbd:StandardBusinessDocument xmlns:sbd="...">
  <sbd:StandardBusinessDocumentHeader>
    <sbd:Sender>
      <sbd:Identifier Authority="FR">100000008</sbd:Identifier>
    </sbd:Sender>
    <sbd:DocumentIdentification>
      <sbd:Standard>urn.cpro.gouv.fr:1p0:ereporting</sbd:Standard>
      <sbd:TypeVersion>1.0</sbd:TypeVersion>
      <sbd:Type>Consolidation</sbd:Type>
      <sbd:MultipleType>false</sbd:MultipleType>
      <sbd:CreationDateAndTime>2024-05-15T10:30:00Z</sbd:CreationDateAndTime>
    </sbd:DocumentIdentification>
    <sbd:BusinessScope>
      <sbd:Scope><sbd:Type>Version</sbd:Type><sbd:Identifier>1.0</sbd:Identifier></sbd:Scope>
      <sbd:Scope><sbd:Type>Country</sbd:Type><sbd:Identifier>FR</sbd:Identifier></sbd:Scope>
      <sbd:Scope><sbd:Type>CompanyCode</sbd:Type><sbd:Identifier>100000008</sbd:Identifier></sbd:Scope>
      <sbd:Scope><sbd:Type>Mapping.OutputSchema</sbd:Type><sbd:Identifier>TransactionB2B</sbd:Identifier></sbd:Scope>
      <sbd:Scope><sbd:Type>Report Type</sbd:Type><sbd:Identifier>FR_Reporting_Transaction_UBL</sbd:Identifier></sbd:Scope>
      <sbd:Scope><sbd:Type>MetaSchema</sbd:Type><sbd:Identifier>outbound</sbd:Identifier></sbd:Scope>
    </sbd:BusinessScope>
  </sbd:StandardBusinessDocumentHeader>
</sbd:StandardBusinessDocument>
Note:

The PPF publishes schema updates at https://www.impots.gouv.fr/specifications-externes-b2b. Monitor this page for new versions and update your implementation accordingly.

B2C input format for consolidation: ReportTransactions XML

When submitting B2C transactions for consolidation, use the Sovos-defined ReportTransactions XML format. This is the payload you Base64-encode and embed in the <enc:EmbeddedDocument> element, with Report.Type = FR_Reporting_Transaction_B2C.

Element ID Cardinality Description/values
Sender/URIUniversalCommunication TG-4 0..1 Sender's email address
Issuer TG-5 1..1 Declarant identification
Issuer/URIUniversalCommunication TG-6 0..1 Declarant's email address
Sender/URIUniversalCommunication/URIID TT-11 1..1 Email address (CEF network)
Issuer/Id (@schemeId) TT-12/13 1..1 Declarant SIREN/SIRET/VAT and schemeId attribute
Issuer/Name TT-14 1..1 Company name of the declarant
Issuer/RoleCode TT-15 1..1 Default: WK
Issuer/URIUniversalCommunication/URIID TT-16 1..1 Email address (CEF network)
Transactions/Id — 1..1 Transmission identifier generated by the sender
Transactions/Date TT-77 1..1 AAAAMMJJ — date transactions were accounted
Transactions/TransactionsCurrency TT-78 1..1 ISO 4217 — all amounts except TaxTotal must be in this currency
Transactions/TaxDueDateTypeCode TT-80 0..1 VAT payment option (UNTDID 2005/2475) — only if option sur les débits
Transactions/CategoryCode TT-81 1..1 TLB1 (goods), TPS1 (services), TNT1 (not subject to French VAT), TMA1 (margin scheme)
Transactions/TaxExclusiveAmount TT-82 1..1 Total excl. VAT — daily aggregate in TransactionsCurrency
Transactions/TaxTotal TT-83 1..1 Total VAT — must always be in EUR regardless of TransactionsCurrency
Transactions/TransactionsCount TT-85 0..1 Count of transactions
TaxSubtotal/TaxPercent TT-86 1..1 VAT rate as percentage (for example: 20, 10, 5.5, 0)
TaxSubtotal/TaxableAmount TT-87 1..1 Tax base amount for this rate — in TransactionsCurrency
TaxSubtotal/TaxTotal TT-88 1..1 VAT amount for this rate — in EUR

VAT exemption fields

TaxExemptionReason (TT-58) and TaxExemptionReasonCode (TT-59) do not apply to B2C ReportTransactions. Per AFNOR XP Z12-014, these VAT exemption reason fields are suppressed for B2C flows. Do not include them in B2C ReportTransactions submissions.

Embedding Flow 10 data (pass-through)

For pass-through submissions, Flow 10 XML must be Base64-encoded and embedded in the SovosDocument structure. The Flow 10 XML has three main sections:

ReportDocument

Identifies the report, parties, and role (seller or buyer).

TransactionsReport

Transaction and invoice data (optional).

PaymentsReport

Payment data (optional).

At least one of TransactionsReport or PaymentsReport should be present.

Important:

The complete request payload must not exceed five megabytes. For files larger than five megabytes and up to 120 MB, use the presigned URL upload flow instead. See Submit large files for France e-reporting for details.

Report structures (pass-through)

The content and structure of transaction and payment reports follow French tax authority requirements. For complete schema and structure references, see the official Flow 10 specifications at https://www.impots.gouv.fr/specifications-externes-b2b. Download the most recent version, open the zip file, and go to the [3-XSD...]/[1-E-reporting] folder for .xsd files outlining schema and structure.

Every Flow 10 report must begin with a ReportDocument header that identifies the report and specifies the reporting role:

Field Required Description Values/format
Id Yes Unique report identifier Your report reference (for example, MC_0001). Maximum 35 characters as of AFNOR v1.3.
Name No Report name Optional descriptor
IssueDateTime/DateTimeString Yes Report creation timestamp YYYYMMDDHHmmss format
TypeCode Yes Submission type IN (initial) or RE (rectification)
Sender/Id Yes Platform matricule 4 characters, schemeId="0238"
Sender/Name Yes Platform name Platform company name
Sender/RoleCode Yes Platform role WK (approved platform)
Sender/URIUniversalCommunication/URIID Yes Platform email CEF network address
Issuer/Id Yes Your SIREN 9 digits, schemeId="0002"
Issuer/Name Yes Your company name Legal company name
Issuer/RoleCode Yes Your reporting role SE (seller) or BY (buyer)
Issuer/URIUniversalCommunication/URIID Yes Your email CEF network address

The Issuer/RoleCode determines your reporting perspective and is critical for compliance. Use SE (Seller) when reporting transactions where you are the seller — this covers B2C sales to consumers, cross-border B2B sales (exports), and sales to non-VAT registered entities. Use BY (Buyer) when reporting transactions where you are the buyer — this covers imports with reverse charge VAT, intra-community acquisitions, and purchases from non-VAT registered suppliers.

Important:

If your company has both seller and buyer e-reporting obligations for the same period, you must submit two separate reports with different RoleCodes.

Rectification reports (pass-through)

Submit a rectification report (TypeCode=RE) when you discover errors in data already reported or for a closed period. Key differences from initial reports:

  • <TypeCode>RE</TypeCode> instead of IN.

  • Has corrected data for the entire period (not just the changes).

Rectify when you need to correct errors in a previously accepted report (one that got status 228), or when adding or removing transactions from a closed period that was successfully reported. Rectification replaces the entire period. You must resubmit all data for that period with corrections.

Note:

Earlier versions of the France-defined schema included a reference to the original report ID number. The tax authority has since simplified the rectification structure; no explicit reference to the original report ID is needed in the XML payload.

Submitting through API

Important:

The complete request payload must not exceed five megabytes. This limit applies to the standard POST /v1/documents endpoint. For payloads larger than five megabytes and up to 120 MB, use the presigned URL upload flow instead. See Submit large files for France e-reporting for details.

Endpoint

POST /v1/documents

Request
JSON
{
  "data": "base64_encoded_SBD",
  "dataEncoding": "base64"
}
Responses

Success response = HTTP 202 Accepted.

For the complete list of HTTP status codes, error response schema, and retry guidance, see HTTP status codes and Document endpoint specification.

If the Sovos API is unavailable, check the Sovos status pa for real-time operational status and incident history. You can subscribe to email alerts directly from the page.

Submit large files for France e-reporting

Use the presigned URL flow to submit e-reporting pass-through files larger than five megabytes to the France PPF/DGFiP using a two-step upload pattern.

CAUTION:

Large file processing is available in the UAT environment only. It is not yet available in production.

The standard POST /v1/documents endpoint accepts payloads up to five megabytes. If your Flow 10 XML payload exceeds this limit, use this two-step presigned URL flow to upload the file directly to Sovos cloud storage. Compliance Network then picks up the file automatically and begins processing it.

Note:

This page covers France e-reporting pass-through submissions only. If you are a buyer getting large inbound e-invoices from suppliers using the France PPF/DGFiP network, that flow operates on a separate service path. Documentation for large file support in the France e-invoicing inbound flow will be published separately.

When to use this flow

Use the following table to decide which submission method to use:

File size Submission method
5 MB and under POST /v1/documents
Greater than 5 MB, up to 120 MB POST /v1/documents/{countryCode}/upload-url (this page)
Greater than 120 MB Not supported. Files exceeding 120 MB cannot be submitted using this flow. Contact Sovos support for guidance.

If you submit files under five megabytes, continue using POST /v1/documents. No changes to your existing integration are needed for standard-size files.

Note:

This flow supports single-document uploads only. Each document must be submitted individually.

Step 1 - Request a presigned URL

Call POST /v1/documents/{countryCode}/upload-url with your document metadata. Set the path parameter countryCode to FR.

Use the following request body:

JSON
{
  "company": {
    "companyId": "369217951",
    "organizationId": "<organizationId>"
  },
  "metadata": {
    "systemId": "ERPSystemFR",
    "country": "FR",
    "businessProcess": "FR_Reporting_Flow10",
    "version": "1.0",
    "outputSchema": "Report",
    "processType": "outbound",
    "filename": "legal.xml",
    "fileSize": "5242880",
    "contentType": "Legal"
  }
}

Request fields:

Field Type Required Description
company.companyId string Yes Your company's Tax Identification Number (for example, your SIREN)
company.organizationId UUID v4 Partners only Your organization identifier. Partners acting on behalf of a workspace owner must include this field.
metadata.systemId string Yes Your ERP system ID. Must match an existing ERP system ID set up in Sovos (for example, ERPSystemFR).
metadata.country string Yes FR
metadata.businessProcess string Yes FR_Reporting_Flow10
metadata.version string Yes 1.0
metadata.outputSchema string Yes Report
metadata.processType string No Outbound
metadata.filename string No File name for the upload (for example, legal.xml)
metadata.fileSize string No File size in bytes (for example, 5242880)
metadata.contentType string No Legal

A successful request returns HTTP 200:

JSON
{
  "success": true,
  "status": 200,
  "message": "OK",
  "timestamp": 1748822400000,
  "data": {
    "transactionId": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
    "preSignedUrl": "https://files.example.com/dl/abc?X-Amz-Algorithm=...",
    "expirationDate": "2025-08-08T14:15:22Z"
  }
}

Response fields:

Field Type Description
transactionId UUID v4 Unique identifier for this upload session. Store this value — you need it to track document status after the upload.
preSignedUrl string Time-limited signed link to use in Step 2.
expirationDate ISO 8601 UTC The link is invalid after this time. Upload the file before this timestamp.
timestamp integer Server time of response generation, in epoch milliseconds.
Important:

Store the transactionId returned in this response. It is the primary reference for tracking processing status and correlating notifications back to this submission.

Step 2 - Upload the file

Use the preSignedUrl from Step 1 to upload your file. This is a direct PUT to cloud storage. You don't call the Sovos API for this step, and no Sovos authentication headers are needed. Send the raw file bytes as the request body which includes the raw SBDH + base64-encoded Flow10 XML. Do not Base64-encode the content as a whole.

CODE
PUT <preSignedUrl>
Content-Type: application/xml

<raw file bytes>

Example using curl:

CODE
curl -X PUT \
  "<preSignedUrl>" \
  --upload-file invoice.xml \
  -H "Content-Type: application/xml"

A successful upload returns HTTP 200 with an empty body. The storage service doesn't return JSON.

Important:

Only the first upload to a presigned URL is processed. Later uploads to the same URL are ignored.

Track the submission

After a successful upload, Compliance Network detects the file automatically and begins processing. No added API call is needed to start processing.

Use the transactionId from Step 1 to poll for notifications and track the outcome. A document-level identifier is not available until processing has started, so use transactionId as your reference immediately after the upload. Notifications are delivered through the same channels used for standard document submissions:

Notification model

The following notification events are raised for large file submissions:

Event Meaning
document.received Compliance Network has successfully integrated the uploaded file. Check for this event under your systemId if you need confirmation of receipt.
workflow.completed Overall processing has finished. Use this event if you only need to know when processing is complete.

After Compliance Network generates a documentId during processing, you can switch to using documentId for subsequent notification retrieval. You can also continue using transactionId. Both work.

For status code definitions and response handling, see Handle application responses.

Status values

Files that fail validation are not forwarded. Processing errors are reported as validation error notifications (status code 401 in the notification payload which is distinct from the HTTP 401 returned by Step 1). Review the error details in the notification, correct the source document, and resubmit from Step 1.

URL expiration

The presigned URL is valid for one hour from the time of the Step 1 response. If you expect upload times close to this limit due to file size or network conditions, request the presigned URL immediately before starting the upload rather than in advance. Check the expirationDate field in the Step 1 response to see the exact expiry timestamp.

If the URL expires before the upload completes:

  1. Call POST /v1/documents/{countryCode}/upload-url again to get a new presigned URL. You get a new transactionId and a new preSignedUrl.

  2. Restart the upload using the new URL.

Discard the expired URL and its associated transactionId. Do not reuse them.

Error handling

Errors are returned at three points in the large file upload flow: the presigned URL request, the file upload, and post-upload processing.

Step 1 errors (presigned URL request):

HTTP status Scenario Action
400 Missing required field Check that all required fields are present in the request body.
400 Invalid company or metadata fields (for example, missing ProcessType, undeclared namespace aliases, missing StandardBusinessDocumentHeader element, or an unrecognized documentIdentification/schema combination) Correct the affected fields and retry.
401 Invalid or expired token Re-authenticate and retry with a new bearer token.
403 Unauthorized company or organization Confirm that companyId and organizationId are correct for your account.
412 Company or branch is inactive, or required configuration is missing for the requested scope Confirm the company or branch is active and that required configuration exists. Contact Sovos support if configuration appears to be missing.
5xx Server error Retry with exponential back-off. Contact Sovos support if the problem persists.

Step 2 errors (file upload). Step 2 errors are returned by the cloud storage service, not the Sovos API:

HTTP status Scenario Action
403 Presigned URL has expired or is invalid Request a new presigned URL (Step 1) and restart the upload.

Processing errors (after upload). Validation failures after upload are reported as notifications, not as HTTP errors. If the uploaded document fails validation, for example because a required field is missing or malformed, Compliance Network raises a notification with status code 401 in the payload. This is distinct from the HTTP 401 returned by Step 1.

When a processing error notification occurs, no further workflow runs for that document. Review the error details in the notification, correct the source document, and resubmit from Step 1.

Security

The presigned URL grants time-limited, scoped write access to a single upload location only. It doesn't give read access or access to any other resources. All data is encrypted in transit and at rest. Uploaded files go through automated security scanning before processing begins.

Treat the presigned URL as a secret for its lifetime. Do not log it or share it. It expires automatically at the time shown in the expirationDate field.

General considerations

  • Pass-through only. This flow supports France e-reporting pass-through submissions only. It doesn't apply to France e-invoicing inbound flows.

  • One document per request. Each report must be submitted individually.

  • SBDH content. Your file must include the correct SBDH wrapper and Flow 10 XML structure. The presigned URL flow changes how you deliver the file, not what the file has. For SBDH requirements, see Send e-reports.

  • ERP system ID. The value you pass in metadata.systemId must match an existing ERP system ID set up in Sovos. For setup instructions, see Set up e-reporting.

  • Duplicate uploads. Only the first upload per presigned URL is processed. Later uploads to the same URL are ignored.

Handle application responses

After submitting an e-report, track status progression through Sovos notifications and take action based on the SCICloudStatusCode returned.

Response lifecycle

After submission, track status progression through notifications. Errors can occur at three distinct points: at Sovos validation, after the PPF gets the report, or after PPF processing.

CODE
Sovos validation fails → 401  (fix and resubmit)

Sovos validation passes → 102
  → 104 (sent to PPF)
      → 235 (PPF received, processing — wait for 228 or 407)
      	 → 234 (PPF did not receive — Sovos handles)
     	 → 407 (PPF rejected — fix errors and resubmit)
     	 → 228 ✅ (PPF accepted — workflow complete)
Note:

PPF availability is outside Sovos' control. During PPF maintenance or incidents, monitor the French tax authority channels at https://www.impots.gouv.fr for official communications. Sovos automatically retries any submission accepted during PPF unavailability. Keep polling for notifications and don't resubmit.

Retrieving notifications

API call
CODE
GET
     /v1/notifications/FR?taxId={SIREN}&sourceSystemId={SenderSystemId}&processType=0
Parameters
taxId

Your SIREN from the SBDH

sourceSystemId

Matches SenderSystemId from the SBDH

processType

0 (outbound)

Response handling

When you get a notification, check sciCloudStatusCode:

SCICloudStatusCode PPF code Meaning What happens next Action required
102 N/A Sovos validation passed Sovos sends to PPF (expect status 104) Wait.
104 N/A Sent to PPF PPF performs validations Wait for PPF response.
228 300 PPF accepted report Workflow complete Archive confirmation
234 501 PPF did not get report Report schema error or filename error Sovos handles this error. No action needed. Contact Sovos support if the status doesn't resolve.
235 500 PPF got report, processing PPF still validating Wait for final status (228 or 407).
242 N/A Document added to a report Document is added to the report identified in the notification No action.
243 N/A Document not added to a report Check notification for exclusion details The exclusion may occur for different reasons, including duplication of a previously submitted document, a processing error, or a missing report configuration. Review the reason for exclusion provided in the notification and take the proper corrective action based on the indicated cause.
401 N/A Sovos validation failed Check notification for error details Fix XML or SBDH errors and resubmit. See Troubleshoot issues.
407 301 PPF rejected report Sovos notification has parsed error details from PPF Review Sovos error codes in notification, correct data issues. If this was your first submission attempt for the period, fix and resubmit with TypeCode=IN. If correcting a previously accepted report, submit TypeCode=RE.

The PPF Code column shows the corresponding ProcessConditionCode from the PPF CDAR response: 300 for accepted (status 228) and 301 for rejected (status 407). The CDAR is a UN/CEFACT D22B standard message.

Note:

Statuses 228, 235, 234, and 407 include the official PPF response document (CDAR format) attached to the notification. Sovos interprets these response documents and shows all necessary information in Sovos status codes. You can optionally download these attachments for your records.

Acknowledging notifications

Mark as read

Mark notifications as read after processing:

CODE
PUT
     /v1/notifications/{notificationId}/markAsRead

Error handling for e-reporting consolidation

When a consolidated e-report fails validation, the action you need to take depends on which stage the error occurred and which status code you receive.

The consolidation model divides responsibilities between you and Sovos differently than pass-through does, so this topic covers consolidation error scenarios specifically.

Note:

This topic covers error handling for the consolidation submission method only. For pass-through error handling (REJ_ codes, status 401, status 407), see Send e-reports.

How consolidation error handling differs from pass-through

In pass-through, you build and send the complete Flow 10 XML to Sovos. If it is rejected, you correct and resubmit the full report.

In consolidation, you send individual transactions and Sovos builds the Flow 10 report on your behalf. If an error occurs, the scope of what you must correct and resubmit is narrower. You work at the transaction level, not the report level.

Pass-through Consolidation
What you submit Complete Flow 10 XML Individual transactions (UBL invoices, CDAR payment receipts, or daily aggregates)
What Sovos submits to the Plateforme Publique de Facturation (PPF) Your report, unchanged A Flow 10 report Sovos generates from your stored transactions
On status 401 Correct and resubmit the full Flow 10 report Correct and resubmit the rejected transaction document
On status 407 Correct and resubmit the full Flow 10 report Remove the affected documents from scope, then trigger a manual consolidation

Status 401: validation failure

Status 401 means Sovos validation rejected your transaction document before it was stored. The document is not included in the consolidated report.

To resolve a status 401 error:

  1. Review the errors identified in the status notification.

  2. Correct the errors in your transaction document.

  3. Resubmit the corrected document to Sovos.

Sovos stores the corrected document and includes it in the next consolidation run for the period. You do not need to rebuild or resubmit the Flow 10 report. Sovos regenerates it from all stored documents for the period.

Status 407: PPF rejection

Status 407 means the PPF rejected the Flow 10 report after Sovos submitted it. The error is at the report level, but the cause is usually in one or more of the transaction documents the report was built from.

To resolve a status 407 error:

  1. Review the rejection details in the status 407 notification to identify which data is causing the failure.

  2. Remove the affected documents from the e-reporting consolidation scope.

  3. Trigger a manual consolidation. Sovos regenerates the Flow 10 report from the remaining documents and resubmits it to the PPF.

Note:

Removing documents from scope means excluding the identified transaction documents from the current consolidation period, not deleting them. Contact Sovos support if you need guidance on how to remove documents from scope for your integration.

Automatic retries and generation failures

Sovos handles certain failure scenarios automatically, without any action on your part:

Network errors during PPF submission

Sovos retries the submission automatically.

Status 234 (PPF did not receive the report)

Sovos retries the submission.

Generation failure

Sovos sets an error status on the period and unlocks it for modification. A manual re-trigger is available for sending failures.

You do not need to intervene in any of these scenarios. Intervene only on status 401 and status 407, as described above.

Troubleshoot issues

Use status codes and PPF rejection reason codes to diagnose and correct e-report submission failures.

Validation errors (Status 401)

A 401 notification has multiple status elements. The high-level status uses SCICloudStatusCode, while detailed validation errors use SCIInternalValidationStatusCode.

Review all SCIInternalValidationStatusCode status elements for specific error details. Correct the issues in the XML and resubmit.

Sovos pre-validates your report before sending to the tax authority, using the same rule set as the PPF. To see the authoritative Flow 10 rule set, download the most recent version of the PPF external specifications from https://www.impots.gouv.fr/specifications-externes-b2b and open Annexe 7 (Règles de gestion) from the downloaded package.

Note:

The schematron validation files for B2B e-reporting enforce the current AFNOR rule set. Review Annexe 7 of the current PPF external specifications to confirm compliance with any new or modified rules.

Integration errors (Status 407)

When status 407 occurs, Sovos gets the PPF rejection response (CDAR format), parses it, and includes all error details in the notification. Review the Sovos error codes and messages in the notification to understand what corrections are needed.

Next steps depend on what was rejected:

  • If your initial submission (TypeCode=IN) was rejected: Fix the errors and resubmit with TypeCode=IN.

  • If your rectification (TypeCode=RE) was rejected: Fix the errors and resubmit with TypeCode=RE.

TypeCode shows what you're trying to do, not the outcome; a rejected initial attempt is still an initial submission.

PPF rejection reason codes

When status 407 occurs, the PPF response includes one or more rejection reason codes:

Note:

The rule codes listed below are drawn from the AFNOR Flow 10 specification and represent common rejection scenarios. The PPF may enforce additional rules not listed here. Always review the full error detail returned in the Sovos notification for the specific rule code and field path that caused the rejection.

Code Control type Description Common rule codes
REJ_SEMAN Semantic format control Data format does not conform to semantic requirements. G1.05, G1.09, G1.10, G1.14, G1.15, G1.24, G2.01, G2.31, G7.53
REJ_UNI Uniqueness control Data has already been sent and processed. G1.42, G8.05
REJ_COH Data coherence control One or more data elements are incoherent. G1.32, G1.40, G1.53, G1.55, G1.60, G2.33, G6.21, G6.23, G6.25, G6.26, G6.28, G6.29, G8.01
REJ_PER Period control Submission date not coherent with declared period. G1.07, G1.36, G6.24, G7.43
Note:

Error codes and response descriptions returned by the tax authority may vary in structure and wording between PPF releases. The codes and descriptions shown in your Sovos notification reflect the parsed PPF response at the time of submission. If a code or description does not match what is listed here, refer to the current version of the PPF external specifications at https://www.impots.gouv.fr/specifications-externes-b2b.

Sovos parses these codes from the PPF CDAR response and includes the error details in the StatusReason field with specific field paths and error messages.

For complete Flow 10 schema and field specifications, download the most recent version of the PPF external specifications from https://www.impots.gouv.fr/specifications-externes-b2b, open the zip file, and go to the [3-XSD...]/[1-E-reporting] folder for the Flow 10 XSD files.

Complete examples

Download complete, production-ready Standard Business Document (SBD) payloads for transaction reports, payment reports, and rectification reports.

The sample files below are complete, production-ready SBD payloads in the exact format required for POST /v1/documents submission. Each sample has a full SBDH wrapper with the Flow 10 XML Base64-encoded inside the <enc:EmbeddedDocument> element.

To inspect the Flow 10 structure, decode the Base64 content from the <enc:EmbeddedDocument> tag to view the complete ReportDocument header, TransactionsReport and PaymentsReport sections, and all data elements.

Note:

The <TaxRegistrationId> element shown in the seller block of the samples is optional. If you omit it, <CompanyId> (SIREN) is used for identification. If you include it, make sure the format is correct and the value matches your company setup in Sovos.

Example 1: Transaction report combining B2B and B2C (flows 10.1 and 10.3)

Download complete sample

Scenario

Company reporting B2B international invoices and B2C aggregated transactions for October 2025.

SBDH setup

Report.Type FR_Reporting_Flow10, TypeCode IN (initial submission), ReportPeriod October 1-31, 2025.

Structure

One <Invoice> element with complete B2B international invoice details including seller and buyer information, delivery address, line items, and tax breakdown (Flow 10.1). Two <Transactions> elements representing daily B2C aggregates: September 22 (TLB1 goods — 100 transactions, €10,000 net, €2,000 VAT at 20%) and September 16 (TPS1 services — 100 transactions, €10,000 net, €2,000 VAT at 20%).

Example 2: Payment report combining B2B and B2C (flows 10.2 and 10.4)

Download complete sample

Scenario

Company reporting B2B international payments and B2C aggregated payments for October 2025.

SBDH setup

Report.Type FR_Reporting_Flow10, TypeCode IN (initial submission), ReportPeriod October 1-31, 2025.

Structure

Two <Invoice> elements with nested <Payment> sections for B2B international service payments (Flow 10.2): Invoice S2F3 (payment of €30,000 on October 30) and Invoice S2F4 (payment of €400,000 on October 30). Two <Transactions> elements with nested <Payment> sections for B2C payment aggregates (Flow 10.4): September 22 (€20,000 at 20% VAT) and September 16 (€20,000 at 20% VAT).

Example 3: Rectification report

Download complete sample

Scenario

October transaction report had errors; submitting correction in November.

Key differences

TypeCode RE (not IN), complete corrected data for October period, otherwise identical SBDH structure and Report.Type.

Note:

Sample files may have <References> elements from earlier schema versions. The current Flow 10 schema (v3.1) does not include References in ReportDocument. Omit this element when building rectification reports.

Sample application responses

Sample XML snippets and downloadable files showing the structure of each application response status returned during e-report processing.

PPF response attachments (optional)

Application responses for statuses 228 and 407 include the official PPF response document (CDAR format) as an attachment. The attachment has two key sections: an acknowledgment block (references your submitted report and has the ProcessConditionCode) and a status detail block (present on rejections only — one entry per error with the business rule code, field name, and error message).

Validation success (Status 102)

Sample

App_Response_102_Validation_ok.xml

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">102</cbc:StatusReasonCode>
  <cbc:StatusReason>Document validated successfully</cbc:StatusReason>
</cac:Status>

Validation failure (Status 401)

Sample

App_Response_401_Validation_nok.xml

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCIInternalValidationStatusCode">401</cbc:StatusReasonCode>
  <cbc:StatusReason>The element 'AllowanceCharge' has invalid child element 'Tax'.</cbc:StatusReason>
</cac:Status>

Sent to PPF (Status 104)

Sample

App_Response_104_Transmitted.xml

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">104</cbc:StatusReasonCode>
  <cbc:StatusReason>Transmitted to the tax authority</cbc:StatusReason>
</cac:Status>

Integration success (Status 228)

Sample

App_Response_228_Integration_Ok.xml

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">228</cbc:StatusReasonCode>
  <cbc:StatusReason>Report accepted by Tax Authority</cbc:StatusReason>
</cac:Status>

Integration failure (Status 407)

Sample

App_Response_407_Not_Integrated.xml

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">407</cbc:StatusReasonCode>
  <cbc:StatusReason>Report rejected by Tax Authority</cbc:StatusReason>
</cac:Status>
<cac:Status>
  <cbc:StatusReasonCode listID="SCIStatusAction">NIN</cbc:StatusReasonCode>
  <cbc:StatusReason>Request to re-issue a corrected new report or fix the error and resend the report</cbc:StatusReason>
</cac:Status>

Received by PPF (Status 235)

Sample

App_Response_235_Received.xml

Status 235 means the PPF has got the report and is still validating. No action is needed. The expected progression is 228 (accepted) or 407 (rejected).

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">235</cbc:StatusReasonCode>
  <cbc:StatusReason>Report received by Tax Authority</cbc:StatusReason>
</cac:Status>

Not received by PPF (Status 234)

Sample

App_Response_234_Not_Received.xml

Status 234 means the report was sent but not delivered to the PPF due to a report schema error or filename error. This error is handled by Sovos. No action is needed from you; contact Sovos support if the status does not resolve.

CODE
<cac:Status>
  <cbc:StatusReasonCode listID="SCICloudStatusCode">234</cbc:StatusReasonCode>
  <cbc:StatusReason>Report was not received by Tax Authority</cbc:StatusReason>
</cac:Status>