e-invoicing

Compliance Network Implementation Guide

Network and endpoint configuration

Configure network endpoints for a French e-invoicing customer to register the customer in the Annuaire and enable invoice exchange.

Before you begin

Make sure you've done the following:

Completed account setup. See Set up your account for France.

What you are setting up and why

Sovos operates as a certified e-invoicing platform in France. When you onboard a customer, Sovos acts as their designated receiving platform and takes legal responsibility for registering the customer in the Annuaire.

The Annuaire

The Annuaire is the central directory of invoice recipients, managed by the French tax authority's public portal (PPF). When a supplier wants to send an invoice, their platform looks up the buyer's SIREN in the Annuaire to find which certified platform to route it through.

Every VAT-registered French company already exists in the Annuaire. Creating the inbound endpoint in Compliance Network claims the customer's Annuaire entry and activates them as a reachable invoice recipient.

Inbound compared to outbound

Endpoint Product ID What it activates Who needs it
Inbound fr_invoice_inbound_1.0 Annuaire (Jurisdiction) + Peppol All customers, required to receive invoices
Outbound fr_invoice_outbound_1.0 Peppol only Customers who also send invoices

Choose the right address format

The customer's electronic invoicing address is the identifier that goes into the Annuaire and that their suppliers put on invoices to reach them. It comes from the code components you provide when creating the inbound endpoint.

Important: You cannot change the address after you create the endpoint. To change it, remove the endpoint and create a new one.

Address format options

Format When to use
SIREN Default recommendation. Single legal entity with centralized accounts payable. Most private companies.
SIREN_SUFFIXE Customer needs multiple distinct inboxes, for example, separate channels for different business units, or a dedicated address for self-billing (auto-facturation).
SIREN_SIRET Establishment-level routing. Primarily public sector entities. Not recommended for private companies unless there is a clear documented need.
SIREN_SIRET_CODEROUTAGE Sub-establishment routing with service codes. Public sector only.

Questions to ask the customer before proceeding

  • Does your accounts payable team handle invoices centrally, or do different sites or departments need separate invoice streams?

  • Do you self-bill (issue invoices on behalf of your suppliers)? If so, do you want a dedicated address for those, separate from purchase invoices?

  • Are you planning to use more than one invoicing platform? If yes, they need a separate address per platform. A single address can only be assigned to one platform at a time.

For most private sector customers, the answer to all three questions leads to SIREN. Recommend the SUFFIXE variant only when the customer has a clear, specific reason for multiple addresses.

ERP System Communications

Before you begin

Make sure you've done the following:

ERP system communication

ERP System Communication links an ERP System ID to the network and defines how documents are delivered to the customer's system. Configure it at the organization level before creating endpoints.

Each organization needs a minimum of two communications: One for invoice, and one for lifecycle. Both must use the same ERP System ID.

Note: ERP System IDs live at the organization level and are shared across all companies within the organization.

Configure ERP System Communications in Network Services

  1. Go to Settings and select Organizations.
  2. Select the organization and click the ERP System Communications tab.
  3. Click Add communication.
  4. Select the ERP System ID for e-invoicing.
  5. Set Type to Invoice.
  6. Set Delivery method.
  7. Select the Plugin that matches the invoice format the customer's ERP expects.
    Note: The supported invoice format plugins for France during the pilot phase are SCI, UBL, CII, and Factur-X. Variations of each plugin appear in the UI.
  8. Click Add communication.
  9. Repeat steps 3 through 8 for Type: Lifecycle, using the same ERP System ID.

Invoice and lifecycle communications are configured for the organization. You can proceed to create endpoints.

Create the inbound endpoint

Creating the inbound endpoint registers the customer's address in the Annuaire and creates the Sovos configuration record that routes incoming invoices to the customer's ERP system.

Creating the inbound endpoint registers the customer's address in the Annuaire and creates the Sovos configuration record that routes incoming invoices to the customer's ERP system.

Note: When you create an inbound endpoint, Sovos registers the address in both the Annuaire and the Peppol SMP within the same API call. This process is synchronous but can take up to 50 seconds. The endpoint creation request does not return a response until both registrations complete.

Create an inbound endpoint in Network Services

Make sure you've done the following:

  1. Go to Settings and select Companies.
  2. Select the company, open the context menu (gear icon), and click Network Settings.
  3. Click New endpoint.
  4. Select the fr_invoice_inbound_1.0 product.
  5. Select the ERP System ID from the dropdown.
    Note: If the ERP System ID dropdown is empty when creating an endpoint, return to Configure ERP System Communications in Compliance Network. Only ERP System IDs created manually in Compliance Network appear here. Auto-provisioned defaults are not synchronized to Compliance Network.
  6. In Endpoint components, enter the Annuaire address fields for this company.

    All four fields are visible (SIREN, SIRET, Code Routage, Suffix). Enter only what applies to the chosen address format. The SIREN value must match the company's registered tax ID. The system validates this on submission.

    Note:

    These address fields are the electronic invoicing address that go into the French tax authority directory (Annuaire du PPF). Suppliers use it to route invoices to your customer. Enter the company's SIREN here. For most private companies, SIREN alone is the right format. See Choose the right address format if you're unsure.

  7. Set the Validity period (Start date).

    Use at least the following day. In production, the start date must be tomorrow or later. Same-day dates are not accepted. Annuaire updates process nightly (J+1). The end date is optional.

  8. Under Supported documents, click the Invoices tab, click Add Subtype, and select Invoice and CreditNote.
  9. Click the Lifecycles tab, click Add Subtype, and select Lifecycle.
  10. Click Create.

After endpoint creation, a status indicator on the Peppol side confirms successful registration. If registration fails, an error message displays instead.

Important: If endpoint creation returns an error, check whether the address was already written to the French directory before retrying. Due to the multi-step registration process, it is possible for the Annuaire registration to succeed while the API returns an error. Creating a duplicate endpoint for an address already registered will result in a conflict error from the French directory.

Create an inbound endpoint through the API

Use the endpoint creation API to register the customer's inbound address in the Annuaire and on Peppol programmatically.

Each API call in this topic registers the customer's electronic invoicing address in the Annuaire du PPF (the French tax authority directory) and on Peppol. This isn't a postal address. It's the identifier suppliers use to route invoices to your customer.

Request: SIREN-level address (most common)

Make a POST request to the /v2/configurations/organizations/{orgId}/companies/{companyId}/endpoints endpoint:

JSON
curl --location --request POST \
  'https://api-test.sovos.com/v2/configurations/workspaces/organizations/{orgId}/companies/{companyId}/endpoints' \
  --header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
  --header 'Authorization: Bearer TOKEN' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "productId": "fr_invoice_inbound_1.0",
    "validityPeriod": {
      "start": "2026-09-02T00:00:00.0000000Z"
    },
    "codeComponents": [
      {
        "field": "SIREN",
        "value": "123456789"
      }
    ],
    "supportedDocuments": [
      {
        "type": "Invoice",
        "subTypes": ["Invoice", "CreditNote"]
      },
      {
        "type": "Lifecycle",
        "subTypes": ["Lifecycle"]
      }
    ],
    "erpSystemId": "YOUR_ERP_SYSTEM_ID"
  }'

For a SIREN + SUFFIXE address, add a second entry to codeComponents.

JSON
"codeComponents": [
  { "field": "SIREN", "value": "123456789" },
  { "field": "SUFFIXE_ADRESSAGE", "value": "ACHAT" }
]
Note: You can't combine SIRET and SUFFIXE in the same address.
Important:

The access token (Bearer token) expires after one hour. To avoid authentication errors, request a new token before the current one expires. For details, see API authentication.

Successful response

JSON
{
  "status": 201,
  "message": "Created",
  "success": true,
  "data": {
    "id": "345cef18-ae70-...-bd4c-d2c2795bfbbe",
    "code": {
      "value": "123456789",
      "scheme": "0225"
    },
    "registeredDirectories": ["Jurisdiction", "Peppol"]
  }
}

In the response, code.value is the customer's electronic invoicing address. This is what suppliers use to route invoices to them. The registeredDirectories array confirms which networks the endpoint is registered on. For inbound, both Jurisdiction and PEPPOL should be present.

codeComponents field reference

Field Format Required Notes
SIREN 9 digits Yes Must match the company's registered tax ID, validated on submission
SIRET 14 digits No Required only for SIREN_SIRET address format
SUFFIXE_ADRESSAGE Alphanumeric, up to 100 characters No Free text. Choose a meaningful label (for example, ACHAT, PAIE)
CODE_ROUTAGE Alphanumeric, up to 100 characters No Must be pre-configured in the Annuaire. Public sector use only.

Start date is required and must be tomorrow or later in production (J+1). End date is optional. Leave blank for an open-ended endpoint.

Create the outbound endpoint

The outbound endpoint lets the customer send invoices and receive lifecycle status notifications back from their buyers' platforms. Unlike the inbound endpoint, it registers on Peppol only.

The outbound endpoint follows the same process as the inbound endpoint with a few differences. Create this endpoint for any customer who issues invoices, not just receives them.

Before you begin

Note: Outbound endpoint creation registers the address on Peppol only (no Annuaire registration). As with inbound, this registration is synchronous and may take up to 50 seconds.

Create an outbound endpoint in Compliance Network

Follow the same steps as for the inbound endpoint with these differences.

  • Step 4: Select fr_invoice_outbound_1.0.

  • Step 7: Set the validity start date. Use at least the following day (J+1). Same-day dates are not accepted in production.

  • Step 8: Skip the Invoices tab. Outbound does not use Invoice or CreditNote subtypes.

  • Step 9: Configure lifecycles only.

Note: After outbound endpoint creation, a status indicator confirms that Peppol registration was successful.

Create an outbound endpoint through the API

The request follows the same structure as the inbound endpoint. Change only productId and supportedDocuments.

JSON
"productId": "fr_invoice_outbound_1.0",
"supportedDocuments": [
  {
    "type": "Lifecycle",
    "subTypes": ["Lifecycle"]
  }
]

Set validityPeriod.start to at least the following day. All other fields (codeComponents, erpSystemId, headers, and URL) are identical to the inbound request.

Successful response

JSON
{
  "status": 201,
  "message": "Created",
  "success": true,
  "data": {
    "id": "789abc12-...",
    "code": {
      "value": "123456789",
      "scheme": "0225"
    },
    "registeredDirectories": ["Peppol"]
  }
}

Unlike the inbound response, registeredDirectories contains only Peppol. No Jurisdiction entry is expected or required for outbound.

Migrate from another Plateforme Agréée

If a company was previously registered with another Plateforme Agréée (PA) and wants to migrate to Sovos, you must obtain a migration key from the previous PA before starting endpoint creation.

Why a migration key is required

When a company is registered with a PA, that registration is held at the PEPPOL SML (Service Metadata Locator) and SMK (Service Metadata Publisher Key) DNS level. The previous PA owns the Access Point (AP) entry. Sovos can't create a new registration for a company that already has one. The PEPPOL network blocks duplicate registrations.

To transfer ownership, the previous PA must issue a migration key. The migration key is a PEPPOL network construct that authorizes Sovos to claim the company's existing AP registration. Without it, the inbound migration can't be completed.

Note: A migration key is not required if the previous PA deletes the company's participant ID from the PEPPOL network before you start endpoint creation on Sovos. In that case, you can use the standard endpoint creation flow.

For France, Sovos creates the Annuaire PPF entry as part of the same request, following the standard registration flow. You don't need added steps for the Annuaire registration when a migration key is present.

If the migration key is invalid, expired, or has already been used, the platform returns an error and creates no partial state in the PEPPOL network, the Annuaire, or the Compliance Network database.

Before you begin

The company (or their ISV partner) must obtain the migration key from their previous PA before starting endpoint creation on Sovos. Sovos can't request or generate a migration key on behalf of the company.

Contact the previous PA and request a PEPPOL migration key for the company's participant identifier. The migration key comes from the previous PA only. Sovos and the PPF don't issue it.

ThePEPPOL SML defines the following rules for migration keys. Make sure the key you receive meets these requirements before submitting the endpoint creation request:

  • At least 8 characters and no more than 24 characters.

  • At least two lowercase letters (a to z).

  • At least two uppercase letters (A to Z).

  • At least two digits (0 to 9).

  • At least two characters from this set: @ # $ % ( ) [ ] { } * ^ - ! ~ | + =.

  • No whitespace characters.

Note: Sovos passes the migration key to the PEPPOL SMP server, which confirms the syntax and validity of the key. If the key doesn't meet these rules, the SMP server returns an error.

Migrating multiple endpoints with one key

If multiple endpoints within a company configuration share the same endpoint code, provide the peppolMigrationKey only when creating the first endpoint.

The migration key triggers the PEPPOL migration for that endpoint code and transfers DNS ownership to Sovos. After the migration completes, the key cannot be used again. Submitting the same key for another endpoint with the same endpoint code returns an error.

For example, if you create separate inbound and outbound endpoints with the same endpoint code:

  1. Create the first endpoint and provide the peppolMigrationKey.

  2. Create the second endpoint with the same endpoint code, without a peppolMigrationKey.

Create an endpoint with a migration key using the API

After you have the migration key, supply it as part of the endpoint creation API request using the optional peppolMigrationKey field. The endpoint creation request follows the standard flow in all other respects. Both the synchronous (POST /endpoints) and asynchronous (POST /endpoints/async) methods support this field.

Note: The peppolMigrationKey field applies only to PEPPOL-based endpoints. Supplying it on a non-PEPPOL endpoint returns a 400 error and no operations are performed.

For the API request details, including the peppolMigrationKey field reference, see Create an endpoint for a company.

Create an endpoint with a migration key using the Network Services portal

You can also enter the migration key directly in the NS portal when creating the endpoint:

  1. Go to Settings > Companies, then select the company.

  2. Click Endpoints, then click New endpoint.

  3. Under General, in the Migration key field, enter the migration key provided by the previous PA.

  4. Complete the remaining endpoint fields and save.

Modify or remove an endpoint

After creation, you can update certain endpoint fields such as the validity period and supported documents. The address itself cannot be changed.

What you can update

After creation, you can update the following fields through Compliance Network or a PUT request:

  • validityPeriod (start and end dates)

    Note:

    If you set the current day as your start date, Sovos treats it as the following day (d+1) due to the Annuaire's requirements.

  • supportedDocuments

  • erpSystemId

What you cannot change

The address (codeComponents) cannot be changed after creation. The API enforces this: the PUT request schema does not accept the codeComponents field. The start date in validityPeriod also cannot be changed once it has passed. You can only update it if it is still in the future.

If a customer's address needs to change, follow this process.

  1. Remove the existing endpoint.

  2. Create a new endpoint with the correct address.

To remove an endpoint through the API, send a DELETE request.

JSON
curl --location --request DELETE \
  'https://api-test.sovos.com/v2/configurations/workspaces/organizations/{orgId}/companies/{companyId}/endpoints/{endpointId}' \
  --header 'x-correlationId: SET-TO-UNIQUE-VALUE' \
  --header 'Authorization: Bearer TOKEN'
Important:

The access token (Bearer token) expires after one hour. To avoid authentication errors, request a new token before the current one expires. For details, see API authentication.

A successful deletion returns 200 OK or 204 No Content. After deletion, the company can no longer receive documents through this endpoint.

Note: When you remove an inbound endpoint, Sovos automatically submits a removal entry to the Annuaire.

Risk: the transition gap

Between the moment an inbound endpoint is removed and the moment a new one becomes active, the customer's address is either unregistered or pointing to an inactive entry in the Annuaire. Any supplier who looks up the customer during this window and tries to send an invoice may receive a routing error. Coordinate the removal and re-creation closely, and advise the customer to notify key suppliers of any expected downtime.