French customers
How to create a French customer with the Legal Entities API: the SIREN (0002) first, then the annuaire address (0225).
A French invoice in the regulated French regime needs two identifiers on the same legal entity: the SIREN under scheme 0002 (nine digits) and the annuaire address under scheme 0225. Declare both at creation with identifiers, SIREN first: the first non-tax identifier is the one written as the seller's legal registration number on every document the customer sends (a VAT number placed first is skipped), and French rule BR-FR-10 requires the SIREN there.
curl https://api.getpeppr.dev/v1/legal-entities \
-H "Authorization: Bearer sk_sandbox_your_master_key" \
-H "Content-Type: application/json" \
-d '{
"externalId": "clinique-martin",
"companyName": "Clinique Martin SAS",
"country": "FR",
"address": { "line1": "1 rue de la Paix", "city": "Paris", "zip": "75002" },
"identifiers": [
{ "scheme": "0002", "value": "000136747" },
{ "scheme": "0225", "value": "000136747_CLINIQUE" }
]
}'In the sandbox, the annuaire address takes the form SIREN_XXX, where XXX is a label of your choice (letters and digits, up to 50). The French annuaire is set up with every company's bare 0225:SIREN address, which an access point takes over rather than creates, and on the Peppol test network each of those is already held — so a new sandbox address has to be a suffixed one. A bare SIREN under 0225 is refused there by the network, not by us.
The SIREN above belongs to no company, so the registry will not confirm it. Registries are queried in the sandbox exactly as in production: to see a French customer through to active, use the SIREN of a real company you act for.
When the suffixed address is published, getpeppr also registers it on the French directory network of our provider's sandbox, effective two days later: a new directory entry cannot start before the next day, and the extra day covers retries. It is not an entry in the production directory. Archiving the customer (DELETE /v1/legal-entities/{id}) deletes it at our provider, together with everything it carries. An address published before 26 September 2026 is not registered retroactively: archive and recreate the customer to register it.
- The reverse order is refused with
400 legal_entities.france_identifier_order— such an entity could never carry the French regime, and its identifiers cannot be changed afterwards. - Each identifier is verified on its own, then registered on the network after the one before it. The top-level
statusdescribes the SIREN;identifiers[1].statusreadsprovisioninguntil the SIREN is registered. Wait for both before sending with afranceblock. - Each identifier produces its own
legal_entity.registeredwebhook event, so a French customer produces two. Route them byexternalSubTenantIdand readpeppolIdto tell them apart. - Sandbox only for now. A production key sending more than one identifier receives
422 legal_entities.multiple_identifiers_production_unavailable: the authorisation your customer confirms in production names a single identifier. - Paused during maintenance. While getpeppr performs certain maintenance operations, a sandbox create carrying more than one identifier receives
503 legal_entities.identifier_sets_temporarily_unavailable. Nothing is created; retry shortly. A create with a single identifier is not affected, and a production key keeps receiving the422above, which is not retryable.