France - e-Reporting

Transaction reporting

📘

Recipient identifiers and the VAT number change

For B2B transaction reporting, recipient.taxId accepts 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 as recipient.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

NameTypeRequiredDescription
idstring (System generated)ConditionalUnique identifier for the invoice. Required for payment reporting.
refstringYesSequential number of document.
createdstring (System generated ISO 8601 date)NoThe timestamp when the invoice was created in ISO 8601 format.
modifiedstring (System generated ISO 8601 date)NoThe timestamp when the invoice was last updated in ISO 8601 format.
statusstring (System generated)NoA value from an enumerated list of types:
pending submission
success
error
orgIdstring (System generated)NoThe organisation issuing the invoice. Automatically assigned by the system — present in responses only.
issuedstring (ISO 8601 date)YesDate of document (issue date)
recipient.taxIdstringYesTax identification number. Transactions without a VAT number must have a placeholder value of nine 0's (000000000)
recipient.address.countrystringYesThree-letter country code (ISO 3166-1 alpha-3).
shipToParty.address.countrystringConditionalCountry where goods are being shipped to
total.amountnumberYesThe total amount of the document, including tax charged.
total.currencystringNoThree-letter currency code (ISO 4217-1 alpha-3 ). Defaults to organisation currency.
lines[].price.amountnumberYesUnit price of the good or service.
lines[].vat.amountnumberYesVAT percent or value per item.
lines[].vat.codestringYesVAT Code of item
lines[].vat.exemptReasonstringConditionalRequired when vat.amount = 0
Textual reason for exemption
lines[].vat.exemptReasonCodestringConditionalRequired when vat.amount = 0
Value from an enumerated code list
lines[].isServicebooleanYesRequired for B2C transactions. Indicates whether the line item represents a service.

TRUE= Service FALSE= Goods
An invoice can contain both services and goods
customInfo.fra.profileTypestringConditionalRequired for B2B reporting
  • B1: Filing of a goods invoice;
  • S1: Filing of a service invoice;
  • M1: Filing of a double invoice (delivery of goods and services that are not ancillary);
  • B2: Filing of a goods invoice that has already been paid;
  • S2: Filing of a service invoice that has already been paid;
  • M2: Filing of a double invoice that has already been paid;
  • S3: Filing of a subcontract payment request with direct payment (B2G only, restriction not verifiable);
  • B4: Filing of a final invoice (after advance payment) for goods;
  • S4: Filing of a final invoice (after advance payment) for services;
  • M4: Filing of a final invoice (after advance payment) for double services;
  • S5: Filing of a service invoice by a subcontractor;
  • S6: Filing by a subcontractor of a service invoice
  • B7: Filing of a goods invoice that has been e-reported (VAT already collected)
  • S7: Filing of a service invoice that has been e-reported (VAT already collected)
  • B8: Filing of a multi-vendor goods invoice
  • S8: Filing of a multi-vendor service invoice
  • M8: Filing of a double multi-vendor invoice, containing individual invoices that are not all Sx or Bx.
  • B9: Filing of a bidirectional goods invoice
  • S9: Filing of a bidirectional service invoice
  • M9: Filing of a double bidirectional invoice
customInfo.fra.acquisitionbooleanNoSet to true to report a supplier invoice or credit note as a reverse-charge acquisition. See Acquisitions below for the rules that apply.
transactionTypestringNoEither 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:

  • sender is 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.acquisition is true.
  • Every line carries VAT code AE (reverse charge) with exemption reason code VATEX-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.profileType is B1 for goods or S1 for services, exactly as for sales, or M1 where 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 paid lifecycle status for them.
📘

One exemption code for all reverse-charge acquisitions

The tax office has confirmed that VATEX-EU-AE is 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

NameTypeRequiredDescription
customInfo.fra.acquisitionbooleanYesSet to true to report the document as a purchase (acquisition). Omit or false for sales e-reporting.
sender.namestringYesName of the supplier.
sender.taxIdstringConditionalSupplier 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.countrystringYesSupplier's country (ISO 3166-1 alpha-3, e.g. DEU, USA).
recipient.taxIdstringYesYour own SIREN, SIRET or FR VAT number. Must match the submitting organisation.
customInfo.fra.profileTypestringYesB1 for goods, S1 for services.
lines[].vat.typestringYesMust be percent.
lines[].vat.amountnumberYesThe French VAT rate you self-assess (e.g. 20, 10, 5.5).
lines[].vat.codestringYesMust be AE (reverse charge). Any other VAT code is rejected when acquisition is true.
lines[].vat.exemptReasonstringYesReverse-charge reason in text, e.g. Reverse charge.
lines[].vat.exemptReasonCodestringYesMust be VATEX-EU-AE. Any other code is rejected when acquisition is true.
total.amountnumberYesTaxable 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

NameTypeRequiredDescription
statusstringYesValid values: paid
issuedstring (ISO 8601 date)OptionalDate of payment. Will use status update date when not specified.
amountnumberOptionalWill use original invoice amount when not specified.
customInfo.fra.notesstringOptionalAny additional comments

Documents flagged with customInfo.fra.acquisition: true are not payment-reported. Do not send a paid status for them.

Example CSV file

Invoice - fra - B2B e-reporting.csv

Invoice - fra - B2C e-reporting.csv


Did this page help you?