France

Credit Note

🚨

Change — VAT numbers must now be sent explicitly

A decree from the French Ministry of Finance (DGFiP), published in August 2026, applies from the 1 September 2026 mandate go-live: when the recipient is VAT-registered, the credit note must explicitly carry the VAT number of both the sender and the recipient — VAT status is no longer inferred from the Annuaire. Send the recipient's FR VAT number in recipient.taxId, or in recipient.customInfo.fra.vatNumber when taxId already holds the SIREN or SIRET. Your organisation's own VAT number must be captured on your eezi organisation profile. See France - Recipient Identifiers & Routing.

Changes to generic fields

type CreditNote {
  // ...all generic credit note fields
  dueDate: string;
  salesOrderRef?: string;
  purchaseOrderRef?: string;
  lines: [
    { 
      // ...other line item fields
      unit: UnitsOfMeasure;
      vat:{
       code: VatCodeUNTDID;
       exemptReason?: string;
       exemptReasonCode?: string;
      }
    }
  ];
  sender?: {
    // ...other sender fields 
    taxRepresentative?:{
      name:string;
      taxId: string;
      address: {
        country: string;
      }
    }
  };
  recipient:{
    taxId: string;               // SIREN, SIRET, or FR VAT number
    peppolId: {
      endpointId?: string;
    };
    customInfo?: {
      fra?: {
        siren?: string;       // deprecated — use recipient.taxId
        siret?: string;       // establishment, when taxId holds the SIREN or VAT number
        vatNumber?: string;   // required if VAT-registered and taxId isn't the VAT number
        routingCode?: string; // "code de routage" (Annuaire: identifiantRoutage) — needs a SIRET
        suffix?: string;      // "suffixe d'adressage" (Annuaire: suffixeAdressage)
      };
    };
    taxRepresentative?:{
      name:string;
      taxId: string;
      address: {
        country: string;
      }
    }
  };
  shipToParty?:{
    name: string;
    taxId: string;
    address:{
      line1: string;
      line2: string;
      city: string;
      state: string;
      country: string;
      postalCode: string;
    }
  };
 paymentMeans?: [{
    ref: string;
    code: string;
    account: {
      iban?: string;
      number?: string;
      name: string;
      branch: string;
    };
    card: {
      pan: string;
      network: string;
      holderName: string;
    };
    other: {};
  }];
}

Field information

NameTypeRequiredDescription
dueDatestring (ISO 8601 date)YesDue date of credit note
lines[].unitstringYesA value from an enumerated list as outlined on Units of Measure
lines[].vat.codestringYesA value from an enumerated list as outlined on VAT code classification (UNTDID 5305)
lines[].vat.exemptReasonstringConditionalIf the line VAT amount is 0, an exemption reason is required.
lines[].vat.exemptReasonCodestringConditionalIf the line VAT amount is 0, an exemption code is required.
recipient.taxIdstringYesAccepts any of the three French business identifiers: SIREN (9 digits), SIRET (14 digits), or FR VAT number. See France - Recipient Identifiers & Routing.
recipient.address.line1stringYesAddress line 1 (Street address/PO Box/Company name).
recipient.address.line2stringYesAddress line 2 (Apartment/Suite/Unit/Building).
recipient.address.citystringYesCity/District/Suburb/Town/Village.
recipient.address.statestringYesState/County/Province/Region.
recipient.address.countrystringYesThree-letter country code (ISO 3166-1 alpha-3)
recipient.address.postalCodestringYesZIP or postal code
recipient.peppolId.endpointIdstringNoPeppol ID of the recipient. When omitted, eezi derives it from recipient.taxId and recipient.customInfo.fra; when set, it is parsed by the 0225 convention and feeds the four-step Annuaire lookup. See France - Recipient Identifiers & Routing.
recipient.customInfo.fra.sirenstringNoDeprecated — use recipient.taxId instead. 9-digit French legal entity registration number.
recipient.customInfo.fra.siretstringNoSIRET of the recipient (14-digit establishment number = SIREN + 5-digit NIC). Lets the Annuaire lookup resolve a per-establishment receiving platform.
recipient.customInfo.fra.vatNumberstringConditionalFR VAT number of the recipient. Required when the recipient is VAT-registered and recipient.taxId is not already the VAT number.
recipient.customInfo.fra.routingCodestringNoRouting code (identifiantRoutage) discriminating a per-service receiving platform within a SIRET. Only meaningful together with a SIRET.
recipient.customInfo.fra.suffixstringNoAddress suffix (suffixeAdressage) discriminating a receiving platform within a SIREN.
recipient.taxRepresentativeObjectNoFor instances where a third-party tax representative is used.
recipient.taxRepresentative.namestringYesName of Tax Representative
recipient.taxRepresentative.taxIdstringYesTax ID of Tax Representative
recipient.taxRepresentative.address.countrystringYesCountry of Tax Representative
salesOrderRefstringNoSales order reference. An identifier of a referenced sales order, issued by the Seller.
purchaseOrderRefstringNoPurchase order reference. An identifier of a referenced purchase order, issued by the Buyer.
shipToPartyObjectNoFor instances where the ship-to party details differ and need to be explicitly stated.
shipToParty.namestringNoThe name of the party to which the goods and services are delivered.
shipToParty.taxIdstringNoTIN of the shipping recipient assigned by IRBM
shipToParty.address.line1stringNoDeliver to address line 1. The main address line in an address.
shipToParty.address.line2stringNoDeliver to address line 2. An additional address line in an address that can be used to give further details supplementing the main line.
shipToParty.address.citystringNoDeliver to city. The common name of the city, town or village, where the deliver to address is located.
shipToParty.address.statestringNoDeliver to country subdivision. The subdivision of a country.
shipToParty.address.countrystringNoDeliver to country code. A code that identifies the country.
shipToParty.address.postalCodestringNoDeliver to post code. The identifier for an addressable group of properties according to the relevant postal service.
paymentMeansObject ArrayNoFor instances where the payment means need to be explicitly stated.
paymentMeans.refstringNoRemittance information
A textual value used to establish a link between the payment and the Invoice, issued by the Seller. Used for creditor's critical reconciliation information. This information element helps the Seller to assign an incoming payment to the relevant payment process.
paymentMeans.codestringNoPayment means type code
The means, expressed as code, for how a payment is expected to be or has been settled.
notesstringNoAny applicable or additional note

Lifecycle Status

type LifeCycleStatus {
  status: string;
  issued?: string;
  amount?: number;
  rejectReason?: string;
  rejectCode?: string;
  customInfo?:{
    fra?:{
      notes?: string
     }
   }
 }

Field information


NameTypeRequiredDescription
statusstringYesValid values: paid, rejected
issuedstring (ISO 8601 date)OptionalDate of payment. Will use status update date when not specified.
amountnumberOptionalWill use original credit note amount when not specified.
rejectReasonstringConditionalTextual field for reason of rejection.
rejectCodestringConditionalA value from an enumerated list Refusal Reason Codes
customInfo.fra.notesstringOptionalAny additional comments

Example CSV file

Invoice - fra - ubl.csv


Did this page help you?