France - e-Reporting
Transaction reporting
Recipient identifiers and the VAT number changeFor B2B transaction reporting,
recipient.taxIdaccepts any of the three French business identifiers — SIREN (9 digits), SIRET (14 digits), or FR VAT number. See France - Recipient Identifiers & Routing. Following the August 2026 decree from the French Ministry of Finance (DGFiP), when the recipient is VAT-registered you must supply their FR VAT number explicitly — for e-reporting, send it asrecipient.taxId. VAT status is no longer inferred. B2C reporting is unaffected: it carries no recipient VAT number (use the nine-zero placeholder as documented below).
B2B
type Invoice {
id: string;
created: string;
modified: string;
transactionType?: 'B2C' | 'B2B';
status: InvoiceStatus;
orgId: string;
issued: string;
dueDate?: string;
ref: string;
recipient: Recipient;
total: {
amount: number;
currency?: string;
};
lines: InvoiceLine[];
routeRef?: string;
error?: {
name: string;
message: string;
description?: string;
};
type?: InvoiceType;
shipToParty?: {
address?: {
country?: string;
}
}
}
customInfo: {
fra: {
profileType: string;
}
}
type Recipient {
name: string;
taxId: string;
address: Address;
}
type Address {
country: string;
}
type InvoiceLine {
description: string;
price: {
amount: number;
};
quantity: string;
vat: {
amount: number;
code: string;
type: string;
exemptReason?: string;
exemptReasonCode?: string;
};
}B2C
type Invoice {
id: string;
created: string;
modified: string;
transactionType?: 'B2C' | 'B2B';
status: InvoiceStatus;
orgId: string;
issued: string;
dueDate?: string;
ref: string;
recipient: Recipient;
total: {
amount: number;
currency: string;
};
lines: InvoiceLine[];
routeRef?: string;
error?: {
name: string;
message: string;
description?: string;
};
type?: InvoiceType;
}
type InvoiceLine {
price: {
amount: number;
};
quantity: string;
vat: {
amount: number;
code: string;
type: string;
};
isService: boolean;
}Field information
| Name | Type | Required | Description |
|---|---|---|---|
id | string (System generated) | Conditional | Unique identifier for the invoice. Required for payment reporting. |
ref | string | Yes | Sequential number of document. |
created | string (System generated ISO 8601 date) | No | The timestamp when the invoice was created in ISO 8601 format. |
modified | string (System generated ISO 8601 date) | No | The timestamp when the invoice was last updated in ISO 8601 format. |
status | string (System generated) | No | A value from an enumerated list of types: pending submission success error |
orgId | string (System generated) | No | The organisation issuing the invoice. Automatically assigned by the system — present in responses only. |
issued | string (ISO 8601 date) | Yes | Date of document (issue date) |
recipient.taxId | string | Yes | Tax identification number. Transactions without a VAT number must have a placeholder value of nine 0's (000000000) |
recipient.address.country | string | Yes | Three-letter country code (ISO 3166-1 alpha-3). |
shipToParty.address.country | string | Conditional | Country where goods are being shipped to |
total.amount | number | Yes | The total amount of the document, including tax charged. |
total.currency | string | No | Three-letter currency code (ISO 4217-1 alpha-3 ). Defaults to organisation currency. |
lines[].price.amount | number | Yes | Unit price of the good or service. |
lines[].vat.amount | number | Yes | VAT percent or value per item. |
lines[].vat.code | string | Yes | VAT Code of item |
lines[].vat.exemptReason | string | Conditional | Required when vat.amount = 0Textual reason for exemption |
lines[].vat.exemptReasonCode | string | Conditional | Required when vat.amount = 0Value from an enumerated code list |
lines[].isService | boolean | Yes | Required for B2C transactions. Indicates whether the line item represents a service. TRUE= Service FALSE= GoodsAn invoice can contain both services and goods |
customInfo.fra.profileType | string | Conditional | Required for B2B reporting
|
customInfo.fra.acquisition | boolean | No | Set to true to report a supplier invoice or credit note as a reverse-charge acquisition. See Acquisitions below for the rules that apply. |
transactionType | string | No | Either B2B or B2C Has to be provided when placeholder recipient.taxId is used. |
Acquisitions
Buyer-side acquisition e-reporting is phased by the status and size of the buyer:
- French-established large enterprises and ETIs: from 1 September 2026.
- French-established micro-enterprises, VSEs and SMEs: from 1 September 2027.
- French VAT-registered businesses that are not established in France: from 1 September 2027 for buyer-side acquisitions and reverse-charge transactions, regardless of size.
Purchase reporting uses Flow 10.1 and follows the transaction e-reporting periodicity and deadlines applicable to the declarant. eezi files acquisition reporting under declarant role BY (buyer) in a separate section of the report.
How a purchase differs from a sale
Submit the supplier's invoice as a normal invoice (or the supplier's credit note as a normal credit note) with the parties reversed:
senderis the supplier (name, tax identifier and country). For transactions reported under this section, the supplier is normally in another EU Member State or is not established in France (but can have a French VAT number). Purchases under the domestic reverse charge also needs to be reported.customInfo.fra.acquisitionistrue.- Every line carries VAT code
AE(reverse charge) with exemption reason codeVATEX-EU-AE, and the French VAT rate you self-assess as a percentage. eezi computes the self-assessed VAT from the line and reports it as the reverse-charged amount. customInfo.fra.profileTypeisB1for goods orS1for services, exactly as for sales, orM1where the transaction contains both goods and services that are not ancillary to one another.- Purchase-reported documents do not take part in payment e-reporting. Do not send a
paidlifecycle status for them.
One exemption code for all reverse-charge acquisitionsThe tax office has confirmed that
VATEX-EU-AEis the code to use for every reverse-charge acquisition, whether the supplier is in another EU country, outside the EU, or a French VAT registrant under the domestic reverse charge. A separate code distinguishing intra-Community acquisitions from services bought outside the EU may be introduced later in preparation for ViDA; none exists today.
type Invoice {
ref: string; // the supplier's invoice number
issued: string; // the supplier's invoice date
sender: Sender; // the foreign supplier
recipient: Recipient; // your own organisation
total: {
amount: number; // taxable amount plus the self-assessed French VAT
currency?: string; // invoice currency, EUR by default
};
lines: InvoiceLine[];
customInfo: {
fra: {
acquisition: true;
profileType: 'B1' | 'S1'; // B1 goods, S1 services
}
}
}
type Sender {
name: string;
taxId: string; // supplier's VAT or tax identifier (mandatory for EU suppliers)
address: {
country: string; // supplier country
};
}
type Recipient {
name: string;
taxId: string; // your SIREN, SIRET or FR VAT number
address: {
country: 'FRA';
};
}
type InvoiceLine {
description: string;
price: {
amount: number;
};
quantity: string;
vat: {
type: 'percent';
amount: number; // the French VAT rate you self-assess, e.g. 20
code: 'AE';
exemptReason: string; // e.g. "Reverse charge"
exemptReasonCode: 'VATEX-EU-AE';
};
}Field information
| Name | Type | Required | Description |
|---|---|---|---|
customInfo.fra.acquisition | boolean | Yes | Set to true to report the document as a purchase (acquisition). Omit or false for sales e-reporting. |
sender.name | string | Yes | Name of the supplier. |
sender.taxId | string | Conditional | Supplier identifier. For an EU supplier, provide the supplier's EU VAT number. For a non-EU supplier, provide the supplier's VAT or local tax identifier where available. For a non-established supplier that is VAT-registered in France, provide the supplier's FR VAT number. For a French supplier subject to a domestic reverse-charge mechanism, provide the supplier's SIREN, SIRET or FR VAT number, as applicable. |
sender.address.country | string | Yes | Supplier's country (ISO 3166-1 alpha-3, e.g. DEU, USA). |
recipient.taxId | string | Yes | Your own SIREN, SIRET or FR VAT number. Must match the submitting organisation. |
customInfo.fra.profileType | string | Yes | B1 for goods, S1 for services. |
lines[].vat.type | string | Yes | Must be percent. |
lines[].vat.amount | number | Yes | The French VAT rate you self-assess (e.g. 20, 10, 5.5). |
lines[].vat.code | string | Yes | Must be AE (reverse charge). Any other VAT code is rejected when acquisition is true. |
lines[].vat.exemptReason | string | Yes | Reverse-charge reason in text, e.g. Reverse charge. |
lines[].vat.exemptReasonCode | string | Yes | Must be VATEX-EU-AE. Any other code is rejected when acquisition is true. |
total.amount | number | Yes | Taxable amount plus the self-assessed French VAT, so that the document total agrees with its lines. |
Credit notes from a supplier follow the same rules and are reported with the same declarant role.
Lifecycle Status
type LifeCycleStatus {
status: string;
issued?: string;
amount?: number;
customInfo?:{
fra?:{
notes?: string
}
}
}
Field information
| Name | Type | Required | Description |
|---|---|---|---|
status | string | Yes | Valid values: paid |
issued | string (ISO 8601 date) | Optional | Date of payment. Will use status update date when not specified. |
amount | number | Optional | Will use original invoice amount when not specified. |
customInfo.fra.notes | string | Optional | Any additional comments |
Documents flagged with customInfo.fra.acquisition: true are not payment-reported. Do not send a paid status for them.
Example CSV file
Updated 15 days ago