Skip to main content

E-Directory

The E-Directory screen is the user-facing search tool for finding a French company in the INSEE registry (recherche-entreprises.api.gouv.fr) and checking whether the matching SIREN / SIRET entries are reachable on the PPF directory for electronic invoice delivery.

Use this page when:

  • you need to look up a customer's exact SIREN / SIRET before issuing an invoice;
  • you want to confirm a buyer is registered on the Plateforme Publique de Facturation (PPF) and ready to receive an electronic invoice;
  • you are debugging an addressing rejection (e.g. REJ_ADR) and need to verify the directory state for a specific identifier.

The page applies regardless of source system — JD Edwards, SAP, NetSuite or a custom ERP.

The two underlying lookups are independent and have different roles:

  • INSEE search — verifies that the company exists and pulls its name, address, administrative state. Free public API, no credentials needed.
  • PPF directory check — verifies that the SIREN / SIRET is registered as a recipient on the Plateforme Publique de Facturation. Uses the credentials configured in Configuration → System → e-directory.

See the Configuration → System → e-directory page for the broader context — credentials, search roles and the PPF / INSEE distinction.


At a glance​

E-DirectorySearch companyCompany name, SIREN (9 digits) or SIRET (14 digits)…🔍 SearchResults — one card per company (SIREN)▾ACME ManufacturingSIREN 123 456 789 · 12 rue de Rivoli, 75001 ParisActive5 lines · 4 enabledÉtablissements (INSEE)12345678900012 — 12 rue de Rivoli, 75001 Paris · Active12345678900037 — 8 av. du Général Leclerc, 92100 Boulogne · ActiveElectronic addresses123456789 · SIREN✓ enabled12345678900012 · SIREN+SIRET✓ enabled123456789_FGX · routing suffix✕ disabled1 company · 2 establishments · 5 electronic addressesINSEE is queried first (free public API); one PPF directory call per company then lists every registered identifier, using the credentials under Configuration → System → e-directory.One search fieldname · SIREN · SIRET — auto-detectedDirectory summarylines · how many enabledElectronic addressesevery identifier · enabled / disabled

How a search runs​

👤 Queryname · SIREN · SIRET🔍 INSEErecherche-entreprises.api.gouv.fr📋 Results tableSIREN / SIRET rows📡 PPF directory/api/check-directorySearchmatchesper row✓ reachablegreen chip⚠ not foundorange chip✕ errorred chip

The two lookups happen in sequence: INSEE first to populate the companies, then one PPF directory call per company to list its registered identifiers. The user sees the results fill in two passes. Expanding a company card then runs the Peppol lookup for that company.


Search section​

A single input + button at the top of the page.

ElementBehaviour
Search fieldFree-text query: company name, partial name, SIREN, SIRET, or any combination. Press Enter or click Search to submit.
Search buttonTriggers the INSEE lookup. Disabled while a search is in progress and when the field is empty.

The query is sent to recherche-entreprises.api.gouv.fr server-side; the API returns matching companies with their full establishment data.


Results​

Results are grouped by company: one collapsed card per SIREN, showing the legal name, the head-office address, the INSEE administrative state and an electronic-address summary — how many electronic addresses the PPF holds for the company and how many are enabled. Expand a card to reveal two groups:

Establishments (INSEE)​

An inner collapsible list of the company's establishments — each SIRET with its address and administrative state, from the INSEE registry. Searching by SIREN or SIRET lists all establishments of the company (a second INSEE lookup by company name fills what the numeric search omits).

Electronic addresses​

Every identifier registered for the SIREN on the PPF, whatever its form — a SIREN, a SIREN + SIRET, a routing code or a suffix — each with its enabled / disabled state. Identifiers that carry a suffix, such as 422250845_FGX, are listed here too — a form the previous per-row check could not surface.

✓Enabled— Registered and reachable on the PPF; an invoice addressed to it is delivered.
✕Disabled— Registered but not currently reachable; addressing it would return a routing error (REJ_ADR).

The listing goes through the connector's directory-check-siren endpoint, which returns the full lines with per-endpoint response mappings (ATGP, Yooz and Esker shapes are supported — including numeric reachability flags such as Esker’s HasAssignedPlatform 1/0 alongside true/false). When that endpoint isn't configured, the page says so rather than guessing — set it under Configuration → System → e-directory. The processing-time directory check is unchanged; the older directory-check-siret endpoint is obsolete.

Peppol directory​

Expanding a company card also queries the public Peppol network — no account needed. A Peppol directory group lists each registered participant of the company, with its name, its registration date and the service provider that operates it — the PA (e.g. Pennylane) with its Peppol seat id, resolved through the official SML/SMP discovery. The access-point and SMP URLs sit in the provider's tooltip.

Participants are found in two ways:

  • Business cards of the Peppol Directory matching the SIREN.
  • Direct SML probes of every identifier a French company can hold — publishing a business card is optional, and some providers do not. The probes cover the SIREN under schemes 0225 and 0002, every address registered in the PPF directory (bare, suffixed, SIRET, routed) under 0225, and the SIRET of each establishment under 0009. A participant found this way shows no business card in place of its registration date.
ColumnContent
ParticipantThe Peppol participant identifier (ICD + value, e.g. 0225:80320631700015).
Plateforme (PA)The service provider operating the participant, with its seat id. When the SMP certificate cannot be read, the SMP host followed by SMP non joignable, the reason in the tooltip; non résolu with the reason when the SML gave no SMP. With Resolve platform via SMP = N, the SMP host.
Enregistré leThe participant's Peppol registration date — no business card for a participant found through the SML only.

The lookup runs once for every open company card — including a card left open from a previous search — and is also available as POST /api/peppol-lookup for integrations (see the API reference). A participant with no reachable provider still lists its registration and name. The server log lists each unresolved participant with its reason. An outage of the Peppol Directory no longer hides the participants found through the SML.

The whole page is also available as a single call: GET /api/e-directory/search?q=… (or POST with {q, peppol}) returns the INSEE companies matching a name, SIREN or SIRET with head office and establishments, the PPF directory lines of each company and, with peppol=true, its Peppol participants.


Network flows (firewall)​

Every E-Directory external call is made server-side — from the NomaUBL server, not the user's browser — so the firewall rules apply to the server's outbound traffic. Besides the PA connector, the destinations are:

NomaUBL serveroutbound traffic onlyfirewallCompany search (INSEE)recherche-entreprises.api.gouv.frHTTPS 443Peppol Directory — business cardsdirectory.peppol.euHTTPS 443SML — primary zone (OpenPeppol)*.participant.sml.prod.tech.peppol.orgDNS 53 · NAPTRSML — fallback zone (former EC SML)*.edelivery.tech.ec.europa.euDNS 53 · NAPTRPublic resolvers — opt-in (Public DNS fallback = Y)8.8.8.8 · 1.1.1.1DNS 53 · UDP/TCPSMP of each participant's platform — Resolve platform via SMP = Ydynamic host, e.g. smp.pennylane.comHTTPS 443
PurposeDestinationPort / Protocol
Company search (INSEE)recherche-entreprises.api.gouv.frHTTPS 443
Peppol directory (business cards)directory.peppol.euHTTPS 443
Peppol SML resolution — primary zone (OpenPeppol)DNS NAPTR queries on *.iso6523-actorid-upis.participant.sml.prod.tech.peppol.orgDNS 53 via the server's resolver
Peppol SML resolution — fallback zone (former European Commission SML)DNS NAPTR queries on *.iso6523-actorid-upis.edelivery.tech.ec.europa.euDNS 53 via the server's resolver
Public DNS resolvers — only with Public DNS fallback = Y, when the server's resolver answers nothing8.8.8.8, 1.1.1.1DNS 53 (UDP and TCP)
Peppol SMP (provider resolution) — only with Resolve platform via SMP = Ydynamic — the SMP host of each participant's platform (e.g. smp.pennylane.com)HTTPS 443

What matters for the rules:

  • INSEE and directory.peppol.eu are fixed hostnames — easy to whitelist. The INSEE entry also covers the invoice modal's client search and the Fix buyer search (same API).
  • The SML moved in 2026. OpenPeppol took over the Service Metadata Locator and participant records now live in the participant.sml.prod.tech.peppol.org zone. NomaUBL queries it first and keeps the former edelivery.tech.ec.europa.eu zone as fallback. A DNS policy that only allowed the former zone must add the new one — otherwise most participants are no longer found.
  • The SML step is DNS only — no HTTP. If the server already resolves public DNS through the corporate resolver, there is nothing to open. Some corporate resolvers drop or mangle NAPTR queries: let the corporate resolver forward NAPTR queries for both zones, or set Public DNS fallback to Y in the e-directory settings and allow outbound DNS (port 53, UDP and TCP) to 8.8.8.8 and 1.1.1.1. The fallback is off by default. A no such name answer from the server's resolver is final — an unregistered identifier is not retried elsewhere — and a failing public resolver is dropped for the rest of the lookup.
  • The SMP host can't be whitelisted in advance — it's whatever domain each buyer's platform uses (Pennylane, Esker, Yooz… one per participant), so provider resolution needs a broad HTTPS 443 outbound allowance to work generally. If that isn't acceptable, set Resolve platform via SMP to N: the lookup stops at the SML answer and the Plateforme column shows the SMP host (smp.pennylane.com), which already names the provider — only its official name and seat are missing.
  • Diagnosis. When directory.peppol.eu is unreachable, the participants found by the SML probes are still listed. When nothing is found at all, the Peppol section shows Peppol Directory unreachable (directory.peppol.eu) — check outbound HTTPS/firewall.

Result count​

Above the results, a small label indicates the number of companies returned by INSEE for the query (e.g. 12 results).


Tips & best practices​

  • Search by name first, then narrow down. INSEE returns the legal entity (SIREN) and its establishments (SIRET) — picking the right SIRET avoids the common "right SIREN, wrong establishment" mistake when issuing invoices.
  • A disabled line is not always permanent. A buyer may not yet be registered, or a specific identifier not yet enabled; ask them to register before re-trying. The directory state changes daily as more companies subscribe to the PPF.
  • Match the exact identifier, not just the SIREN. The electronic-address lines show which form is actually reachable — a plain SIREN, a SIREN + SIRET, or a suffixed code. Address the invoice to an enabled line; a company can have several, only some enabled.
  • Cross-check the establishment state. A ceased establishment cannot receive an invoice even if the company appears in the directory. Check the INSEE state on the establishment before trusting an electronic-address mapping.
  • If the lines don't appear, wire the endpoint. An empty directory list with a "not configured" note means the connector has no directory-check-siren endpoint — set it under Configuration → System → e-directory, with the response mappings for your platform (ATGP, Yooz, Esker). The listing reads its array from the endpoint's Response field (records for Esker, results…).