Send e-reports
E-reporting sends transaction and payment data summaries to French tax authorities for transactions outside the B2B domestic e-invoicing scope.
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.OutputSchemais set to one of:TransactionB2BTransactionB2CPaymentsB2BPaymentsB2C
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/documentsto 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.TypeisConsolidationfor 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
| 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%; B2B domestic 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).
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: 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) |
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 |
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 SIREN123456789would have a VAT number in the formFRxx123456789, wherexxrepresents 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.
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 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>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 |
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.
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:
| 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.
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 ofIN.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.
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
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)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
taxIdYour SIREN from SBDH
sourceSystemIdMatches SenderSystemId from SBDH
processType0 (outbound)
Response handling
When you get a notification, check sciCloudStatusCode:
| Status code | Action |
|---|---|
401 | Fix and resubmit immediately |
102 | Wait (validation passed) |
104 | Wait (sent to PPF) |
235 | Wait for final status |
234 | The 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. |
407 | Review 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. |
228 | Success; archive confirmation |
Status code reference
| SCICloudStatusCode | PPF code | Meaning | What happens next | Action required |
|---|---|---|---|---|
401 | N/A | Sovos validation failed | Check notification for error details | Fix XML or SBDH errors and resubmit. See Troubleshoot issues. |
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 |
235 | 500 | PPF got report, processing | PPF still validating | Wait for final status (228 or 407) |
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 does not resolve. |
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. |
228 | 300 | PPF accepted report | Workflow complete | Archive 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.
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.
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:
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 |
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.
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)
- Scenario
Company reporting B2B international invoices and B2C aggregated transactions for October 2025.
- SBDH setup
Report.Type
FR_Reporting_Flow10, TypeCodeIN(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)
- Scenario
Company reporting B2B international payments and B2C aggregated payments for October 2025.
- SBDH setup
Report.Type
FR_Reporting_Flow10, TypeCodeIN(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
- Scenario
October transaction report had errors; submitting correction in November.
- Key differences
TypeCode
RE(notIN), complete corrected data for October period, otherwise identical SBDH structure and Report.Type.
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)
<cac:Status>
<cbc:StatusReasonCode listID="SCICloudStatusCode">102</cbc:StatusReasonCode>
<cbc:StatusReason>Document validated successfully</cbc:StatusReason>
</cac:Status>Validation failure (Status 401)
<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)
<cac:Status>
<cbc:StatusReasonCode listID="SCICloudStatusCode">104</cbc:StatusReasonCode>
<cbc:StatusReason>Transmitted to the tax authority</cbc:StatusReason>
</cac:Status>Integration success (Status 228)
<cac:Status>
<cbc:StatusReasonCode listID="SCICloudStatusCode">228</cbc:StatusReasonCode>
<cbc:StatusReason>Report accepted by Tax Authority</cbc:StatusReason>
</cac:Status>Integration failure (Status 407)
<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)
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)
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>