How can we help?

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.

AspectE-invoicingE-reporting
ScopeB2B 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)
FormatFull invoice (UBL or CII)Flow 10 transaction data (XML)
RecipientBuyer's PA through the AnnuairePPF (Tax Authority)
SubmissionOne SBD per invoiceOne SBD per reporting period (pass-through) or one SBD per document (consolidation)
Report.TypeN/AFR_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.

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

PhaseWhenWhat you can do
Reporting period — openPeriod start to period endAdd 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 bufferAfter 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 — lockedDay six after period closes through statutory deadlineNo 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 streamProduct bundle
B2B transaction (outbound)FR_TransactionB2B_outbound__1.0
B2B transaction (inbound)FR_TransactionB2B_inbound__1.0
B2C aggregated transactionsFR_TransactionB2C__1.0
B2B payment statusesFR_PaymentsB2B__1.0
B2C payment aggregatesFR_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.

FlowWhat you're reportingWho/WhatReport frequency
10.1Invoice dataB2B international transactionsIndividual detail per invoice
10.2Payment dataB2B international transactions where VAT > 0%; B2B domestic transactions where VAT is due upon receipt of paymentIndividual detail per payment
10.3Transaction dataB2C transactions (goods and services sold to consumers or non-VAT entities), aggregated daily by date, currency, and category codeDaily aggregates
10.4Payment dataB2C service transactions only (payment receipts for services where VAT is due on collection), aggregated dailyDaily 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 fieldValue
Sender.IdentifierYour SIREN (9 digits). E-reports are filed at SIREN level; do not use SIRET or VAT number here. Set Authority="FR".
DocumentIdentification.Standardurn.cpro.gouv.fr:1p0:ereporting
DocumentIdentification.TypeFlow10
Scope: CountryFR
Scope: CompanyCodeYour SIREN (9 digits)
Scope: ProcessTypeOutbound
Scope: Mapping.OutputSchemaReport
Scope: BusinessService.BusinessServiceNameReporting
Scope: Report.TypeFR_Reporting_Flow10
Scope: SenderDocumentIdYour unique report reference
Scope: SenderSystemIdYour 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 fieldValue
Sender.IdentifierYour SIREN (9 digits). Set Authority="FR".
DocumentIdentification.Standardurn.cpro.gouv.fr:1p0:ereporting
DocumentIdentification.TypeConsolidation
Scope: CountryFR
Scope: CompanyCodeYour SIREN (9 digits)
Scope: SenderDocumentIdYour unique document reference
Scope: SenderSystemIdYour ERP system ID (must match an existing ERP system ID in Sovos)

Per-document-type SBDH scope values:

Document typeInput formatMapping.OutputSchemaReport.TypeMetaSchema
B2B transaction — outbound (sales)UBL coresetTransactionB2BFR_Reporting_Transaction_UBLoutbound
B2B transaction — outbound (sales)CII coresetTransactionB2BFR_Reporting_Transaction_CIIoutbound
B2B transaction — outbound (sales)SCITransactionB2BFR_Reporting_Transaction_SCIoutbound
B2B transaction — inbound (purchases)UBL coresetTransactionB2BFR_Reporting_Transaction_UBLinbound
B2B transaction — inbound (purchases)CII coresetTransactionB2BFR_Reporting_Transaction_CIIinbound
B2B transaction — inbound (purchases)SCITransactionB2BFR_Reporting_Transaction_SCIinbound
B2C daily transaction aggregateReportTransactions XMLTransactionB2CFR_Reporting_Transaction_B2C(omit)
B2B payment receiptPayment CDARPaymentsB2BFR_Reporting_Payment_Status(omit)
B2C daily payment aggregatePayment CDARPaymentsB2CFR_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 regimeTransaction periodTransaction deadlineTransaction TA deadlinePayment periodPayment deadlinePayment TA deadline
Monthly normal realThree 10-day periods per month: 1st-10th, 11th-20th, 21st-end of month10 days after period end: 20th, last day of month, 10th of following monthNext day after statutory deadline at 8:00 AM CETMonthly10th of following month11th of following month at 8:00 AM CET
Quarterly normal realMonthly10th of following month11th of following month at 8:00 AM CETMonthly10th of following month11th of following month at 8:00 AM CET
Simplified VATMonthlyLast day of following month1st of second following month at 8:00 AM CETMonthlyLast day of following month1st of second following month at 8:00 AM CET
VAT exemption schemeBimonthly (every two months)Last day of following month1st of second following month at 8:00 AM CETBimonthly (every two months)Last day of following month1st 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:

CodeDescriptionUse case
TLB1Delivery of goods subject to VATRetail goods sales
TPS1Provision of services subject to VATServices to consumers
TNT1Goods or services not subject to French VATExempt supplies, intra-community distance sales
TMA1Margin scheme transactionsTravel 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 eventAttachment
    ValidatedNo attachments
    ErrorNo attachments
    TransmittedNo attachments
    Report received by tax authorityLegalResponse
    Report notification was not received by tax authorityLegalResponse
    Report accepted by tax authorityLegalResponse
    Report rejected by tax authorityLegalResponse
    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 elementValueNotes
Sender.IdentifierYour SIREN (9 digits)Authority="FR"
DocumentIdentification.Standardurn.cpro.gouv.fr:1p0:ereportingFlow 10 schema
DocumentIdentification.TypeFlow10Document type
Scope: CountryFRFrance
Scope: CompanyCodeYour SIRENReporting party
Scope: ProcessTypeoutboundAlways outbound
Scope: Mapping.OutputSchemaReportTriggers pass-through e-reporting routing
Scope: BusinessService.BusinessServiceNameReportingDistinguishes from e-invoicing
Scope: Report.TypeFR_Reporting_Flow10Determines content type
Scope: SenderDocumentIdUnique report IDRecommend ERP reference
Scope: SenderSystemIdYour ERP system IDFor example: ERP_eReporting

Critical SBDH fields: consolidation (B2B UBL example):

SBDH elementValueNotes
Sender.IdentifierYour SIREN (9 digits)Authority="FR". E-reports are filed at SIREN level.
DocumentIdentification.Standardurn.cpro.gouv.fr:1p0:ereportingSame as pass-through
DocumentIdentification.TypeConsolidationDistinguishes consolidation from pass-through
Scope: CountryFRFrance
Scope: CompanyCodeYour SIREN (9 digits)Reporting party
Scope: ProcessTypeoutboundAlways outbound
Scope: Mapping.OutputSchemaTransactionB2BSee Document types and SBDH routing for all values
Scope: Report.TypeFR_Reporting_Transaction_UBLSee document types table for format-specific values
Scope: MetaSchemaoutbound or inboundB2B only — omit for B2C and payment submissions
Scope: SenderDocumentIdUnique document IDRecommend ERP reference
Scope: SenderSystemIdYour ERP system IDMust match an existing ERP system ID in Sovos

Consolidation SBDH sample: B2B UBL outbound:

<?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.

ElementIDCardinalityDescription/values
Sender/URIUniversalCommunicationTG-40..1Sender's email address
IssuerTG-51..1Declarant identification
Issuer/URIUniversalCommunicationTG-60..1Declarant's email address
Sender/URIUniversalCommunication/URIIDTT-111..1Email address (CEF network)
Issuer/Id (@schemeId)TT-12/131..1Declarant SIREN/SIRET/VAT and schemeId attribute
Issuer/NameTT-141..1Company name of the declarant
Issuer/RoleCodeTT-151..1Default: WK
Issuer/URIUniversalCommunication/URIIDTT-161..1Email address (CEF network)
Transactions/Id1..1Transmission identifier generated by the sender
Transactions/DateTT-771..1AAAAMMJJ — date transactions were accounted
Transactions/TransactionsCurrencyTT-781..1ISO 4217 — all amounts except TaxTotal must be in this currency
Transactions/TaxDueDateTypeCodeTT-800..1VAT payment option (UNTDID 2005/2475) — only if option sur les débits
Transactions/CategoryCodeTT-811..1TLB1 (goods), TPS1 (services), TNT1 (not subject to French VAT), TMA1 (margin scheme)
Transactions/TaxExclusiveAmountTT-821..1Total excl. VAT — daily aggregate in TransactionsCurrency
Transactions/TaxTotalTT-831..1Total VAT — must always be in EUR regardless of TransactionsCurrency
Transactions/TransactionsCountTT-850..1Count of transactions
TaxSubtotal/TaxPercentTT-861..1VAT rate as percentage (for example: 20, 10, 5.5, 0)
TaxSubtotal/TaxableAmountTT-871..1Tax base amount for this rate — in TransactionsCurrency
TaxSubtotal/TaxTotalTT-881..1VAT amount for this rate — in EUR

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. This tax authority limit applies to the full request, including the SBDH envelope and Base64-encoded Flow 10 XML. If your data volume approaches this limit, split the data into multiple reports with separate SenderDocumentId values. You can submit multiple reports per period for each SIREN number.

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:

FieldRequiredDescriptionValues/format
IdYesUnique report identifierYour report reference (for example, MC_0001). Maximum 35 characters as of AFNOR v1.3.
NameNoReport nameOptional descriptor
IssueDateTime/DateTimeStringYesReport creation timestampYYYYMMDDHHmmss format
TypeCodeYesSubmission typeIN (initial) or RE (rectification)
Sender/IdYesPlatform matricule4 characters, schemeId="0238"
Sender/NameYesPlatform namePlatform company name
Sender/RoleCodeYesPlatform roleWK (approved platform)
Sender/URIUniversalCommunication/URIIDYesPlatform emailCEF network address
Issuer/IdYesYour SIREN9 digits, schemeId="0002"
Issuer/NameYesYour company nameLegal company name
Issuer/RoleCodeYesYour reporting roleSE (seller) or BY (buyer)
Issuer/URIUniversalCommunication/URIIDYesYour emailCEF 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.

Endpoint

POST /v1/documents

Request
{
  "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 page for real-time operational status and incident history. You can subscribe to email alerts directly from the page.

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.

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. Submissions accepted by Sovos during PPF unavailability will be retried; continue polling for notifications and do not resubmit.

Retrieving notifications

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

Your SIREN from SBDH

sourceSystemId

Matches SenderSystemId from SBDH

processType

0 (outbound)

Response handling

When you get a notification, check sciCloudStatusCode:

Status codeAction
401Fix and resubmit immediately
102Wait (validation passed)
104Wait (sent to PPF)
235Wait for final status
234The PPF did not get the report. This is caused by a report schema error or filename error and is handled by Sovos. No action is needed from you; contact Sovos support if the status does not resolve.
407Review the PPF response. Correct data issues, then resubmit. If this was an initial submission (IN) that was rejected, resubmit with TypeCode=IN. If this was a rectification (RE) that was rejected, fix and resubmit with TypeCode=RE.
228Success; archive confirmation

Status code reference

SCICloudStatusCodePPF codeMeaningWhat happens nextAction required
401N/ASovos validation failedCheck notification for error detailsFix XML or SBDH errors and resubmit. See Troubleshoot issues.
102N/ASovos validation passedSovos sends to PPF (expect status 104)Wait
104N/ASent to PPFPPF performs validationsWait for PPF response
235500PPF got report, processingPPF still validatingWait for final status (228 or 407)
234501PPF did not get reportReport schema error or filename errorSovos handles this error. No action needed. Contact Sovos support if the status does not resolve.
407301PPF rejected reportSovos notification has parsed error details from PPFReview 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.
228300PPF accepted reportWorkflow completeArchive confirmation

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:

PUT
     /v1/notifications/{notificationId}/markAsRead

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.

CodeControl typeDescriptionCommon rule codes
REJ_SEMANSemantic format controlData 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_UNIUniqueness controlData has already been sent and processed.G1.42, G8.05
REJ_COHData coherence controlOne 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_PERPeriod controlSubmission 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

<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

<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

<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

<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

<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).

<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.

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